@miadi/inquiry-weave 0.16.5 → 0.16.6

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/README.md CHANGED
@@ -268,6 +268,25 @@ the next authoring. `MIADI_EPISODE_DOOR=http` sends the MCP's episode tools
268
268
  through the app at `MIADI_INQUIRY_API_BASE` even on a host that holds the
269
269
  chronicle.
270
270
 
271
+ To read an episode's lineage for a page:
272
+
273
+ ```ts
274
+ import { readEpisodeLineage, resolveLineage } from "@miadi/inquiry-weave"
275
+
276
+ const edges = await readEpisodeLineage(chronicleRoot, "2026-10-10-episode-551-learning-between-sessions")
277
+ // [{ kind: "related-to", label: "relates to", targetValue: "351", text, targetName, targetTitle }]
278
+
279
+ // Or, over a catalog already built:
280
+ const same = resolveLineage(entry, catalog.episodes)
281
+ ```
282
+
283
+ `readEpisodeLineage` reads the folder names, the one manifest asked for, and the
284
+ manifests its edges resolve to. It never builds the whole catalog, and it returns
285
+ what `resolveLineage` returns over that catalog. A path carried with an edge names
286
+ its folder. Otherwise a number or slug resolves only when one folder holds it. When
287
+ several do, the edge keeps its raw `targetValue` and lists them in `candidates`.
288
+ `RELATION_LABELS` holds the words for each kind.
289
+
271
290
  ## Inquiry issues over MCP
272
291
 
273
292
  `inquiry_list_issues` and `inquiry_get_issue` read the GitHub issues inquiries are
package/dist/index.d.ts CHANGED
@@ -9,6 +9,7 @@ export * from "./issue.js";
9
9
  export * from "./issue-content.js";
10
10
  export * from "./relate.js";
11
11
  export * from "./lineage.js";
12
+ export * from "./lineage-view.js";
12
13
  export * from "./status.js";
13
14
  export * from "./artefact-issue.js";
14
15
  export * from "./register.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAA;AACxB,cAAc,YAAY,CAAA;AAC1B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,eAAe,CAAA;AAC7B,cAAc,cAAc,CAAA;AAC5B,cAAc,WAAW,CAAA;AACzB,cAAc,WAAW,CAAA;AACzB,cAAc,YAAY,CAAA;AAC1B,cAAc,oBAAoB,CAAA;AAClC,cAAc,aAAa,CAAA;AAC3B,cAAc,cAAc,CAAA;AAC5B,cAAc,aAAa,CAAA;AAC3B,cAAc,qBAAqB,CAAA;AACnC,cAAc,eAAe,CAAA;AAC7B,cAAc,mBAAmB,CAAA;AACjC,cAAc,qBAAqB,CAAA;AACnC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,eAAe,CAAA;AAC7B,cAAc,cAAc,CAAA;AAC5B,cAAc,eAAe,CAAA;AAC7B,cAAc,sBAAsB,CAAA;AACpC,cAAc,oBAAoB,CAAA;AAClC,cAAc,qBAAqB,CAAA;AACnC,cAAc,0BAA0B,CAAA;AACxC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,yBAAyB,CAAA;AACvC,cAAc,oBAAoB,CAAA;AAClC,cAAc,kBAAkB,CAAA;AAChC,cAAc,cAAc,CAAA;AAC5B,cAAc,WAAW,CAAA;AACzB,OAAO,EAAE,MAAM,EAAE,KAAK,aAAa,EAAE,KAAK,UAAU,EAAE,MAAM,UAAU,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAA;AACxB,cAAc,YAAY,CAAA;AAC1B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,eAAe,CAAA;AAC7B,cAAc,cAAc,CAAA;AAC5B,cAAc,WAAW,CAAA;AACzB,cAAc,WAAW,CAAA;AACzB,cAAc,YAAY,CAAA;AAC1B,cAAc,oBAAoB,CAAA;AAClC,cAAc,aAAa,CAAA;AAC3B,cAAc,cAAc,CAAA;AAC5B,cAAc,mBAAmB,CAAA;AACjC,cAAc,aAAa,CAAA;AAC3B,cAAc,qBAAqB,CAAA;AACnC,cAAc,eAAe,CAAA;AAC7B,cAAc,mBAAmB,CAAA;AACjC,cAAc,qBAAqB,CAAA;AACnC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,eAAe,CAAA;AAC7B,cAAc,cAAc,CAAA;AAC5B,cAAc,eAAe,CAAA;AAC7B,cAAc,sBAAsB,CAAA;AACpC,cAAc,oBAAoB,CAAA;AAClC,cAAc,qBAAqB,CAAA;AACnC,cAAc,0BAA0B,CAAA;AACxC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,yBAAyB,CAAA;AACvC,cAAc,oBAAoB,CAAA;AAClC,cAAc,kBAAkB,CAAA;AAChC,cAAc,cAAc,CAAA;AAC5B,cAAc,WAAW,CAAA;AACzB,OAAO,EAAE,MAAM,EAAE,KAAK,aAAa,EAAE,KAAK,UAAU,EAAE,MAAM,UAAU,CAAA"}
