@ferax564/noma-cli 0.11.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.
Files changed (83) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +199 -0
  3. package/bin/noma.mjs +8 -0
  4. package/dist/ast.d.ts +111 -0
  5. package/dist/ast.js +23 -0
  6. package/dist/ast.js.map +1 -0
  7. package/dist/book.d.ts +56 -0
  8. package/dist/book.js +120 -0
  9. package/dist/book.js.map +1 -0
  10. package/dist/cli.d.ts +2 -0
  11. package/dist/cli.js +573 -0
  12. package/dist/cli.js.map +1 -0
  13. package/dist/diff.d.ts +29 -0
  14. package/dist/diff.js +77 -0
  15. package/dist/diff.js.map +1 -0
  16. package/dist/fmt.d.ts +1 -0
  17. package/dist/fmt.js +105 -0
  18. package/dist/fmt.js.map +1 -0
  19. package/dist/ids.d.ts +15 -0
  20. package/dist/ids.js +27 -0
  21. package/dist/ids.js.map +1 -0
  22. package/dist/index.d.ts +20 -0
  23. package/dist/index.js +12 -0
  24. package/dist/index.js.map +1 -0
  25. package/dist/inline.d.ts +14 -0
  26. package/dist/inline.js +83 -0
  27. package/dist/inline.js.map +1 -0
  28. package/dist/loader.d.ts +12 -0
  29. package/dist/loader.js +59 -0
  30. package/dist/loader.js.map +1 -0
  31. package/dist/parser.d.ts +7 -0
  32. package/dist/parser.js +434 -0
  33. package/dist/parser.js.map +1 -0
  34. package/dist/patch.d.ts +61 -0
  35. package/dist/patch.js +530 -0
  36. package/dist/patch.js.map +1 -0
  37. package/dist/renderer-html.d.ts +44 -0
  38. package/dist/renderer-html.js +929 -0
  39. package/dist/renderer-html.js.map +1 -0
  40. package/dist/renderer-json.d.ts +5 -0
  41. package/dist/renderer-json.js +4 -0
  42. package/dist/renderer-json.js.map +1 -0
  43. package/dist/renderer-llm.d.ts +29 -0
  44. package/dist/renderer-llm.js +275 -0
  45. package/dist/renderer-llm.js.map +1 -0
  46. package/dist/renderer-noma.d.ts +10 -0
  47. package/dist/renderer-noma.js +179 -0
  48. package/dist/renderer-noma.js.map +1 -0
  49. package/dist/renderer-site.d.ts +11 -0
  50. package/dist/renderer-site.js +175 -0
  51. package/dist/renderer-site.js.map +1 -0
  52. package/dist/validator.d.ts +24 -0
  53. package/dist/validator.js +699 -0
  54. package/dist/validator.js.map +1 -0
  55. package/dist/verify.d.ts +10 -0
  56. package/dist/verify.js +141 -0
  57. package/dist/verify.js.map +1 -0
  58. package/package.json +83 -0
  59. package/schemas/ast.schema.json +187 -0
  60. package/schemas/capability.schema.json +70 -0
  61. package/schemas/patch-op.schema.json +92 -0
  62. package/schemas/patch-transaction.schema.json +28 -0
  63. package/schemas/transcript.schema.json +95 -0
  64. package/src/ast.ts +152 -0
  65. package/src/book.ts +162 -0
  66. package/src/cli.ts +595 -0
  67. package/src/diff.ts +108 -0
  68. package/src/fmt.ts +126 -0
  69. package/src/ids.ts +42 -0
  70. package/src/index.ts +20 -0
  71. package/src/inline.ts +92 -0
  72. package/src/loader.ts +55 -0
  73. package/src/parser.ts +501 -0
  74. package/src/patch.ts +646 -0
  75. package/src/renderer-html.ts +1047 -0
  76. package/src/renderer-json.ts +9 -0
  77. package/src/renderer-llm.ts +320 -0
  78. package/src/renderer-noma.ts +220 -0
  79. package/src/renderer-site.ts +245 -0
  80. package/src/validator.ts +733 -0
  81. package/src/verify.ts +157 -0
  82. package/themes/dark.css +382 -0
  83. package/themes/default.css +537 -0
