@miadi/chronicle-tui 0.3.0 → 0.4.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/model.js CHANGED
@@ -5,17 +5,19 @@
5
5
  */
6
6
  import stringWidth from "string-width";
7
7
  import { findTextReferences, readEpisode } from "@miadi/inquiry-weave";
8
- export function toRow(entry) {
8
+ import { clean, cleanLine } from "./text.js";
9
+ export function toRow(entry, audience = "public") {
9
10
  return {
10
11
  name: entry.name,
11
12
  number: entry.number,
12
13
  date: entry.date,
13
- title: entry.title ?? entry.slug ?? entry.name,
14
- slug: entry.slug,
15
- type: entry.type,
16
- status: entry.status,
14
+ title: cleanLine(entry.title ?? entry.slug ?? entry.name),
15
+ slug: entry.slug === undefined ? undefined : cleanLine(entry.slug),
16
+ type: entry.type === undefined ? undefined : cleanLine(entry.type),
17
+ status: entry.status === undefined ? undefined : cleanLine(entry.status),
17
18
  structured: Boolean(entry.structured),
18
19
  readings: readEpisode(entry),
20
+ audience,
19
21
  };
20
22
  }
21
23
  /** Newest first; folders without a number last, by name. */
@@ -99,8 +101,14 @@ export function clamp(value, count) {
99
101
  const shortId = (id) => (id.length > 22 ? `${id.slice(0, 20)}…` : id);
100
102
  /** The words a chip shows: the author's label, or what the reference names. */
101
103
  export function chipText(ref) {
104
+ return cleanLine(rawChipText(ref));
105
+ }
106
+ function rawChipText(ref) {
102
107
  if (ref.kind === "chronicle")
103
108
  return `↗ ${ref.label ?? ref.uri.replace(/^miadi-chronicle:(\/\/)?/i, "ep ")}`;
109
+ // A foundation packet (SPEC §10): the slug, and the file when one is named.
110
+ if (ref.kind === "foundation")
111
+ return `◇ ${ref.label ?? ref.uri.replace(/^miadi-foundation:(\/\/)?/i, "").replace(/[?#].*$/, "")}`;
104
112
  // A circle's id already begins with `circle:`; the chip says it once.
105
113
  const id = ref.uri.replace(/^miadi-(ceremony|circle):/i, "").replace(/^(ceremony|circle):/i, "");
106
114
  const mark = ref.kind === "ceremony" ? "◆" : "○";
@@ -114,27 +122,34 @@ function lineSegments(line, refs, lineStart, style) {
114
122
  return;
115
123
  const from = ref.start - lineStart;
116
124
  if (from > at)
117
- segments.push({ text: line.slice(at, from), style });
125
+ segments.push({ text: clean(line.slice(at, from)), style });
118
126
  segments.push({ text: chipText(ref), style: "ref", ref: index });
119
127
  at = ref.end - lineStart;
120
128
  });
121
129
  if (at < line.length || segments.length === 0)
122
- segments.push({ text: line.slice(at), style });
130
+ segments.push({ text: clean(line.slice(at)), style });
123
131
  return segments;
124
132
  }
125
- /** Cut segments into screen lines no wider than `width` columns, breaking at spaces where it can. */
133
+ const graphemeSegmenter = new Intl.Segmenter(undefined, { granularity: "grapheme" });
134
+ /**
135
+ * Cut segments into screen lines no wider than `width` columns, breaking at
136
+ * spaces where it can. Each word is measured once and a word longer than a
137
+ * line is cut by grapheme, so the cost is linear in the text and an emoji or
138
+ * a combining mark is never split (0.3.0 measured the whole remaining line for
139
+ * every piece: 13 s for one 500 KB line).
140
+ */
126
141
  export function wrapSegments(segments, width) {
127
142
  const limit = Math.max(8, width);
128
143
  const lines = [[]];
129
144
  let used = 0;
130
- const push = (segment) => {
145
+ const append = (text, segment, w) => {
131
146
  const last = lines[lines.length - 1];
132
147
  const prev = last[last.length - 1];
133
148
  if (prev && prev.style === segment.style && prev.ref === segment.ref)
134
- prev.text += segment.text;
149
+ prev.text += text;
135
150
  else
136
- last.push({ ...segment });
137
- used += stringWidth(segment.text);
151
+ last.push({ ...segment, text });
152
+ used += w;
138
153
  };
139
154
  const newline = () => {
140
155
  lines.push([]);
@@ -143,33 +158,28 @@ export function wrapSegments(segments, width) {
143
158
  for (const segment of segments) {
144
159
  if (segment.style === "ref") {
145
160
  // A chip is never split.
146
- if (used > 0 && used + stringWidth(segment.text) > limit)
161
+ const w = stringWidth(segment.text);
162
+ if (used > 0 && used + w > limit)
147
163
  newline();
148
- push(segment);
164
+ append(segment.text, segment, w);
149
165
  continue;
150
166
  }
151
167
  for (const word of segment.text.split(/(?<= )/)) {
152
- let rest = word;
153
- while (rest) {
154
- const room = limit - used;
155
- const w = stringWidth(rest);
156
- if (w <= room) {
157
- push({ ...segment, text: rest });
158
- rest = "";
159
- }
160
- else if (used > 0 && w <= limit) {
168
+ const w = stringWidth(word);
169
+ if (used + w <= limit) {
170
+ append(word, segment, w);
171
+ continue;
172
+ }
173
+ if (w <= limit) {
174
+ newline();
175
+ append(word, segment, w);
176
+ continue;
177
+ }
178
+ for (const { segment: grapheme } of graphemeSegmenter.segment(word)) {
179
+ const gw = stringWidth(grapheme);
180
+ if (used > 0 && used + gw > limit)
161
181
  newline();
162
- }
163
- else {
164
- // A word longer than a whole line is cut where the line ends.
165
- let cut = 0;
166
- while (cut < rest.length && stringWidth(rest.slice(0, cut + 1)) <= room)
167
- cut++;
168
- push({ ...segment, text: rest.slice(0, Math.max(1, cut)) });
169
- rest = rest.slice(Math.max(1, cut));
170
- if (rest)
171
- newline();
172
- }
182
+ append(grapheme, segment, gw);
173
183
  }
174
184
  }
175
185
  }
@@ -188,7 +198,9 @@ export function fileView(content, width) {
188
198
  if (fenceLine)
189
199
  fence = !fence;
190
200
  for (const segments of wrapSegments(lineSegments(line, refs, offset, style), width)) {
191
- lines.push({ segments, source: index + 1 });
201
+ // An empty line still takes a row, or paragraphs run together.
202
+ const empty = segments.every((segment) => segment.text.length === 0);
203
+ lines.push({ segments: empty ? [{ text: " ", style }] : segments, source: index + 1 });
192
204
  }
193
205
  offset += raw.length + 1;
194
206
  });
package/dist/model.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"model.js","sourceRoot":"","sources":["../src/model.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"model.js","sourceRoot":"","sources":["../src/model.ts"],"names":[],"mappings":"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"}
package/dist/text.d.ts ADDED
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Everything the browser prints passes through here first.
3
+ *
4
+ * Chronicle files, titles, file names, attention questions, ceremony
5
+ * intentions and server messages are written by many agents and people, so
6
+ * none of it is trusted to reach a terminal as it is: an escape sequence in a
7
+ * file planted its own hyperlink, hid text, or rewrote a line in 0.3.0
8
+ * (jgwill/Miadi#706 security review, F2). This module removes terminal control
9
+ * sequences and controls, expands tabs (a terminal moves to the next stop, a
10
+ * width measure counts nothing), and decides which URLs may become links.
11
+ */
12
+ export declare const TAB_WIDTH = 4;
13
+ /** Text as a terminal may print it: no control sequence, no control, no bidi override, tabs expanded. */
14
+ export declare function clean(text: string, tabWidth?: number): string;
15
+ /** One line of text for a single-line slot: newlines become spaces. */
16
+ export declare function cleanLine(text: string): string;
17
+ /** Tabs to spaces, up to the next stop, line by line. */
18
+ export declare function expandTabs(text: string, tabWidth?: number): string;
19
+ /** A URL that may be printed as a link and handed to an opener: http(s) or file, no control, no space. */
20
+ export declare function isSafeUrl(url: string): boolean;
21
+ /** A clickable link where the URL is safe; otherwise the clean label alone. */
22
+ export declare function link(url: string, label?: string): string;
23
+ //# sourceMappingURL=text.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text.d.ts","sourceRoot":"","sources":["../src/text.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,eAAO,MAAM,SAAS,IAAI,CAAA;AAS1B,yGAAyG;AACzG,wBAAgB,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,SAAY,GAAG,MAAM,CAGhE;AAED,uEAAuE;AACvE,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE9C;AAED,yDAAyD;AACzD,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,SAAY,GAAG,MAAM,CAarE;AAED,0GAA0G;AAC1G,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAG9C;AAED,+EAA+E;AAC/E,wBAAgB,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,GAAE,MAAY,GAAG,MAAM,CAG7D"}
package/dist/text.js ADDED
@@ -0,0 +1,57 @@
1
+ /**
2
+ * Everything the browser prints passes through here first.
3
+ *
4
+ * Chronicle files, titles, file names, attention questions, ceremony
5
+ * intentions and server messages are written by many agents and people, so
6
+ * none of it is trusted to reach a terminal as it is: an escape sequence in a
7
+ * file planted its own hyperlink, hid text, or rewrote a line in 0.3.0
8
+ * (jgwill/Miadi#706 security review, F2). This module removes terminal control
9
+ * sequences and controls, expands tabs (a terminal moves to the next stop, a
10
+ * width measure counts nothing), and decides which URLs may become links.
11
+ */
12
+ import { osc8 } from "@miadi/inquiry-weave";
13
+ export const TAB_WIDTH = 4;
14
+ // ESC sequences: CSI (incl. SGR), OSC (to BEL or ST), DCS/SOS/PM/APC (to ST), and two-byte ESC forms.
15
+ const ESCAPE_SEQUENCE = /\u001b\[[0-?]*[ -/]*[@-~]|\u001b\][\s\S]*?(?:\u0007|\u001b\\|$)|\u001b[PX^_][\s\S]*?(?:\u001b\\|$)|\u001b[ -/]*[0-~]/g;
16
+ // What is left: C0 except tab and newline, DEL, C1 (incl. 8-bit CSI/OSC), and bidi overrides and isolates.
17
+ const CONTROL = /[\u0000-\u0008\u000b-\u001f\u007f-\u009f]/g;
18
+ const BIDI = /[‪-‮⁦-⁩]/g;
19
+ /** Text as a terminal may print it: no control sequence, no control, no bidi override, tabs expanded. */
20
+ export function clean(text, tabWidth = TAB_WIDTH) {
21
+ const stripped = text.replace(ESCAPE_SEQUENCE, "").replace(/\r/g, "").replace(BIDI, "");
22
+ return expandTabs(stripped, tabWidth).replace(CONTROL, "�");
23
+ }
24
+ /** One line of text for a single-line slot: newlines become spaces. */
25
+ export function cleanLine(text) {
26
+ return clean(text).replace(/\n+/g, " ");
27
+ }
28
+ /** Tabs to spaces, up to the next stop, line by line. */
29
+ export function expandTabs(text, tabWidth = TAB_WIDTH) {
30
+ if (!text.includes("\t"))
31
+ return text;
32
+ return text
33
+ .split("\n")
34
+ .map((line) => {
35
+ let out = "";
36
+ for (const char of line) {
37
+ if (char === "\t")
38
+ out += " ".repeat(tabWidth - (out.length % tabWidth));
39
+ else
40
+ out += char;
41
+ }
42
+ return out;
43
+ })
44
+ .join("\n");
45
+ }
46
+ /** A URL that may be printed as a link and handed to an opener: http(s) or file, no control, no space. */
47
+ export function isSafeUrl(url) {
48
+ if (/[\u0000- \u007f-\u009f]/.test(url))
49
+ return false;
50
+ return /^(https?|file):\/\//i.test(url);
51
+ }
52
+ /** A clickable link where the URL is safe; otherwise the clean label alone. */
53
+ export function link(url, label = url) {
54
+ const shown = cleanLine(label);
55
+ return isSafeUrl(url) ? osc8(url, shown) : shown;
56
+ }
57
+ //# sourceMappingURL=text.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text.js","sourceRoot":"","sources":["../src/text.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAA;AAE3C,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,CAAA;AAE1B,sGAAsG;AACtG,MAAM,eAAe,GACnB,uHAAuH,CAAA;AACzH,2GAA2G;AAC3G,MAAM,OAAO,GAAG,4CAA4C,CAAA;AAC5D,MAAM,IAAI,GAAG,WAAW,CAAA;AAExB,yGAAyG;AACzG,MAAM,UAAU,KAAK,CAAC,IAAY,EAAE,QAAQ,GAAG,SAAS;IACtD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;IACvF,OAAO,UAAU,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAA;AAC7D,CAAC;AAED,uEAAuE;AACvE,MAAM,UAAU,SAAS,CAAC,IAAY;IACpC,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;AACzC,CAAC;AAED,yDAAyD;AACzD,MAAM,UAAU,UAAU,CAAC,IAAY,EAAE,QAAQ,GAAG,SAAS;IAC3D,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAA;IACrC,OAAO,IAAI;SACR,KAAK,CAAC,IAAI,CAAC;SACX,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACZ,IAAI,GAAG,GAAG,EAAE,CAAA;QACZ,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE,CAAC;YACxB,IAAI,IAAI,KAAK,IAAI;gBAAE,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAA;;gBACnE,GAAG,IAAI,IAAI,CAAA;QAClB,CAAC;QACD,OAAO,GAAG,CAAA;IACZ,CAAC,CAAC;SACD,IAAI,CAAC,IAAI,CAAC,CAAA;AACf,CAAC;AAED,0GAA0G;AAC1G,MAAM,UAAU,SAAS,CAAC,GAAW;IACnC,IAAI,yBAAyB,CAAC,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO,KAAK,CAAA;IACrD,OAAO,sBAAsB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AACzC,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,IAAI,CAAC,GAAW,EAAE,QAAgB,GAAG;IACnD,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,CAAA;IAC9B,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAA;AAClD,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@miadi/chronicle-tui",
3
- "version": "0.3.0",
3
+ "version": "0.4.1",
4
4
  "description": "Browse the Miadi Chronicle from a terminal: list and filter every episode, search their text, read a vessel's files with their chronicle, ceremony and circle references as chips, and open the room, the wheel or the vessel as clickable links or a QR code. Every operation is an action in one registry, so writes join the same list later.",
5
5
  "license": "MIT",
6
6
  "publishConfig": {
@@ -45,9 +45,10 @@
45
45
  "url": "https://github.com/jgwill/Miadi/issues"
46
46
  },
47
47
  "dependencies": {
48
- "@miadi/episode-vessel": "0.2.0",
49
- "@miadi/episodic-memory-schema": "0.11.1",
50
- "@miadi/inquiry-weave": "0.15.0",
48
+ "@miadi/attention-core": "0.1.1",
49
+ "@miadi/episode-vessel": "0.2.1",
50
+ "@miadi/episodic-memory-schema": "0.12.0",
51
+ "@miadi/inquiry-weave": "0.16.0",
51
52
  "ink": "^7.1.1",
52
53
  "react": "^19.3.0",
53
54
  "string-width": "^8.3.0",