@coywolf/emdash 0.0.0-stage → 0.35.14
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/LICENSE +21 -0
- package/README.md +203 -2
- package/docs/README.md +45 -0
- package/docs/ai.md +39 -0
- package/docs/backups.md +88 -0
- package/docs/breadcrumbs.md +59 -0
- package/docs/code-blocks.md +21 -0
- package/docs/content-urls.md +41 -0
- package/docs/custom-blocks.md +27 -0
- package/docs/discovery.md +32 -0
- package/docs/files.md +44 -0
- package/docs/form-uploads.md +59 -0
- package/docs/headings.md +37 -0
- package/docs/images.md +141 -0
- package/docs/internals.md +13 -0
- package/docs/links.md +34 -0
- package/docs/performance.md +72 -0
- package/docs/redirects.md +84 -0
- package/docs/releasing.md +21 -0
- package/docs/reviews.md +89 -0
- package/docs/robots.md +81 -0
- package/docs/schema.md +79 -0
- package/docs/search.md +114 -0
- package/docs/videos.md +48 -0
- package/docs/wordpress-import.md +198 -0
- package/package.json +79 -5
- package/src/admin/admin-css.ts +57 -0
- package/src/admin/ai.tsx +915 -0
- package/src/admin/backups.tsx +613 -0
- package/src/admin/breadcrumbs.tsx +542 -0
- package/src/admin/codeBlocks.tsx +204 -0
- package/src/admin/customBlocks.tsx +321 -0
- package/src/admin/dirty.ts +20 -0
- package/src/admin/discovery.tsx +463 -0
- package/src/admin/download.ts +28 -0
- package/src/admin/feature-switches.tsx +124 -0
- package/src/admin/features.tsx +142 -0
- package/src/admin/files.tsx +791 -0
- package/src/admin/formUploads.tsx +445 -0
- package/src/admin/guides.tsx +18 -0
- package/src/admin/headings.tsx +262 -0
- package/src/admin/images.tsx +825 -0
- package/src/admin/index.tsx +62 -0
- package/src/admin/links.tsx +980 -0
- package/src/admin/performance.tsx +330 -0
- package/src/admin/preview.tsx +63 -0
- package/src/admin/redirects-removed.tsx +266 -0
- package/src/admin/redirects.tsx +470 -0
- package/src/admin/reviews.tsx +232 -0
- package/src/admin/robots-bots.tsx +647 -0
- package/src/admin/robots-shared.tsx +109 -0
- package/src/admin/robots-wizard.tsx +748 -0
- package/src/admin/robots.tsx +911 -0
- package/src/admin/save-bar.tsx +134 -0
- package/src/admin/schema.tsx +1187 -0
- package/src/admin/search.tsx +355 -0
- package/src/admin/settings-ui.tsx +87 -0
- package/src/admin/trash-prompt-core.ts +135 -0
- package/src/admin/trash-prompt.tsx +156 -0
- package/src/admin/usage.tsx +301 -0
- package/src/admin/videos-display.tsx +248 -0
- package/src/admin/videos.tsx +1202 -0
- package/src/admin/wpImport.tsx +1516 -0
- package/src/ai/entities.ts +59 -0
- package/src/ai/export.ts +61 -0
- package/src/ai/logic.ts +606 -0
- package/src/ai/pack.ts +121 -0
- package/src/ai/prompts.ts +87 -0
- package/src/ai/providers.ts +276 -0
- package/src/ai/routes.ts +359 -0
- package/src/ai/store.ts +301 -0
- package/src/ai/wikidata.ts +87 -0
- package/src/ai/worker.ts +530 -0
- package/src/astro/astro-modules.d.ts +6 -0
- package/src/astro/breadcrumbs/Breadcrumbs.astro +129 -0
- package/src/astro/breadcrumbs/BreadcrumbsBlock.astro +12 -0
- package/src/astro/codeBlocks/CodeBlock.astro +62 -0
- package/src/astro/codeBlocks/EmDashCode.astro +61 -0
- package/src/astro/customBlocks/CustomBlock.astro +64 -0
- package/src/astro/customBlocks/Details.astro +8 -0
- package/src/astro/customBlocks/Disclosure.astro +8 -0
- package/src/astro/customBlocks/Note.astro +8 -0
- package/src/astro/customBlocks/Podcast.astro +8 -0
- package/src/astro/customBlocks/Quote.astro +8 -0
- package/src/astro/customBlocks/Testimonial.astro +8 -0
- package/src/astro/files/FileCard.astro +103 -0
- package/src/astro/headings/HeadingBlock.astro +129 -0
- package/src/astro/headings/TableOfContents.astro +45 -0
- package/src/astro/headings/request.ts +19 -0
- package/src/astro/images/ResponsiveImage.astro +60 -0
- package/src/astro/index.ts +84 -0
- package/src/astro/reviews/CoywolfReview.astro +27 -0
- package/src/astro/reviews/Review.astro +49 -0
- package/src/astro/search/SearchBox.astro +61 -0
- package/src/astro/search/SearchBoxForm.astro +509 -0
- package/src/astro/tables/CaptionedTable.astro +72 -0
- package/src/astro/videos/CoywolfVideo.astro +448 -0
- package/src/backups/download.ts +112 -0
- package/src/backups/dump.ts +288 -0
- package/src/backups/module.ts +276 -0
- package/src/backups/pack.ts +33 -0
- package/src/backups/restore.ts +209 -0
- package/src/backups/store.ts +409 -0
- package/src/breadcrumbs/pack.ts +113 -0
- package/src/breadcrumbs/settings.ts +102 -0
- package/src/breadcrumbs/stamp.ts +40 -0
- package/src/breadcrumbs/trail.ts +123 -0
- package/src/codeBlocks/contrast.ts +179 -0
- package/src/codeBlocks/hljs.d.ts +5 -0
- package/src/codeBlocks/pack.ts +110 -0
- package/src/codeBlocks/render.ts +304 -0
- package/src/codeBlocks/settings.ts +18 -0
- package/src/codeBlocks/themes.generated.ts +304 -0
- package/src/codeBlocks/themes.ts +114 -0
- package/src/core/compose.ts +244 -0
- package/src/core/content-url.ts +888 -0
- package/src/core/csv.ts +119 -0
- package/src/core/d1-batch.ts +65 -0
- package/src/core/entry-docs.ts +175 -0
- package/src/core/features-module.ts +48 -0
- package/src/core/features.ts +392 -0
- package/src/core/generation.ts +88 -0
- package/src/core/guide-content.ts +166 -0
- package/src/core/module.ts +104 -0
- package/src/core/read-failures.ts +57 -0
- package/src/core/request-memo.ts +71 -0
- package/src/core/secrets.ts +83 -0
- package/src/core/settings-enhance.ts +74 -0
- package/src/core/site.ts +36 -0
- package/src/core/storage.ts +27 -0
- package/src/customBlocks/pack.ts +260 -0
- package/src/customBlocks/render.ts +424 -0
- package/src/customBlocks/rich.ts +313 -0
- package/src/customBlocks/settings.ts +46 -0
- package/src/discovery/build.ts +252 -0
- package/src/discovery/feed-build.ts +217 -0
- package/src/discovery/feed.ts +172 -0
- package/src/discovery/indexnow.ts +114 -0
- package/src/discovery/llms.ts +79 -0
- package/src/discovery/markdown.ts +294 -0
- package/src/discovery/memory-cache.ts +97 -0
- package/src/discovery/middleware.ts +186 -0
- package/src/discovery/module.ts +353 -0
- package/src/discovery/news.ts +99 -0
- package/src/discovery/pack.ts +58 -0
- package/src/discovery/settings.ts +91 -0
- package/src/discovery/urls.ts +35 -0
- package/src/env.d.ts +10 -0
- package/src/files/card.ts +231 -0
- package/src/files/counts.ts +60 -0
- package/src/files/export.ts +44 -0
- package/src/files/format.ts +163 -0
- package/src/files/module.ts +596 -0
- package/src/files/pack.ts +92 -0
- package/src/files/r2-rules.ts +41 -0
- package/src/files/range.ts +50 -0
- package/src/files/s3.ts +114 -0
- package/src/files/serve.ts +141 -0
- package/src/files/sigv4.ts +160 -0
- package/src/files/site.ts +137 -0
- package/src/files/walker.ts +58 -0
- package/src/formUploads/lib.ts +266 -0
- package/src/formUploads/pack.ts +55 -0
- package/src/formUploads/wrap.ts +592 -0
- package/src/forms.ts +16 -0
- package/src/headings/pack.ts +154 -0
- package/src/headings/render.ts +139 -0
- package/src/headings/settings.ts +117 -0
- package/src/headings/slug.ts +68 -0
- package/src/headings/stamp.ts +142 -0
- package/src/headings/test-hooks.mjs +14 -0
- package/src/headings/toc.ts +48 -0
- package/src/images/cloudflare.ts +329 -0
- package/src/images/lib.ts +221 -0
- package/src/images/module.ts +372 -0
- package/src/images/pack.ts +804 -0
- package/src/images/pending.ts +37 -0
- package/src/images/settings.ts +48 -0
- package/src/images/setup.ts +192 -0
- package/src/images/variants-estimate.ts +162 -0
- package/src/images/variants-store.ts +475 -0
- package/src/images/variants.ts +311 -0
- package/src/index.ts +143 -0
- package/src/links/check.ts +101 -0
- package/src/links/classify.ts +270 -0
- package/src/links/export.ts +59 -0
- package/src/links/module.ts +652 -0
- package/src/links/pack.ts +43 -0
- package/src/links/pt.ts +325 -0
- package/src/links/store.ts +704 -0
- package/src/middleware.ts +287 -0
- package/src/modules.ts +53 -0
- package/src/options.ts +66 -0
- package/src/pageCache/lib.ts +274 -0
- package/src/pageCache/pack.ts +240 -0
- package/src/pageCache/usage-core.ts +152 -0
- package/src/pageCache/usage.ts +262 -0
- package/src/pageCache/warm.ts +722 -0
- package/src/redirects/middleware.ts +169 -0
- package/src/redirects/module.ts +124 -0
- package/src/redirects/pack.ts +89 -0
- package/src/redirects/removed-core.ts +151 -0
- package/src/redirects/removed.ts +293 -0
- package/src/redirects/rules.ts +355 -0
- package/src/redirects/slug-changes.ts +207 -0
- package/src/redirects/slug-core.ts +49 -0
- package/src/redirects/transfer.ts +92 -0
- package/src/reviews/lib.ts +624 -0
- package/src/reviews/pack.ts +135 -0
- package/src/reviews/schema.ts +128 -0
- package/src/reviews/settings.ts +26 -0
- package/src/robots/bots.ts +321 -0
- package/src/robots/data/bots.json +696 -0
- package/src/robots/data/verified.json +582 -0
- package/src/robots/directory.ts +26 -0
- package/src/robots/explain.ts +191 -0
- package/src/robots/guided.ts +300 -0
- package/src/robots/importer.ts +263 -0
- package/src/robots/middleware.ts +151 -0
- package/src/robots/module.ts +446 -0
- package/src/robots/pack.ts +69 -0
- package/src/robots/radar.ts +129 -0
- package/src/robots/rep.ts +362 -0
- package/src/robots/rules.ts +883 -0
- package/src/robots/transfer.ts +45 -0
- package/src/robots/validate.ts +524 -0
- package/src/schema/catalog.ts +146 -0
- package/src/schema/graph.ts +791 -0
- package/src/schema/module.ts +1138 -0
- package/src/schema/og-image.ts +100 -0
- package/src/schema/pack.ts +58 -0
- package/src/search/engine.ts +578 -0
- package/src/search/fallback.ts +80 -0
- package/src/search/live-cache.ts +116 -0
- package/src/search/live-client.ts +770 -0
- package/src/search/live-serve.ts +282 -0
- package/src/search/module.ts +261 -0
- package/src/search/pack.ts +57 -0
- package/src/search/query.ts +132 -0
- package/src/search/ratelimit-core.ts +118 -0
- package/src/search/ratelimit.ts +79 -0
- package/src/search/snippet.ts +135 -0
- package/src/search/title-index.ts +139 -0
- package/src/search/title-match.ts +192 -0
- package/src/shared.ts +71 -0
- package/src/version.ts +2 -0
- package/src/videos/date.ts +40 -0
- package/src/videos/engagement.ts +75 -0
- package/src/videos/lib.ts +679 -0
- package/src/videos/module.ts +1160 -0
- package/src/videos/pack.ts +187 -0
- package/src/videos/pause.ts +42 -0
- package/src/videos/poster.ts +324 -0
- package/src/videos/render.ts +336 -0
- package/src/videos/store.ts +551 -0
- package/src/videos/stream.ts +134 -0
- package/src/wpImport/convert.ts +702 -0
- package/src/wpImport/guests.ts +329 -0
- package/src/wpImport/gutenberg.ts +157 -0
- package/src/wpImport/markers.ts +66 -0
- package/src/wpImport/pack.ts +451 -0
- package/src/wpImport/parents.ts +202 -0
- package/src/wpImport/prepare.ts +592 -0
- package/src/wpImport/redirects.ts +358 -0
- package/src/wpImport/sources.ts +67 -0
- package/src/wpImport/stream.ts +160 -0
- package/src/wpImport/urls.ts +354 -0
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Read the grounded entities for an entry, for Schema.org output.
|
|
3
|
+
*
|
|
4
|
+
* The Schema module calls `getEntryEntities(ctx, collection, id)` (inside the
|
|
5
|
+
* plugin context) or `getEntryEntities(db, collection, id)` with the site's
|
|
6
|
+
* D1 database (outside it, e.g. an Astro component), and merges `about` and
|
|
7
|
+
* `mentions` into its Article/WebPage node. Returns empty lists when the
|
|
8
|
+
* "ai.entities" feature is off or nothing has been analyzed yet.
|
|
9
|
+
*/
|
|
10
|
+
import type { PluginContext, StorageCollection } from "emdash";
|
|
11
|
+
|
|
12
|
+
import { PLUGIN_ID, cachedCtxFeatures, isOn, siteFeatures } from "../core/features.js";
|
|
13
|
+
import { noteReadFailure } from "../core/read-failures.js";
|
|
14
|
+
import { type Entity, entityNodes } from "./logic.js";
|
|
15
|
+
import type { EntryRecord } from "./store.js";
|
|
16
|
+
|
|
17
|
+
export interface EntryEntities {
|
|
18
|
+
entities: Entity[];
|
|
19
|
+
about: Record<string, unknown>[];
|
|
20
|
+
mentions: Record<string, unknown>[];
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
const EMPTY: EntryEntities = { entities: [], about: [], mentions: [] };
|
|
24
|
+
|
|
25
|
+
type Source = Pick<PluginContext, "storage" | "settings"> | D1Database;
|
|
26
|
+
|
|
27
|
+
function isD1(source: Source): source is D1Database {
|
|
28
|
+
return typeof (source as D1Database).prepare === "function";
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* `preloaded.record`: the entry's aiEntries doc, already read by the caller
|
|
33
|
+
* (Schema & Social reads it with the entry's other docs), so nothing is read
|
|
34
|
+
* here; the caller has checked the "ai.entities" switch.
|
|
35
|
+
*/
|
|
36
|
+
export async function getEntryEntities(source: Source, collection: string, id: string, preloaded?: { record: EntryRecord | null }): Promise<EntryEntities> {
|
|
37
|
+
try {
|
|
38
|
+
let record: EntryRecord | null = null;
|
|
39
|
+
if (preloaded) {
|
|
40
|
+
record = preloaded.record ?? null;
|
|
41
|
+
} else if (isD1(source)) {
|
|
42
|
+
if (!isOn(await siteFeatures(), "ai.entities")) return EMPTY;
|
|
43
|
+
const row = await source
|
|
44
|
+
.prepare("SELECT data FROM _plugin_storage WHERE plugin_id = ? AND collection = ? AND id = ?")
|
|
45
|
+
.bind(PLUGIN_ID, "aiEntries", `${collection}:${id}`)
|
|
46
|
+
.first<{ data: string }>();
|
|
47
|
+
record = row?.data ? (JSON.parse(row.data) as EntryRecord) : null;
|
|
48
|
+
} else {
|
|
49
|
+
if (!isOn(await cachedCtxFeatures(source), "ai.entities")) return EMPTY;
|
|
50
|
+
const entries = (source.storage as Record<string, StorageCollection>).aiEntries as StorageCollection<EntryRecord> | undefined;
|
|
51
|
+
record = (await entries?.get(`${collection}:${id}`)) ?? null;
|
|
52
|
+
}
|
|
53
|
+
const entities = Array.isArray(record?.entities) ? record.entities : [];
|
|
54
|
+
return { entities, ...entityNodes(entities) };
|
|
55
|
+
} catch {
|
|
56
|
+
noteReadFailure("AI entities"); // The page goes out without its entities: not into the edge cache.
|
|
57
|
+
return EMPTY; // Schema output must never fail because of enrichment.
|
|
58
|
+
}
|
|
59
|
+
}
|
package/src/ai/export.ts
ADDED
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AI Enrichment CSV export: every analyzed entry with the entities found in
|
|
3
|
+
* it (one row per entity) and its AI-written description. Pure, so the admin
|
|
4
|
+
* page and the tests share it.
|
|
5
|
+
*/
|
|
6
|
+
import { type CsvCell, toCsv } from "../core/csv.js";
|
|
7
|
+
|
|
8
|
+
export interface ExportEntry {
|
|
9
|
+
collection: string;
|
|
10
|
+
entryId: string;
|
|
11
|
+
title: string;
|
|
12
|
+
status: string;
|
|
13
|
+
error: string;
|
|
14
|
+
entities: Array<{ name: string; type: string; description: string; qid: string; wikipedia: string; website: string; primary: boolean }>;
|
|
15
|
+
description: string;
|
|
16
|
+
descriptionStatus: string;
|
|
17
|
+
updated: string;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export const ENTITY_CSV_COLUMNS = [
|
|
21
|
+
"collection",
|
|
22
|
+
"entry_id",
|
|
23
|
+
"entry_title",
|
|
24
|
+
"analysis",
|
|
25
|
+
"entity",
|
|
26
|
+
"entity_type",
|
|
27
|
+
"role",
|
|
28
|
+
"wikidata_id",
|
|
29
|
+
"wikidata_url",
|
|
30
|
+
"wikipedia",
|
|
31
|
+
"website",
|
|
32
|
+
"entity_description",
|
|
33
|
+
"ai_description",
|
|
34
|
+
"description_status",
|
|
35
|
+
"updated",
|
|
36
|
+
] as const;
|
|
37
|
+
|
|
38
|
+
/** Spreadsheet-safe CSV. An entry with no entities still gets one row, so its description and errors are kept. */
|
|
39
|
+
export function entitiesToCsv(entries: ExportEntry[]): string {
|
|
40
|
+
const rows: CsvCell[][] = [[...ENTITY_CSV_COLUMNS]];
|
|
41
|
+
for (const e of entries) {
|
|
42
|
+
const base = [e.collection, e.entryId, e.title, e.status === "error" ? `error: ${e.error}` : "ok"];
|
|
43
|
+
const tail = [e.description, e.descriptionStatus, e.updated];
|
|
44
|
+
if (!e.entities.length) rows.push([...base, "", "", "", "", "", "", "", "", ...tail]);
|
|
45
|
+
for (const x of e.entities) {
|
|
46
|
+
rows.push([
|
|
47
|
+
...base,
|
|
48
|
+
x.name,
|
|
49
|
+
x.type,
|
|
50
|
+
x.primary ? "about" : "mentions",
|
|
51
|
+
x.qid,
|
|
52
|
+
x.qid ? `https://www.wikidata.org/wiki/${x.qid}` : "",
|
|
53
|
+
x.wikipedia,
|
|
54
|
+
x.website,
|
|
55
|
+
x.description,
|
|
56
|
+
...tail,
|
|
57
|
+
]);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
return toCsv(rows, { guard: true });
|
|
61
|
+
}
|