superbee 0.4.3-pre.3 → 0.4.3-pre.5
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 +6 -0
- package/SKILL.md +1 -1
- package/dist/publication-bridge.mjs +148 -3
- package/dist/publication.mjs +155 -6
- package/dist/superbee.mjs +3395 -1654
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -92,6 +92,12 @@ Setup itself changes nothing. It inspects your configuration and returns one saf
|
|
|
92
92
|
a time, and the agent runs each with your approval. Setup knows Claude Code, Codex, and OpenCode,
|
|
93
93
|
plus Claude Desktop for the MCP registration only.
|
|
94
94
|
|
|
95
|
+
For a fresh cloud container, provision Superbee in the environment setup step before agent tool
|
|
96
|
+
use. Generated hooks bind absolute Node and CLI paths from their installation, so a project hook
|
|
97
|
+
copied from a laptop does not install Superbee or provide a working container launcher. Configure
|
|
98
|
+
hooks inside the environment and verify startup in a fresh session. Startup pulls are best-effort;
|
|
99
|
+
inspect an explicit `superbee sync` receipt to verify publication of edits.
|
|
100
|
+
|
|
95
101
|
## Everyday use
|
|
96
102
|
|
|
97
103
|
You rarely type Superbee commands yourself. You ask your agent, and the Agent Skill translates the
|
package/SKILL.md
CHANGED
|
@@ -97,7 +97,7 @@ When the tone fits, a single 🐝 may mark a successful Superbee outcome.
|
|
|
97
97
|
|
|
98
98
|
## Host setup
|
|
99
99
|
|
|
100
|
-
Persistent integrations require `npm install -g superbee` followed by `superbee setup`.
|
|
100
|
+
Persistent integrations require `npm install -g superbee` followed by `superbee setup`. Fresh cloud containers need the CLI provisioned before agent tool use and container-valid hook paths; copied laptop hooks do not provision them. Startup pulls are best-effort; inspect sync receipts to verify publication.
|
|
101
101
|
Setup is an agent-driven read-only conductor: the calling agent selects its exact host, executes
|
|
102
102
|
the returned argv action, reports what it is doing, requests approval only when the action says
|
|
103
103
|
`approval.required: true`, restarts after Skill, Hook, or MCP changes, and reruns setup to verify.
|
|
@@ -3199,7 +3199,8 @@ function isExternalHref(href) {
|
|
|
3199
3199
|
const h = href.trim();
|
|
3200
3200
|
return /^[a-z][a-z0-9+.-]*:\/\//i.test(h) || h.startsWith("mailto:") || h.startsWith("#");
|
|
3201
3201
|
}
|
|
3202
|
-
function extractMarkdownLinks(
|
|
3202
|
+
function extractMarkdownLinks(source, options = {}) {
|
|
3203
|
+
const body = options.skipCode ? maskMarkdownCode(source) : source;
|
|
3203
3204
|
const out = [];
|
|
3204
3205
|
let textOpen = -1;
|
|
3205
3206
|
let afterClose;
|
|
@@ -3211,8 +3212,8 @@ function extractMarkdownLinks(body) {
|
|
|
3211
3212
|
if (char === ")") {
|
|
3212
3213
|
if (hrefRest.open === 0 || body[hrefRest.open - 1] !== "!") {
|
|
3213
3214
|
out.push({
|
|
3214
|
-
text:
|
|
3215
|
-
href:
|
|
3215
|
+
text: source.slice(hrefRest.open + 1, hrefRest.close),
|
|
3216
|
+
href: source.slice(hrefRest.hrefStart, cursor)
|
|
3216
3217
|
});
|
|
3217
3218
|
}
|
|
3218
3219
|
textOpen = -1;
|
|
@@ -3243,6 +3244,150 @@ function extractMarkdownLinks(body) {
|
|
|
3243
3244
|
}
|
|
3244
3245
|
return out;
|
|
3245
3246
|
}
|
|
3247
|
+
function leadingIndent(line, from, startColumn) {
|
|
3248
|
+
let columns = 0;
|
|
3249
|
+
let index = from;
|
|
3250
|
+
while (index < line.length) {
|
|
3251
|
+
const char = line[index];
|
|
3252
|
+
if (char === " ") columns += 1;
|
|
3253
|
+
else if (char === " ") columns += 4 - (startColumn + columns) % 4;
|
|
3254
|
+
else break;
|
|
3255
|
+
index++;
|
|
3256
|
+
}
|
|
3257
|
+
return { columns, chars: index - from };
|
|
3258
|
+
}
|
|
3259
|
+
var FENCE_OPEN = /^(`{3,}|~{3,})(.*)$/;
|
|
3260
|
+
var LIST_MARKER = /^([-+*]|\d{1,9}[.)])([ \t]+|$)/;
|
|
3261
|
+
var THEMATIC_BREAK = /^(?:(?:\*[ \t]*){3,}|(?:-[ \t]*){3,}|(?:_[ \t]*){3,})$/;
|
|
3262
|
+
var ATX_HEADING = /^#{1,6}(?:[ \t]|$)/;
|
|
3263
|
+
function maskMarkdownCode(body) {
|
|
3264
|
+
const out = body.split("");
|
|
3265
|
+
const blank = (from, to) => {
|
|
3266
|
+
for (let index = from; index < to; index++) if (out[index] !== "\n" && out[index] !== "\r") out[index] = " ";
|
|
3267
|
+
};
|
|
3268
|
+
const lists = [];
|
|
3269
|
+
let fence = null;
|
|
3270
|
+
let inParagraph = false;
|
|
3271
|
+
let segmentStart = -1;
|
|
3272
|
+
const closeSegment = (end) => {
|
|
3273
|
+
if (segmentStart >= 0) maskCodeSpans(body, segmentStart, end, blank);
|
|
3274
|
+
segmentStart = -1;
|
|
3275
|
+
};
|
|
3276
|
+
let lineStart = 0;
|
|
3277
|
+
while (lineStart <= body.length) {
|
|
3278
|
+
const newline = body.indexOf("\n", lineStart);
|
|
3279
|
+
const lineEnd = newline < 0 ? body.length : newline;
|
|
3280
|
+
const line = body.slice(lineStart, lineEnd);
|
|
3281
|
+
let contentAt = 0;
|
|
3282
|
+
let quotes = 0;
|
|
3283
|
+
for (let match = /^ {0,3}> ?/.exec(line); match; match = /^ {0,3}> ?/.exec(line.slice(contentAt))) {
|
|
3284
|
+
if (fence && quotes >= fence.quotes) break;
|
|
3285
|
+
contentAt += match[0].length;
|
|
3286
|
+
quotes++;
|
|
3287
|
+
}
|
|
3288
|
+
const { columns: indent, chars } = leadingIndent(line, contentAt, contentAt);
|
|
3289
|
+
const rest = line.slice(contentAt + chars).replace(/\r$/, "");
|
|
3290
|
+
const isBlank = rest.trim() === "";
|
|
3291
|
+
if (fence && (quotes < fence.quotes || !isBlank && indent < fence.container)) fence = null;
|
|
3292
|
+
if (fence) {
|
|
3293
|
+
const close = indent - fence.container <= 3 ? FENCE_OPEN.exec(rest) : null;
|
|
3294
|
+
if (close && close[1][0] === fence.char && close[1].length >= fence.length && close[2].trim() === "") fence = null;
|
|
3295
|
+
blank(lineStart, lineEnd);
|
|
3296
|
+
} else if (isBlank) {
|
|
3297
|
+
closeSegment(lineStart);
|
|
3298
|
+
inParagraph = false;
|
|
3299
|
+
} else {
|
|
3300
|
+
if (!inParagraph) while (lists.length > 0 && lists[lists.length - 1] > indent) lists.pop();
|
|
3301
|
+
let container = lists.length > 0 ? lists[lists.length - 1] : 0;
|
|
3302
|
+
let relative = indent - container;
|
|
3303
|
+
let text = rest;
|
|
3304
|
+
let textAt = lineStart + contentAt + chars;
|
|
3305
|
+
const marker = relative <= 3 && !THEMATIC_BREAK.test(text) ? LIST_MARKER.exec(text) : null;
|
|
3306
|
+
if (marker) {
|
|
3307
|
+
closeSegment(lineStart);
|
|
3308
|
+
const markerEnd = indent + marker[1].length;
|
|
3309
|
+
const spacing = leadingIndent(marker[2], 0, contentAt + markerEnd).columns;
|
|
3310
|
+
const wide = marker[2] === "" || spacing >= 5;
|
|
3311
|
+
lists.push(markerEnd + (wide ? 1 : spacing));
|
|
3312
|
+
container = lists[lists.length - 1];
|
|
3313
|
+
text = text.slice(marker[1].length + (wide ? 0 : marker[2].length));
|
|
3314
|
+
textAt += marker[1].length + (wide ? 0 : marker[2].length);
|
|
3315
|
+
relative = wide ? Math.max(spacing - 1, 0) : 0;
|
|
3316
|
+
inParagraph = false;
|
|
3317
|
+
}
|
|
3318
|
+
const open = relative <= 3 ? FENCE_OPEN.exec(text) : null;
|
|
3319
|
+
if (open && !(open[1][0] === "`" && open[2].includes("`"))) {
|
|
3320
|
+
closeSegment(lineStart);
|
|
3321
|
+
fence = { char: open[1][0], length: open[1].length, container, quotes };
|
|
3322
|
+
blank(textAt, lineEnd);
|
|
3323
|
+
inParagraph = false;
|
|
3324
|
+
} else if (!inParagraph && relative >= 4) {
|
|
3325
|
+
closeSegment(lineStart);
|
|
3326
|
+
blank(textAt, lineEnd);
|
|
3327
|
+
} else if (ATX_HEADING.test(text) || THEMATIC_BREAK.test(text)) {
|
|
3328
|
+
closeSegment(lineStart);
|
|
3329
|
+
maskCodeSpans(body, textAt, lineEnd, blank);
|
|
3330
|
+
inParagraph = false;
|
|
3331
|
+
} else {
|
|
3332
|
+
if (segmentStart < 0) segmentStart = textAt;
|
|
3333
|
+
inParagraph = text.trim() !== "";
|
|
3334
|
+
}
|
|
3335
|
+
}
|
|
3336
|
+
if (newline < 0) break;
|
|
3337
|
+
lineStart = newline + 1;
|
|
3338
|
+
}
|
|
3339
|
+
closeSegment(body.length);
|
|
3340
|
+
return out.join("");
|
|
3341
|
+
}
|
|
3342
|
+
function maskCodeSpans(body, from, to, blank) {
|
|
3343
|
+
const runs = [];
|
|
3344
|
+
for (let index = from; index < to; ) {
|
|
3345
|
+
if (body[index] !== "`") {
|
|
3346
|
+
index++;
|
|
3347
|
+
continue;
|
|
3348
|
+
}
|
|
3349
|
+
let end = index;
|
|
3350
|
+
while (end < to && body[end] === "`") end++;
|
|
3351
|
+
runs.push({ at: index, length: end - index });
|
|
3352
|
+
index = end;
|
|
3353
|
+
}
|
|
3354
|
+
const byLength = /* @__PURE__ */ new Map();
|
|
3355
|
+
runs.forEach((run, position) => {
|
|
3356
|
+
const list2 = byLength.get(run.length);
|
|
3357
|
+
if (list2) list2.push(position);
|
|
3358
|
+
else byLength.set(run.length, [position]);
|
|
3359
|
+
});
|
|
3360
|
+
const next = /* @__PURE__ */ new Map();
|
|
3361
|
+
const nextRun = (length, after) => {
|
|
3362
|
+
const list2 = byLength.get(length);
|
|
3363
|
+
if (!list2) return -1;
|
|
3364
|
+
let cursor = next.get(length) ?? 0;
|
|
3365
|
+
while (cursor < list2.length && list2[cursor] <= after) cursor++;
|
|
3366
|
+
next.set(length, cursor);
|
|
3367
|
+
return cursor < list2.length ? list2[cursor] : -1;
|
|
3368
|
+
};
|
|
3369
|
+
let escapeScan = from;
|
|
3370
|
+
let escaped = false;
|
|
3371
|
+
for (let position = 0; position < runs.length; position++) {
|
|
3372
|
+
let { at, length } = runs[position];
|
|
3373
|
+
for (; escapeScan < at; escapeScan++) escaped = body[escapeScan] === "\\" ? !escaped : false;
|
|
3374
|
+
if (escaped) {
|
|
3375
|
+
at += 1;
|
|
3376
|
+
length -= 1;
|
|
3377
|
+
escaped = false;
|
|
3378
|
+
if (length === 0) continue;
|
|
3379
|
+
const list2 = byLength.get(length);
|
|
3380
|
+
if (!list2) continue;
|
|
3381
|
+
}
|
|
3382
|
+
const closer = nextRun(length, position);
|
|
3383
|
+
if (closer < 0) continue;
|
|
3384
|
+
const close = runs[closer];
|
|
3385
|
+
blank(at, close.at + close.length);
|
|
3386
|
+
position = closer;
|
|
3387
|
+
escapeScan = close.at + close.length;
|
|
3388
|
+
escaped = false;
|
|
3389
|
+
}
|
|
3390
|
+
}
|
|
3246
3391
|
function resolveConceptId(fromId, href) {
|
|
3247
3392
|
const target = (href.split("#")[0] ?? "").split("?")[0]?.trim() ?? "";
|
|
3248
3393
|
if (target === "" || isExternalHref(target)) return null;
|
package/dist/publication.mjs
CHANGED
|
@@ -31153,7 +31153,8 @@ function isExternalHref(href) {
|
|
|
31153
31153
|
const h = href.trim();
|
|
31154
31154
|
return /^[a-z][a-z0-9+.-]*:\/\//i.test(h) || h.startsWith("mailto:") || h.startsWith("#");
|
|
31155
31155
|
}
|
|
31156
|
-
function extractMarkdownLinks(
|
|
31156
|
+
function extractMarkdownLinks(source, options = {}) {
|
|
31157
|
+
const body = options.skipCode ? maskMarkdownCode(source) : source;
|
|
31157
31158
|
const out = [];
|
|
31158
31159
|
let textOpen = -1;
|
|
31159
31160
|
let afterClose;
|
|
@@ -31165,8 +31166,8 @@ function extractMarkdownLinks(body) {
|
|
|
31165
31166
|
if (char === ")") {
|
|
31166
31167
|
if (hrefRest.open === 0 || body[hrefRest.open - 1] !== "!") {
|
|
31167
31168
|
out.push({
|
|
31168
|
-
text:
|
|
31169
|
-
href:
|
|
31169
|
+
text: source.slice(hrefRest.open + 1, hrefRest.close),
|
|
31170
|
+
href: source.slice(hrefRest.hrefStart, cursor)
|
|
31170
31171
|
});
|
|
31171
31172
|
}
|
|
31172
31173
|
textOpen = -1;
|
|
@@ -31197,6 +31198,150 @@ function extractMarkdownLinks(body) {
|
|
|
31197
31198
|
}
|
|
31198
31199
|
return out;
|
|
31199
31200
|
}
|
|
31201
|
+
function leadingIndent(line, from, startColumn) {
|
|
31202
|
+
let columns = 0;
|
|
31203
|
+
let index2 = from;
|
|
31204
|
+
while (index2 < line.length) {
|
|
31205
|
+
const char = line[index2];
|
|
31206
|
+
if (char === " ") columns += 1;
|
|
31207
|
+
else if (char === " ") columns += 4 - (startColumn + columns) % 4;
|
|
31208
|
+
else break;
|
|
31209
|
+
index2++;
|
|
31210
|
+
}
|
|
31211
|
+
return { columns, chars: index2 - from };
|
|
31212
|
+
}
|
|
31213
|
+
var FENCE_OPEN = /^(`{3,}|~{3,})(.*)$/;
|
|
31214
|
+
var LIST_MARKER = /^([-+*]|\d{1,9}[.)])([ \t]+|$)/;
|
|
31215
|
+
var THEMATIC_BREAK = /^(?:(?:\*[ \t]*){3,}|(?:-[ \t]*){3,}|(?:_[ \t]*){3,})$/;
|
|
31216
|
+
var ATX_HEADING = /^#{1,6}(?:[ \t]|$)/;
|
|
31217
|
+
function maskMarkdownCode(body) {
|
|
31218
|
+
const out = body.split("");
|
|
31219
|
+
const blank = (from, to) => {
|
|
31220
|
+
for (let index2 = from; index2 < to; index2++) if (out[index2] !== "\n" && out[index2] !== "\r") out[index2] = " ";
|
|
31221
|
+
};
|
|
31222
|
+
const lists = [];
|
|
31223
|
+
let fence = null;
|
|
31224
|
+
let inParagraph = false;
|
|
31225
|
+
let segmentStart = -1;
|
|
31226
|
+
const closeSegment = (end) => {
|
|
31227
|
+
if (segmentStart >= 0) maskCodeSpans(body, segmentStart, end, blank);
|
|
31228
|
+
segmentStart = -1;
|
|
31229
|
+
};
|
|
31230
|
+
let lineStart = 0;
|
|
31231
|
+
while (lineStart <= body.length) {
|
|
31232
|
+
const newline = body.indexOf("\n", lineStart);
|
|
31233
|
+
const lineEnd = newline < 0 ? body.length : newline;
|
|
31234
|
+
const line = body.slice(lineStart, lineEnd);
|
|
31235
|
+
let contentAt = 0;
|
|
31236
|
+
let quotes = 0;
|
|
31237
|
+
for (let match = /^ {0,3}> ?/.exec(line); match; match = /^ {0,3}> ?/.exec(line.slice(contentAt))) {
|
|
31238
|
+
if (fence && quotes >= fence.quotes) break;
|
|
31239
|
+
contentAt += match[0].length;
|
|
31240
|
+
quotes++;
|
|
31241
|
+
}
|
|
31242
|
+
const { columns: indent2, chars } = leadingIndent(line, contentAt, contentAt);
|
|
31243
|
+
const rest = line.slice(contentAt + chars).replace(/\r$/, "");
|
|
31244
|
+
const isBlank = rest.trim() === "";
|
|
31245
|
+
if (fence && (quotes < fence.quotes || !isBlank && indent2 < fence.container)) fence = null;
|
|
31246
|
+
if (fence) {
|
|
31247
|
+
const close = indent2 - fence.container <= 3 ? FENCE_OPEN.exec(rest) : null;
|
|
31248
|
+
if (close && close[1][0] === fence.char && close[1].length >= fence.length && close[2].trim() === "") fence = null;
|
|
31249
|
+
blank(lineStart, lineEnd);
|
|
31250
|
+
} else if (isBlank) {
|
|
31251
|
+
closeSegment(lineStart);
|
|
31252
|
+
inParagraph = false;
|
|
31253
|
+
} else {
|
|
31254
|
+
if (!inParagraph) while (lists.length > 0 && lists[lists.length - 1] > indent2) lists.pop();
|
|
31255
|
+
let container = lists.length > 0 ? lists[lists.length - 1] : 0;
|
|
31256
|
+
let relative = indent2 - container;
|
|
31257
|
+
let text4 = rest;
|
|
31258
|
+
let textAt = lineStart + contentAt + chars;
|
|
31259
|
+
const marker = relative <= 3 && !THEMATIC_BREAK.test(text4) ? LIST_MARKER.exec(text4) : null;
|
|
31260
|
+
if (marker) {
|
|
31261
|
+
closeSegment(lineStart);
|
|
31262
|
+
const markerEnd = indent2 + marker[1].length;
|
|
31263
|
+
const spacing = leadingIndent(marker[2], 0, contentAt + markerEnd).columns;
|
|
31264
|
+
const wide = marker[2] === "" || spacing >= 5;
|
|
31265
|
+
lists.push(markerEnd + (wide ? 1 : spacing));
|
|
31266
|
+
container = lists[lists.length - 1];
|
|
31267
|
+
text4 = text4.slice(marker[1].length + (wide ? 0 : marker[2].length));
|
|
31268
|
+
textAt += marker[1].length + (wide ? 0 : marker[2].length);
|
|
31269
|
+
relative = wide ? Math.max(spacing - 1, 0) : 0;
|
|
31270
|
+
inParagraph = false;
|
|
31271
|
+
}
|
|
31272
|
+
const open = relative <= 3 ? FENCE_OPEN.exec(text4) : null;
|
|
31273
|
+
if (open && !(open[1][0] === "`" && open[2].includes("`"))) {
|
|
31274
|
+
closeSegment(lineStart);
|
|
31275
|
+
fence = { char: open[1][0], length: open[1].length, container, quotes };
|
|
31276
|
+
blank(textAt, lineEnd);
|
|
31277
|
+
inParagraph = false;
|
|
31278
|
+
} else if (!inParagraph && relative >= 4) {
|
|
31279
|
+
closeSegment(lineStart);
|
|
31280
|
+
blank(textAt, lineEnd);
|
|
31281
|
+
} else if (ATX_HEADING.test(text4) || THEMATIC_BREAK.test(text4)) {
|
|
31282
|
+
closeSegment(lineStart);
|
|
31283
|
+
maskCodeSpans(body, textAt, lineEnd, blank);
|
|
31284
|
+
inParagraph = false;
|
|
31285
|
+
} else {
|
|
31286
|
+
if (segmentStart < 0) segmentStart = textAt;
|
|
31287
|
+
inParagraph = text4.trim() !== "";
|
|
31288
|
+
}
|
|
31289
|
+
}
|
|
31290
|
+
if (newline < 0) break;
|
|
31291
|
+
lineStart = newline + 1;
|
|
31292
|
+
}
|
|
31293
|
+
closeSegment(body.length);
|
|
31294
|
+
return out.join("");
|
|
31295
|
+
}
|
|
31296
|
+
function maskCodeSpans(body, from, to, blank) {
|
|
31297
|
+
const runs = [];
|
|
31298
|
+
for (let index2 = from; index2 < to; ) {
|
|
31299
|
+
if (body[index2] !== "`") {
|
|
31300
|
+
index2++;
|
|
31301
|
+
continue;
|
|
31302
|
+
}
|
|
31303
|
+
let end = index2;
|
|
31304
|
+
while (end < to && body[end] === "`") end++;
|
|
31305
|
+
runs.push({ at: index2, length: end - index2 });
|
|
31306
|
+
index2 = end;
|
|
31307
|
+
}
|
|
31308
|
+
const byLength = /* @__PURE__ */ new Map();
|
|
31309
|
+
runs.forEach((run, position2) => {
|
|
31310
|
+
const list3 = byLength.get(run.length);
|
|
31311
|
+
if (list3) list3.push(position2);
|
|
31312
|
+
else byLength.set(run.length, [position2]);
|
|
31313
|
+
});
|
|
31314
|
+
const next = /* @__PURE__ */ new Map();
|
|
31315
|
+
const nextRun = (length, after) => {
|
|
31316
|
+
const list3 = byLength.get(length);
|
|
31317
|
+
if (!list3) return -1;
|
|
31318
|
+
let cursor = next.get(length) ?? 0;
|
|
31319
|
+
while (cursor < list3.length && list3[cursor] <= after) cursor++;
|
|
31320
|
+
next.set(length, cursor);
|
|
31321
|
+
return cursor < list3.length ? list3[cursor] : -1;
|
|
31322
|
+
};
|
|
31323
|
+
let escapeScan = from;
|
|
31324
|
+
let escaped = false;
|
|
31325
|
+
for (let position2 = 0; position2 < runs.length; position2++) {
|
|
31326
|
+
let { at, length } = runs[position2];
|
|
31327
|
+
for (; escapeScan < at; escapeScan++) escaped = body[escapeScan] === "\\" ? !escaped : false;
|
|
31328
|
+
if (escaped) {
|
|
31329
|
+
at += 1;
|
|
31330
|
+
length -= 1;
|
|
31331
|
+
escaped = false;
|
|
31332
|
+
if (length === 0) continue;
|
|
31333
|
+
const list3 = byLength.get(length);
|
|
31334
|
+
if (!list3) continue;
|
|
31335
|
+
}
|
|
31336
|
+
const closer = nextRun(length, position2);
|
|
31337
|
+
if (closer < 0) continue;
|
|
31338
|
+
const close = runs[closer];
|
|
31339
|
+
blank(at, close.at + close.length);
|
|
31340
|
+
position2 = closer;
|
|
31341
|
+
escapeScan = close.at + close.length;
|
|
31342
|
+
escaped = false;
|
|
31343
|
+
}
|
|
31344
|
+
}
|
|
31200
31345
|
function resolveConceptId(fromId, href) {
|
|
31201
31346
|
const target = (href.split("#")[0] ?? "").split("?")[0]?.trim() ?? "";
|
|
31202
31347
|
if (target === "" || isExternalHref(target)) return null;
|
|
@@ -42627,6 +42772,10 @@ function gfmFromMarkdown() {
|
|
|
42627
42772
|
|
|
42628
42773
|
// ../markdown-renderer/src/index.tsx
|
|
42629
42774
|
var import_jsx_runtime = __toESM(require_jsx_runtime(), 1);
|
|
42775
|
+
function renderableConceptId(fromId, raw) {
|
|
42776
|
+
if (/^okf:/i.test(raw.trim())) return null;
|
|
42777
|
+
return resolveConceptId(fromId, raw);
|
|
42778
|
+
}
|
|
42630
42779
|
var MAX_BODY_CHARS = 262144;
|
|
42631
42780
|
var MAX_NODES = 2e4;
|
|
42632
42781
|
var MAX_DEPTH = 40;
|
|
@@ -42652,7 +42801,7 @@ function isBareLinkBlock(node2, fromId) {
|
|
|
42652
42801
|
let sawLink = false;
|
|
42653
42802
|
for (const child of node2.children) {
|
|
42654
42803
|
if (isBlankInline(child)) continue;
|
|
42655
|
-
if (child.type === "link" &&
|
|
42804
|
+
if (child.type === "link" && renderableConceptId(fromId, child.url ?? "") !== null) {
|
|
42656
42805
|
sawLink = true;
|
|
42657
42806
|
continue;
|
|
42658
42807
|
}
|
|
@@ -42780,7 +42929,7 @@ function renderNode(node2, state, depth, index2) {
|
|
|
42780
42929
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("br", {}, index2);
|
|
42781
42930
|
case "link": {
|
|
42782
42931
|
const raw = node2.url ?? "";
|
|
42783
|
-
const resolved =
|
|
42932
|
+
const resolved = renderableConceptId(state.options.fromId, raw);
|
|
42784
42933
|
const children = renderChildren(node2, state, depth);
|
|
42785
42934
|
if (resolved === null) {
|
|
42786
42935
|
const external = admitExternalLink(raw, state.options.externalLinkHosts);
|
|
@@ -42849,7 +42998,7 @@ function renderEdgeList(links, state, index2) {
|
|
|
42849
42998
|
break;
|
|
42850
42999
|
}
|
|
42851
43000
|
state.count++;
|
|
42852
|
-
const to =
|
|
43001
|
+
const to = renderableConceptId(fromId, links[i].url ?? "");
|
|
42853
43002
|
if (to === null) continue;
|
|
42854
43003
|
const verb = textOf(links[i]).trim();
|
|
42855
43004
|
const target = titleFor?.(to) ?? to;
|