package/dist/parser.js ADDED
@@ -0,0 +1,434 @@
1
+ import yaml from "js-yaml";
2
+ import { splitPipeRow } from "./inline.js";
3
+ const FRONTMATTER_RE = /^---\s*$/;
4
+ const HEADING_RE = /^(#{1,6})\s+(.+?)(?:\s+\{([^}]+)\})?\s*$/;
5
+ const FENCE_RE = /^```(\w*)\s*$/;
6
+ const DIRECTIVE_OPEN_RE = /^(:{2,})\s*([a-zA-Z_][\w-]*(?:::[a-zA-Z_][\w-]*)*)\s*(\{.*\})?\s*$/;
7
+ const DIRECTIVE_CLOSE_RE = /^(:{2,})\s*$/;
8
+ const LIST_RE = /^([-*])\s+(.+)$/;
9
+ const ORDERED_LIST_RE = /^(\d+)\.\s+(.+)$/;
10
+ const QUOTE_RE = /^>\s?(.*)$/;
11
+ const THEMATIC_BREAK_RE = /^(?:-{3,}|\*{3,}|_{3,})\s*$/;
12
+ const TABLE_ROW_RE = /^\s*\|.*\|\s*$/;
13
+ const TABLE_SEPARATOR_RE = /^\s*\|?\s*:?-{3,}:?\s*(\|\s*:?-{3,}:?\s*)+\|?\s*$/;
14
+ const matchOnce = (re, s) => s.match(re);
15
+ export function parse(source, options = {}) {
16
+ const normalized = source.replace(/\r\n?/g, "\n");
17
+ const lines = normalized.split("\n");
18
+ const { meta, raw, startLine, endLine: fmEnd } = extractFrontmatter(lines);
19
+ const flatChildren = parseBlocks(lines, startLine, lines.length, 0);
20
+ const children = foldSections(flatChildren);
21
+ for (const c of children)
22
+ computeSectionEndLines(c);
23
+ if (raw !== "") {
24
+ const fmNode = {
25
+ type: "frontmatter",
26
+ data: meta,
27
+ raw,
28
+ pos: { line: 1, column: 1 },
29
+ endLine: fmEnd,
30
+ };
31
+ children.unshift(fmNode);
32
+ }
33
+ attachChapterAliases(children, meta, options.filename);
34
+ return {
35
+ type: "document",
36
+ pos: { line: 1, column: 1 },
37
+ endLine: Math.max(1, lines.length - (normalized.endsWith("\n") ? 1 : 0)),
38
+ meta: { ...(options.filename ? { filename: options.filename } : {}), ...meta },
39
+ children,
40
+ };
41
+ }
42
+ function attachChapterAliases(children, meta, filename) {
43
+ const root = children.find((n) => n.type === "section" && n.level === 1);
44
+ if (!root)
45
+ return;
46
+ const aliases = new Set(root.aliases ?? []);
47
+ if (filename) {
48
+ const base = filename.replace(/\\/g, "/").split("/").pop() ?? filename;
49
+ const stem = base.replace(/\.noma$/i, "").replace(/^\d+[-_]/, "");
50
+ const slug = slugify(stem);
51
+ if (slug && slug !== root.id)
52
+ aliases.add(slug);
53
+ }
54
+ const fmAliases = meta.aliases;
55
+ if (Array.isArray(fmAliases)) {
56
+ for (const a of fmAliases) {
57
+ if (typeof a === "string" && a.trim())
58
+ aliases.add(a.trim());
59
+ }
60
+ }
61
+ if (aliases.size > 0)
62
+ root.aliases = [...aliases];
63
+ }
64
+ function extractFrontmatter(lines) {
65
+ if (lines.length === 0 || !FRONTMATTER_RE.test(lines[0] ?? "")) {
66
+ return { meta: {}, raw: "", startLine: 0, endLine: 0 };
67
+ }
68
+ for (let i = 1; i < lines.length; i++) {
69
+ if (FRONTMATTER_RE.test(lines[i] ?? "")) {
70
+ const raw = lines.slice(1, i).join("\n");
71
+ const parsed = yaml.load(raw);
72
+ const meta = parsed && typeof parsed === "object" && !Array.isArray(parsed)
73
+ ? parsed
74
+ : {};
75
+ return { meta, raw, startLine: i + 1, endLine: i + 1 };
76
+ }
77
+ }
78
+ return { meta: {}, raw: "", startLine: 0, endLine: 0 };
79
+ }
80
+ function parseBlocks(lines, from, to, parentColons) {
81
+ const out = [];
82
+ let i = from;
83
+ while (i < to) {
84
+ const line = lines[i] ?? "";
85
+ if (line.trim() === "") {
86
+ i++;
87
+ continue;
88
+ }
89
+ const directiveOpen = matchOnce(DIRECTIVE_OPEN_RE, line);
90
+ if (directiveOpen) {
91
+ const colons = directiveOpen[1].length;
92
+ if (colons > parentColons || parentColons === 0) {
93
+ const result = parseDirective(lines, i, to, colons);
94
+ out.push(result.node);
95
+ i = result.next;
96
+ continue;
97
+ }
98
+ // Same-or-lower colon count inside a parent: treat as paragraph text
99
+ // rather than spinning forever. Validator will flag the structural issue.
100
+ out.push(paragraph(line, i));
101
+ i++;
102
+ continue;
103
+ }
104
+ if (matchOnce(DIRECTIVE_CLOSE_RE, line)) {
105
+ out.push(paragraph(line, i));
106
+ i++;
107
+ continue;
108
+ }
109
+ const heading = matchOnce(HEADING_RE, line);
110
+ if (heading) {
111
+ const level = heading[1].length;
112
+ const title = heading[2].trim();
113
+ const headingAttrs = heading[3] ? parseAttrs(`{${heading[3]}}`) : {};
114
+ const explicitId = typeof headingAttrs.id === "string" ? headingAttrs.id : undefined;
115
+ const section = {
116
+ type: "section",
117
+ id: explicitId ?? slugify(title),
118
+ level,
119
+ title,
120
+ children: [],
121
+ pos: { line: i + 1, column: 1 },
122
+ };
123
+ if (!explicitId)
124
+ section._idIsExplicit = false;
125
+ else
126
+ section._idIsExplicit = true;
127
+ const aliasesAttr = headingAttrs.aliases;
128
+ if (typeof aliasesAttr === "string") {
129
+ const list = aliasesAttr
130
+ .split(/[,\s]+/)
131
+ .map((a) => a.trim())
132
+ .filter(Boolean);
133
+ if (list.length > 0)
134
+ section.aliases = list;
135
+ }
136
+ out.push(section);
137
+ i++;
138
+ continue;
139
+ }
140
+ const fence = matchOnce(FENCE_RE, line);
141
+ if (fence) {
142
+ const lang = fence[1] || undefined;
143
+ const start = i + 1;
144
+ let end = start;
145
+ while (end < to && !FENCE_RE.test(lines[end] ?? ""))
146
+ end++;
147
+ const content = lines.slice(start, end).join("\n");
148
+ const closed = end < to;
149
+ out.push({
150
+ type: "code",
151
+ lang,
152
+ content,
153
+ pos: { line: i + 1, column: 1 },
154
+ endLine: closed ? end + 1 : end,
155
+ });
156
+ i = closed ? end + 1 : end;
157
+ continue;
158
+ }
159
+ if (TABLE_ROW_RE.test(line) &&
160
+ i + 1 < to &&
161
+ TABLE_SEPARATOR_RE.test(lines[i + 1] ?? "")) {
162
+ const result = parseTable(lines, i, to);
163
+ if (result) {
164
+ result.node.endLine = result.next;
165
+ out.push(result.node);
166
+ i = result.next;
167
+ continue;
168
+ }
169
+ }
170
+ if (THEMATIC_BREAK_RE.test(line)) {
171
+ out.push({
172
+ type: "thematic_break",
173
+ pos: { line: i + 1, column: 1 },
174
+ endLine: i + 1,
175
+ });
176
+ i++;
177
+ continue;
178
+ }
179
+ if (QUOTE_RE.test(line)) {
180
+ const buf = [];
181
+ const startLine = i;
182
+ while (i < to) {
183
+ const m = matchOnce(QUOTE_RE, lines[i] ?? "");
184
+ if (!m)
185
+ break;
186
+ buf.push(m[1] ?? "");
187
+ i++;
188
+ }
189
+ out.push({
190
+ type: "quote",
191
+ content: buf.join("\n"),
192
+ pos: { line: startLine + 1, column: 1 },
193
+ endLine: i,
194
+ });
195
+ continue;
196
+ }
197
+ if (LIST_RE.test(line) || ORDERED_LIST_RE.test(line)) {
198
+ const ordered = ORDERED_LIST_RE.test(line);
199
+ const items = [];
200
+ const re = ordered ? ORDERED_LIST_RE : LIST_RE;
201
+ const startLine = i;
202
+ while (i < to) {
203
+ const m = matchOnce(re, lines[i] ?? "");
204
+ if (!m)
205
+ break;
206
+ items.push({
207
+ type: "list_item",
208
+ content: m[2] ?? "",
209
+ pos: { line: i + 1, column: 1 },
210
+ endLine: i + 1,
211
+ });
212
+ i++;
213
+ }
214
+ out.push({
215
+ type: "list",
216
+ ordered,
217
+ items,
218
+ pos: { line: startLine + 1, column: 1 },
219
+ endLine: i,
220
+ });
221
+ continue;
222
+ }
223
+ const buf = [];
224
+ const startLine = i;
225
+ while (i < to) {
226
+ const cur = lines[i] ?? "";
227
+ const next = lines[i + 1] ?? "";
228
+ if (cur.trim() === "" ||
229
+ HEADING_RE.test(cur) ||
230
+ FENCE_RE.test(cur) ||
231
+ DIRECTIVE_OPEN_RE.test(cur) ||
232
+ DIRECTIVE_CLOSE_RE.test(cur) ||
233
+ THEMATIC_BREAK_RE.test(cur) ||
234
+ QUOTE_RE.test(cur) ||
235
+ LIST_RE.test(cur) ||
236
+ ORDERED_LIST_RE.test(cur) ||
237
+ (TABLE_ROW_RE.test(cur) && TABLE_SEPARATOR_RE.test(next))) {
238
+ break;
239
+ }
240
+ buf.push(cur);
241
+ i++;
242
+ }
243
+ if (buf.length > 0)
244
+ out.push(paragraph(buf.join("\n"), startLine, i));
245
+ }
246
+ return out;
247
+ }
248
+ function parseDirective(lines, i, to, colons) {
249
+ const opener = matchOnce(DIRECTIVE_OPEN_RE, lines[i] ?? "");
250
+ const name = opener[2];
251
+ const attrs = parseAttrs(opener[3] ?? "");
252
+ let close = -1;
253
+ for (let j = i + 1; j < to; j++) {
254
+ const fence = matchOnce(FENCE_RE, lines[j] ?? "");
255
+ if (fence) {
256
+ j++;
257
+ while (j < to && !FENCE_RE.test(lines[j] ?? ""))
258
+ j++;
259
+ continue;
260
+ }
261
+ const m = matchOnce(DIRECTIVE_CLOSE_RE, lines[j] ?? "");
262
+ if (m && m[1].length === colons) {
263
+ close = j;
264
+ break;
265
+ }
266
+ }
267
+ const innerEnd = close === -1 ? to : close;
268
+ const children = parseBlocks(lines, i + 1, innerEnd, colons);
269
+ const node = {
270
+ type: "directive",
271
+ name,
272
+ attrs,
273
+ children,
274
+ pos: { line: i + 1, column: 1 },
275
+ endLine: close === -1 ? to : close + 1,
276
+ };
277
+ if (typeof attrs.id === "string")
278
+ node.id = attrs.id;
279
+ if (children.length === 1 && children[0].type === "paragraph") {
280
+ node.body = children[0].content;
281
+ }
282
+ return { node, next: close === -1 ? to : close + 1 };
283
+ }
284
+ const splitRow = splitPipeRow;
285
+ function parseTable(lines, i, to) {
286
+ const headerLine = lines[i] ?? "";
287
+ const sepLine = lines[i + 1] ?? "";
288
+ const header = splitRow(headerLine);
289
+ const sepCells = splitRow(sepLine);
290
+ if (sepCells.length !== header.length)
291
+ return null;
292
+ const align = sepCells.map((c) => {
293
+ const left = c.startsWith(":");
294
+ const right = c.endsWith(":");
295
+ if (left && right)
296
+ return "center";
297
+ if (right)
298
+ return "right";
299
+ if (left)
300
+ return "left";
301
+ return null;
302
+ });
303
+ const rows = [];
304
+ let j = i + 2;
305
+ while (j < to && TABLE_ROW_RE.test(lines[j] ?? "")) {
306
+ const cells = splitRow(lines[j] ?? "");
307
+ while (cells.length < header.length)
308
+ cells.push("");
309
+ if (cells.length > header.length)
310
+ cells.length = header.length;
311
+ rows.push(cells);
312
+ j++;
313
+ }
314
+ return {
315
+ node: {
316
+ type: "table",
317
+ header,
318
+ align,
319
+ rows,
320
+ pos: { line: i + 1, column: 1 },
321
+ },
322
+ next: j,
323
+ };
324
+ }
325
+ function parseAttrs(raw) {
326
+ const attrs = {};
327
+ if (!raw)
328
+ return attrs;
329
+ const inner = raw.replace(/^\{/, "").replace(/\}$/, "").trim();
330
+ if (!inner)
331
+ return attrs;
332
+ const re = /([a-zA-Z_][\w-]*)(?:=("([^"]*)"|'([^']*)'|([^\s]+)))?/g;
333
+ for (const m of inner.matchAll(re)) {
334
+ const key = m[1];
335
+ if (m[2] === undefined) {
336
+ attrs[key] = true;
337
+ continue;
338
+ }
339
+ const quoted = m[3] ?? m[4];
340
+ const bare = m[5];
341
+ const value = quoted !== undefined ? quoted : (bare ?? "");
342
+ attrs[key] = coerce(value);
343
+ }
344
+ return attrs;
345
+ }
346
+ function coerce(v) {
347
+ if (v === "true")
348
+ return true;
349
+ if (v === "false")
350
+ return false;
351
+ if (/^-?\d+$/.test(v))
352
+ return Number(v);
353
+ if (/^-?\d+\.\d+$/.test(v))
354
+ return Number(v);
355
+ return v;
356
+ }
357
+ function paragraph(content, line, endIdx) {
358
+ const lineCount = content.split("\n").length;
359
+ return {
360
+ type: "paragraph",
361
+ content: content.replace(/\n+$/, ""),
362
+ pos: { line: line + 1, column: 1 },
363
+ endLine: endIdx !== undefined ? endIdx : line + lineCount,
364
+ };
365
+ }
366
+ function computeSectionEndLines(node) {
367
+ if (node.type === "section") {
368
+ let end = node.pos?.line ?? 0;
369
+ for (const c of node.children) {
370
+ const ce = computeSectionEndLines(c);
371
+ if (ce > end)
372
+ end = ce;
373
+ }
374
+ node.endLine = end;
375
+ return end;
376
+ }
377
+ if (node.type === "directive") {
378
+ for (const c of node.children)
379
+ computeSectionEndLines(c);
380
+ }
381
+ return node.endLine ?? node.pos?.line ?? 0;
382
+ }
383
+ function foldSections(nodes) {
384
+ const root = [];
385
+ const stack = [];
386
+ const seenSlugSections = new Set();
387
+ const push = (node) => {
388
+ const parent = stack[stack.length - 1];
389
+ if (parent)
390
+ parent.children.push(node);
391
+ else
392
+ root.push(node);
393
+ };
394
+ for (const node of nodes) {
395
+ if (node.type === "section") {
396
+ const section = node;
397
+ const isExplicit = section._idIsExplicit === true;
398
+ if (!isExplicit) {
399
+ const slug = section.id;
400
+ if (seenSlugSections.has(slug)) {
401
+ let n = 2;
402
+ while (seenSlugSections.has(`${slug}-${n}`))
403
+ n++;
404
+ section.id = `${slug}-${n}`;
405
+ seenSlugSections.add(section.id);
406
+ }
407
+ else {
408
+ seenSlugSections.add(slug);
409
+ }
410
+ }
411
+ while (stack.length > 0 && stack[stack.length - 1].level >= section.level) {
412
+ stack.pop();
413
+ }
414
+ push(node);
415
+ stack.push(section);
416
+ delete section._idIsExplicit;
417
+ continue;
418
+ }
419
+ push(node);
420
+ }
421
+ return root;
422
+ }
423
+ export function slugify(input) {
424
+ return input
425
+ .toLowerCase()
426
+ .normalize("NFKD")
427
+ .replace(/[̀-ͯ]/g, "")
428
+ .replace(/[^a-z0-9\s-]/g, "")
429
+ .trim()
430
+ .replace(/\s+/g, "-")
431
+ .replace(/-+/g, "-")
432
+ .replace(/^-|-$/g, "");
433
+ }
434
+ //# sourceMappingURL=parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.js","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,61 @@
1
+ import type { AttrValue, DocumentNode, Node } from "./ast.js";
2
+ /**
3
+ * Block-level patch operations. Mutate a document by ID rather than rewriting
4
+ * source. Each op returns a new document; the input is not mutated.
5
+ *
6
+ * See docs/agent-protocol.noma for the public schema.
7
+ */
8
+ export type PatchOp = {
9
+ op: "replace_block";
10
+ id: string;
11
+ content: string;
12
+ } | {
13
+ op: "replace_body";
14
+ id: string;
15
+ content: string;
16
+ } | {
17
+ op: "update_heading";
18
+ id: string;
19
+ title: string;
20
+ } | {
21
+ op: "add_block";
22
+ parent: string;
23
+ content: string;
24
+ /** 0-based insertion index in parent.children. Defaults to end. */
25
+ position?: number;
26
+ } | {
27
+ op: "delete_block";
28
+ id: string;
29
+ } | {
30
+ op: "update_attribute";
31
+ id: string;
32
+ key: string;
33
+ value: AttrValue;
34
+ } | {
35
+ op: "rename_id";
36
+ from: string;
37
+ to: string;
38
+ };
39
+ export type PatchErrorCode = "target_missing" | "parent_missing" | "id_conflict" | "invalid_content" | "id_attribute_protected" | "sha_mismatch" | "pre_validation_blocked" | "op_list_aborted" | "unsupported_op";
40
+ export declare class PatchError extends Error {
41
+ readonly code: PatchErrorCode;
42
+ readonly op: PatchOp;
43
+ constructor(code: PatchErrorCode, message: string, op: PatchOp);
44
+ }
45
+ export declare function patch(doc: DocumentNode, op: PatchOp): DocumentNode;
46
+ export declare function patchAll(doc: DocumentNode, ops: PatchOp[]): DocumentNode;
47
+ export declare function findById(node: Node, id: string): Node | null;
48
+ /**
49
+ * Apply patch ops directly to source text. Unlike `patch(doc, op)` (which
50
+ * round-trips through the AST renderer and reformats the entire file), this
51
+ * preserves every byte outside the targeted block — frontmatter quoting,
52
+ * sibling blocks, comments, blank-line padding, attr ordering on unchanged
53
+ * lines.
54
+ *
55
+ * Each op:
56
+ * - re-parses the *current* source so line numbers stay accurate after
57
+ * prior ops in the sequence,
58
+ * - locates the target by ID,
59
+ * - rewrites only the affected line range.
60
+ */
61
+ export declare function patchSource(source: string, ops: PatchOp | PatchOp[]): string;