@miadi/chronicle-tui 0.3.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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,6 +101,9 @@ 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 ")}`;
104
109
  // A circle's id already begins with `circle:`; the chip says it once.
@@ -114,27 +119,34 @@ function lineSegments(line, refs, lineStart, style) {
114
119
  return;
115
120
  const from = ref.start - lineStart;
116
121
  if (from > at)
117
- segments.push({ text: line.slice(at, from), style });
122
+ segments.push({ text: clean(line.slice(at, from)), style });
118
123
  segments.push({ text: chipText(ref), style: "ref", ref: index });
119
124
  at = ref.end - lineStart;
120
125
  });
121
126
  if (at < line.length || segments.length === 0)
122
- segments.push({ text: line.slice(at), style });
127
+ segments.push({ text: clean(line.slice(at)), style });
123
128
  return segments;
124
129
  }
125
- /** Cut segments into screen lines no wider than `width` columns, breaking at spaces where it can. */
130
+ const graphemeSegmenter = new Intl.Segmenter(undefined, { granularity: "grapheme" });
131
+ /**
132
+ * Cut segments into screen lines no wider than `width` columns, breaking at
133
+ * spaces where it can. Each word is measured once and a word longer than a
134
+ * line is cut by grapheme, so the cost is linear in the text and an emoji or
135
+ * a combining mark is never split (0.3.0 measured the whole remaining line for
136
+ * every piece: 13 s for one 500 KB line).
137
+ */
126
138
  export function wrapSegments(segments, width) {
127
139
  const limit = Math.max(8, width);
128
140
  const lines = [[]];
129
141
  let used = 0;
130
- const push = (segment) => {
142
+ const append = (text, segment, w) => {
131
143
  const last = lines[lines.length - 1];
132
144
  const prev = last[last.length - 1];
133
145
  if (prev && prev.style === segment.style && prev.ref === segment.ref)
134
- prev.text += segment.text;
146
+ prev.text += text;
135
147
  else
136
- last.push({ ...segment });
137
- used += stringWidth(segment.text);
148
+ last.push({ ...segment, text });
149
+ used += w;
138
150
  };
139
151
  const newline = () => {
140
152
  lines.push([]);
@@ -143,33 +155,28 @@ export function wrapSegments(segments, width) {
143
155
  for (const segment of segments) {
144
156
  if (segment.style === "ref") {
145
157
  // A chip is never split.
146
- if (used > 0 && used + stringWidth(segment.text) > limit)
158
+ const w = stringWidth(segment.text);
159
+ if (used > 0 && used + w > limit)
147
160
  newline();
148
- push(segment);
161
+ append(segment.text, segment, w);
149
162
  continue;
150
163
  }
151
164
  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) {
165
+ const w = stringWidth(word);
166
+ if (used + w <= limit) {
167
+ append(word, segment, w);
168
+ continue;
169
+ }
170
+ if (w <= limit) {
171
+ newline();
172
+ append(word, segment, w);
173
+ continue;
174
+ }
175
+ for (const { segment: grapheme } of graphemeSegmenter.segment(word)) {
176
+ const gw = stringWidth(grapheme);
177
+ if (used > 0 && used + gw > limit)
161
178
  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
- }
179
+ append(grapheme, segment, gw);
173
180
  }
174
181
  }
175
182
  }
@@ -188,7 +195,9 @@ export function fileView(content, width) {
188
195
  if (fenceLine)
189
196
  fence = !fence;
190
197
  for (const segments of wrapSegments(lineSegments(line, refs, offset, style), width)) {
191
- lines.push({ segments, source: index + 1 });
198
+ // An empty line still takes a row, or paragraphs run together.
199
+ const empty = segments.every((segment) => segment.text.length === 0);
200
+ lines.push({ segments: empty ? [{ text: " ", style }] : segments, source: index + 1 });
192
201
  }
193
202
  offset += raw.length + 1;
194
203
  });
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.0",
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",
48
+ "@miadi/attention-core": "0.1.1",
49
+ "@miadi/episode-vessel": "0.2.1",
49
50
  "@miadi/episodic-memory-schema": "0.11.1",
50
- "@miadi/inquiry-weave": "0.15.0",
51
+ "@miadi/inquiry-weave": "0.15.1",
51
52
  "ink": "^7.1.1",
52
53
  "react": "^19.3.0",
53
54
  "string-width": "^8.3.0",