kennel 0.2.32 → 0.2.34
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/cli/dispatch.js +5 -0
- package/dist/cli/usage.js +5 -0
- package/dist/core/runtime.js +458 -166
- package/dist/llm/command.js +10 -3
- package/dist/llm/worker.js +297 -32
- package/dist/notes/command.d.ts +1 -0
- package/dist/notes/command.js +556 -0
- package/dist/package/preview.js +481 -188
- package/dist/site/server-plugins.js +51 -10
- package/package.json +6 -3
- package/schemas/config.schema.json +11 -0
- package/scripts/verify-config.mjs +59 -0
- package/web/assets/{abnfDiagram-VRR7QNED-DPZyna8O.js → abnfDiagram-VRR7QNED-CpP1VHKI.js} +1 -1
- package/web/assets/{arc-BAcU9y_V.js → arc-kL4AxfvR.js} +1 -1
- package/web/assets/{architectureDiagram-ZJ3FMSHR-D5yd7Cag.js → architectureDiagram-ZJ3FMSHR-BWaRktRJ.js} +1 -1
- package/web/assets/{ask-tray-PMT6VVXN-C4dJH21Q.js → ask-tray-PMT6VVXN-FqPDpwtw.js} +3 -3
- package/web/assets/{blockDiagram-677ZJIJ3-C7LSGyxV.js → blockDiagram-677ZJIJ3-B07uVoPU.js} +1 -1
- package/web/assets/{c4Diagram-LMCZKHZV-BW2KfoQr.js → c4Diagram-LMCZKHZV-uvoaQC09.js} +1 -1
- package/web/assets/channel-Djmf1Ik1.js +1 -0
- package/web/assets/{chunk-2Q5K7J3B-4Og6VAFG.js → chunk-2Q5K7J3B-BH3SaHqk.js} +1 -1
- package/web/assets/{chunk-32BRIVSS-BYOowQl5.js → chunk-32BRIVSS-SPD8Eraw.js} +1 -1
- package/web/assets/{chunk-5VM5RSS4-C1m-lq64.js → chunk-5VM5RSS4-DNeOgOuZ.js} +1 -1
- package/web/assets/{chunk-EX3LRPZG-B2hriRpJ.js → chunk-EX3LRPZG-SJQ-vKGz.js} +1 -1
- package/web/assets/{chunk-JWPE2WC7-C6RsnzVA.js → chunk-JWPE2WC7-Dy_9wZ2Y.js} +1 -1
- package/web/assets/{chunk-MOJQB5TN-yKbMmUWf.js → chunk-MOJQB5TN-CuIx80Vn.js} +1 -1
- package/web/assets/{chunk-RYQCIY6F-BOokm3Qc.js → chunk-RYQCIY6F-DDG61RKR.js} +1 -1
- package/web/assets/{chunk-V7JOEXUC-CKW-H5An.js → chunk-V7JOEXUC-7OMVhaoH.js} +1 -1
- package/web/assets/{chunk-VR4S4FIN-BU5pFrup.js → chunk-VR4S4FIN-Y-HNaSmV.js} +1 -1
- package/web/assets/{chunk-XXDRQBXY-DYtdSJHU.js → chunk-XXDRQBXY-CtG0MPgC.js} +1 -1
- package/web/assets/classDiagram-OUVF2IWQ-hlDS9RWf.js +1 -0
- package/web/assets/classDiagram-v2-EOCWNBFH-hlDS9RWf.js +1 -0
- package/web/assets/{cose-bilkent-JH36ORCC-BZeXtC6E.js → cose-bilkent-JH36ORCC-BZaPMYcl.js} +1 -1
- package/web/assets/{cynefin-VYW2F7L2-BSDVyzMI.js → cynefin-VYW2F7L2-DxAlRHA1.js} +1 -1
- package/web/assets/{cynefinDiagram-TSTJHNR4-CReoDBYo.js → cynefinDiagram-TSTJHNR4-gjgzmagS.js} +1 -1
- package/web/assets/{dagre-VKFMJZFB-CBLLzMxd.js → dagre-VKFMJZFB-DvLPeYuw.js} +1 -1
- package/web/assets/{diagram-FQU43EPY-BcGWiZXZ.js → diagram-FQU43EPY-443LFnzG.js} +1 -1
- package/web/assets/{diagram-G47NLZAW-BXUYZA9N.js → diagram-G47NLZAW-CqfUewot.js} +1 -1
- package/web/assets/{diagram-NH7WQ7WH-BrvrZs7N.js → diagram-NH7WQ7WH-D-FElUGW.js} +1 -1
- package/web/assets/{diagram-OA4YK3LP-7lnVcjXL.js → diagram-OA4YK3LP-DbidUAp5.js} +1 -1
- package/web/assets/{diagram-WEI45ONY-s58_bMFf.js → diagram-WEI45ONY-CPLeckCZ.js} +1 -1
- package/web/assets/{ebnfDiagram-CCIWWBDH-BemWecoD.js → ebnfDiagram-CCIWWBDH-DR0rqZzN.js} +1 -1
- package/web/assets/{entity-search-page-G6QEQNXT--sKP5dP3.js → entity-search-page-G6QEQNXT-CnG8d-at.js} +1 -1
- package/web/assets/{erDiagram-Q63AITRT-ClVJddch.js → erDiagram-Q63AITRT-DMXv_8Tj.js} +1 -1
- package/web/assets/{flowDiagram-23GEKE2U-xzUJu-i_.js → flowDiagram-23GEKE2U-DnbQjZs0.js} +1 -1
- package/web/assets/{ganttDiagram-NO4QXBWP-CXQmtF5g.js → ganttDiagram-NO4QXBWP-DBKIrjj8.js} +1 -1
- package/web/assets/{gitGraphDiagram-IHSO6WYX-DCdljcLl.js → gitGraphDiagram-IHSO6WYX-BqqxKWT_.js} +1 -1
- package/web/assets/{index-CtTx1o2d.js → index-Bd3ghcW-.js} +5 -5
- package/web/assets/{index-vjrhIAJn.css → index-Dt8OzQCe.css} +1 -1
- package/web/assets/{infoDiagram-FWYZ7A6U-B11SJYSK.js → infoDiagram-FWYZ7A6U-Ba6Fs17y.js} +1 -1
- package/web/assets/{ishikawaDiagram-FXEZZL3T-B2CCGlAm.js → ishikawaDiagram-FXEZZL3T-D3BOtFjy.js} +1 -1
- package/web/assets/{journeyDiagram-5HDEW3XC-CBPETzOk.js → journeyDiagram-5HDEW3XC-MbzFPQm8.js} +1 -1
- package/web/assets/{kanban-definition-HUTT4EX6-unhQ3RPE.js → kanban-definition-HUTT4EX6-CurBmwu1.js} +1 -1
- package/web/assets/{linear-DuP_pG51.js → linear-CQIr4JjI.js} +1 -1
- package/web/assets/{linked-session-header-M7WY6IGF-DwlNCJlj.js → linked-session-header-M7WY6IGF-BBgN8zTq.js} +1 -1
- package/web/assets/{mermaid.core-BlYNzkpn.js → mermaid.core-bE6Vl3bZ.js} +4 -4
- package/web/assets/{mindmap-definition-LN4V7U3C-CtKHN6O1.js → mindmap-definition-LN4V7U3C-C1a46OGU.js} +1 -1
- package/web/assets/{pegDiagram-2B236MQR-CRyz6XWY.js → pegDiagram-2B236MQR-DZxMOxek.js} +1 -1
- package/web/assets/{pieDiagram-ENE6RG2P-BXfkPm3Q.js → pieDiagram-ENE6RG2P-BN0XOKLi.js} +1 -1
- package/web/assets/{plugin-host-modules-5NQgs5Cq.js → plugin-host-modules-CaRD5_5q.js} +1 -1
- package/web/assets/{project-search-dialog-HJFGW4DG-DPly4OiB.js → project-search-dialog-HJFGW4DG-h_dHeh7g.js} +1 -1
- package/web/assets/{project-search-page-NKQEBGPF-Cc6HV7BN.js → project-search-page-NKQEBGPF-2AzjjLEC.js} +1 -1
- package/web/assets/{quadrantDiagram-ABIIQ3AL-Drb_qWex.js → quadrantDiagram-ABIIQ3AL-C6IegTP-.js} +1 -1
- package/web/assets/{railroadDiagram-RFXS5EU6-DCKk2Pix.js → railroadDiagram-RFXS5EU6-bsjyAl-q.js} +1 -1
- package/web/assets/{requirementDiagram-TGXJPOKE-6WwZwcpD.js → requirementDiagram-TGXJPOKE-Cl8EZWy7.js} +1 -1
- package/web/assets/{sankeyDiagram-HTMAVEWB-DGGk3WCE.js → sankeyDiagram-HTMAVEWB-DhK4rRux.js} +1 -1
- package/web/assets/{selection-popup-532EHNCZ-yPhTrk7L.js → selection-popup-532EHNCZ-E2iQ2gQQ.js} +1 -1
- package/web/assets/{sequenceDiagram-DBY2YBRQ-a4tGi3DH.js → sequenceDiagram-DBY2YBRQ-DQTaPSD6.js} +1 -1
- package/web/assets/{sizeCapture-X5ZJPWSS-CHehBmy9.js → sizeCapture-X5ZJPWSS-k77bZ1zg.js} +1 -1
- package/web/assets/{stateDiagram-2N3HPSRC-Bn9GSWgV.js → stateDiagram-2N3HPSRC-Cv_5WuZJ.js} +1 -1
- package/web/assets/{stateDiagram-v2-6OUMAXLB-DI7fdBd7.js → stateDiagram-v2-6OUMAXLB-DJ1Lrskh.js} +1 -1
- package/web/assets/{swimlanes-5IMT3BWC-BX0WRzfR.js → swimlanes-5IMT3BWC-gBtAjG3z.js} +2 -2
- package/web/assets/swimlanesDiagram-G3AALYLV-DF1K9voG.js +8 -0
- package/web/assets/{timeline-definition-FHXFAJF6-9Ni2kIzq.js → timeline-definition-FHXFAJF6-CFjnM1Qq.js} +1 -1
- package/web/assets/{vennDiagram-L72KCM5P-rfBSNh3U.js → vennDiagram-L72KCM5P-CeMWrThY.js} +1 -1
- package/web/assets/{wardleyDiagram-EHGQE667-CzziImCC.js → wardleyDiagram-EHGQE667-R-ZaAOAI.js} +1 -1
- package/web/assets/{xychartDiagram-FW5EYKEG-DTLI4h5R.js → xychartDiagram-FW5EYKEG-BFXoMXiN.js} +1 -1
- package/web/index.html +2 -2
- package/web/assets/channel-um92dqpm.js +0 -1
- package/web/assets/classDiagram-OUVF2IWQ-h7sFEJBg.js +0 -1
- package/web/assets/classDiagram-v2-EOCWNBFH-h7sFEJBg.js +0 -1
- package/web/assets/swimlanesDiagram-G3AALYLV-OGHC9nqi.js +0 -8
|
@@ -13,8 +13,15 @@ class FolderPluginFailure extends Error {
|
|
|
13
13
|
}
|
|
14
14
|
|
|
15
15
|
// packages/notes/src/server.ts
|
|
16
|
-
import { readdir, stat } from "node:fs/promises";
|
|
17
|
-
import {
|
|
16
|
+
import { readdir, realpath, stat } from "node:fs/promises";
|
|
17
|
+
import {
|
|
18
|
+
basename,
|
|
19
|
+
extname,
|
|
20
|
+
isAbsolute,
|
|
21
|
+
relative,
|
|
22
|
+
resolve,
|
|
23
|
+
sep
|
|
24
|
+
} from "node:path";
|
|
18
25
|
|
|
19
26
|
// packages/notes/src/manifest.ts
|
|
20
27
|
var notesManifest = {
|
|
@@ -60,17 +67,41 @@ async function listMarkdownFiles(folder) {
|
|
|
60
67
|
await visit(folder);
|
|
61
68
|
return files.sort((left, right) => right.activityAt - left.activityAt);
|
|
62
69
|
}
|
|
63
|
-
|
|
70
|
+
var canonical = (path) => realpath(path).catch(() => path);
|
|
71
|
+
function inside(path, root) {
|
|
72
|
+
const local = relative(root, path);
|
|
73
|
+
return local === "" || !local.startsWith("..") && !isAbsolute(local);
|
|
74
|
+
}
|
|
75
|
+
async function withoutManaged(groups, managedRoots) {
|
|
76
|
+
if (!managedRoots.length)
|
|
77
|
+
return groups;
|
|
78
|
+
const roots = await Promise.all(managedRoots.map(canonical));
|
|
79
|
+
return Promise.all(groups.map(async (group) => {
|
|
80
|
+
if (roots.includes(await canonical(group.folder))) {
|
|
81
|
+
return { ...group, files: [] };
|
|
82
|
+
}
|
|
83
|
+
const files = await Promise.all(group.files.map(async (file) => {
|
|
84
|
+
const real = await canonical(resolve(group.folder, file.relativePath));
|
|
85
|
+
return roots.some((root) => inside(real, root)) ? undefined : file;
|
|
86
|
+
}));
|
|
87
|
+
return { ...group, files: files.filter((file) => file !== undefined) };
|
|
88
|
+
}));
|
|
89
|
+
}
|
|
90
|
+
async function loadNotes(folder, linkedFolders = [], managedFolders = []) {
|
|
64
91
|
const localFiles = await listMarkdownFiles(folder);
|
|
65
|
-
const
|
|
66
|
-
files: await listMarkdownFiles(
|
|
67
|
-
folder:
|
|
92
|
+
const listGroups = (folders) => Promise.all(folders.map(async (source) => ({
|
|
93
|
+
files: await listMarkdownFiles(source),
|
|
94
|
+
folder: source
|
|
68
95
|
})));
|
|
96
|
+
const [managed, linked] = await Promise.all([
|
|
97
|
+
listGroups(managedFolders),
|
|
98
|
+
listGroups(linkedFolders).then((groups) => withoutManaged(groups, managedFolders))
|
|
99
|
+
]);
|
|
69
100
|
return {
|
|
70
101
|
files: {
|
|
71
102
|
items: [
|
|
72
103
|
...localFiles,
|
|
73
|
-
...linked.flatMap((group) => group.files.map((file) => ({ ...file, folder: group.folder })))
|
|
104
|
+
...[...managed, ...linked].flatMap((group) => group.files.map((file) => ({ ...file, folder: group.folder })))
|
|
74
105
|
]
|
|
75
106
|
},
|
|
76
107
|
folder,
|
|
@@ -87,12 +118,18 @@ function codeSpan(text) {
|
|
|
87
118
|
async function notesLlmSections({
|
|
88
119
|
folder,
|
|
89
120
|
linkedFolders = [],
|
|
121
|
+
managedFolders = [],
|
|
90
122
|
signal
|
|
91
123
|
}) {
|
|
92
124
|
const groups = [];
|
|
93
125
|
const notes = [];
|
|
94
|
-
|
|
126
|
+
const seen = new Set;
|
|
127
|
+
for (const source of [folder, ...managedFolders, ...linkedFolders]) {
|
|
95
128
|
signal.throwIfAborted();
|
|
129
|
+
const identity = await canonical(source);
|
|
130
|
+
if (seen.has(identity))
|
|
131
|
+
continue;
|
|
132
|
+
seen.add(identity);
|
|
96
133
|
const files = await listMarkdownFiles(source);
|
|
97
134
|
const paths = files.map((file) => resolve(source, file.relativePath));
|
|
98
135
|
groups.push({ folder: source, paths });
|
|
@@ -127,9 +164,13 @@ function createNotesPlugin() {
|
|
|
127
164
|
},
|
|
128
165
|
async handle({
|
|
129
166
|
folder,
|
|
130
|
-
linkedFolders
|
|
167
|
+
linkedFolders,
|
|
168
|
+
managedFolders
|
|
131
169
|
}) {
|
|
132
|
-
return {
|
|
170
|
+
return {
|
|
171
|
+
data: await loadNotes(folder, linkedFolders, managedFolders),
|
|
172
|
+
kind: "available"
|
|
173
|
+
};
|
|
133
174
|
},
|
|
134
175
|
llm: notesLlmSections
|
|
135
176
|
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "kennel",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.34",
|
|
4
4
|
"description": "Open-source pop-up previews for AI output: markdown, HTML artifacts, email, images, code, tables, notes, and calendars, from the terminal or your agent session.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -43,13 +43,15 @@
|
|
|
43
43
|
"bin",
|
|
44
44
|
"dist",
|
|
45
45
|
"schemas",
|
|
46
|
+
"scripts/verify-config.mjs",
|
|
46
47
|
"templates",
|
|
47
48
|
"web"
|
|
48
49
|
],
|
|
49
50
|
"scripts": {
|
|
50
51
|
"build": "node scripts/build.mjs",
|
|
51
52
|
"typecheck": "tsc -p tsconfig.json --noEmit",
|
|
52
|
-
"check": "npm run build && node --check bin/kennel.mjs && node --check dist/main.js && npm run smoke",
|
|
53
|
+
"check": "npm run build && node --check bin/kennel.mjs && node --check dist/main.js && npm run smoke && npm run verify:config",
|
|
54
|
+
"verify:config": "node scripts/verify-config.mjs .",
|
|
53
55
|
"smoke": "node --input-type=module -e \"await import('./dist/mcp/generate.js')\"",
|
|
54
56
|
"prepack": "node scripts/build.mjs",
|
|
55
57
|
"pack:check": "bun pm pack --dry-run",
|
|
@@ -67,7 +69,7 @@
|
|
|
67
69
|
"effect": "^3.19.7",
|
|
68
70
|
"esbuild": "^0.27.0",
|
|
69
71
|
"kennel-mcp": "https://registry.npmjs.org/%40raggle-ai%2fkennel-mcp/-/kennel-mcp-0.1.8.tgz",
|
|
70
|
-
"kennel-plugins": "0.1.
|
|
72
|
+
"kennel-plugins": "0.1.16",
|
|
71
73
|
"koffi": "^3.3.1",
|
|
72
74
|
"lucide-react": "^0.562.0",
|
|
73
75
|
"radix-ui": "^1.6.7",
|
|
@@ -85,6 +87,7 @@
|
|
|
85
87
|
"@types/node": "^22.13.4",
|
|
86
88
|
"kennel-api": "0.1.0",
|
|
87
89
|
"kennel-llm": "0.1.0",
|
|
90
|
+
"kennel-notes": "0.1.0",
|
|
88
91
|
"kennel-preview": "0.1.0",
|
|
89
92
|
"typescript": "^5.9.3"
|
|
90
93
|
},
|
|
@@ -20,6 +20,17 @@
|
|
|
20
20
|
"description": "Resolved external folder plugins. Managed by `kennel plugin add`.",
|
|
21
21
|
"type": "array",
|
|
22
22
|
"items": { "$ref": "#/$defs/externalPlugin" }
|
|
23
|
+
},
|
|
24
|
+
"repositoryNotes": {
|
|
25
|
+
"description": "Opt-in Markdown notes per Git repository, stored in $XDG_CONFIG_HOME/kennel/repos/<uuid>/ and shown in that repository's Notes view. `kennel notes path` registers a repository only when enabled is true.",
|
|
26
|
+
"type": "object",
|
|
27
|
+
"additionalProperties": false,
|
|
28
|
+
"properties": {
|
|
29
|
+
"enabled": {
|
|
30
|
+
"description": "Allow `kennel notes` registration and show managed notes in local repository views.",
|
|
31
|
+
"type": "boolean"
|
|
32
|
+
}
|
|
33
|
+
}
|
|
23
34
|
}
|
|
24
35
|
},
|
|
25
36
|
"$defs": {
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import assert from "node:assert/strict"
|
|
2
|
+
import { spawnSync } from "node:child_process"
|
|
3
|
+
import { mkdtemp, mkdir, readFile, rm, writeFile } from "node:fs/promises"
|
|
4
|
+
import { createRequire } from "node:module"
|
|
5
|
+
import { tmpdir } from "node:os"
|
|
6
|
+
import { join, resolve } from "node:path"
|
|
7
|
+
|
|
8
|
+
// Run against the built checkout, a packed install, or a released npm install.
|
|
9
|
+
// Usage: node packages/cli/scripts/verify-config.mjs <CLI package directory>
|
|
10
|
+
const [directory] = process.argv.slice(2)
|
|
11
|
+
if (!directory) throw new Error("Supply the CLI package directory")
|
|
12
|
+
const root = resolve(directory)
|
|
13
|
+
const require = createRequire(join(root, "package.json"))
|
|
14
|
+
const { z } = require("zod")
|
|
15
|
+
const schema = JSON.parse(await readFile(join(root, "schemas/config.schema.json"), "utf8"))
|
|
16
|
+
assert.equal(schema.$id, "https://raggle.co/kennel/config.json")
|
|
17
|
+
const validator = z.fromJSONSchema(schema)
|
|
18
|
+
const temporary = await mkdtemp(join(tmpdir(), "kennel-config-verify-"))
|
|
19
|
+
|
|
20
|
+
try {
|
|
21
|
+
const configHome = join(temporary, "config")
|
|
22
|
+
const configFile = join(configHome, "kennel/config.json")
|
|
23
|
+
await mkdir(join(configHome, "kennel"), { recursive: true })
|
|
24
|
+
const config = {
|
|
25
|
+
$schema: schema.$id,
|
|
26
|
+
allowedRoots: [temporary],
|
|
27
|
+
externalPlugins: [],
|
|
28
|
+
repositoryNotes: { enabled: true },
|
|
29
|
+
}
|
|
30
|
+
const cases = [
|
|
31
|
+
{ name: "repository notes enabled", value: config, valid: true },
|
|
32
|
+
{ name: "invalid repository notes flag", value: { ...config, repositoryNotes: { enabled: "true" } }, valid: false, field: "repositoryNotes" },
|
|
33
|
+
{ name: "unknown setting", value: { ...config, unknownSetting: true }, valid: false, field: "unknownSetting" },
|
|
34
|
+
]
|
|
35
|
+
|
|
36
|
+
for (const { name, value, valid, field } of cases) {
|
|
37
|
+
assert.equal(validator.safeParse(value).success, valid, `${name}: packaged schema verdict`)
|
|
38
|
+
await writeFile(configFile, `${JSON.stringify(value, null, 2)}\n`)
|
|
39
|
+
const result = spawnSync(process.execPath, [join(root, "bin/kennel.mjs"), "plugin", "list"], {
|
|
40
|
+
cwd: temporary,
|
|
41
|
+
env: { ...process.env, XDG_CONFIG_HOME: configHome, XDG_CACHE_HOME: join(temporary, "cache") },
|
|
42
|
+
encoding: "utf8",
|
|
43
|
+
timeout: 30_000,
|
|
44
|
+
})
|
|
45
|
+
if (result.error) throw result.error
|
|
46
|
+
assert.equal(result.signal, null, `${name}: CLI terminated by signal`)
|
|
47
|
+
if (valid) {
|
|
48
|
+
assert.equal(result.status, 0, `${name}: ${result.stderr}`)
|
|
49
|
+
assert.match(result.stdout, /No external plugins installed\./)
|
|
50
|
+
} else {
|
|
51
|
+
assert.equal(result.status, 2, `${name}: CLI must reject invalid config`)
|
|
52
|
+
assert.ok(result.stderr.includes(`Invalid Kennel config at ${configFile}`), `${name}: expected config validation error, got ${result.stderr}`)
|
|
53
|
+
assert.ok(result.stderr.includes(field), `${name}: error must identify ${field}`)
|
|
54
|
+
}
|
|
55
|
+
console.log(`PASS: ${name} (packaged schema and installed CLI)`)
|
|
56
|
+
}
|
|
57
|
+
} finally {
|
|
58
|
+
await rm(temporary, { recursive: true, force: true })
|
|
59
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{g as p,r as u,d as a}from"./chunk-MOJQB5TN-
|
|
1
|
+
import{g as p,r as u,d as a}from"./chunk-MOJQB5TN-CuIx80Vn.js";import{p as f}from"./chunk-JWPE2WC7-Dy_9wZ2Y.js";import{_ as n,l as o}from"./mermaid.core-bE6Vl3bZ.js";import{b as c,M as d}from"./cynefin-VYW2F7L2-DxAlRHA1.js";import"./index-Bd3ghcW-.js";import"./react-DELVxLrX.js";import"./markdown-BP-54rPU.js";import"./tanstack-CRaSxWtK.js";var v=c().RailroadAbnf.parser.LangiumParser,i=n(e=>{const r=e.alternatives.map(g);return r.length===1?r[0]:{type:"choice",alternatives:r}},"transformAlternation"),g=n(e=>{const r=e.elements.map(y);return r.length===1?r[0]:{type:"sequence",elements:r}},"transformConcatenation"),b=n(e=>{if(e.includes("*")){const[t,s]=e.split("*"),m=t?parseInt(t,10):0,l=s?parseInt(s,10):1/0;return{min:m,max:l}}const r=parseInt(e,10);return{min:r,max:r}},"parseRepeat"),y=n(e=>{const r=A(e.primary);if(!e.repeat)return r;const{min:t,max:s}=b(e.repeat);return t===0&&s===1?{type:"optional",element:r}:{type:"repetition",element:r,min:t,max:s}},"transformElement"),A=n(e=>{switch(e.$type){case"AbnfStringLiteral":return{type:"terminal",value:e.value};case"AbnfNumVal":return{type:"terminal",value:e.value};case"AbnfRuleName":return{type:"nonterminal",name:e.name};case"AbnfGroup":return i(e.element);case"AbnfOptionalGroup":return{type:"optional",element:i(e.element)};default:throw new Error(`Unsupported ABNF primary node: ${e.$type}`)}},"transformPrimary"),P=n(e=>({name:e.name,definition:i(e.definition)}),"transformRule"),h=n(e=>{f(e,a),e.title&&a.setTitle(e.title),e.rules.map(r=>a.addRule(P(r)))},"populateDb"),R={parse:n(e=>{a.clear(),o.debug("[ABNF Parser] Starting Langium parse");const r=v.parse(e);if(r.lexerErrors.length>0||r.parserErrors.length>0)throw new d(r);const t=r.value;o.debug("[ABNF Parser] Parsed rules:",t.rules.length),h(t),o.debug("[ABNF Parser] Parse complete")},"parse"),parser:{yy:a}},C={parser:R,db:a,renderer:u,styles:p};export{C as diagram};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{Y as ln,$ as an,a0 as F,a1 as q,a2 as j,a3 as un,a4 as y,a5 as tn,a6 as J,a7 as _,a8 as rn,a9 as o,aa as sn,ab as on,ac as fn}from"./mermaid.core-
|
|
1
|
+
import{Y as ln,$ as an,a0 as F,a1 as q,a2 as j,a3 as un,a4 as y,a5 as tn,a6 as J,a7 as _,a8 as rn,a9 as o,aa as sn,ab as on,ac as fn}from"./mermaid.core-bE6Vl3bZ.js";function cn(l){return l.innerRadius}function yn(l){return l.outerRadius}function gn(l){return l.startAngle}function dn(l){return l.endAngle}function mn(l){return l&&l.padAngle}function pn(l,h,I,D,v,A,z,a){var O=I-l,i=D-h,n=z-v,d=a-A,u=d*O-n*i;if(!(u*u<y))return u=(n*(h-A)-d*(l-v))/u,[l+u*O,h+u*i]}function U(l,h,I,D,v,A,z){var a=l-I,O=h-D,i=(z?A:-A)/J(a*a+O*O),n=i*O,d=-i*a,u=l+n,s=h+d,f=I+n,c=D+d,B=(u+f)/2,t=(s+c)/2,m=f-u,g=c-s,R=m*m+g*g,T=v-A,P=u*c-f*s,S=(g<0?-1:1)*J(on(0,T*T*R-P*P)),Y=(P*g-m*S)/R,$=(-P*m-g*S)/R,w=(P*g+m*S)/R,p=(-P*m+g*S)/R,x=Y-B,e=$-t,r=w-B,C=p-t;return x*x+e*e>r*r+C*C&&(Y=w,$=p),{cx:Y,cy:$,x01:-n,y01:-d,x11:Y*(v/T-1),y11:$*(v/T-1)}}function hn(){var l=cn,h=yn,I=j(0),D=null,v=gn,A=dn,z=mn,a=null,O=ln(i);function i(){var n,d,u=+l.apply(this,arguments),s=+h.apply(this,arguments),f=v.apply(this,arguments)-un,c=A.apply(this,arguments)-un,B=rn(c-f),t=c>f;if(a||(a=n=O()),s<u&&(d=s,s=u,u=d),!(s>y))a.moveTo(0,0);else if(B>tn-y)a.moveTo(s*F(f),s*q(f)),a.arc(0,0,s,f,c,!t),u>y&&(a.moveTo(u*F(c),u*q(c)),a.arc(0,0,u,c,f,t));else{var m=f,g=c,R=f,T=c,P=B,S=B,Y=z.apply(this,arguments)/2,$=Y>y&&(D?+D.apply(this,arguments):J(u*u+s*s)),w=_(rn(s-u)/2,+I.apply(this,arguments)),p=w,x=w,e,r;if($>y){var C=sn($/u*q(Y)),K=sn($/s*q(Y));(P-=C*2)>y?(C*=t?1:-1,R+=C,T-=C):(P=0,R=T=(f+c)/2),(S-=K*2)>y?(K*=t?1:-1,m+=K,g-=K):(S=0,m=g=(f+c)/2)}var G=s*F(m),H=s*q(m),L=u*F(T),M=u*q(T);if(w>y){var N=s*F(g),Q=s*q(g),V=u*F(R),W=u*q(R),E;if(B<an)if(E=pn(G,H,V,W,N,Q,L,M)){var X=G-E[0],Z=H-E[1],b=N-E[0],k=Q-E[1],nn=1/q(fn((X*b+Z*k)/(J(X*X+Z*Z)*J(b*b+k*k)))/2),en=J(E[0]*E[0]+E[1]*E[1]);p=_(w,(u-en)/(nn-1)),x=_(w,(s-en)/(nn+1))}else p=x=0}S>y?x>y?(e=U(V,W,G,H,s,x,t),r=U(N,Q,L,M,s,x,t),a.moveTo(e.cx+e.x01,e.cy+e.y01),x<w?a.arc(e.cx,e.cy,x,o(e.y01,e.x01),o(r.y01,r.x01),!t):(a.arc(e.cx,e.cy,x,o(e.y01,e.x01),o(e.y11,e.x11),!t),a.arc(0,0,s,o(e.cy+e.y11,e.cx+e.x11),o(r.cy+r.y11,r.cx+r.x11),!t),a.arc(r.cx,r.cy,x,o(r.y11,r.x11),o(r.y01,r.x01),!t))):(a.moveTo(G,H),a.arc(0,0,s,m,g,!t)):a.moveTo(G,H),!(u>y)||!(P>y)?a.lineTo(L,M):p>y?(e=U(L,M,N,Q,u,-p,t),r=U(G,H,V,W,u,-p,t),a.lineTo(e.cx+e.x01,e.cy+e.y01),p<w?a.arc(e.cx,e.cy,p,o(e.y01,e.x01),o(r.y01,r.x01),!t):(a.arc(e.cx,e.cy,p,o(e.y01,e.x01),o(e.y11,e.x11),!t),a.arc(0,0,u,o(e.cy+e.y11,e.cx+e.x11),o(r.cy+r.y11,r.cx+r.x11),t),a.arc(r.cx,r.cy,p,o(r.y11,r.x11),o(r.y01,r.x01),!t))):a.arc(0,0,u,T,R,t)}if(a.closePath(),n)return a=null,n+""||null}return i.centroid=function(){var n=(+l.apply(this,arguments)+ +h.apply(this,arguments))/2,d=(+v.apply(this,arguments)+ +A.apply(this,arguments))/2-an/2;return[F(d)*n,q(d)*n]},i.innerRadius=function(n){return arguments.length?(l=typeof n=="function"?n:j(+n),i):l},i.outerRadius=function(n){return arguments.length?(h=typeof n=="function"?n:j(+n),i):h},i.cornerRadius=function(n){return arguments.length?(I=typeof n=="function"?n:j(+n),i):I},i.padRadius=function(n){return arguments.length?(D=n==null?null:typeof n=="function"?n:j(+n),i):D},i.startAngle=function(n){return arguments.length?(v=typeof n=="function"?n:j(+n),i):v},i.endAngle=function(n){return arguments.length?(A=typeof n=="function"?n:j(+n),i):A},i.padAngle=function(n){return arguments.length?(z=typeof n=="function"?n:j(+n),i):z},i.context=function(n){return arguments.length?(a=n??null,i):a},i}export{hn as d};
|