@miadi/episodic-memory-schema 0.4.0 → 0.5.1
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/adapters/episode-yaml.d.ts.map +1 -1
- package/dist/adapters/episode-yaml.js +169 -16
- package/dist/adapters/episode-yaml.js.map +1 -1
- package/dist/adapters/segment-grammar.d.ts +82 -0
- package/dist/adapters/segment-grammar.d.ts.map +1 -0
- package/dist/adapters/segment-grammar.js +185 -0
- package/dist/adapters/segment-grammar.js.map +1 -0
- package/dist/chronicle-manifest.d.ts +6 -0
- package/dist/chronicle-manifest.d.ts.map +1 -1
- package/dist/chronicle-manifest.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/story-library-manifest.d.ts +76 -0
- package/dist/story-library-manifest.d.ts.map +1 -0
- package/dist/story-library-manifest.js +136 -0
- package/dist/story-library-manifest.js.map +1 -0
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"episode-yaml.d.ts","sourceRoot":"","sources":["../../src/adapters/episode-yaml.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAIV,kBAAkB,EAIlB,iCAAiC,EAClC,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"episode-yaml.d.ts","sourceRoot":"","sources":["../../src/adapters/episode-yaml.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAIV,kBAAkB,EAIlB,iCAAiC,EAClC,MAAM,mBAAmB,CAAA;AA2C1B;;;;;GAKG;AACH,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,iCAAiC,GACzC,kBAAkB,CA4CpB"}
|
|
@@ -40,10 +40,11 @@ export function observeEpisodeYamlManifest(input, options) {
|
|
|
40
40
|
const metadataProjection = observeMetadata(input, base.diagnostics);
|
|
41
41
|
base.sourceMetadata = metadataProjection.metadata;
|
|
42
42
|
base.identityCandidates = observeIdentity(input, relativePath, base.diagnostics);
|
|
43
|
-
base.artifacts =
|
|
43
|
+
base.artifacts = observeArtifacts(input.artifacts, relativePath, base.diagnostics);
|
|
44
44
|
const relationProjection = observeLineage(input.lineage, base.diagnostics);
|
|
45
|
-
|
|
46
|
-
base.
|
|
45
|
+
const relatedEpisodes = observeRelatedEpisodes(input.related_episodes, relationProjection.seen, base.diagnostics);
|
|
46
|
+
base.relations = [...relationProjection.relations, ...relatedEpisodes.relations];
|
|
47
|
+
base.unmappedFields = preserveUnmappedFields(input, metadataProjection.consumedFields, relationProjection, relatedEpisodes.consumed);
|
|
47
48
|
return base;
|
|
48
49
|
}
|
|
49
50
|
function observeMetadata(input, diagnostics) {
|
|
@@ -140,7 +141,15 @@ function normalizeEpisodeNumber(value) {
|
|
|
140
141
|
return String(Number(value));
|
|
141
142
|
return extractEpisodeNumber(value);
|
|
142
143
|
}
|
|
143
|
-
|
|
144
|
+
/**
|
|
145
|
+
* Observe the `artifacts:` field in either corpus shape.
|
|
146
|
+
*
|
|
147
|
+
* The authored house style is a (possibly nested) object map of label → path,
|
|
148
|
+
* but a large share of the corpus (e.g. ep014, ep044) writes `artifacts:` as a
|
|
149
|
+
* flat LIST of path strings. Both are real, so both are observed rather than
|
|
150
|
+
* one being warned away — kind is inferred per entry either way.
|
|
151
|
+
*/
|
|
152
|
+
function observeArtifacts(value, sourceDocumentPath, diagnostics) {
|
|
144
153
|
if (value === undefined) {
|
|
145
154
|
diagnostics.push({
|
|
146
155
|
level: "info",
|
|
@@ -150,11 +159,14 @@ function observeArtifactMap(value, sourceDocumentPath, diagnostics) {
|
|
|
150
159
|
});
|
|
151
160
|
return [];
|
|
152
161
|
}
|
|
162
|
+
if (Array.isArray(value)) {
|
|
163
|
+
return observeArtifactList(value, sourceDocumentPath, diagnostics);
|
|
164
|
+
}
|
|
153
165
|
if (!isRecord(value)) {
|
|
154
166
|
diagnostics.push({
|
|
155
167
|
level: "warning",
|
|
156
168
|
code: "episode-yaml.invalid-artifact-map",
|
|
157
|
-
message: "Manifest field 'artifacts' must be an object when present.",
|
|
169
|
+
message: "Manifest field 'artifacts' must be an object map or a list of path strings when present.",
|
|
158
170
|
path: "artifacts",
|
|
159
171
|
});
|
|
160
172
|
return [];
|
|
@@ -163,6 +175,41 @@ function observeArtifactMap(value, sourceDocumentPath, diagnostics) {
|
|
|
163
175
|
walkArtifactMap(value, [], sourceDocumentPath, diagnostics, artifacts);
|
|
164
176
|
return artifacts;
|
|
165
177
|
}
|
|
178
|
+
/** Observe the list-shaped `artifacts:` — an ordered array of path strings. */
|
|
179
|
+
function observeArtifactList(entries, sourceDocumentPath, diagnostics) {
|
|
180
|
+
const artifacts = [];
|
|
181
|
+
entries.forEach((entry, index) => {
|
|
182
|
+
const manifestPath = `artifacts[${index}]`;
|
|
183
|
+
if (typeof entry !== "string") {
|
|
184
|
+
diagnostics.push({
|
|
185
|
+
level: "warning",
|
|
186
|
+
code: "episode-yaml.invalid-artifact-entry",
|
|
187
|
+
message: "Artifact list entries must be relative path strings.",
|
|
188
|
+
path: manifestPath,
|
|
189
|
+
});
|
|
190
|
+
return;
|
|
191
|
+
}
|
|
192
|
+
const relativePath = resolveSiblingPath(sourceDocumentPath, entry);
|
|
193
|
+
if (relativePath === undefined) {
|
|
194
|
+
diagnostics.push({
|
|
195
|
+
level: "warning",
|
|
196
|
+
code: "episode-yaml.unsafe-artifact-path",
|
|
197
|
+
message: "Artifact paths must be relative and must not contain traversal.",
|
|
198
|
+
path: manifestPath,
|
|
199
|
+
});
|
|
200
|
+
return;
|
|
201
|
+
}
|
|
202
|
+
const kind = inferArtifactKind(entry);
|
|
203
|
+
artifacts.push({
|
|
204
|
+
id: `artifact:${kind}:${encodeURIComponent(relativePath)}:${encodeURIComponent(manifestPath)}`,
|
|
205
|
+
kind,
|
|
206
|
+
relativePath,
|
|
207
|
+
label: entry,
|
|
208
|
+
metadata: { manifestPath },
|
|
209
|
+
});
|
|
210
|
+
});
|
|
211
|
+
return artifacts;
|
|
212
|
+
}
|
|
166
213
|
function walkArtifactMap(value, keys, sourceDocumentPath, diagnostics, artifacts) {
|
|
167
214
|
for (const key of Object.keys(value).sort()) {
|
|
168
215
|
const child = value[key];
|
|
@@ -201,9 +248,39 @@ function walkArtifactMap(value, keys, sourceDocumentPath, diagnostics, artifacts
|
|
|
201
248
|
});
|
|
202
249
|
}
|
|
203
250
|
}
|
|
251
|
+
/**
|
|
252
|
+
* A stable key that collapses relations pointing at the same episode regardless
|
|
253
|
+
* of the dialect that expressed them. A path target like
|
|
254
|
+
* `2026-06-08-episode-039-...` and an episode-number target `39` resolve to the
|
|
255
|
+
* same key, so a house-style `continues_from` and an older `prior_episode` that
|
|
256
|
+
* name the same continuation are reported once, not twice.
|
|
257
|
+
*/
|
|
258
|
+
function relationDedupKey(relation) {
|
|
259
|
+
const { kind, target } = relation;
|
|
260
|
+
if (target.kind === "episode-number")
|
|
261
|
+
return `${kind}::ep:${target.value}`;
|
|
262
|
+
const episodeNumber = extractEpisodeNumber(target.value);
|
|
263
|
+
if (episodeNumber !== undefined)
|
|
264
|
+
return `${kind}::ep:${episodeNumber}`;
|
|
265
|
+
return `${kind}::${target.kind}:${target.value}`;
|
|
266
|
+
}
|
|
267
|
+
/**
|
|
268
|
+
* Observe the `lineage:` block across every corpus dialect.
|
|
269
|
+
*
|
|
270
|
+
* House style: `continues_from` / `relates_to` / `branch_of` — arrays of
|
|
271
|
+
* `{episode, path, relation}`. Corpus tolerances: a single-map entry stands for
|
|
272
|
+
* a one-element list (ep131 writes `branch_of: {episode: 128, ...}`), and an
|
|
273
|
+
* explicit `null` is an authored-empty field, not an error (ep290 writes
|
|
274
|
+
* `continues_from: null`). Older dialect: `prior_episode` — a bare folder-name
|
|
275
|
+
* string naming the continuation source (observed as a path-target
|
|
276
|
+
* continues-from edge). `related_themes` and any other keys are preserved
|
|
277
|
+
* verbatim in the returned `unmappedLineage`. Every edge is deduped so an
|
|
278
|
+
* episode carrying both dialects for the same target reports a single relation.
|
|
279
|
+
*/
|
|
204
280
|
function observeLineage(value, diagnostics) {
|
|
281
|
+
const seen = new Set();
|
|
205
282
|
if (value === undefined) {
|
|
206
|
-
return { relations: [], unmappedLineage: {}, consumed: false };
|
|
283
|
+
return { relations: [], unmappedLineage: {}, consumed: false, seen };
|
|
207
284
|
}
|
|
208
285
|
if (!isRecord(value)) {
|
|
209
286
|
diagnostics.push({
|
|
@@ -212,18 +289,29 @@ function observeLineage(value, diagnostics) {
|
|
|
212
289
|
message: "Manifest field 'lineage' must be an object when present.",
|
|
213
290
|
path: "lineage",
|
|
214
291
|
});
|
|
215
|
-
return { relations: [], unmappedLineage: {}, consumed: false };
|
|
292
|
+
return { relations: [], unmappedLineage: {}, consumed: false, seen };
|
|
216
293
|
}
|
|
217
294
|
const relations = [];
|
|
218
295
|
const unmappedLineage = {};
|
|
296
|
+
const pushUnique = (relation) => {
|
|
297
|
+
if (relation === undefined)
|
|
298
|
+
return;
|
|
299
|
+
const key = relationDedupKey(relation);
|
|
300
|
+
if (seen.has(key))
|
|
301
|
+
return;
|
|
302
|
+
seen.add(key);
|
|
303
|
+
relations.push(relation);
|
|
304
|
+
};
|
|
219
305
|
const mappings = [
|
|
220
306
|
["continues_from", "continues-from"],
|
|
221
307
|
["relates_to", "related-to"],
|
|
308
|
+
["branch_of", "branch-of"],
|
|
222
309
|
];
|
|
223
310
|
for (const [field, kind] of mappings) {
|
|
224
|
-
const
|
|
225
|
-
if (
|
|
311
|
+
const raw = value[field];
|
|
312
|
+
if (raw === undefined || raw === null)
|
|
226
313
|
continue;
|
|
314
|
+
const entries = Array.isArray(raw) ? raw : isRecord(raw) ? [raw] : raw;
|
|
227
315
|
if (!Array.isArray(entries)) {
|
|
228
316
|
diagnostics.push({
|
|
229
317
|
level: "warning",
|
|
@@ -238,19 +326,82 @@ function observeLineage(value, diagnostics) {
|
|
|
238
326
|
entries.forEach((entry, index) => {
|
|
239
327
|
const relation = observeRelationEntry(entry, kind, field, index, diagnostics);
|
|
240
328
|
if (relation !== undefined)
|
|
241
|
-
|
|
329
|
+
pushUnique(relation);
|
|
242
330
|
else
|
|
243
331
|
rejectedEntries.push(cloneValue(entry));
|
|
244
332
|
});
|
|
245
333
|
if (rejectedEntries.length > 0)
|
|
246
334
|
unmappedLineage[field] = rejectedEntries;
|
|
247
335
|
}
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
336
|
+
// Older dialect (ep040): `lineage.prior_episode: <folder-name string>`.
|
|
337
|
+
const priorEpisode = value.prior_episode;
|
|
338
|
+
if (typeof priorEpisode === "string" && priorEpisode.length > 0) {
|
|
339
|
+
const relativeTargetPath = tryValidateRelativePath(priorEpisode);
|
|
340
|
+
if (relativeTargetPath === undefined) {
|
|
341
|
+
diagnostics.push({
|
|
342
|
+
level: "warning",
|
|
343
|
+
code: "episode-yaml.unsafe-lineage-path",
|
|
344
|
+
message: "Path-only lineage targets must be relative and must not contain traversal.",
|
|
345
|
+
path: "lineage.prior_episode",
|
|
346
|
+
});
|
|
347
|
+
unmappedLineage.prior_episode = cloneValue(priorEpisode);
|
|
348
|
+
}
|
|
349
|
+
else {
|
|
350
|
+
pushUnique({
|
|
351
|
+
id: `relation:continues-from:path:${encodeURIComponent(relativeTargetPath)}:prior_episode`,
|
|
352
|
+
kind: "continues-from",
|
|
353
|
+
target: { kind: "path", value: relativeTargetPath },
|
|
354
|
+
});
|
|
251
355
|
}
|
|
252
356
|
}
|
|
253
|
-
|
|
357
|
+
else if (priorEpisode !== undefined) {
|
|
358
|
+
diagnostics.push({
|
|
359
|
+
level: "warning",
|
|
360
|
+
code: "episode-yaml.invalid-lineage-entry",
|
|
361
|
+
message: "Lineage field 'prior_episode' must be a folder-name string.",
|
|
362
|
+
path: "lineage.prior_episode",
|
|
363
|
+
});
|
|
364
|
+
unmappedLineage.prior_episode = cloneValue(priorEpisode);
|
|
365
|
+
}
|
|
366
|
+
const knownKeys = new Set(["continues_from", "relates_to", "branch_of", "prior_episode"]);
|
|
367
|
+
for (const [key, child] of Object.entries(value)) {
|
|
368
|
+
if (knownKeys.has(key))
|
|
369
|
+
continue;
|
|
370
|
+
if (key in unmappedLineage)
|
|
371
|
+
continue;
|
|
372
|
+
unmappedLineage[key] = cloneValue(child);
|
|
373
|
+
}
|
|
374
|
+
return { relations, unmappedLineage, consumed: true, seen };
|
|
375
|
+
}
|
|
376
|
+
/**
|
|
377
|
+
* Observe the top-level `related_episodes` dialect (schema
|
|
378
|
+
* `voice-episode-workspace/v1`, e.g. ep039) — an array of `{episode, relation}`
|
|
379
|
+
* mapped to `related-to` edges, deduped against edges already found in `lineage`.
|
|
380
|
+
*/
|
|
381
|
+
function observeRelatedEpisodes(value, seen, diagnostics) {
|
|
382
|
+
if (value === undefined)
|
|
383
|
+
return { relations: [], consumed: false };
|
|
384
|
+
if (!Array.isArray(value)) {
|
|
385
|
+
diagnostics.push({
|
|
386
|
+
level: "warning",
|
|
387
|
+
code: "episode-yaml.invalid-related-episodes",
|
|
388
|
+
message: "Top-level field 'related_episodes' must be an array when present.",
|
|
389
|
+
path: "related_episodes",
|
|
390
|
+
});
|
|
391
|
+
return { relations: [], consumed: false };
|
|
392
|
+
}
|
|
393
|
+
const relations = [];
|
|
394
|
+
value.forEach((entry, index) => {
|
|
395
|
+
const relation = observeRelationEntry(entry, "related-to", "related_episodes", index, diagnostics);
|
|
396
|
+
if (relation === undefined)
|
|
397
|
+
return;
|
|
398
|
+
const key = relationDedupKey(relation);
|
|
399
|
+
if (seen.has(key))
|
|
400
|
+
return;
|
|
401
|
+
seen.add(key);
|
|
402
|
+
relations.push(relation);
|
|
403
|
+
});
|
|
404
|
+
return { relations, consumed: true };
|
|
254
405
|
}
|
|
255
406
|
function observeRelationEntry(entry, kind, field, index, diagnostics) {
|
|
256
407
|
const path = `lineage.${field}[${index}]`;
|
|
@@ -305,17 +456,19 @@ function observeRelationEntry(entry, kind, field, index, diagnostics) {
|
|
|
305
456
|
relation.metadata = metadata;
|
|
306
457
|
return relation;
|
|
307
458
|
}
|
|
308
|
-
function preserveUnmappedFields(input, consumedMetadataFields, lineage) {
|
|
459
|
+
function preserveUnmappedFields(input, consumedMetadataFields, lineage, relatedEpisodesConsumed) {
|
|
309
460
|
const unmapped = {};
|
|
310
461
|
for (const [key, value] of Object.entries(input)) {
|
|
311
462
|
if (consumedMetadataFields.has(key))
|
|
312
463
|
continue;
|
|
313
464
|
if (key === "episode" && normalizeEpisodeNumber(value) !== undefined)
|
|
314
465
|
continue;
|
|
315
|
-
if (key === "artifacts" && isRecord(value))
|
|
466
|
+
if (key === "artifacts" && (isRecord(value) || Array.isArray(value)))
|
|
316
467
|
continue;
|
|
317
468
|
if (key === "lineage" && lineage.consumed)
|
|
318
469
|
continue;
|
|
470
|
+
if (key === "related_episodes" && relatedEpisodesConsumed)
|
|
471
|
+
continue;
|
|
319
472
|
unmapped[key] = cloneValue(value);
|
|
320
473
|
}
|
|
321
474
|
if (Object.keys(lineage.unmappedLineage).length > 0) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"episode-yaml.js","sourceRoot":"","sources":["../../src/adapters/episode-yaml.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"episode-yaml.js","sourceRoot":"","sources":["../../src/adapters/episode-yaml.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The episode "writing pattern" grammar — filesystem-free.
|
|
3
|
+
*
|
|
4
|
+
* This is the shared, dependency-free classifier for an episode folder's file
|
|
5
|
+
* names: which files are the mains (`script.md`, `narration.txt`,
|
|
6
|
+
* `revision-notes.md`), which belong to a segment (`chapter-NN` / `interlude-NN`
|
|
7
|
+
* / `part-NN`) and in what role (`-script` / `-narration` / `-revision-notes` /
|
|
8
|
+
* `-transcript`), and which are per-segment or full-episode audio.
|
|
9
|
+
*
|
|
10
|
+
* It was lifted verbatim from the app's `episodeRoom.ts` so forgewright and the
|
|
11
|
+
* book tooling read an episode's structure the same way the `/chronicle` surface
|
|
12
|
+
* does, without forking the grammar. It operates on a directory snapshot (a list
|
|
13
|
+
* of file names) and returns which file plays which role — it never reads file
|
|
14
|
+
* contents or touches the filesystem. The app remains free to read the mapped
|
|
15
|
+
* files for their text/audio; this module only names the structure.
|
|
16
|
+
*/
|
|
17
|
+
export type SegmentKind = "chapter" | "interlude" | "part";
|
|
18
|
+
export type EpisodeFileRole = "script" | "narration" | "revision" | "transcript" | "doc" | "audio";
|
|
19
|
+
export interface ClassifiedEpisodeFile {
|
|
20
|
+
role: EpisodeFileRole;
|
|
21
|
+
/** The stem after the role suffix is stripped (`""` for the mains). */
|
|
22
|
+
stem: string;
|
|
23
|
+
file: string;
|
|
24
|
+
ext: string;
|
|
25
|
+
}
|
|
26
|
+
export interface SegmentAudioDescriptor {
|
|
27
|
+
file: string;
|
|
28
|
+
label: string;
|
|
29
|
+
/** The segment stem this audio attaches to (`"episode"` for the full episode). */
|
|
30
|
+
sub: string;
|
|
31
|
+
primary: boolean;
|
|
32
|
+
}
|
|
33
|
+
export interface SegmentDescriptor {
|
|
34
|
+
/** The segment stem, e.g. `chapter-01` — the true key. */
|
|
35
|
+
id: string;
|
|
36
|
+
kind: SegmentKind;
|
|
37
|
+
order: number;
|
|
38
|
+
label: string;
|
|
39
|
+
/** Role → file name for this segment (script/narration/revision/transcript). */
|
|
40
|
+
roles: Partial<Record<EpisodeFileRole, string>>;
|
|
41
|
+
/** True when the segment's narration file is markdown (`.md`, not `.txt`). */
|
|
42
|
+
narrationIsMarkdown: boolean;
|
|
43
|
+
/** Audio files whose stem is this segment's stem. */
|
|
44
|
+
audio: SegmentAudioDescriptor[];
|
|
45
|
+
}
|
|
46
|
+
export interface MainDocuments {
|
|
47
|
+
/** File name of the main script (`script.md` / `-script.md`). */
|
|
48
|
+
script?: string;
|
|
49
|
+
/** File name of the main narration (`narration.txt|md`). */
|
|
50
|
+
narration?: string;
|
|
51
|
+
narrationIsMarkdown: boolean;
|
|
52
|
+
/** File name of the main revision notes (`revision-notes.md`). */
|
|
53
|
+
revision?: string;
|
|
54
|
+
}
|
|
55
|
+
export interface DocDescriptor {
|
|
56
|
+
file: string;
|
|
57
|
+
label: string;
|
|
58
|
+
}
|
|
59
|
+
export interface EpisodeSegmentModel {
|
|
60
|
+
mains: MainDocuments;
|
|
61
|
+
segments: SegmentDescriptor[];
|
|
62
|
+
audio: SegmentAudioDescriptor[];
|
|
63
|
+
docs: DocDescriptor[];
|
|
64
|
+
}
|
|
65
|
+
/** Classify one file name into its role + stem, or null when it is ignorable. */
|
|
66
|
+
export declare function classifyEpisodeFile(file: string): ClassifiedEpisodeFile | null;
|
|
67
|
+
/** Parse a segment stem (`chapter-01`, `interlude-2`, `part-03-title`). */
|
|
68
|
+
export declare function segmentKeyFromStem(stem: string): {
|
|
69
|
+
kind: SegmentKind;
|
|
70
|
+
order: number;
|
|
71
|
+
label: string;
|
|
72
|
+
} | null;
|
|
73
|
+
/**
|
|
74
|
+
* Observe an episode folder's file names into its structural model: mains,
|
|
75
|
+
* ordered segments (with per-segment roles + audio), full-episode/loose audio,
|
|
76
|
+
* and loose docs. Deterministic and content-free — pass the directory's file
|
|
77
|
+
* names (or entries with a `relativePath`); nested paths are keyed by basename.
|
|
78
|
+
*/
|
|
79
|
+
export declare function observeEpisodeSegments(files: ReadonlyArray<string | {
|
|
80
|
+
relativePath: string;
|
|
81
|
+
}>): EpisodeSegmentModel;
|
|
82
|
+
//# sourceMappingURL=segment-grammar.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"segment-grammar.d.ts","sourceRoot":"","sources":["../../src/adapters/segment-grammar.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAKH,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,WAAW,GAAG,MAAM,CAAA;AAE1D,MAAM,MAAM,eAAe,GACvB,QAAQ,GACR,WAAW,GACX,UAAU,GACV,YAAY,GACZ,KAAK,GACL,OAAO,CAAA;AAEX,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,eAAe,CAAA;IACrB,uEAAuE;IACvE,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,MAAM,CAAA;CACZ;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,kFAAkF;IAClF,GAAG,EAAE,MAAM,CAAA;IACX,OAAO,EAAE,OAAO,CAAA;CACjB;AAED,MAAM,WAAW,iBAAiB;IAChC,0DAA0D;IAC1D,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,WAAW,CAAA;IACjB,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,gFAAgF;IAChF,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC,CAAA;IAC/C,8EAA8E;IAC9E,mBAAmB,EAAE,OAAO,CAAA;IAC5B,qDAAqD;IACrD,KAAK,EAAE,sBAAsB,EAAE,CAAA;CAChC;AAED,MAAM,WAAW,aAAa;IAC5B,iEAAiE;IACjE,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,4DAA4D;IAC5D,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,mBAAmB,EAAE,OAAO,CAAA;IAC5B,kEAAkE;IAClE,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,aAAa,CAAA;IACpB,QAAQ,EAAE,iBAAiB,EAAE,CAAA;IAC7B,KAAK,EAAE,sBAAsB,EAAE,CAAA;IAC/B,IAAI,EAAE,aAAa,EAAE,CAAA;CACtB;AA6BD,iFAAiF;AACjF,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,qBAAqB,GAAG,IAAI,CAU9E;AAED,2EAA2E;AAC3E,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,MAAM,GACX;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAW5D;AAmBD;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,aAAa,CAAC,MAAM,GAAG;IAAE,YAAY,EAAE,MAAM,CAAA;CAAE,CAAC,GACtD,mBAAmB,CAsFrB"}
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The episode "writing pattern" grammar — filesystem-free.
|
|
3
|
+
*
|
|
4
|
+
* This is the shared, dependency-free classifier for an episode folder's file
|
|
5
|
+
* names: which files are the mains (`script.md`, `narration.txt`,
|
|
6
|
+
* `revision-notes.md`), which belong to a segment (`chapter-NN` / `interlude-NN`
|
|
7
|
+
* / `part-NN`) and in what role (`-script` / `-narration` / `-revision-notes` /
|
|
8
|
+
* `-transcript`), and which are per-segment or full-episode audio.
|
|
9
|
+
*
|
|
10
|
+
* It was lifted verbatim from the app's `episodeRoom.ts` so forgewright and the
|
|
11
|
+
* book tooling read an episode's structure the same way the `/chronicle` surface
|
|
12
|
+
* does, without forking the grammar. It operates on a directory snapshot (a list
|
|
13
|
+
* of file names) and returns which file plays which role — it never reads file
|
|
14
|
+
* contents or touches the filesystem. The app remains free to read the mapped
|
|
15
|
+
* files for their text/audio; this module only names the structure.
|
|
16
|
+
*/
|
|
17
|
+
const TEXT_EXT = new Set([".md", ".txt"]);
|
|
18
|
+
const AUDIO_EXT = new Set([".mp3", ".ogg"]);
|
|
19
|
+
const DOC_LABELS = {
|
|
20
|
+
readme: "README",
|
|
21
|
+
"source-ledger": "Source Ledger",
|
|
22
|
+
agents: "AGENTS",
|
|
23
|
+
"relational-map": "Relational Map",
|
|
24
|
+
"medicine-wheel-snapshot": "Medicine Wheel Snapshot",
|
|
25
|
+
"audio-manifest": "Audio Manifest",
|
|
26
|
+
"delivery-notes": "Delivery Notes",
|
|
27
|
+
synopsis: "Synopsis",
|
|
28
|
+
"context-setting": "Context Setting",
|
|
29
|
+
status: "Status",
|
|
30
|
+
};
|
|
31
|
+
function extname(file) {
|
|
32
|
+
const dot = file.lastIndexOf(".");
|
|
33
|
+
return dot <= 0 ? "" : file.slice(dot).toLowerCase();
|
|
34
|
+
}
|
|
35
|
+
function titleize(value) {
|
|
36
|
+
return value
|
|
37
|
+
.replace(/[-_]+/g, " ")
|
|
38
|
+
.trim()
|
|
39
|
+
.split(" ")
|
|
40
|
+
.map((word) => (word ? word[0].toUpperCase() + word.slice(1) : word))
|
|
41
|
+
.join(" ");
|
|
42
|
+
}
|
|
43
|
+
/** Classify one file name into its role + stem, or null when it is ignorable. */
|
|
44
|
+
export function classifyEpisodeFile(file) {
|
|
45
|
+
const ext = extname(file);
|
|
46
|
+
const base = file.slice(0, file.length - ext.length);
|
|
47
|
+
if (AUDIO_EXT.has(ext))
|
|
48
|
+
return { role: "audio", stem: base, file, ext };
|
|
49
|
+
if (!TEXT_EXT.has(ext))
|
|
50
|
+
return null;
|
|
51
|
+
if (base.endsWith("-script"))
|
|
52
|
+
return { role: "script", stem: base.slice(0, -"-script".length), file, ext };
|
|
53
|
+
if (base.endsWith("-narration"))
|
|
54
|
+
return { role: "narration", stem: base.slice(0, -"-narration".length), file, ext };
|
|
55
|
+
if (base.endsWith("-revision-notes"))
|
|
56
|
+
return { role: "revision", stem: base.slice(0, -"-revision-notes".length), file, ext };
|
|
57
|
+
if (base.endsWith("-transcript"))
|
|
58
|
+
return { role: "transcript", stem: base.slice(0, -"-transcript".length), file, ext };
|
|
59
|
+
return { role: "doc", stem: base, file, ext };
|
|
60
|
+
}
|
|
61
|
+
/** Parse a segment stem (`chapter-01`, `interlude-2`, `part-03-title`). */
|
|
62
|
+
export function segmentKeyFromStem(stem) {
|
|
63
|
+
let match = stem.match(/^chapter-0*(\d+)/);
|
|
64
|
+
if (match)
|
|
65
|
+
return { kind: "chapter", order: Number(match[1]), label: `Chapter ${Number(match[1])}` };
|
|
66
|
+
match = stem.match(/^interlude-0*(\d+)/);
|
|
67
|
+
if (match)
|
|
68
|
+
return { kind: "interlude", order: Number(match[1]), label: `Interlude ${Number(match[1])}` };
|
|
69
|
+
match = stem.match(/part-0*(\d+)[-_]?(.*)$/);
|
|
70
|
+
if (match) {
|
|
71
|
+
const tail = match[2] ? ` · ${titleize(match[2])}` : "";
|
|
72
|
+
return { kind: "part", order: Number(match[1]), label: `Part ${Number(match[1])}${tail}` };
|
|
73
|
+
}
|
|
74
|
+
return null;
|
|
75
|
+
}
|
|
76
|
+
function audioLabel(stem) {
|
|
77
|
+
if (stem === "episode")
|
|
78
|
+
return { label: "Full episode", sub: "episode", primary: true };
|
|
79
|
+
const segment = segmentKeyFromStem(stem);
|
|
80
|
+
if (segment)
|
|
81
|
+
return { label: segment.label, sub: stem, primary: false };
|
|
82
|
+
return { label: titleize(stem), sub: stem, primary: false };
|
|
83
|
+
}
|
|
84
|
+
function toFileName(entry) {
|
|
85
|
+
const raw = typeof entry === "string" ? entry : entry?.relativePath;
|
|
86
|
+
if (typeof raw !== "string" || raw.length === 0)
|
|
87
|
+
return null;
|
|
88
|
+
// A segment grammar is a flat, single-directory grammar: nested paths are not
|
|
89
|
+
// episode segments. Take the basename so callers may pass either shape.
|
|
90
|
+
const slash = Math.max(raw.lastIndexOf("/"), raw.lastIndexOf("\\"));
|
|
91
|
+
const name = slash === -1 ? raw : raw.slice(slash + 1);
|
|
92
|
+
return name.length > 0 ? name : null;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Observe an episode folder's file names into its structural model: mains,
|
|
96
|
+
* ordered segments (with per-segment roles + audio), full-episode/loose audio,
|
|
97
|
+
* and loose docs. Deterministic and content-free — pass the directory's file
|
|
98
|
+
* names (or entries with a `relativePath`); nested paths are keyed by basename.
|
|
99
|
+
*/
|
|
100
|
+
export function observeEpisodeSegments(files) {
|
|
101
|
+
const mains = { narrationIsMarkdown: false };
|
|
102
|
+
const audio = [];
|
|
103
|
+
const docs = [];
|
|
104
|
+
const segmentMap = new Map();
|
|
105
|
+
for (const entry of files) {
|
|
106
|
+
const file = toFileName(entry);
|
|
107
|
+
if (file === null)
|
|
108
|
+
continue;
|
|
109
|
+
const classified = classifyEpisodeFile(file);
|
|
110
|
+
if (!classified)
|
|
111
|
+
continue;
|
|
112
|
+
if (classified.role === "script" && classified.stem === "") {
|
|
113
|
+
mains.script = file;
|
|
114
|
+
continue;
|
|
115
|
+
}
|
|
116
|
+
if (classified.role === "audio") {
|
|
117
|
+
const meta = audioLabel(classified.stem);
|
|
118
|
+
audio.push({ file, label: meta.label, sub: meta.sub, primary: meta.primary });
|
|
119
|
+
}
|
|
120
|
+
if (classified.role === "doc") {
|
|
121
|
+
const key = classified.stem.toLowerCase();
|
|
122
|
+
if (classified.stem === "script") {
|
|
123
|
+
mains.script = file;
|
|
124
|
+
}
|
|
125
|
+
else if (classified.stem === "narration") {
|
|
126
|
+
mains.narration = file;
|
|
127
|
+
mains.narrationIsMarkdown = classified.ext === ".md";
|
|
128
|
+
}
|
|
129
|
+
else if (classified.stem === "revision-notes") {
|
|
130
|
+
mains.revision = file;
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
docs.push({ file, label: DOC_LABELS[key] ?? titleize(classified.stem) });
|
|
134
|
+
}
|
|
135
|
+
continue;
|
|
136
|
+
}
|
|
137
|
+
if (classified.role === "narration" && classified.stem === "") {
|
|
138
|
+
mains.narration = file;
|
|
139
|
+
mains.narrationIsMarkdown = classified.ext === ".md";
|
|
140
|
+
continue;
|
|
141
|
+
}
|
|
142
|
+
if (classified.role === "revision" && classified.stem === "") {
|
|
143
|
+
mains.revision = file;
|
|
144
|
+
continue;
|
|
145
|
+
}
|
|
146
|
+
if (classified.role === "transcript" && classified.stem === "")
|
|
147
|
+
continue;
|
|
148
|
+
const key = segmentKeyFromStem(classified.stem);
|
|
149
|
+
if (!key)
|
|
150
|
+
continue;
|
|
151
|
+
const bucket = segmentMap.get(classified.stem) ?? { key, roles: {} };
|
|
152
|
+
bucket.roles[classified.role] = classified;
|
|
153
|
+
segmentMap.set(classified.stem, bucket);
|
|
154
|
+
}
|
|
155
|
+
const segments = [];
|
|
156
|
+
for (const [stem, bucket] of segmentMap) {
|
|
157
|
+
const narration = bucket.roles.narration;
|
|
158
|
+
const segment = {
|
|
159
|
+
id: stem,
|
|
160
|
+
kind: bucket.key.kind,
|
|
161
|
+
order: bucket.key.order,
|
|
162
|
+
label: bucket.key.label,
|
|
163
|
+
roles: {},
|
|
164
|
+
narrationIsMarkdown: narration ? narration.ext === ".md" : false,
|
|
165
|
+
audio: audio.filter((track) => track.sub === stem),
|
|
166
|
+
};
|
|
167
|
+
for (const [role, classified] of Object.entries(bucket.roles)) {
|
|
168
|
+
segment.roles[role] = classified.file;
|
|
169
|
+
}
|
|
170
|
+
segments.push(segment);
|
|
171
|
+
}
|
|
172
|
+
segments.sort((left, right) => {
|
|
173
|
+
if (left.order !== right.order)
|
|
174
|
+
return left.order - right.order;
|
|
175
|
+
const rank = (kind) => (kind === "chapter" ? 0 : kind === "interlude" ? 1 : 2);
|
|
176
|
+
return rank(left.kind) - rank(right.kind);
|
|
177
|
+
});
|
|
178
|
+
audio.sort((left, right) => {
|
|
179
|
+
const primaryRank = (track) => (track.primary ? 0 : 1);
|
|
180
|
+
return primaryRank(left) - primaryRank(right) || left.sub.localeCompare(right.sub);
|
|
181
|
+
});
|
|
182
|
+
docs.sort((left, right) => left.label.localeCompare(right.label));
|
|
183
|
+
return { mains, segments, audio, docs };
|
|
184
|
+
}
|
|
185
|
+
//# sourceMappingURL=segment-grammar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"segment-grammar.js","sourceRoot":"","sources":["../../src/adapters/segment-grammar.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
* what it is handed, so the app and forgewright never fork the read-side.
|
|
11
11
|
*/
|
|
12
12
|
import type { CompatibilityDiagnostic, EpisodeObservation, EpisodeRelation } from "./observation.js";
|
|
13
|
+
import type { StoryManifestEntry } from "./story-library-manifest.js";
|
|
13
14
|
/** The medicine-wheel parent every chronicle episode node hangs under. */
|
|
14
15
|
export declare const CHRONICLE_PARENT_NODE_ID = "chronicle:miadi-chronicle";
|
|
15
16
|
export declare const CHRONICLE_SERIES = "miadi-chronicle";
|
|
@@ -39,6 +40,11 @@ export interface EpisodeManifestEntry {
|
|
|
39
40
|
relations: EpisodeRelation[];
|
|
40
41
|
/** True when a structured `episode.yaml` was observed (vs. name-only). */
|
|
41
42
|
structured: boolean;
|
|
43
|
+
/**
|
|
44
|
+
* Published book/story form(s) for this episode, attached by `linkStoryForms`
|
|
45
|
+
* from a `StoryLibraryManifest`. Absent when the episode has no published story.
|
|
46
|
+
*/
|
|
47
|
+
stories?: StoryManifestEntry[];
|
|
42
48
|
}
|
|
43
49
|
/** What the enumerator collects per folder before manifest assembly. */
|
|
44
50
|
export interface ChronicleManifestEntryInput {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chronicle-manifest.d.ts","sourceRoot":"","sources":["../src/chronicle-manifest.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EACV,uBAAuB,EACvB,kBAAkB,EAClB,eAAe,EAChB,MAAM,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"chronicle-manifest.d.ts","sourceRoot":"","sources":["../src/chronicle-manifest.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EACV,uBAAuB,EACvB,kBAAkB,EAClB,eAAe,EAChB,MAAM,kBAAkB,CAAA;AACzB,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAA;AAErE,0EAA0E;AAC1E,eAAO,MAAM,wBAAwB,8BAA8B,CAAA;AACnE,eAAO,MAAM,gBAAgB,oBAAoB,CAAA;AAEjD;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE3D;AAED,sEAAsE;AACtE,MAAM,WAAW,oBAAoB;IACnC,sCAAsC;IACtC,IAAI,EAAE,MAAM,CAAA;IACZ,kDAAkD;IAClD,MAAM,EAAE,MAAM,CAAA;IACd,kEAAkE;IAClE,YAAY,EAAE,MAAM,CAAA;IACpB,uEAAuE;IACvE,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,qFAAqF;IACrF,SAAS,EAAE,eAAe,EAAE,CAAA;IAC5B,0EAA0E;IAC1E,UAAU,EAAE,OAAO,CAAA;IACnB;;;OAGG;IACH,OAAO,CAAC,EAAE,kBAAkB,EAAE,CAAA;CAC/B;AAED,wEAAwE;AACxE,MAAM,WAAW,2BAA2B;IAC1C,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,oEAAoE;IACpE,WAAW,CAAC,EAAE,kBAAkB,CAAA;CACjC;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,WAAW,CAAA;IACjB,MAAM,EAAE,MAAM,CAAA;IACd,4DAA4D;IAC5D,YAAY,EAAE,MAAM,CAAA;IACpB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,QAAQ,EAAE,oBAAoB,EAAE,CAAA;IAChC,WAAW,EAAE,uBAAuB,EAAE,CAAA;CACvC;AAED,MAAM,WAAW,+BAA+B;IAC9C,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,8EAA8E;IAC9E,GAAG,CAAC,EAAE,MAAM,IAAI,CAAA;CACjB;AAOD;;;;;;;;GAQG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,SAAS,2BAA2B,EAAE,EAC9C,OAAO,GAAE,+BAAoC,GAC5C,iBAAiB,CAwDnB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chronicle-manifest.js","sourceRoot":"","sources":["../src/chronicle-manifest.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;
|
|
1
|
+
{"version":3,"file":"chronicle-manifest.js","sourceRoot":"","sources":["../src/chronicle-manifest.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -2,9 +2,11 @@ export * from "./types.js";
|
|
|
2
2
|
export * from "./narrative.js";
|
|
3
3
|
export * from "./observation.js";
|
|
4
4
|
export * from "./chronicle-manifest.js";
|
|
5
|
+
export * from "./story-library-manifest.js";
|
|
5
6
|
export * from "./adapters/composition.js";
|
|
6
7
|
export * from "./adapters/episode-yaml.js";
|
|
7
8
|
export * from "./adapters/directory.js";
|
|
9
|
+
export * from "./adapters/segment-grammar.js";
|
|
8
10
|
/**
|
|
9
11
|
* Shared source-reading helpers, exported so downstream packages read paths and
|
|
10
12
|
* infer identity the same way this package does rather than forking a second,
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAA;AAC1B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,kBAAkB,CAAA;AAChC,cAAc,yBAAyB,CAAA;AACvC,cAAc,2BAA2B,CAAA;AACzC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,yBAAyB,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAA;AAC1B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,kBAAkB,CAAA;AAChC,cAAc,yBAAyB,CAAA;AACvC,cAAc,6BAA6B,CAAA;AAC3C,cAAc,2BAA2B,CAAA;AACzC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,yBAAyB,CAAA;AACvC,cAAc,+BAA+B,CAAA;AAE7C;;;;GAIG;AACH,OAAO,EACL,iBAAiB,EACjB,oBAAoB,EACpB,oBAAoB,EACpB,uBAAuB,EACvB,kBAAkB,EAClB,gBAAgB,EAChB,aAAa,EACb,YAAY,GACb,MAAM,sBAAsB,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -2,9 +2,11 @@ export * from "./types.js";
|
|
|
2
2
|
export * from "./narrative.js";
|
|
3
3
|
export * from "./observation.js";
|
|
4
4
|
export * from "./chronicle-manifest.js";
|
|
5
|
+
export * from "./story-library-manifest.js";
|
|
5
6
|
export * from "./adapters/composition.js";
|
|
6
7
|
export * from "./adapters/episode-yaml.js";
|
|
7
8
|
export * from "./adapters/directory.js";
|
|
9
|
+
export * from "./adapters/segment-grammar.js";
|
|
8
10
|
/**
|
|
9
11
|
* Shared source-reading helpers, exported so downstream packages read paths and
|
|
10
12
|
* infer identity the same way this package does rather than forking a second,
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAA;AAC1B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,kBAAkB,CAAA;AAChC,cAAc,yBAAyB,CAAA;AACvC,cAAc,2BAA2B,CAAA;AACzC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,yBAAyB,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAA;AAC1B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,kBAAkB,CAAA;AAChC,cAAc,yBAAyB,CAAA;AACvC,cAAc,6BAA6B,CAAA;AAC3C,cAAc,2BAA2B,CAAA;AACzC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,yBAAyB,CAAA;AACvC,cAAc,+BAA+B,CAAA;AAE7C;;;;GAIG;AACH,OAAO,EACL,iBAAiB,EACjB,oBAAoB,EACpB,oBAAoB,EACpB,uBAAuB,EACvB,kBAAkB,EAClB,gBAAgB,EAChB,aAAa,EACb,YAAY,GACb,MAAM,sBAAsB,CAAA"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The story library catalog — the published Twine/interactive-book zone
|
|
3
|
+
* (`/home/mia/Documents/Twine/Stories`), read the same way the chronicle catalog
|
|
4
|
+
* reads episode folders (jgwill/Miadi#506 book cycle).
|
|
5
|
+
*
|
|
6
|
+
* Filesystem-free, like the rest of this package: it observes an already-collected
|
|
7
|
+
* directory snapshot (story file/dir names) and assembles the manifest. The
|
|
8
|
+
* enumerator that walks the stories root on disk lives in `@miadi/inquiry-weave`
|
|
9
|
+
* (`story-library.ts`), mirroring `buildChronicleCatalog`; this module only shapes
|
|
10
|
+
* and validates what it is handed so the app and forgewright never fork the
|
|
11
|
+
* read-side.
|
|
12
|
+
*
|
|
13
|
+
* A story maps to an episode by the episode number parsed from its name
|
|
14
|
+
* (`Episode_040___…`, `Episode-044-…`). Stories with no parseable episode number
|
|
15
|
+
* (a pilot title like `The_Room_Lent_It_Ears.html`, or `dummy1.html`) are still
|
|
16
|
+
* catalogued — the library tolerates non-episode stories.
|
|
17
|
+
*/
|
|
18
|
+
import type { CompatibilityDiagnostic, EpisodeIdentityCandidate } from "./observation.js";
|
|
19
|
+
import type { EpisodeManifestEntry } from "./chronicle-manifest.js";
|
|
20
|
+
export type StoryKind = "html" | "directory" | "other";
|
|
21
|
+
/** One published story, as the book-cycle surface consumes it. */
|
|
22
|
+
export interface StoryManifestEntry {
|
|
23
|
+
/** File or directory basename — the true key. */
|
|
24
|
+
name: string;
|
|
25
|
+
/** Stable id, `story:<name>`. */
|
|
26
|
+
storyId: string;
|
|
27
|
+
kind: StoryKind;
|
|
28
|
+
/** Path relative to the stories root. */
|
|
29
|
+
relativePath: string;
|
|
30
|
+
/** Episode number parsed from the name, when present. */
|
|
31
|
+
episodeNumber?: number;
|
|
32
|
+
/** Identity candidates parsed from the name (episode-number, slug, path). */
|
|
33
|
+
identityCandidates: EpisodeIdentityCandidate[];
|
|
34
|
+
/** A display title derived from the name. */
|
|
35
|
+
title: string;
|
|
36
|
+
}
|
|
37
|
+
/** What the enumerator collects per story before manifest assembly. */
|
|
38
|
+
export interface StoryLibraryEntryInput {
|
|
39
|
+
/** File or directory name, or an object carrying it plus a directory flag. */
|
|
40
|
+
name: string;
|
|
41
|
+
type?: "file" | "directory";
|
|
42
|
+
}
|
|
43
|
+
export interface StoryLibraryManifest {
|
|
44
|
+
zone: "story-library";
|
|
45
|
+
/** A label for the stories root, never an absolute path (stays portable). */
|
|
46
|
+
root: string;
|
|
47
|
+
generatedAt?: string;
|
|
48
|
+
stories: StoryManifestEntry[];
|
|
49
|
+
diagnostics: CompatibilityDiagnostic[];
|
|
50
|
+
}
|
|
51
|
+
export interface ObserveStoryLibraryOptions {
|
|
52
|
+
/** A label for the stories root; defaults to `twine-stories`. */
|
|
53
|
+
root?: string;
|
|
54
|
+
/** When provided, stamps `generatedAt`; omit for a deterministic manifest. */
|
|
55
|
+
now?: () => Date;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Assemble a StoryLibraryManifest from collected story names.
|
|
59
|
+
*
|
|
60
|
+
* Non-destructive and deterministic: entries are sorted by name; a non-episode
|
|
61
|
+
* story is kept with `episodeNumber` undefined; an empty library is reported as
|
|
62
|
+
* an `info` diagnostic rather than an error.
|
|
63
|
+
*/
|
|
64
|
+
export declare function observeStoryLibrary(inputs: ReadonlyArray<string | StoryLibraryEntryInput>, options?: ObserveStoryLibraryOptions): StoryLibraryManifest;
|
|
65
|
+
/** Index the library's stories by the episode number they declare. */
|
|
66
|
+
export declare function indexStoriesByEpisode(manifest: StoryLibraryManifest): Map<number, StoryManifestEntry[]>;
|
|
67
|
+
/**
|
|
68
|
+
* Non-destructively attach each episode's book form(s) to its chronicle entry.
|
|
69
|
+
*
|
|
70
|
+
* Returns a shallow-copied entry list where any episode whose number matches a
|
|
71
|
+
* published story gains a `stories` array — the seam the `/chronicle` surface
|
|
72
|
+
* uses to link an episode to its interactive-book form. Episodes without a
|
|
73
|
+
* published story are returned unchanged (no `stories` field).
|
|
74
|
+
*/
|
|
75
|
+
export declare function linkStoryForms(episodes: readonly EpisodeManifestEntry[], library: StoryLibraryManifest): EpisodeManifestEntry[];
|
|
76
|
+
//# sourceMappingURL=story-library-manifest.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"story-library-manifest.d.ts","sourceRoot":"","sources":["../src/story-library-manifest.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAA;AAEzF,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAA;AAEnE,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,WAAW,GAAG,OAAO,CAAA;AAEtD,kEAAkE;AAClE,MAAM,WAAW,kBAAkB;IACjC,iDAAiD;IACjD,IAAI,EAAE,MAAM,CAAA;IACZ,iCAAiC;IACjC,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,SAAS,CAAA;IACf,yCAAyC;IACzC,YAAY,EAAE,MAAM,CAAA;IACpB,yDAAyD;IACzD,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,6EAA6E;IAC7E,kBAAkB,EAAE,wBAAwB,EAAE,CAAA;IAC9C,6CAA6C;IAC7C,KAAK,EAAE,MAAM,CAAA;CACd;AAED,uEAAuE;AACvE,MAAM,WAAW,sBAAsB;IACrC,8EAA8E;IAC9E,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,MAAM,GAAG,WAAW,CAAA;CAC5B;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,eAAe,CAAA;IACrB,6EAA6E;IAC7E,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,OAAO,EAAE,kBAAkB,EAAE,CAAA;IAC7B,WAAW,EAAE,uBAAuB,EAAE,CAAA;CACvC;AAED,MAAM,WAAW,0BAA0B;IACzC,iEAAiE;IACjE,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,8EAA8E;IAC9E,GAAG,CAAC,EAAE,MAAM,IAAI,CAAA;CACjB;AAgCD;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,aAAa,CAAC,MAAM,GAAG,sBAAsB,CAAC,EACtD,OAAO,GAAE,0BAA+B,GACvC,oBAAoB,CA6DtB;AAED,sEAAsE;AACtE,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,oBAAoB,GAC7B,GAAG,CAAC,MAAM,EAAE,kBAAkB,EAAE,CAAC,CASnC;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,SAAS,oBAAoB,EAAE,EACzC,OAAO,EAAE,oBAAoB,GAC5B,oBAAoB,EAAE,CAQxB"}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The story library catalog — the published Twine/interactive-book zone
|
|
3
|
+
* (`/home/mia/Documents/Twine/Stories`), read the same way the chronicle catalog
|
|
4
|
+
* reads episode folders (jgwill/Miadi#506 book cycle).
|
|
5
|
+
*
|
|
6
|
+
* Filesystem-free, like the rest of this package: it observes an already-collected
|
|
7
|
+
* directory snapshot (story file/dir names) and assembles the manifest. The
|
|
8
|
+
* enumerator that walks the stories root on disk lives in `@miadi/inquiry-weave`
|
|
9
|
+
* (`story-library.ts`), mirroring `buildChronicleCatalog`; this module only shapes
|
|
10
|
+
* and validates what it is handed so the app and forgewright never fork the
|
|
11
|
+
* read-side.
|
|
12
|
+
*
|
|
13
|
+
* A story maps to an episode by the episode number parsed from its name
|
|
14
|
+
* (`Episode_040___…`, `Episode-044-…`). Stories with no parseable episode number
|
|
15
|
+
* (a pilot title like `The_Room_Lent_It_Ears.html`, or `dummy1.html`) are still
|
|
16
|
+
* catalogued — the library tolerates non-episode stories.
|
|
17
|
+
*/
|
|
18
|
+
import { extractEpisodeNumber } from "./adapters/common.js";
|
|
19
|
+
const HTML_PATTERN = /\.html?$/i;
|
|
20
|
+
function stripExtension(name) {
|
|
21
|
+
return name.replace(/\.[^.]+$/, "");
|
|
22
|
+
}
|
|
23
|
+
function storyTitle(name) {
|
|
24
|
+
return stripExtension(name)
|
|
25
|
+
.replace(/[-_]+/g, " ")
|
|
26
|
+
.replace(/\s+/g, " ")
|
|
27
|
+
.trim();
|
|
28
|
+
}
|
|
29
|
+
function observeStoryIdentity(name, relativePath) {
|
|
30
|
+
const candidates = [];
|
|
31
|
+
const slug = stripExtension(name);
|
|
32
|
+
if (slug.length > 0)
|
|
33
|
+
candidates.push({ kind: "slug", value: slug });
|
|
34
|
+
const parsed = extractEpisodeNumber(name);
|
|
35
|
+
const episodeNumber = parsed === undefined ? undefined : Number(parsed);
|
|
36
|
+
if (episodeNumber !== undefined) {
|
|
37
|
+
candidates.push({ kind: "episode-number", value: String(episodeNumber) });
|
|
38
|
+
}
|
|
39
|
+
candidates.push({ kind: "path", value: relativePath });
|
|
40
|
+
return { episodeNumber, candidates };
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Assemble a StoryLibraryManifest from collected story names.
|
|
44
|
+
*
|
|
45
|
+
* Non-destructive and deterministic: entries are sorted by name; a non-episode
|
|
46
|
+
* story is kept with `episodeNumber` undefined; an empty library is reported as
|
|
47
|
+
* an `info` diagnostic rather than an error.
|
|
48
|
+
*/
|
|
49
|
+
export function observeStoryLibrary(inputs, options = {}) {
|
|
50
|
+
const root = options.root ?? "twine-stories";
|
|
51
|
+
const diagnostics = [];
|
|
52
|
+
const seen = new Set();
|
|
53
|
+
const stories = [];
|
|
54
|
+
for (const raw of inputs) {
|
|
55
|
+
const input = typeof raw === "string" ? { name: raw } : raw;
|
|
56
|
+
const name = input?.name;
|
|
57
|
+
if (typeof name !== "string" || name.length === 0) {
|
|
58
|
+
diagnostics.push({
|
|
59
|
+
level: "warning",
|
|
60
|
+
code: "story-library.invalid-entry",
|
|
61
|
+
message: "Story entries must be a name string or an object carrying a name.",
|
|
62
|
+
});
|
|
63
|
+
continue;
|
|
64
|
+
}
|
|
65
|
+
if (seen.has(name)) {
|
|
66
|
+
diagnostics.push({
|
|
67
|
+
level: "warning",
|
|
68
|
+
code: "story-library.duplicate-entry",
|
|
69
|
+
message: "Duplicate story entries are observed only once.",
|
|
70
|
+
path: name,
|
|
71
|
+
});
|
|
72
|
+
continue;
|
|
73
|
+
}
|
|
74
|
+
seen.add(name);
|
|
75
|
+
const kind = input.type === "directory" ? "directory" : HTML_PATTERN.test(name) ? "html" : "other";
|
|
76
|
+
const { episodeNumber, candidates } = observeStoryIdentity(name, name);
|
|
77
|
+
stories.push({
|
|
78
|
+
name,
|
|
79
|
+
storyId: `story:${name}`,
|
|
80
|
+
kind,
|
|
81
|
+
relativePath: name,
|
|
82
|
+
episodeNumber,
|
|
83
|
+
identityCandidates: candidates,
|
|
84
|
+
title: storyTitle(name),
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
stories.sort((left, right) => (left.name < right.name ? -1 : left.name > right.name ? 1 : 0));
|
|
88
|
+
if (stories.length === 0) {
|
|
89
|
+
diagnostics.push({
|
|
90
|
+
level: "info",
|
|
91
|
+
code: "story-library.empty",
|
|
92
|
+
message: "No stories were present in the library snapshot.",
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
const manifest = {
|
|
96
|
+
zone: "story-library",
|
|
97
|
+
root,
|
|
98
|
+
stories,
|
|
99
|
+
diagnostics,
|
|
100
|
+
};
|
|
101
|
+
if (options.now)
|
|
102
|
+
manifest.generatedAt = options.now().toISOString();
|
|
103
|
+
return manifest;
|
|
104
|
+
}
|
|
105
|
+
/** Index the library's stories by the episode number they declare. */
|
|
106
|
+
export function indexStoriesByEpisode(manifest) {
|
|
107
|
+
const byEpisode = new Map();
|
|
108
|
+
for (const story of manifest.stories) {
|
|
109
|
+
if (story.episodeNumber === undefined)
|
|
110
|
+
continue;
|
|
111
|
+
const bucket = byEpisode.get(story.episodeNumber) ?? [];
|
|
112
|
+
bucket.push(story);
|
|
113
|
+
byEpisode.set(story.episodeNumber, bucket);
|
|
114
|
+
}
|
|
115
|
+
return byEpisode;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Non-destructively attach each episode's book form(s) to its chronicle entry.
|
|
119
|
+
*
|
|
120
|
+
* Returns a shallow-copied entry list where any episode whose number matches a
|
|
121
|
+
* published story gains a `stories` array — the seam the `/chronicle` surface
|
|
122
|
+
* uses to link an episode to its interactive-book form. Episodes without a
|
|
123
|
+
* published story are returned unchanged (no `stories` field).
|
|
124
|
+
*/
|
|
125
|
+
export function linkStoryForms(episodes, library) {
|
|
126
|
+
const byEpisode = indexStoriesByEpisode(library);
|
|
127
|
+
return episodes.map((episode) => {
|
|
128
|
+
if (episode.number === undefined)
|
|
129
|
+
return episode;
|
|
130
|
+
const matched = byEpisode.get(episode.number);
|
|
131
|
+
if (!matched || matched.length === 0)
|
|
132
|
+
return episode;
|
|
133
|
+
return { ...episode, stories: matched };
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
//# sourceMappingURL=story-library-manifest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"story-library-manifest.js","sourceRoot":"","sources":["../src/story-library-manifest.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@miadi/episodic-memory-schema",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.1",
|
|
4
4
|
"description": "TypeScript types and JSON Schema for episodic memory — the durable session-to-session memory layer in the Miadi orchestration kit. Narrative layer is NCP-aligned; provenance layer is W3C PROV-DM and OAIS-informed.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"miadi",
|