@equationalapplications/core-okf 5.3.1 → 5.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/README.md +14 -2
- package/dist/index.d.mts +77 -2
- package/dist/index.d.ts +77 -2
- package/dist/index.js +383 -5
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +372 -6
- package/dist/index.mjs.map +1 -1
- package/package.json +2 -2
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/frontmatter.ts","../src/concept.ts","../src/index-md.ts","../src/entity-index-md.ts","../src/log-md.ts","../src/related-section.ts","../src/path-allowlist.ts","../src/markdown-links.ts"],"names":["i"],"mappings":"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","file":"index.mjs","sourcesContent":["import type { OkfFrontmatter, OkfFrontmatterScalar, OkfFrontmatterValue } from './types';\n\nconst RESERVED_LITERALS = new Set(['true', 'false', 'yes', 'no', 'on', 'off', 'null', '~', '']);\n\nfunction looksLikeNumber(value: string): boolean {\n return /^[+-]?(\\d+\\.?\\d*|\\.\\d+)([eE][+-]?\\d+)?$/.test(value);\n}\n\nfunction isIso8601Timestamp(value: string): boolean {\n return /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d+)?(Z|[+-]\\d{2}:\\d{2}|[+-]\\d{4}|[+-]\\d{2})$/.test(value);\n}\n\nfunction needsQuoting(value: string): boolean {\n if (value !== value.trim()) return true;\n if (/[\\n\\r\\t]/.test(value)) return true;\n if (isIso8601Timestamp(value)) return false;\n\n // Quote strings that YAML could otherwise parse as collections/indicators.\n if (/^[-?:]\\s/.test(value)) return true;\n if (/^[\\[\\]{}&,*%!|>'\"@`]/.test(value)) return true;\n\n if (value.includes(':') || value.includes('#')) return true;\n if (RESERVED_LITERALS.has(value.toLowerCase())) return true;\n if (looksLikeNumber(value)) return true;\n return false;\n}\n\nfunction quoteString(value: string): string {\n const escaped = value\n .replace(/\\\\/g, '\\\\\\\\')\n .replace(/\"/g, '\\\\\"')\n .replace(/\\n/g, '\\\\n')\n .replace(/\\r/g, '\\\\r')\n .replace(/\\t/g, '\\\\t');\n return `\"${escaped}\"`;\n}\n\nexport function serializeScalarString(value: string): string {\n return needsQuoting(value) ? quoteString(value) : value;\n}\n\nfunction serializeKey(key: string): string {\n // needsQuoting() intentionally exempts ISO 8601 timestamps for *values*.\n // For keys, quote timestamp-like scalars to avoid YAML timestamp coercion in some parsers.\n if (/\\s/.test(key) || needsQuoting(key) || isIso8601Timestamp(key)) {\n return quoteString(key);\n }\n return key;\n}\n\nfunction serializeValue(value: unknown): string {\n if (value === null) return 'null';\n if (typeof value === 'boolean') return String(value);\n if (typeof value === 'number') return String(value);\n if (typeof value === 'string') return serializeScalarString(value);\n throw new Error(`Unsupported frontmatter value type: ${typeof value}`);\n}\n\nexport function serializeFrontmatter(fm: OkfFrontmatter): string {\n const lines: string[] = ['---'];\n for (const [key, value] of Object.entries(fm)) {\n if (value === undefined) continue;\n if (Array.isArray(value)) {\n if (value.length === 0) {\n lines.push(`${serializeKey(key)}: []`);\n } else {\n lines.push(`${serializeKey(key)}:`);\n for (const item of value as unknown[]) {\n if (typeof item === 'string') {\n lines.push(` - ${serializeScalarString(item)}`);\n } else {\n lines.push(` - ${serializeValue(item)}`);\n }\n }\n }\n } else {\n lines.push(`${serializeKey(key)}: ${serializeValue(value)}`);\n }\n }\n lines.push('---');\n return lines.join('\\n') + '\\n';\n}\n\nfunction unescapeFrontmatterString(escaped: string): string {\n let result = '';\n for (let i = 0; i < escaped.length; i++) {\n const ch = escaped[i];\n if (ch === '\\\\' && i + 1 < escaped.length) {\n const next = escaped[i + 1];\n if (next === 'n') { result += '\\n'; i++; continue; }\n if (next === 'r') { result += '\\r'; i++; continue; }\n if (next === 't') { result += '\\t'; i++; continue; }\n if (next === '\"') { result += '\"'; i++; continue; }\n if (next === '\\\\') { result += '\\\\'; i++; continue; }\n }\n result += ch;\n }\n return result;\n}\n\nfunction unescapeSingleQuotedString(escaped: string): string {\n return escaped.replace(/''/g, \"'\");\n}\n\nfunction parseQuotedScalar(raw: string): string | null {\n const trimmed = raw.trim();\n if (trimmed.length < 2) return null;\n if (trimmed.startsWith('\"') && trimmed.endsWith('\"')) {\n return unescapeFrontmatterString(trimmed.slice(1, -1));\n }\n if (trimmed.startsWith(\"'\") && trimmed.endsWith(\"'\")) {\n return unescapeSingleQuotedString(trimmed.slice(1, -1));\n }\n return null;\n}\n\nfunction parseKey(raw: string): string {\n return parseQuotedScalar(raw) ?? raw.trim();\n}\n\nfunction parseScalarValue(raw: string): OkfFrontmatterScalar {\n const quoted = parseQuotedScalar(raw);\n if (quoted !== null) return quoted;\n const trimmed = raw.trim();\n if (trimmed === 'null') return null;\n if (trimmed === 'true') return true;\n if (trimmed === 'false') return false;\n if (/^[+-]?(\\d+\\.?\\d*|\\.\\d+)([eE][+-]?\\d+)?$/.test(trimmed)) return Number(trimmed);\n return trimmed;\n}\n\nfunction matchFrontmatterKeyValue(\n line: string,\n): { key: string; value: string; hasValue: boolean } | null {\n const keyMatch = /^(?:\"(?:\\\\.|[^\"\\\\])*\"|'(?:''|[^'])*'|[^:]+)/.exec(line);\n if (!keyMatch) return null;\n const key = keyMatch[0];\n if (line[key.length] !== ':') return null;\n const tail = line.slice(key.length + 1);\n return { key, value: tail.trimStart(), hasValue: tail.trim().length > 0 };\n}\n\n/**\n * Parses the subset of YAML frontmatter that {@link serializeFrontmatter} produces:\n * scalar string/number/boolean/null values, quoted strings, and block string-lists.\n * NOT a general YAML parser — flow collections (`[...]`/`{...}`), multi-line block\n * scalars (`|`/`>`), anchors, and aliases are not recognized. Lines that don't match\n * a recognized shape are silently skipped rather than throwing, so a foreign bundle\n * never crashes\n * the import — it just loses fidelity on the unrecognized line.\n */\nexport function parseFrontmatter(content: string): { frontmatter: OkfFrontmatter; rest: string } {\n const lines = content.split(/\\r?\\n/);\n const fallback = { frontmatter: { type: '' } as OkfFrontmatter, rest: content };\n\n if (lines[0]?.trim() !== '---') return fallback;\n\n let closingIndex = -1;\n for (let i = 1; i < lines.length; i++) {\n if (lines[i].trim() === '---') {\n closingIndex = i;\n break;\n }\n }\n if (closingIndex === -1) return fallback;\n\n const frontmatter: Record<string, OkfFrontmatterValue> = {};\n let i = 1;\n while (i < closingIndex) {\n const line = lines[i];\n const kv = matchFrontmatterKeyValue(line);\n if (!kv) {\n i++;\n continue;\n }\n if (kv.value.trim() === '[]') {\n frontmatter[parseKey(kv.key)] = [];\n i++;\n continue;\n }\n if (!kv.hasValue) {\n const key = parseKey(kv.key);\n const items: OkfFrontmatterScalar[] = [];\n i++;\n while (i < closingIndex && /^\\s*-\\s/.test(lines[i])) {\n items.push(parseScalarValue(lines[i].replace(/^\\s*-\\s/, '')));\n i++;\n }\n frontmatter[key] = items;\n continue;\n }\n frontmatter[parseKey(kv.key)] = parseScalarValue(kv.value);\n i++;\n }\n\n if (typeof frontmatter['type'] !== 'string') {\n frontmatter['type'] = '';\n }\n\n const restLines = lines.slice(closingIndex + 1);\n const rest = restLines.length > 0 ? restLines.join('\\n') : '';\n\n return { frontmatter: frontmatter as OkfFrontmatter, rest };\n}\n","import type { OkfFrontmatter } from './types';\nimport { serializeFrontmatter, parseFrontmatter } from './frontmatter';\n\nexport function buildConceptDocument(fm: OkfFrontmatter, body: string): string {\n return `${serializeFrontmatter(fm)}\\n${body}`;\n}\n\n/** Reverse of {@link buildConceptDocument}: strips the single leading blank-line separator. */\nexport function parseConcept(content: string): { frontmatter: OkfFrontmatter; body: string } {\n const { frontmatter, rest } = parseFrontmatter(content);\n const body = rest.startsWith('\\n') ? rest.slice(1) : rest;\n return { frontmatter, body };\n}\n","import { parseFrontmatter, serializeScalarString } from './frontmatter';\nimport type { OkfIndexEntry, OkfIndexSection } from './types';\n\nfunction renderEntry(entry: OkfIndexEntry): string {\n const esc = (s: string) =>\n s\n .replace(/\\\\/g, '\\\\\\\\')\n .replace(/\\[/g, '\\\\[')\n .replace(/\\]/g, '\\\\]')\n .replace(/\\r?\\n/g, ' ');\n\n const title = esc(entry.title);\n const description = entry.description ? esc(entry.description) : undefined;\n\n return description\n ? `* [${title}](${entry.path}) - ${description}`\n : `* [${title}](${entry.path})`;\n}\n\nfunction renderSections(sections: OkfIndexSection[]): string {\n const lines: string[] = [];\n for (const section of sections) {\n lines.push(`## ${section.heading}`);\n lines.push('');\n for (const entry of section.entries) {\n lines.push(renderEntry(entry));\n }\n lines.push('');\n }\n if (lines.length === 0) return '';\n return lines.join('\\n').trimEnd() + '\\n';\n}\n\nexport function buildIndexMd(sections: OkfIndexSection[]): string {\n return renderSections(sections);\n}\n\nexport function buildRootIndexMd(\n okfVersion: string,\n sections: OkfIndexSection[],\n options?: { profile?: string },\n): string {\n const lines = ['---', `okf_version: ${serializeScalarString(okfVersion)}`];\n if (options?.profile) {\n lines.push(`profile: ${serializeScalarString(options.profile)}`);\n }\n lines.push('---', '');\n return `${lines.join('\\n')}\\n${renderSections(sections)}`;\n}\n\nexport function parseRootIndexMd(content: string): { okf_version?: string; profile?: string } {\n const { frontmatter } = parseFrontmatter(content);\n const okf = frontmatter.okf_version;\n return {\n okf_version:\n typeof okf === 'string' ? okf : typeof okf === 'number' && Number.isFinite(okf) ? String(okf) : undefined,\n profile: typeof frontmatter.profile === 'string' ? frontmatter.profile : undefined,\n };\n}\n","import type { OkfIndexSection } from './types';\nimport { buildIndexMd } from './index-md';\n\nconst EVENT_LOG_LINK = /^\\[Event log\\]\\(\\.\\/log\\.md\\)\\s*$/;\nconst TOP_LEVEL_H1 = /^#\\s+.+\\s*$/;\nconst SECTION_HEADING = /^##\\s+(.+)\\s*$/;\nconst INDEX_ENTRY = /^\\*\\s+\\[((?:\\\\.|[^\\]])*)\\]\\(([^)]+)\\)(?:\\s+-\\s+(.*))?$/;\n\nfunction unescapeIndexTitle(title: string): string {\n return title.replace(/\\\\\\]/g, ']').replace(/\\\\\\[/g, '[').replace(/\\\\\\\\/g, '\\\\');\n}\n\nexport function buildEntityIndexMd(options: {\n summary?: string;\n sections: OkfIndexSection[];\n}): string {\n const parts: string[] = [];\n if (options.summary?.trim()) {\n parts.push(options.summary.trimEnd(), '');\n }\n const sectionsMd = buildIndexMd(options.sections).trimEnd();\n if (sectionsMd) {\n parts.push(sectionsMd);\n parts.push('');\n }\n parts.push('[Event log](./log.md)');\n return `${parts.join('\\n')}\\n`;\n}\n\nexport function parseEntityIndexMd(content: string): {\n summary: string;\n sections: OkfIndexSection[];\n} {\n const lines = content.split(/\\r?\\n/);\n\n // Optional frontmatter block (--- ... ---) per profile.\n let start = 0;\n if (lines[0]?.trim() === '---') {\n const closing = lines.findIndex((line, idx) => idx > 0 && line.trim() === '---');\n if (closing !== -1) start = closing + 1;\n }\n\n const firstSectionIdx = lines.findIndex((line, idx) => idx >= start && SECTION_HEADING.test(line));\n const summaryEnd = firstSectionIdx === -1 ? lines.length : firstSectionIdx;\n const summaryLines = lines\n .slice(start, summaryEnd)\n .filter(line => !EVENT_LOG_LINK.test(line.trim()));\n let summaryStart = 0;\n while (summaryStart < summaryLines.length && summaryLines[summaryStart].trim() === '') {\n summaryStart += 1;\n }\n if (summaryStart < summaryLines.length && TOP_LEVEL_H1.test(summaryLines[summaryStart].trim())) {\n summaryStart += 1;\n }\n const summary = summaryLines.slice(summaryStart).join('\\n').trim();\n\n const sections: OkfIndexSection[] = [];\n if (firstSectionIdx === -1) return { summary, sections };\n\n let current: OkfIndexSection | null = null;\n for (let i = Math.max(firstSectionIdx, start); i < lines.length; i += 1) {\n const line = lines[i];\n if (EVENT_LOG_LINK.test(line.trim())) continue;\n\n const headingMatch = SECTION_HEADING.exec(line);\n if (headingMatch) {\n current = { heading: headingMatch[1], entries: [] };\n sections.push(current);\n continue;\n }\n\n if (!current) continue;\n const entryMatch = INDEX_ENTRY.exec(line);\n if (!entryMatch) continue;\n\n current.entries.push({\n title: unescapeIndexTitle(entryMatch[1]),\n path: entryMatch[2],\n description: entryMatch[3] ? unescapeIndexTitle(entryMatch[3]) : undefined,\n });\n }\n return { summary, sections };\n}\n","import type { OkfLogEntry } from './types';\n\nexport function buildLogMd(entries: OkfLogEntry[]): string {\n const groups = new Map<string, OkfLogEntry[]>();\n for (const entry of entries) {\n const group = groups.get(entry.date) ?? [];\n group.push(entry);\n groups.set(entry.date, group);\n }\n\n const dates = Array.from(groups.keys()).sort((a, b) => (a < b ? 1 : a > b ? -1 : 0));\n\n const lines: string[] = [];\n for (const date of dates) {\n lines.push(`## ${date}`);\n lines.push('');\n for (const entry of groups.get(date)!) {\n lines.push(`- ${entry.text}`);\n }\n lines.push('');\n }\n\n if (lines.length === 0) return '';\n return lines.join('\\n').trimEnd() + '\\n';\n}\n\nconst EVENT_ID_COMMENT = /\\s*<!--\\s*id:\\s*(\\S+)\\s*-->\\s*$/;\n\nexport function appendEventIdComment(text: string, eventId: string): string {\n if (!/^[A-Za-z0-9._-]+$/.test(eventId)) return text;\n return `${text} <!-- id: ${eventId} -->`;\n}\n\nexport function parseEventIdComment(text: string): { text: string; eventId?: string } {\n const match = EVENT_ID_COMMENT.exec(text);\n if (!match) return { text };\n const eventId = match[1];\n const stripped = text.slice(0, match.index).trimEnd();\n if (!/^[A-Za-z0-9._-]+$/.test(eventId)) return { text: stripped };\n return { text: stripped, eventId };\n}\n\nconst DATE_HEADING = /^##\\s+(\\d{4}-\\d{2}-\\d{2})\\s*$/;\nconst BULLET = /^-\\s+(.*)$/;\n\n/**\n * Reverse of {@link buildLogMd}. Best-effort: lines that don't match the exact\n * `## YYYY-MM-DD` heading or `- text` bullet shape buildLogMd emits are skipped,\n * not thrown — a foreign log.md in a different format degrades to fewer entries\n * rather than failing the import.\n */\nexport function parseLogMd(content: string): OkfLogEntry[] {\n const entries: OkfLogEntry[] = [];\n let currentDate: string | null = null;\n\n for (const line of content.split(/\\r?\\n/)) {\n const headingMatch = DATE_HEADING.exec(line);\n if (headingMatch) {\n currentDate = headingMatch[1];\n continue;\n }\n const bulletMatch = BULLET.exec(line);\n if (bulletMatch && currentDate) {\n entries.push({ date: currentDate, text: bulletMatch[1] });\n }\n }\n\n return entries;\n}\n","import type { OkfMarkdownLink } from './types';\n\nfunction escapeLinkLabel(label: string): string {\n return label\n .replace(/\\\\/g, '\\\\\\\\')\n .replace(/\\[/g, '\\\\[')\n .replace(/\\]/g, '\\\\]')\n .replace(/\\r?\\n/g, ' ');\n}\n\nexport function appendRelatedSection(\n body: string,\n links: Array<{ edge_type: string; path: string }>,\n): string {\n if (links.length === 0) return body;\n const prefix =\n body.length === 0\n ? ''\n : body.endsWith('\\n\\n')\n ? body\n : body.endsWith('\\n')\n ? `${body}\\n`\n : `${body}\\n\\n`;\n const lines = ['## Related', ''];\n for (const link of links) {\n lines.push(`- [${escapeLinkLabel(link.edge_type)}](${link.path})`);\n }\n return `${prefix}${lines.join('\\n')}\\n`;\n}\n\nexport function splitRelatedSection(body: string): { body: string; relatedLinks: OkfMarkdownLink[] } {\n const lines = body.split(/\\r?\\n/);\n let end = lines.length;\n while (end > 0 && lines[end - 1].trim() === '') end -= 1;\n\n let scan = end - 1;\n while (scan >= 0 && /^-\\s+/.test(lines[scan])) scan -= 1;\n while (scan >= 0 && lines[scan].trim() === '') scan -= 1;\n\n if (scan < 0 || lines[scan].trim() !== '## Related') {\n return { body, relatedLinks: [] };\n }\n\n const relatedStart = scan;\n const contentBody = lines.slice(0, relatedStart).join('\\n');\n const relatedBlock = lines.slice(relatedStart, end).join('\\n');\n const relatedLinks: OkfMarkdownLink[] = [];\n for (const line of relatedBlock.split(/\\r?\\n/)) {\n const bullet = /^-\\s+(.*)$/.exec(line);\n if (!bullet) continue;\n\n const linkPattern = /\\[((?:\\\\.|[^\\]])*)\\]\\(([^)\\s]+)\\)/g;\n let match: RegExpExecArray | null;\n while ((match = linkPattern.exec(bullet[1])) !== null) {\n const linkPath = match[2];\n if (/^(https?:|mailto:)/i.test(linkPath)) continue;\n relatedLinks.push({\n text: match[1].replace(/\\\\\\]/g, ']').replace(/\\\\\\[/g, '[').replace(/\\\\\\\\/g, '\\\\'),\n path: linkPath,\n });\n }\n }\n const normalizedBody =\n contentBody.length === 0 ? '' : contentBody.endsWith('\\n') ? contentBody : `${contentBody}\\n`;\n return { body: normalizedBody, relatedLinks };\n}\n","const ALLOWED =\n /^(index\\.md|entities\\/[^/]+\\/(index\\.md|log\\.md|(facts|tasks)\\/[^/]+\\.md))$/;\n\nexport function isAllowedOkfPath(filePath: string): boolean {\n const normalized = filePath.replace(/^\\.\\//, '').replace(/\\\\/g, '/');\n if (normalized.split('/').some(segment => segment === '.' || segment === '..')) {\n return false;\n }\n return ALLOWED.test(normalized);\n}\n","import type { OkfMarkdownLink } from './types';\n\nconst EXCLUDED_SCHEME = /^(https?:|mailto:)/i;\nconst FENCED_CODE_BLOCK_PATTERN = /```[\\s\\S]*?```/g;\n\n/**\n * Extracts inline markdown links (`[text](path)`) from a concept body.\n * Single-line regex, not a CommonMark parser — reference-style links, links\n * split across lines, and links inside code fences are not recognized.\n * `http(s):` and `mailto:` targets are excluded; only relative/local paths\n * are candidates for graph edges.\n */\nexport function extractMarkdownLinks(body: string): OkfMarkdownLink[] {\n const searchableBody = body.replace(FENCED_CODE_BLOCK_PATTERN, '');\n const linkPattern = /\\[([^\\]]*)\\]\\(([^)\\s]+)\\)/g;\n const links: OkfMarkdownLink[] = [];\n let match: RegExpExecArray | null;\n while ((match = linkPattern.exec(searchableBody)) !== null) {\n const [, text, path] = match;\n if (EXCLUDED_SCHEME.test(path)) continue;\n links.push({ text, path });\n }\n return links;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/frontmatter.ts","../src/concept.ts","../src/index-md.ts","../src/entity-index-md.ts","../src/log-md.ts","../src/related-section.ts","../src/path-allowlist.ts","../src/markdown-links.ts","../src/footnotes.ts","../src/v02-helpers.ts"],"names":["i"],"mappings":"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","file":"index.mjs","sourcesContent":["import type { OkfFrontmatter, OkfFrontmatterScalar, OkfFrontmatterValue } from './types';\n\nconst RESERVED_LITERALS = new Set(['true', 'false', 'yes', 'no', 'on', 'off', 'null', '~', '']);\n\nfunction looksLikeNumber(value: string): boolean {\n return /^[+-]?(\\d+\\.?\\d*|\\.\\d+)([eE][+-]?\\d+)?$/.test(value);\n}\n\nfunction isIso8601Timestamp(value: string): boolean {\n return /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d+)?(Z|[+-]\\d{2}:\\d{2}|[+-]\\d{4}|[+-]\\d{2})$/.test(value);\n}\n\nfunction needsQuoting(value: string): boolean {\n if (value !== value.trim()) return true;\n if (/[\\n\\r\\t]/.test(value)) return true;\n if (isIso8601Timestamp(value)) return false;\n\n // Quote strings that YAML could otherwise parse as collections/indicators.\n if (/^[-?:]\\s/.test(value)) return true;\n if (/^[\\[\\]{}&,*%!|>'\"@`]/.test(value)) return true;\n\n if (value.includes(':') || value.includes('#')) return true;\n if (RESERVED_LITERALS.has(value.toLowerCase())) return true;\n if (looksLikeNumber(value)) return true;\n return false;\n}\n\nfunction quoteString(value: string): string {\n const escaped = value\n .replace(/\\\\/g, '\\\\\\\\')\n .replace(/\"/g, '\\\\\"')\n .replace(/\\n/g, '\\\\n')\n .replace(/\\r/g, '\\\\r')\n .replace(/\\t/g, '\\\\t');\n return `\"${escaped}\"`;\n}\n\nexport function serializeScalarString(value: string): string {\n return needsQuoting(value) ? quoteString(value) : value;\n}\n\nexport function serializeActorString(value: string): string {\n // Actor strings in OKF v0.2 §7 contain `/` (agent/version), `:` (human:/process:),\n // or both — any of these would otherwise parse ambiguously as YAML scalars.\n if (/[/:]/.test(value)) return quoteString(value);\n return value;\n}\n\nfunction serializeKey(key: string): string {\n // needsQuoting() intentionally exempts ISO 8601 timestamps for *values*.\n // For keys, quote timestamp-like scalars to avoid YAML timestamp coercion in some parsers.\n if (/\\s/.test(key) || needsQuoting(key) || isIso8601Timestamp(key)) {\n return quoteString(key);\n }\n return key;\n}\n\nfunction serializeValue(value: unknown): string {\n if (value === null) return 'null';\n if (typeof value === 'boolean') return String(value);\n if (typeof value === 'number') return String(value);\n if (typeof value === 'string') return serializeScalarString(value);\n if (Array.isArray(value)) return serializeFlowSequenceValue(value);\n if (typeof value === 'object') return serializeFlowMappingValue(value as Record<string, OkfFrontmatterValue>);\n throw new Error(`Unsupported frontmatter value type: ${typeof value}`);\n}\n\n/**\n * Quote a flow-mapping/-sequence scalar string more strictly than a top-level\n * scalar. Flow syntax additionally treats `,`, `{`, `}`, `[`, `]` as\n * structural (so a `title` like `\"Foo, Bar\"` MUST be quoted even though\n * `needsQuoting` alone wouldn't require it for a top-level, non-flow value),\n * and `/`/`:` are quoted too — this is what makes it safe to use uniformly\n * for actor strings (`reference_agent/gemini-2.5-pro`, `human:ahormati`) as\n * well as ordinary string values inside the same flow mapping. This\n * subsumes what a narrower \"only quote actor-shaped values\" helper would\n * need to do, so every string inside a flow mapping/sequence goes through\n * this one function rather than two different quoting rules depending on\n * which key it's under.\n */\nfunction needsFlowQuoting(value: string): boolean {\n return needsQuoting(value) || /[,{}[\\]/:]/.test(value);\n}\n\nfunction serializeFlowScalarString(value: string): string {\n return needsFlowQuoting(value) ? quoteString(value) : value;\n}\n\n/** Emit a plain object as an inline flow mapping `{ k: v, k: v }`. At most one\n * level of nested flow collection (mapping or sequence) as a value, per\n * spec §2.6 — matches what the parser accepts. */\nfunction serializeFlowMappingValue(obj: Record<string, OkfFrontmatterValue>, depth = 0): string {\n const entries = Object.entries(obj).filter(([, v]) => v !== undefined);\n if (entries.length === 0) return '{}';\n const parts = entries.map(([k, v]) => {\n let rendered: string;\n if (typeof v === 'string') rendered = serializeFlowScalarString(v);\n else if (v === null || typeof v === 'boolean' || typeof v === 'number') rendered = serializeValue(v);\n else if (Array.isArray(v)) {\n if (depth >= 1) throw new Error(`serializeFlowMappingValue: nesting deeper than one level is not supported (key \"${k}\")`);\n rendered = serializeFlowSequenceValue(v, depth + 1);\n } else if (typeof v === 'object') {\n if (depth >= 1) throw new Error(`serializeFlowMappingValue: nesting deeper than one level is not supported (key \"${k}\")`);\n rendered = serializeFlowMappingValue(v as Record<string, OkfFrontmatterValue>, depth + 1);\n } else {\n throw new Error(`serializeFlowMappingValue: unsupported value type for key \"${k}\"`);\n }\n return `${serializeKey(k)}: ${rendered}`;\n });\n return `{ ${parts.join(', ')} }`;\n}\n\n/** Emit an array as an inline flow sequence `[ a, b, c ]`. Object items\n * serialize as nested inline flow mappings (the base \"array of objects\"\n * shape — see the design note above Step 5.1 — does not consume the\n * one-level nesting budget). A nested ARRAY does consume the budget: the\n * `parameters` field in v0.2 §10 is a sequence of values, not a sequence\n * of mappings, and recursing with the same depth would let a hostile\n * `[[[[...]]]]` exhaust the JS stack. */\nfunction serializeFlowSequenceValue(arr: unknown[], depth = 0): string {\n if (arr.length === 0) return '[]';\n const parts = arr.map((item) => {\n if (typeof item === 'string') return serializeFlowScalarString(item);\n if (item === null || typeof item === 'boolean' || typeof item === 'number') return serializeValue(item);\n if (item !== null && typeof item === 'object' && !Array.isArray(item)) {\n // Sequence item that is itself a mapping: same depth (base shape, not nesting).\n return serializeFlowMappingValue(item as Record<string, OkfFrontmatterValue>, depth);\n }\n if (Array.isArray(item)) {\n if (depth >= 1) throw new Error(`serializeFlowSequenceValue: nested array deeper than one level is not supported`);\n return serializeFlowSequenceValue(item, depth + 1);\n }\n throw new Error('serializeFlowSequenceValue: unsupported item type');\n });\n return `[ ${parts.join(', ')} ]`;\n}\n\nexport function serializeFrontmatter(fm: OkfFrontmatter): string {\n const lines: string[] = ['---'];\n for (const [key, value] of Object.entries(fm)) {\n if (value === undefined) continue;\n if (Array.isArray(value)) {\n if (value.length === 0) {\n lines.push(`${serializeKey(key)}: []`);\n } else if ((value as unknown[]).some((item) => item !== null && typeof item === 'object')) {\n // Array of objects (sources, verified-list, parameters, ...): always a\n // single-line flow sequence, never a block-list of flow-mapping items\n // (see the Step 5 design note — the latter cannot round-trip).\n lines.push(`${serializeKey(key)}: ${serializeFlowSequenceValue(value as unknown[])}`);\n } else {\n // Plain scalar array: existing v0.1 block-sequence form, unchanged.\n lines.push(`${serializeKey(key)}:`);\n for (const item of value as unknown[]) {\n lines.push(` - ${typeof item === 'string' ? serializeScalarString(item) : serializeValue(item)}`);\n }\n }\n } else if (value !== null && typeof value === 'object') {\n lines.push(`${serializeKey(key)}: ${serializeFlowMappingValue(value as Record<string, OkfFrontmatterValue>)}`);\n } else {\n lines.push(`${serializeKey(key)}: ${serializeValue(value)}`);\n }\n }\n lines.push('---');\n return lines.join('\\n') + '\\n';\n}\n\nfunction unescapeFrontmatterString(escaped: string): string {\n let result = '';\n for (let i = 0; i < escaped.length; i++) {\n const ch = escaped[i];\n if (ch === '\\\\' && i + 1 < escaped.length) {\n const next = escaped[i + 1];\n if (next === 'n') { result += '\\n'; i++; continue; }\n if (next === 'r') { result += '\\r'; i++; continue; }\n if (next === 't') { result += '\\t'; i++; continue; }\n if (next === '\"') { result += '\"'; i++; continue; }\n if (next === '\\\\') { result += '\\\\'; i++; continue; }\n }\n result += ch;\n }\n return result;\n}\n\nfunction unescapeSingleQuotedString(escaped: string): string {\n return escaped.replace(/''/g, \"'\");\n}\n\nfunction parseQuotedScalar(raw: string): string | null {\n const trimmed = raw.trim();\n if (trimmed.length < 2) return null;\n if (trimmed.startsWith('\"') && trimmed.endsWith('\"')) {\n return unescapeFrontmatterString(trimmed.slice(1, -1));\n }\n if (trimmed.startsWith(\"'\") && trimmed.endsWith(\"'\")) {\n return unescapeSingleQuotedString(trimmed.slice(1, -1));\n }\n return null;\n}\n\nfunction parseKey(raw: string): string {\n return parseQuotedScalar(raw) ?? raw.trim();\n}\n\nfunction parseScalarValue(raw: string): OkfFrontmatterScalar {\n const quoted = parseQuotedScalar(raw);\n if (quoted !== null) return quoted;\n const trimmed = raw.trim();\n if (trimmed === 'null') return null;\n if (trimmed === 'true') return true;\n if (trimmed === 'false') return false;\n if (/^[+-]?(\\d+\\.?\\d*|\\.\\d+)([eE][+-]?\\d+)?$/.test(trimmed)) return Number(trimmed);\n return trimmed;\n}\n\nfunction matchFrontmatterKeyValue(\n line: string,\n): { key: string; value: string; hasValue: boolean } | null {\n const keyMatch = /^(?:\"(?:\\\\.|[^\"\\\\])*\"|'(?:''|[^'])*'|[^:]+)/.exec(line);\n if (!keyMatch) return null;\n const key = keyMatch[0];\n if (line[key.length] !== ':') return null;\n const tail = line.slice(key.length + 1);\n return { key, value: tail.trimStart(), hasValue: tail.trim().length > 0 };\n}\n\n/**\n * True if `text` contains an unquoted `&` or `*` — the anchor/alias indicators we\n * refuse to recognize (billion-laughs safety, profile-1 §8). Quoted spans are\n * excluded from the scan so an ordinary value like a URL query string\n * (`\"https://x/a?p=1&q=2\"`) is never misdetected as an anchor.\n */\nfunction hasUnquotedAnchorOrAlias(text: string): boolean {\n let quote: '\"' | \"'\" | null = null;\n for (let i = 0; i < text.length; i++) {\n const ch = text[i];\n if (quote) {\n if (ch === '\\\\' && i + 1 < text.length) { i++; continue; }\n if (ch === quote) quote = null;\n continue;\n }\n if (ch === '\"' || ch === \"'\") { quote = ch; continue; }\n if (ch === '&' || ch === '*') return true;\n }\n return false;\n}\n\n/**\n * Split a comma-separated list of inner flow entries, respecting quoted strings\n * and nested `{...}` / `[...]` spans (so a nested flow collection's internal\n * commas don't split the outer entry list). Returns null on unbalanced\n * quotes/brackets.\n */\nfunction splitFlowEntries(inner: string): string[] | null {\n const entries: string[] = [];\n let buf = '';\n let i = 0;\n let quote: '\"' | \"'\" | null = null;\n let depthBrace = 0;\n let depthBracket = 0;\n while (i < inner.length) {\n const ch = inner[i];\n if (quote) {\n buf += ch;\n if (ch === '\\\\' && i + 1 < inner.length) { buf += inner[i + 1]; i += 2; continue; }\n if (ch === quote) quote = null;\n i++; continue;\n }\n if (ch === '\"' || ch === \"'\") { quote = ch; buf += ch; i++; continue; }\n if (ch === '{') depthBrace++;\n else if (ch === '}') depthBrace--;\n else if (ch === '[') depthBracket++;\n else if (ch === ']') depthBracket--;\n if (ch === ',' && depthBrace === 0 && depthBracket === 0) {\n entries.push(buf.trim()); buf = ''; i++; continue;\n }\n buf += ch;\n i++;\n }\n if (buf.trim().length > 0) entries.push(buf.trim());\n if (depthBrace !== 0 || depthBracket !== 0 || quote !== null) return null;\n return entries;\n}\n\n/**\n * `depth` counts levels of **mapping-value nesting** only: it increments when a\n * flow MAPPING's key has a value that is itself a flow collection, and is\n * rejected once it would exceed 1 (spec §2.6's \"at most one level of nesting\").\n * It does NOT increment when a flow SEQUENCE's item is itself a mapping or\n * sequence — `sources: [ {...}, {...} ]` (a flat array of objects) is the base\n * shape v0.2 uses everywhere and is not \"nesting\" in the spec's sense. This is\n * what lets `sources: [ { usage_window: { from, to } } ]` parse (sequence item\n * is a mapping at depth 0; that mapping's `usage_window` value is a mapping at\n * depth 1 — one level, allowed) while `{ a: { b: { c: 1 } } }` is rejected\n * (`a`'s value nests at depth 1; `b`'s value would need depth 2 — rejected).\n */\nexport function parseFlowMapping(text: string, depth = 0): Record<string, OkfFrontmatterValue> | null {\n const trimmed = text.trim();\n if (!trimmed.startsWith('{') || !trimmed.endsWith('}')) return null;\n // Anchor / alias hard ban, quoted spans excluded from the scan.\n if (hasUnquotedAnchorOrAlias(trimmed)) return null;\n const inner = trimmed.slice(1, -1).trim();\n if (inner.length === 0) return {};\n const entries = splitFlowEntries(inner);\n if (!entries) return null;\n const out: Record<string, OkfFrontmatterValue> = {};\n for (const entry of entries) {\n const kv = matchFrontmatterKeyValue(entry);\n if (!kv || !kv.hasValue) return null;\n const v = kv.value.trim();\n if (v.startsWith('{') || v.startsWith('[')) {\n // This IS a mapping-value nesting step: consumes one level of budget.\n if (depth >= 1) return null; // would be a 2nd level of mapping-value nesting — reject\n const nested = v.startsWith('{') ? parseFlowMapping(v, depth + 1) : parseFlowSequence(v, depth + 1);\n if (nested === null) return null;\n out[parseKey(kv.key)] = nested as unknown as OkfFrontmatterValue;\n continue;\n }\n out[parseKey(kv.key)] = parseScalarValue(v);\n }\n return out;\n}\n\nexport function parseFlowSequence(text: string, depth = 0): OkfFrontmatterValue[] | null {\n const trimmed = text.trim();\n if (!trimmed.startsWith('[') || !trimmed.endsWith(']')) return null;\n if (hasUnquotedAnchorOrAlias(trimmed)) return null;\n const inner = trimmed.slice(1, -1).trim();\n if (inner.length === 0) return [];\n const entries = splitFlowEntries(inner);\n if (!entries) return null;\n const out: OkfFrontmatterValue[] = [];\n for (const entry of entries) {\n const v = entry.trim();\n if (v.startsWith('{')) {\n // Sequence item is a mapping: same depth (base array-of-objects shape).\n const nested = parseFlowMapping(v, depth);\n if (nested === null) return null;\n out.push(nested as unknown as OkfFrontmatterValue);\n continue;\n }\n if (v.startsWith('[')) {\n // Nested array consumes one level of depth budget.\n if (depth >= 1) return null;\n const nested = parseFlowSequence(v, depth + 1);\n if (nested === null) return null;\n out.push(nested as unknown as OkfFrontmatterValue);\n continue;\n }\n out.push(parseScalarValue(v));\n }\n return out;\n}\n\n/**\n * Parses the subset of YAML frontmatter that {@link serializeFrontmatter} produces:\n * scalar string/number/boolean/null values, quoted strings, and block string-lists.\n * NOT a general YAML parser — flow collections (`[...]`/`{...}`), multi-line block\n * scalars (`|`/`>`), anchors, and aliases are not recognized. Lines that don't match\n * a recognized shape are silently skipped rather than throwing, so a foreign bundle\n * never crashes\n * the import — it just loses fidelity on the unrecognized line.\n */\nexport function parseFrontmatter(content: string): { frontmatter: OkfFrontmatter; rest: string } {\n const lines = content.split(/\\r?\\n/);\n const fallback = { frontmatter: { type: '' } as OkfFrontmatter, rest: content };\n\n if (lines[0]?.trim() !== '---') return fallback;\n\n let closingIndex = -1;\n for (let i = 1; i < lines.length; i++) {\n if (lines[i].trim() === '---') {\n closingIndex = i;\n break;\n }\n }\n if (closingIndex === -1) return fallback;\n\n const frontmatter: Record<string, OkfFrontmatterValue> = {};\n let i = 1;\n while (i < closingIndex) {\n const line = lines[i];\n const kv = matchFrontmatterKeyValue(line);\n if (!kv) {\n i++;\n continue;\n }\n if (kv.value.trim() === '[]') {\n frontmatter[parseKey(kv.key)] = [];\n i++;\n continue;\n }\n if (!kv.hasValue) {\n const key = parseKey(kv.key);\n const items: OkfFrontmatterScalar[] = [];\n i++;\n while (i < closingIndex && /^\\s*-\\s/.test(lines[i])) {\n items.push(parseScalarValue(lines[i].replace(/^\\s*-\\s/, '')));\n i++;\n }\n frontmatter[key] = items;\n continue;\n }\n const valueRaw = kv.value.trim();\n // OKF v0.2 flow collections: { k: v, k: v } and [ a, b, c ], at most one level\n // of nesting (spec §2.6). Anchor/alias-opaque (handled inside the flow parsers).\n if (valueRaw.startsWith('{')) {\n const flowObj = parseFlowMapping(valueRaw);\n if (flowObj !== null) { frontmatter[parseKey(kv.key)] = flowObj as unknown as OkfFrontmatterValue; i++; continue; }\n // Rejected (anchor/alias, or nested more than one level deep): preserve the key\n // with a null value rather than misreading `{ a: { b: 1 } }` as a scalar string.\n frontmatter[parseKey(kv.key)] = null;\n i++;\n continue;\n }\n if (valueRaw.startsWith('[')) {\n // Empty flow sequence falls through to existing `[]` handling above.\n if (valueRaw === '[]') {\n frontmatter[parseKey(kv.key)] = [];\n i++;\n continue;\n }\n const flowSeq = parseFlowSequence(valueRaw);\n if (flowSeq !== null) { frontmatter[parseKey(kv.key)] = flowSeq as unknown as OkfFrontmatterValue; i++; continue; }\n frontmatter[parseKey(kv.key)] = null;\n i++;\n continue;\n }\n frontmatter[parseKey(kv.key)] = parseScalarValue(kv.value);\n i++;\n }\n\n if (typeof frontmatter['type'] !== 'string') {\n frontmatter['type'] = '';\n }\n\n const restLines = lines.slice(closingIndex + 1);\n const rest = restLines.length > 0 ? restLines.join('\\n') : '';\n\n return { frontmatter: frontmatter as OkfFrontmatter, rest };\n}\n","import type { OkfFrontmatter } from './types';\nimport { serializeFrontmatter, parseFrontmatter } from './frontmatter';\n\nexport function buildConceptDocument(fm: OkfFrontmatter, body: string): string {\n return `${serializeFrontmatter(fm)}\\n${body}`;\n}\n\n/** Reverse of {@link buildConceptDocument}: strips the single leading blank-line separator. */\nexport function parseConcept(content: string): { frontmatter: OkfFrontmatter; body: string } {\n const { frontmatter, rest } = parseFrontmatter(content);\n const body = rest.startsWith('\\n') ? rest.slice(1) : rest;\n return { frontmatter, body };\n}\n","import { parseFrontmatter, serializeScalarString } from './frontmatter';\nimport type { OkfIndexEntry, OkfIndexSection } from './types';\n\nfunction renderEntry(entry: OkfIndexEntry): string {\n const esc = (s: string) =>\n s\n .replace(/\\\\/g, '\\\\\\\\')\n .replace(/\\[/g, '\\\\[')\n .replace(/\\]/g, '\\\\]')\n .replace(/\\r?\\n/g, ' ');\n\n const title = esc(entry.title);\n const description = entry.description ? esc(entry.description) : undefined;\n\n return description\n ? `* [${title}](${entry.path}) - ${description}`\n : `* [${title}](${entry.path})`;\n}\n\nfunction renderSections(sections: OkfIndexSection[]): string {\n const lines: string[] = [];\n for (const section of sections) {\n lines.push(`## ${section.heading}`);\n lines.push('');\n for (const entry of section.entries) {\n lines.push(renderEntry(entry));\n }\n lines.push('');\n }\n if (lines.length === 0) return '';\n return lines.join('\\n').trimEnd() + '\\n';\n}\n\nexport function buildIndexMd(sections: OkfIndexSection[]): string {\n return renderSections(sections);\n}\n\nexport function buildRootIndexMd(\n okfVersion: string,\n sections: OkfIndexSection[],\n options?: { profile?: string },\n): string {\n const lines = ['---', `okf_version: ${serializeScalarString(okfVersion)}`];\n if (options?.profile) {\n lines.push(`profile: ${serializeScalarString(options.profile)}`);\n }\n lines.push('---', '');\n return `${lines.join('\\n')}\\n${renderSections(sections)}`;\n}\n\nexport function parseRootIndexMd(content: string): { okf_version?: string; profile?: string } {\n const { frontmatter } = parseFrontmatter(content);\n const okf = frontmatter.okf_version;\n return {\n okf_version:\n typeof okf === 'string' ? okf : typeof okf === 'number' && Number.isFinite(okf) ? String(okf) : undefined,\n profile: typeof frontmatter.profile === 'string' ? frontmatter.profile : undefined,\n };\n}\n","import type { OkfIndexSection } from './types';\nimport { buildIndexMd } from './index-md';\n\nconst EVENT_LOG_LINK = /^\\[Event log\\]\\(\\.\\/log\\.md\\)\\s*$/;\nconst TOP_LEVEL_H1 = /^#\\s+.+\\s*$/;\nconst SECTION_HEADING = /^##\\s+(.+)\\s*$/;\nconst INDEX_ENTRY = /^\\*\\s+\\[((?:\\\\.|[^\\]])*)\\]\\(([^)]+)\\)(?:\\s+-\\s+(.*))?$/;\n\nfunction unescapeIndexTitle(title: string): string {\n return title.replace(/\\\\\\]/g, ']').replace(/\\\\\\[/g, '[').replace(/\\\\\\\\/g, '\\\\');\n}\n\nexport function buildEntityIndexMd(options: {\n summary?: string;\n sections: OkfIndexSection[];\n}): string {\n const parts: string[] = [];\n if (options.summary?.trim()) {\n parts.push(options.summary.trimEnd(), '');\n }\n const sectionsMd = buildIndexMd(options.sections).trimEnd();\n if (sectionsMd) {\n parts.push(sectionsMd);\n parts.push('');\n }\n parts.push('[Event log](./log.md)');\n return `${parts.join('\\n')}\\n`;\n}\n\nexport function parseEntityIndexMd(content: string): {\n summary: string;\n sections: OkfIndexSection[];\n} {\n const lines = content.split(/\\r?\\n/);\n\n // Optional frontmatter block (--- ... ---) per profile.\n let start = 0;\n if (lines[0]?.trim() === '---') {\n const closing = lines.findIndex((line, idx) => idx > 0 && line.trim() === '---');\n if (closing !== -1) start = closing + 1;\n }\n\n const firstSectionIdx = lines.findIndex((line, idx) => idx >= start && SECTION_HEADING.test(line));\n const summaryEnd = firstSectionIdx === -1 ? lines.length : firstSectionIdx;\n const summaryLines = lines\n .slice(start, summaryEnd)\n .filter(line => !EVENT_LOG_LINK.test(line.trim()));\n let summaryStart = 0;\n while (summaryStart < summaryLines.length && summaryLines[summaryStart].trim() === '') {\n summaryStart += 1;\n }\n if (summaryStart < summaryLines.length && TOP_LEVEL_H1.test(summaryLines[summaryStart].trim())) {\n summaryStart += 1;\n }\n const summary = summaryLines.slice(summaryStart).join('\\n').trim();\n\n const sections: OkfIndexSection[] = [];\n if (firstSectionIdx === -1) return { summary, sections };\n\n let current: OkfIndexSection | null = null;\n for (let i = Math.max(firstSectionIdx, start); i < lines.length; i += 1) {\n const line = lines[i];\n if (EVENT_LOG_LINK.test(line.trim())) continue;\n\n const headingMatch = SECTION_HEADING.exec(line);\n if (headingMatch) {\n current = { heading: headingMatch[1], entries: [] };\n sections.push(current);\n continue;\n }\n\n if (!current) continue;\n const entryMatch = INDEX_ENTRY.exec(line);\n if (!entryMatch) continue;\n\n current.entries.push({\n title: unescapeIndexTitle(entryMatch[1]),\n path: entryMatch[2],\n description: entryMatch[3] ? unescapeIndexTitle(entryMatch[3]) : undefined,\n });\n }\n return { summary, sections };\n}\n","import type { OkfLogEntry } from './types';\n\nexport function buildLogMd(entries: OkfLogEntry[]): string {\n const groups = new Map<string, OkfLogEntry[]>();\n for (const entry of entries) {\n const group = groups.get(entry.date) ?? [];\n group.push(entry);\n groups.set(entry.date, group);\n }\n\n const dates = Array.from(groups.keys()).sort((a, b) => (a < b ? 1 : a > b ? -1 : 0));\n\n const lines: string[] = [];\n for (const date of dates) {\n lines.push(`## ${date}`);\n lines.push('');\n for (const entry of groups.get(date)!) {\n lines.push(`- ${entry.text}`);\n }\n lines.push('');\n }\n\n if (lines.length === 0) return '';\n return lines.join('\\n').trimEnd() + '\\n';\n}\n\nconst EVENT_ID_COMMENT = /\\s*<!--\\s*id:\\s*(\\S+)\\s*-->\\s*$/;\n\nexport function appendEventIdComment(text: string, eventId: string): string {\n if (!/^[A-Za-z0-9._-]+$/.test(eventId)) return text;\n return `${text} <!-- id: ${eventId} -->`;\n}\n\nexport function parseEventIdComment(text: string): { text: string; eventId?: string } {\n const match = EVENT_ID_COMMENT.exec(text);\n if (!match) return { text };\n const eventId = match[1];\n const stripped = text.slice(0, match.index).trimEnd();\n if (!/^[A-Za-z0-9._-]+$/.test(eventId)) return { text: stripped };\n return { text: stripped, eventId };\n}\n\nconst DATE_HEADING = /^##\\s+(\\d{4}-\\d{2}-\\d{2})\\s*$/;\nconst BULLET = /^-\\s+(.*)$/;\n\n/**\n * Reverse of {@link buildLogMd}. Best-effort: lines that don't match the exact\n * `## YYYY-MM-DD` heading or `- text` bullet shape buildLogMd emits are skipped,\n * not thrown — a foreign log.md in a different format degrades to fewer entries\n * rather than failing the import.\n */\nexport function parseLogMd(content: string): OkfLogEntry[] {\n const entries: OkfLogEntry[] = [];\n let currentDate: string | null = null;\n\n for (const line of content.split(/\\r?\\n/)) {\n const headingMatch = DATE_HEADING.exec(line);\n if (headingMatch) {\n currentDate = headingMatch[1];\n continue;\n }\n const bulletMatch = BULLET.exec(line);\n if (bulletMatch && currentDate) {\n entries.push({ date: currentDate, text: bulletMatch[1] });\n }\n }\n\n return entries;\n}\n","import type { OkfMarkdownLink } from './types';\n\nfunction escapeLinkLabel(label: string): string {\n return label\n .replace(/\\\\/g, '\\\\\\\\')\n .replace(/\\[/g, '\\\\[')\n .replace(/\\]/g, '\\\\]')\n .replace(/\\r?\\n/g, ' ');\n}\n\nexport function appendRelatedSection(\n body: string,\n links: Array<{ edge_type: string; path: string }>,\n): string {\n if (links.length === 0) return body;\n const prefix =\n body.length === 0\n ? ''\n : body.endsWith('\\n\\n')\n ? body\n : body.endsWith('\\n')\n ? `${body}\\n`\n : `${body}\\n\\n`;\n const lines = ['## Related', ''];\n for (const link of links) {\n lines.push(`- [${escapeLinkLabel(link.edge_type)}](${link.path})`);\n }\n return `${prefix}${lines.join('\\n')}\\n`;\n}\n\nexport function splitRelatedSection(body: string): { body: string; relatedLinks: OkfMarkdownLink[] } {\n const lines = body.split(/\\r?\\n/);\n let end = lines.length;\n while (end > 0 && lines[end - 1].trim() === '') end -= 1;\n\n let scan = end - 1;\n while (scan >= 0 && /^-\\s+/.test(lines[scan])) scan -= 1;\n while (scan >= 0 && lines[scan].trim() === '') scan -= 1;\n\n if (scan < 0 || lines[scan].trim() !== '## Related') {\n return { body, relatedLinks: [] };\n }\n\n const relatedStart = scan;\n const contentBody = lines.slice(0, relatedStart).join('\\n');\n const relatedBlock = lines.slice(relatedStart, end).join('\\n');\n const relatedLinks: OkfMarkdownLink[] = [];\n for (const line of relatedBlock.split(/\\r?\\n/)) {\n const bullet = /^-\\s+(.*)$/.exec(line);\n if (!bullet) continue;\n\n const linkPattern = /\\[((?:\\\\.|[^\\]])*)\\]\\(([^)\\s]+)\\)/g;\n let match: RegExpExecArray | null;\n while ((match = linkPattern.exec(bullet[1])) !== null) {\n const linkPath = match[2];\n if (/^(https?:|mailto:)/i.test(linkPath)) continue;\n relatedLinks.push({\n text: match[1].replace(/\\\\\\]/g, ']').replace(/\\\\\\[/g, '[').replace(/\\\\\\\\/g, '\\\\'),\n path: linkPath,\n });\n }\n }\n const normalizedBody =\n contentBody.length === 0 ? '' : contentBody.endsWith('\\n') ? contentBody : `${contentBody}\\n`;\n return { body: normalizedBody, relatedLinks };\n}\n","const ALLOWED =\n /^(index\\.md|entities\\/[^/]+\\/(index\\.md|log\\.md|(facts|tasks)\\/[^/]+\\.md))$/;\n\nexport function isAllowedOkfPath(filePath: string): boolean {\n const normalized = filePath.replace(/^\\.\\//, '').replace(/\\\\/g, '/');\n if (normalized.split('/').some(segment => segment === '.' || segment === '..')) {\n return false;\n }\n return ALLOWED.test(normalized);\n}\n","import type { OkfMarkdownLink } from './types';\n\nconst EXCLUDED_SCHEME = /^(https?:|mailto:)/i;\nconst FENCED_CODE_BLOCK_PATTERN = /```[\\s\\S]*?```/g;\n\n/**\n * Extracts inline markdown links (`[text](path)`) from a concept body.\n * Single-line regex, not a CommonMark parser — reference-style links, links\n * split across lines, and links inside code fences are not recognized.\n * `http(s):` and `mailto:` targets are excluded; only relative/local paths\n * are candidates for graph edges.\n */\nexport function extractMarkdownLinks(body: string): OkfMarkdownLink[] {\n const searchableBody = body.replace(FENCED_CODE_BLOCK_PATTERN, '');\n const linkPattern = /\\[([^\\]]*)\\]\\(([^)\\s]+)\\)/g;\n const links: OkfMarkdownLink[] = [];\n let match: RegExpExecArray | null;\n while ((match = linkPattern.exec(searchableBody)) !== null) {\n const [, text, path] = match;\n if (EXCLUDED_SCHEME.test(path)) continue;\n links.push({ text, path });\n }\n return links;\n}\n","import type { OkfFootnote } from './types';\n\nconst FOOTNOTE_DEFINITION = /^\\[\\^([^\\]]+)\\]:\\s?(.*)$/;\n\n/**\n * Extracts footnote definitions from a body. OKF v0.2 footnote attribution uses\n * `[^id]` markers whose label joins to `sources[].id`. This helper parses the\n * `[^id]: text` definition lines at the body tail and returns them as opaque\n * text — we deliberately do NOT try to interpret which body span uses which\n * footnote; the body is the source of truth and is preserved verbatim on\n * round-trip.\n */\nexport function extractFootnotes(body: string): OkfFootnote[] {\n const out: OkfFootnote[] = [];\n const lines = body.split(/\\r?\\n/);\n let i = 0;\n while (i < lines.length) {\n const m = FOOTNOTE_DEFINITION.exec(lines[i]);\n if (!m) { i++; continue; }\n const id = m[1];\n const firstLine = m[2] ?? '';\n const collected: string[] = [firstLine];\n i++;\n while (i < lines.length) {\n const next = lines[i];\n if (FOOTNOTE_DEFINITION.test(next)) break;\n // Continuation lines are indented (>= 2 spaces) per CommonMark.\n if (/^\\s{2,}\\S/.test(next) || /^\\s{2,}/.test(next)) {\n collected.push(next.replace(/^\\s{2}/, ''));\n i++;\n continue;\n }\n break;\n }\n out.push({ id, body: collected.join('\\n').trimEnd() });\n }\n return out;\n}\n\n/** Joins footnote definitions back into a body block. Continuation lines are\n * indented (two spaces) so that {@link extractFootnotes} — which only\n * recognizes continuation lines that are indented per CommonMark — round-trips\n * multi-line bodies. */\nexport function serializeFootnotes(footnotes: OkfFootnote[]): string {\n return footnotes\n .map((f) => {\n const lines = f.body.split('\\n');\n const [firstLine, ...continuation] = lines;\n const tail = continuation.map((line) => `\\n ${line}`).join('');\n return `[^${f.id}]: ${firstLine ?? ''}${tail}`;\n })\n .join('\\n');\n}","import type {\n OkfVerified,\n OkfVerifiedEntry,\n OkfSource,\n OkfSourceUsageWindow,\n} from './types';\n\nexport type TrustTier = 'unverified' | 'machine-confirmed' | 'human-reviewed';\n\nexport function deriveTrustTier(verified: OkfVerified | undefined): TrustTier {\n if (!verified || verified.length === 0) return 'unverified';\n for (const v of verified) {\n if (typeof v?.by === 'string' && v.by.startsWith('human:')) return 'human-reviewed';\n }\n return 'machine-confirmed';\n}\n\nfunction parseStaleAfter(staleAfter: string | number | null): number | null {\n if (staleAfter == null) return null;\n if (typeof staleAfter === 'number') return Number.isFinite(staleAfter) ? staleAfter : null;\n // YYYY-MM-DD — compare at day granularity: stale_after is the first day that IS stale.\n const match = /^(\\d{4})-(\\d{2})-(\\d{2})$/.exec(staleAfter);\n if (!match) return null;\n const year = Number(match[1]);\n const month = Number(match[2]);\n const day = Number(match[3]);\n const ts = Date.UTC(year, month - 1, day);\n if (!Number.isFinite(ts)) return null;\n // Date.UTC silently normalizes calendar-invalid dates (2025-02-29 → 2025-03-01);\n // round-trip back through Date and reject any component that doesn't match.\n const d = new Date(ts);\n if (\n d.getUTCFullYear() !== year ||\n d.getUTCMonth() + 1 !== month ||\n d.getUTCDate() !== day\n ) {\n return null;\n }\n return ts;\n}\n\nexport function isStaleAfter(staleAfter: string | number | null, now: number): boolean {\n const cutoff = parseStaleAfter(staleAfter);\n if (cutoff == null) return false;\n return now >= cutoff;\n}\n\nexport function parseVerifiedFlexible(value: unknown): OkfVerified {\n if (value == null) return [];\n if (Array.isArray(value)) {\n return value.filter(\n (v): v is OkfVerifiedEntry =>\n !!v && typeof v === 'object' && typeof (v as any).by === 'string' && typeof (v as any).at === 'string',\n );\n }\n if (typeof value === 'object' && typeof (value as any).by === 'string' && typeof (value as any).at === 'string') {\n return [value as OkfVerifiedEntry];\n }\n return [];\n}\n\nexport function formatVerifiedJson(entries: OkfVerified): string {\n // Sort by Date.parse() instant so different ISO 8601 offsets don't re-order\n // (lexical sort put `2026-01-01T00:00:00-08:00` before `2026-01-01T05:00:00Z`,\n // even though the latter is later in real time). Falls back to a deterministic\n // lexical tiebreak only when one or both values fail to parse.\n const sorted = [...entries].sort((a, b) => {\n const ta = Date.parse(a.at);\n const tb = Date.parse(b.at);\n const fa = Number.isFinite(ta);\n const fb = Number.isFinite(tb);\n if (fa && fb) return ta - tb;\n if (fa && !fb) return -1;\n if (!fa && fb) return 1;\n return a.at < b.at ? -1 : a.at > b.at ? 1 : 0;\n });\n return JSON.stringify(sorted);\n}\n\nexport function formatSourcesJson(sources: OkfSource[], sharedWindow?: OkfSourceUsageWindow | null): string {\n const folded = sources.map((s) =>\n s.usage_window ? s : sharedWindow ? { ...s, usage_window: sharedWindow } : s,\n );\n return JSON.stringify(folded);\n}\n\nexport function latestVerified(\n entries: OkfVerified | undefined,\n _now: number,\n): { by: string; at: number } | null {\n if (!entries || entries.length === 0) return null;\n let best: OkfVerifiedEntry | null = null;\n let bestAt = -Infinity;\n for (const e of entries) {\n const ts = Date.parse(e.at);\n if (Number.isFinite(ts) && ts > bestAt) {\n best = e;\n bestAt = ts;\n }\n }\n if (!best) return null;\n return { by: best.by, at: bestAt };\n}\n\nconst URL_LINE = /^\\s*-\\s+(https?:\\/\\/\\S+)\\s*$/;\n\nexport function parseCitationsList(body: string): string[] {\n // Find a '# Citations' (case-insensitive) heading; collect URL list lines\n // until the next heading or EOF. Headings inside fenced code blocks\n // (``` and ~~~) are ignored so a Markdown example containing\n // `# Citations` and URL bullets is not imported as real provenance.\n //\n // Fence tracking retains the full opening fence length: a 4-backtick\n // opener is only closed by a 4+ backtick line of the same character\n // followed by whitespace (CommonMark §4.5). Tracking only the marker\n // char let ``` close ```` blocks, which then exposed the next line as\n // a URL bullet and imported it as synthetic provenance (see #90 review).\n const lines = body.split(/\\r?\\n/);\n let inFence = false;\n let fenceMarker = '';\n let fenceLength = 0;\n let startIdx = -1;\n const isFenceClose = (marker: string, fullMatch: string, line: string): boolean => {\n if (marker[0] !== fenceMarker) return false;\n if (marker.length < fenceLength) return false;\n return /^\\s*$/.test(line.slice(fullMatch.length));\n };\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i];\n const fence = /^\\s*(```+|~~~+)/.exec(line);\n if (fence) {\n const marker = fence[1]!;\n if (!inFence) {\n inFence = true;\n fenceMarker = marker[0]!;\n fenceLength = marker.length;\n } else if (isFenceClose(marker, fence[0], line)) {\n inFence = false;\n fenceMarker = '';\n fenceLength = 0;\n }\n continue;\n }\n if (!inFence && /^\\s*#{1,2}\\s*citations\\s*$/i.test(line)) {\n startIdx = i;\n break;\n }\n }\n if (startIdx === -1) return [];\n const out: string[] = [];\n for (let i = startIdx + 1; i < lines.length; i++) {\n const line = lines[i];\n // Closing fence or a new heading exits the citations section.\n const fence = /^\\s*(```+|~~~+)/.exec(line);\n if (fence) {\n const marker = fence[1]!;\n if (!inFence) {\n inFence = true;\n fenceMarker = marker[0]!;\n fenceLength = marker.length;\n continue;\n }\n if (isFenceClose(marker, fence[0], line)) {\n inFence = false;\n fenceMarker = '';\n fenceLength = 0;\n }\n continue;\n }\n if (!inFence && /^\\s*#{1,2}\\s+/.test(line)) break; // next heading\n // Skip URL line matching inside open fences — body's narrative code\n // examples must not contaminate provenance.\n if (inFence) continue;\n const m = URL_LINE.exec(line);\n if (m) out.push(m[1]);\n }\n return out;\n}"]}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@equationalapplications/core-okf",
|
|
3
|
-
"version": "5.
|
|
4
|
-
"description": "Zero-dependency Open Knowledge Format (OKF) v0.1 primitives: frontmatter serialization, concept documents, index.md and log.md builders.",
|
|
3
|
+
"version": "5.4.0",
|
|
4
|
+
"description": "Zero-dependency Open Knowledge Format (OKF) v0.1 + v0.2 primitives: frontmatter serialization (with flow mappings / sequences), concept documents, index.md and log.md builders, trust-tier and staleness helpers.",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"module": "dist/index.mjs",
|
|
7
7
|
"types": "dist/index.d.ts",
|