package/dist/index.js CHANGED
@@ -9,6 +9,7 @@ export * from "./issue.js";
9
9
  export * from "./issue-content.js";
10
10
  export * from "./relate.js";
11
11
  export * from "./lineage.js";
12
+ export * from "./lineage-view.js";
12
13
  export * from "./status.js";
13
14
  export * from "./artefact-issue.js";
14
15
  export * from "./register.js";
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAA;AACxB,cAAc,YAAY,CAAA;AAC1B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,eAAe,CAAA;AAC7B,cAAc,cAAc,CAAA;AAC5B,cAAc,WAAW,CAAA;AACzB,cAAc,WAAW,CAAA;AACzB,cAAc,YAAY,CAAA;AAC1B,cAAc,oBAAoB,CAAA;AAClC,cAAc,aAAa,CAAA;AAC3B,cAAc,cAAc,CAAA;AAC5B,cAAc,aAAa,CAAA;AAC3B,cAAc,qBAAqB,CAAA;AACnC,cAAc,eAAe,CAAA;AAC7B,cAAc,mBAAmB,CAAA;AACjC,cAAc,qBAAqB,CAAA;AACnC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,eAAe,CAAA;AAC7B,cAAc,cAAc,CAAA;AAC5B,cAAc,eAAe,CAAA;AAC7B,cAAc,sBAAsB,CAAA;AACpC,cAAc,oBAAoB,CAAA;AAClC,cAAc,qBAAqB,CAAA;AACnC,cAAc,0BAA0B,CAAA;AACxC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,yBAAyB,CAAA;AACvC,cAAc,oBAAoB,CAAA;AAClC,cAAc,kBAAkB,CAAA;AAChC,cAAc,cAAc,CAAA;AAC5B,cAAc,WAAW,CAAA;AACzB,OAAO,EAAE,MAAM,EAAuC,MAAM,UAAU,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAA;AACxB,cAAc,YAAY,CAAA;AAC1B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,eAAe,CAAA;AAC7B,cAAc,cAAc,CAAA;AAC5B,cAAc,WAAW,CAAA;AACzB,cAAc,WAAW,CAAA;AACzB,cAAc,YAAY,CAAA;AAC1B,cAAc,oBAAoB,CAAA;AAClC,cAAc,aAAa,CAAA;AAC3B,cAAc,cAAc,CAAA;AAC5B,cAAc,mBAAmB,CAAA;AACjC,cAAc,aAAa,CAAA;AAC3B,cAAc,qBAAqB,CAAA;AACnC,cAAc,eAAe,CAAA;AAC7B,cAAc,mBAAmB,CAAA;AACjC,cAAc,qBAAqB,CAAA;AACnC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,eAAe,CAAA;AAC7B,cAAc,cAAc,CAAA;AAC5B,cAAc,eAAe,CAAA;AAC7B,cAAc,sBAAsB,CAAA;AACpC,cAAc,oBAAoB,CAAA;AAClC,cAAc,qBAAqB,CAAA;AACnC,cAAc,0BAA0B,CAAA;AACxC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,yBAAyB,CAAA;AACvC,cAAc,oBAAoB,CAAA;AAClC,cAAc,kBAAkB,CAAA;AAChC,cAAc,cAAc,CAAA;AAC5B,cAAc,WAAW,CAAA;AACzB,OAAO,EAAE,MAAM,EAAuC,MAAM,UAAU,CAAA"}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Lineage as a reader sees it: each relation an episode declares, pointed at
3
+ * the folder it names when the chronicle answers with exactly one.
4
+ *
5
+ * `resolveLineage` works over a catalog the caller already holds.
6
+ * `readEpisodeLineage` answers the same question for one episode without
7
+ * building the catalog: it lists the root's folder names, reads the one
8
+ * manifest whose edges are asked for, and reads only the manifests its edges
9
+ * resolve to, for their titles. Over a whole chronicle the two agree.
10
+ *
11
+ * A number or a slug that two folders claim resolves to neither. The chronicle
12
+ * holds such collisions, and the folder name is the key
13
+ * (`chronicle.episode-number-collision`), so an arbitrary pick would send the
14
+ * reader to the wrong episode. The edge keeps its raw value and lists the
15
+ * claimants in `candidates`, so a surface can offer the choice. A path carried
16
+ * with the relation names one folder and settles the edge.
17
+ */
18
+ import { type EpisodeManifestEntry } from "@miadi/episodic-memory-schema";
19
+ import type { CatalogFs } from "./catalog.js";
20
+ /** How a relation kind reads in a sentence: "E352 continues from E351". */
21
+ export declare const RELATION_LABELS: Readonly<Record<string, string>>;
22
+ /** One lineage edge, ready to render. */
23
+ export interface LineageEdgeView {
24
+ /** The relation kind as the manifest observation names it, e.g. `continues-from`. */
25
+ kind: string;
26
+ /** The kind as words, e.g. "continues from". */
27
+ label: string;
28
+ /** The raw target: an episode number, a slug, a title or a path. */
29
+ targetValue: string;
30
+ /** The folder the edge points at, when exactly one answers. */
31
+ targetName?: string;
32
+ /** That folder's title, or its slug when its manifest names none. */
33
+ targetTitle?: string;
34
+ /** Why the two are related, as `episode.yaml` records it (`relation:`). */
35
+ text?: string;
36
+ /** The folders that claim the target when more than one does, by name. */
37
+ candidates?: string[];
38
+ }
39
+ /** What resolution needs to know of each episode in the chronicle. */
40
+ export type LineageCandidate = Pick<EpisodeManifestEntry, "name" | "number" | "slug" | "title">;
41
+ /**
42
+ * One episode's lineage edges, each pointed at the folder it names when
43
+ * exactly one in `episodes` answers.
44
+ */
45
+ export declare function resolveLineage(entry: Pick<EpisodeManifestEntry, "relations">, episodes: readonly LineageCandidate[]): LineageEdgeView[];
46
+ export interface ReadEpisodeLineageOptions {
47
+ fs?: CatalogFs;
48
+ }
49
+ /**
50
+ * One episode's lineage, resolved against the chronicle, without building the
51
+ * catalog. Equal to `resolveLineage(entry, catalog.episodes)` for the entry
52
+ * `buildChronicleCatalog` would produce. An episode the root does not hold has
53
+ * no edges.
54
+ */
55
+ export declare function readEpisodeLineage(chronicleRoot: string, episode: string, options?: ReadEpisodeLineageOptions): Promise<LineageEdgeView[]>;
56
+ //# sourceMappingURL=lineage-view.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lineage-view.d.ts","sourceRoot":"","sources":["../src/lineage-view.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAKH,OAAO,EAA8B,KAAK,oBAAoB,EAAE,MAAM,+BAA+B,CAAA;AACrG,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAG7C,2EAA2E;AAC3E,eAAO,MAAM,eAAe,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAI5D,CAAA;AAED,yCAAyC;AACzC,MAAM,WAAW,eAAe;IAC9B,qFAAqF;IACrF,IAAI,EAAE,MAAM,CAAA;IACZ,gDAAgD;IAChD,KAAK,EAAE,MAAM,CAAA;IACb,oEAAoE;IACpE,WAAW,EAAE,MAAM,CAAA;IACnB,+DAA+D;IAC/D,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,qEAAqE;IACrE,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,2EAA2E;IAC3E,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,0EAA0E;IAC1E,UAAU,CAAC,EAAE,MAAM,EAAE,CAAA;CACtB;AAED,sEAAsE;AACtE,MAAM,MAAM,gBAAgB,GAAG,IAAI,CAAC,oBAAoB,EAAE,MAAM,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC,CAAA;AA8D/F;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,IAAI,CAAC,oBAAoB,EAAE,WAAW,CAAC,EAC9C,QAAQ,EAAE,SAAS,gBAAgB,EAAE,GACpC,eAAe,EAAE,CAGnB;AAOD,MAAM,WAAW,yBAAyB;IACxC,EAAE,CAAC,EAAE,SAAS,CAAA;CACf;AAcD;;;;;GAKG;AACH,wBAAsB,kBAAkB,CACtC,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,yBAA8B,GACtC,OAAO,CAAC,eAAe,EAAE,CAAC,CAuB5B"}
@@ -0,0 +1,141 @@
1
+ /**
2
+ * Lineage as a reader sees it: each relation an episode declares, pointed at
3
+ * the folder it names when the chronicle answers with exactly one.
4
+ *
5
+ * `resolveLineage` works over a catalog the caller already holds.
6
+ * `readEpisodeLineage` answers the same question for one episode without
7
+ * building the catalog: it lists the root's folder names, reads the one
8
+ * manifest whose edges are asked for, and reads only the manifests its edges
9
+ * resolve to, for their titles. Over a whole chronicle the two agree.
10
+ *
11
+ * A number or a slug that two folders claim resolves to neither. The chronicle
12
+ * holds such collisions, and the folder name is the key
13
+ * (`chronicle.episode-number-collision`), so an arbitrary pick would send the
14
+ * reader to the wrong episode. The edge keeps its raw value and lists the
15
+ * claimants in `candidates`, so a surface can offer the choice. A path carried
16
+ * with the relation names one folder and settles the edge.
17
+ */
18
+ import { join } from "node:path";
19
+ import { readdir, readFile } from "node:fs/promises";
20
+ import { parse } from "yaml";
21
+ import { observeEpisodeYamlManifest } from "@miadi/episodic-memory-schema";
22
+ import { parseEpisodeName } from "./episode.js";
23
+ /** How a relation kind reads in a sentence: "E352 continues from E351". */
24
+ export const RELATION_LABELS = {
25
+ "continues-from": "continues from",
26
+ "branch-of": "branch of",
27
+ "related-to": "relates to",
28
+ };
29
+ /** Path hints are bare folders, absolute paths or `<folder>/episode.yaml`; the last segment naming a folder wins. */
30
+ function byPath(raw, byName) {
31
+ const segments = raw.split("/").filter(Boolean);
32
+ for (let i = segments.length - 1; i >= 0; i--) {
33
+ const hit = byName.get(segments[i]);
34
+ if (hit)
35
+ return hit;
36
+ }
37
+ return undefined;
38
+ }
39
+ const titleOf = (target) => target.title ?? target.slug;
40
+ function index(episodes) {
41
+ const byName = new Map();
42
+ const byNumber = new Map();
43
+ const bySlug = new Map();
44
+ for (const episode of episodes) {
45
+ byName.set(episode.name, episode);
46
+ if (episode.number !== undefined)
47
+ byNumber.set(episode.number, [...(byNumber.get(episode.number) ?? []), episode]);
48
+ if (episode.slug) {
49
+ const slug = episode.slug.toLowerCase();
50
+ bySlug.set(slug, [...(bySlug.get(slug) ?? []), episode]);
51
+ }
52
+ }
53
+ return { byName, byNumber, bySlug };
54
+ }
55
+ function resolveOne(relation, lookup) {
56
+ const view = {
57
+ kind: relation.kind,
58
+ label: RELATION_LABELS[relation.kind] ?? relation.kind.replace(/-/g, " "),
59
+ targetValue: relation.target.value,
60
+ };
61
+ const text = typeof relation.metadata?.relation === "string" ? relation.metadata.relation.trim() : "";
62
+ if (text)
63
+ view.text = text;
64
+ const hint = (typeof relation.metadata?.path === "string" ? relation.metadata.path : undefined) ??
65
+ (relation.target.kind === "path" ? relation.target.value : undefined);
66
+ const pathHit = hint ? byPath(hint, lookup.byName) : undefined;
67
+ const hits = pathHit
68
+ ? [pathHit]
69
+ : relation.target.kind === "episode-number"
70
+ ? lookup.byNumber.get(Number(relation.target.value)) ?? []
71
+ : relation.target.kind === "slug"
72
+ ? lookup.bySlug.get(relation.target.value.toLowerCase()) ?? []
73
+ : [];
74
+ if (hits.length === 1) {
75
+ view.targetName = hits[0].name;
76
+ const title = titleOf(hits[0]);
77
+ if (title !== undefined)
78
+ view.targetTitle = title;
79
+ }
80
+ else if (hits.length > 1) {
81
+ view.candidates = hits.map((hit) => hit.name).sort();
82
+ }
83
+ return view;
84
+ }
85
+ /**
86
+ * One episode's lineage edges, each pointed at the folder it names when
87
+ * exactly one in `episodes` answers.
88
+ */
89
+ export function resolveLineage(entry, episodes) {
90
+ const lookup = index(episodes);
91
+ return entry.relations.map((relation) => resolveOne(relation, lookup));
92
+ }
93
+ const nodeFs = {
94
+ readdir: (dir) => readdir(dir, { withFileTypes: true }),
95
+ readFile: (path) => readFile(path, "utf8"),
96
+ };
97
+ /** A manifest's observation, or undefined when it is missing or unreadable — as the catalog treats it. */
98
+ async function observe(fs, chronicleRoot, name) {
99
+ const relativePath = `${name}/episode.yaml`;
100
+ try {
101
+ return observeEpisodeYamlManifest(parse(await fs.readFile(join(chronicleRoot, name, "episode.yaml"))), {
102
+ relativePath,
103
+ });
104
+ }
105
+ catch {
106
+ return undefined;
107
+ }
108
+ }
109
+ /**
110
+ * One episode's lineage, resolved against the chronicle, without building the
111
+ * catalog. Equal to `resolveLineage(entry, catalog.episodes)` for the entry
112
+ * `buildChronicleCatalog` would produce. An episode the root does not hold has
113
+ * no edges.
114
+ */
115
+ export async function readEpisodeLineage(chronicleRoot, episode, options = {}) {
116
+ const fs = options.fs ?? nodeFs;
117
+ const shelf = [];
118
+ for (const entry of await fs.readdir(chronicleRoot)) {
119
+ if (!entry.isDirectory())
120
+ continue;
121
+ const parsed = parseEpisodeName(entry.name);
122
+ if (parsed.number === undefined)
123
+ continue;
124
+ shelf.push({ name: entry.name, number: parsed.number, slug: parsed.slug });
125
+ }
126
+ if (!shelf.some((candidate) => candidate.name === episode))
127
+ return [];
128
+ const observation = await observe(fs, chronicleRoot, episode);
129
+ const edges = resolveLineage({ relations: observation?.relations ?? [] }, shelf);
130
+ const titles = new Map();
131
+ for (const name of new Set(edges.flatMap((edge) => (edge.targetName ? [edge.targetName] : [])))) {
132
+ titles.set(name, (await observe(fs, chronicleRoot, name))?.sourceMetadata.title);
133
+ }
134
+ for (const edge of edges) {
135
+ const title = edge.targetName ? titles.get(edge.targetName) : undefined;
136
+ if (title !== undefined)
137
+ edge.targetTitle = title;
138
+ }
139
+ return edges;
140
+ }
141
+ //# sourceMappingURL=lineage-view.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lineage-view.js","sourceRoot":"","sources":["../src/lineage-view.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@miadi/inquiry-weave",
3
- "version": "0.16.5",
3
+ "version": "0.16.6",
4
4
  "description": "Relate and sync IAIP inquiry artefacts, their GitHub issues, and miadi-chronicle episodes. Creates vessels and relations only — never inquiry content.",
5
5
  "publishConfig": {
6
6
  "access": "public"