panopticon-cli 0.6.0 → 0.6.1
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/index.js +19 -19
- package/dist/cli/index.js.map +1 -1
- package/dist/dashboard/{event-store-BtuZCLHu.js → event-store-D7kLBd07.js} +1 -1
- package/dist/dashboard/{event-store-OS5jH3Eu.js → event-store-O9q0Gweh.js} +2 -2
- package/dist/dashboard/{event-store-OS5jH3Eu.js.map → event-store-O9q0Gweh.js.map} +1 -1
- package/dist/dashboard/{inspect-agent-CwT4mrvV.js → inspect-agent-B57kGDUV.js} +3 -3
- package/dist/dashboard/{inspect-agent-CwT4mrvV.js.map → inspect-agent-B57kGDUV.js.map} +1 -1
- package/dist/dashboard/{issue-service-singleton-z78bbRiO.js → issue-service-singleton-DQK42EqH.js} +1 -1
- package/dist/dashboard/{issue-service-singleton-0n9hcF71.js → issue-service-singleton-sb2HkB9f.js} +2 -2
- package/dist/dashboard/{issue-service-singleton-0n9hcF71.js.map → issue-service-singleton-sb2HkB9f.js.map} +1 -1
- package/dist/dashboard/{lifecycle-B6d3AE3n.js → lifecycle-ZTYdrr2O.js} +1 -1
- package/dist/dashboard/{merge-agent-DaIEvGJG.js → merge-agent-GLtMEsTu.js} +1 -1
- package/dist/dashboard/{merge-agent-CmqR1MFf.js → merge-agent-twroFuAh.js} +2 -2
- package/dist/dashboard/{merge-agent-CmqR1MFf.js.map → merge-agent-twroFuAh.js.map} +1 -1
- package/dist/dashboard/{projection-cache-Bkzs_90o.js → projection-cache-DQ9zegkK.js} +10 -10
- package/dist/dashboard/projection-cache-DQ9zegkK.js.map +1 -0
- package/dist/dashboard/public/assets/{dist-D-q87oB4.js → dist-C2sRcZJv.js} +1 -1
- package/dist/dashboard/public/assets/{index--G6_upSx.js → index-BCLmEMRf.js} +41 -41
- package/dist/dashboard/public/assets/index-BEdq7CFf.css +1 -0
- package/dist/dashboard/public/index.html +2 -2
- package/dist/dashboard/{review-status-DqJZDthU.js → review-status-CK3eBGyb.js} +1 -1
- package/dist/dashboard/{review-status-LQATWF6L.js → review-status-CV55Tl-n.js} +2 -2
- package/dist/dashboard/{review-status-LQATWF6L.js.map → review-status-CV55Tl-n.js.map} +1 -1
- package/dist/dashboard/server.js +85 -85
- package/dist/dashboard/server.js.map +1 -1
- package/dist/dashboard/{specialist-context-IX8ZZBxy.js → specialist-context-ColzlmGE.js} +2 -2
- package/dist/dashboard/{specialist-context-IX8ZZBxy.js.map → specialist-context-ColzlmGE.js.map} +1 -1
- package/dist/dashboard/{specialist-logs-BvOQ3XPt.js → specialist-logs-BhmDpFIq.js} +1 -1
- package/dist/dashboard/{specialists-C7Fyhq_j.js → specialists-C6s3U6tX.js} +21 -7
- package/dist/dashboard/specialists-C6s3U6tX.js.map +1 -0
- package/dist/dashboard/{specialists-B4aDa5xP.js → specialists-Cny632-T.js} +1 -1
- package/dist/dashboard/{test-agent-queue-C0WrVdrJ.js → test-agent-queue-tqI4VDsu.js} +3 -3
- package/dist/dashboard/{test-agent-queue-C0WrVdrJ.js.map → test-agent-queue-tqI4VDsu.js.map} +1 -1
- package/dist/dashboard/workflows-B2ARUpOa.js +2 -0
- package/dist/dashboard/{workflows-Cj6tzch6.js → workflows-N1UTipYl.js} +3 -3
- package/dist/dashboard/{workflows-Cj6tzch6.js.map → workflows-N1UTipYl.js.map} +1 -1
- package/dist/{merge-agent-BCPyotWG.js → merge-agent-VQH9z9t8.js} +2 -2
- package/dist/{merge-agent-BCPyotWG.js.map → merge-agent-VQH9z9t8.js.map} +1 -1
- package/dist/{review-status-p_HOugvo.js → review-status-2TdtHNcs.js} +1 -1
- package/dist/{review-status-BbY22dtx.js → review-status-Bm1bWNEa.js} +2 -2
- package/dist/{review-status-BbY22dtx.js.map → review-status-Bm1bWNEa.js.map} +1 -1
- package/dist/{specialist-context-CRBBW-z5.js → specialist-context-BdNFsfMG.js} +2 -2
- package/dist/{specialist-context-CRBBW-z5.js.map → specialist-context-BdNFsfMG.js.map} +1 -1
- package/dist/{specialist-logs-m0UvPm3F.js → specialist-logs-CLztE_bE.js} +1 -1
- package/dist/{specialists-ldNesMhg.js → specialists-DEKqgkxp.js} +21 -7
- package/dist/specialists-DEKqgkxp.js.map +1 -0
- package/dist/{specialists-DXDDLqoY.js → specialists-aUoUVWsN.js} +1 -1
- package/package.json +1 -1
- package/scripts/record-cost-event.js +15 -0
- package/scripts/record-cost-event.js.map +1 -1
- package/scripts/record-cost-event.ts +2 -0
- package/scripts/work-agent-stop-hook +26 -0
- package/dist/dashboard/projection-cache-Bkzs_90o.js.map +0 -1
- package/dist/dashboard/public/assets/index-CjpnhB4Q.css +0 -1
- package/dist/dashboard/specialists-C7Fyhq_j.js.map +0 -1
- package/dist/dashboard/workflows-BsUDQntr.js +0 -2
- package/dist/specialists-ldNesMhg.js.map +0 -1
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
//#region services/projection-cache.ts
|
|
2
2
|
const CACHE_KEY = "dashboard";
|
|
3
3
|
function createProjectionCache(db) {
|
|
4
|
-
const loadStmt = db.prepare(`SELECT key, data, sequence, updated_at FROM projection_cache WHERE key =
|
|
4
|
+
const loadStmt = db.prepare(`SELECT key, data, sequence, updated_at FROM projection_cache WHERE key = ?`);
|
|
5
5
|
const upsertStmt = db.prepare(`INSERT INTO projection_cache (key, data, sequence, updated_at)
|
|
6
|
-
VALUES (
|
|
6
|
+
VALUES (?, ?, ?, ?)
|
|
7
7
|
ON CONFLICT(key) DO UPDATE SET
|
|
8
8
|
data = excluded.data,
|
|
9
9
|
sequence = excluded.sequence,
|
|
@@ -12,7 +12,7 @@ function createProjectionCache(db) {
|
|
|
12
12
|
let pendingSnapshot = null;
|
|
13
13
|
function load() {
|
|
14
14
|
try {
|
|
15
|
-
const row = loadStmt.get(
|
|
15
|
+
const row = loadStmt.get([CACHE_KEY]);
|
|
16
16
|
if (!row) return null;
|
|
17
17
|
const parsed = JSON.parse(row.data);
|
|
18
18
|
console.log(`[projection-cache] Loaded snapshot: seq=${row.sequence}, updated=${row.updated_at}, agents=${(parsed.agents ?? []).length}, issues=${(parsed.issues ?? []).length}`);
|
|
@@ -28,12 +28,12 @@ function createProjectionCache(db) {
|
|
|
28
28
|
pendingSnapshot = null;
|
|
29
29
|
debounceTimer = null;
|
|
30
30
|
try {
|
|
31
|
-
upsertStmt.run(
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
31
|
+
upsertStmt.run([
|
|
32
|
+
CACHE_KEY,
|
|
33
|
+
JSON.stringify(snapshot),
|
|
34
|
+
snapshot.sequence,
|
|
35
|
+
(/* @__PURE__ */ new Date()).toISOString()
|
|
36
|
+
]);
|
|
37
37
|
} catch (err) {
|
|
38
38
|
console.warn("[projection-cache] Failed to save snapshot:", err);
|
|
39
39
|
}
|
|
@@ -68,4 +68,4 @@ function getProjectionCache() {
|
|
|
68
68
|
//#endregion
|
|
69
69
|
export { createProjectionCache, getProjectionCache, initProjectionCache };
|
|
70
70
|
|
|
71
|
-
//# sourceMappingURL=projection-cache-
|
|
71
|
+
//# sourceMappingURL=projection-cache-DQ9zegkK.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"projection-cache-DQ9zegkK.js","names":[],"sources":["../../src/dashboard/server/services/projection-cache.ts"],"sourcesContent":["/**\n * Projection Cache Service (PAN-437)\n *\n * Persists the full DashboardSnapshot to SQLite so the server can serve\n * data instantly on startup without waiting for API fetches.\n *\n * Uses the same DB connection as the event store (shared DbAdapter).\n * Writes are debounced at 100ms to avoid thrashing during event bursts.\n */\n\nimport type { DbAdapter } from '../event-store.js';\nimport type { DashboardSnapshot } from '@panopticon/contracts';\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\ninterface CacheRow {\n key: string;\n data: string;\n sequence: number;\n updated_at: string;\n}\n\nexport interface ProjectionCache {\n /** Load the cached DashboardSnapshot. Returns null if not found or corrupt. */\n load(): DashboardSnapshot | null;\n /** Persist the snapshot (debounced at 100ms). */\n save(snapshot: DashboardSnapshot): void;\n}\n\n// ─── Implementation ───────────────────────────────────────────────────────────\n\nconst CACHE_KEY = 'dashboard';\n\nexport function createProjectionCache(db: DbAdapter): ProjectionCache {\n const loadStmt = db.prepare<CacheRow>(\n `SELECT key, data, sequence, updated_at FROM projection_cache WHERE key = ?`,\n );\n const upsertStmt = db.prepare<void>(\n `INSERT INTO projection_cache (key, data, sequence, updated_at)\n VALUES (?, ?, ?, ?)\n ON CONFLICT(key) DO UPDATE SET\n data = excluded.data,\n sequence = excluded.sequence,\n updated_at = excluded.updated_at`,\n );\n\n let debounceTimer: ReturnType<typeof setTimeout> | null = null;\n let pendingSnapshot: DashboardSnapshot | null = null;\n\n function load(): DashboardSnapshot | null {\n try {\n const row = loadStmt.get([CACHE_KEY]);\n if (!row) return null;\n const parsed = JSON.parse(row.data) as DashboardSnapshot;\n console.log(\n `[projection-cache] Loaded snapshot: seq=${row.sequence}, ` +\n `updated=${row.updated_at}, agents=${(parsed.agents ?? []).length}, ` +\n `issues=${(parsed.issues ?? []).length}`,\n );\n return parsed;\n } catch (err) {\n console.warn('[projection-cache] Failed to load cached snapshot:', err);\n return null;\n }\n }\n\n function flush(): void {\n if (!pendingSnapshot) return;\n const snapshot = pendingSnapshot;\n pendingSnapshot = null;\n debounceTimer = null;\n try {\n upsertStmt.run([\n CACHE_KEY,\n JSON.stringify(snapshot),\n snapshot.sequence,\n new Date().toISOString(),\n ]);\n } catch (err) {\n console.warn('[projection-cache] Failed to save snapshot:', err);\n }\n }\n\n function save(snapshot: DashboardSnapshot): void {\n pendingSnapshot = snapshot;\n if (debounceTimer !== null) return; // Already scheduled\n debounceTimer = setTimeout(flush, 100);\n }\n\n return { load, save };\n}\n\n// ─── Module-level singleton ───────────────────────────────────────────────────\n\nlet _cache: ProjectionCache | null = null;\n\n/**\n * Initialize the ProjectionCache with the shared DbAdapter.\n * Called from initEventStore() after the DB is opened.\n */\nexport function initProjectionCache(db: DbAdapter): ProjectionCache {\n if (_cache) return _cache;\n _cache = createProjectionCache(db);\n return _cache;\n}\n\n/**\n * Return the singleton ProjectionCache. Throws if not yet initialized.\n */\nexport function getProjectionCache(): ProjectionCache {\n if (!_cache) {\n throw new Error('[projection-cache] getProjectionCache() called before initProjectionCache().');\n }\n return _cache;\n}\n"],"mappings":";AA+BA,MAAM,YAAY;AAElB,SAAgB,sBAAsB,IAAgC;CACpE,MAAM,WAAW,GAAG,QAClB,6EACD;CACD,MAAM,aAAa,GAAG,QACpB;;;;;yCAMD;CAED,IAAI,gBAAsD;CAC1D,IAAI,kBAA4C;CAEhD,SAAS,OAAiC;AACxC,MAAI;GACF,MAAM,MAAM,SAAS,IAAI,CAAC,UAAU,CAAC;AACrC,OAAI,CAAC,IAAK,QAAO;GACjB,MAAM,SAAS,KAAK,MAAM,IAAI,KAAK;AACnC,WAAQ,IACN,2CAA2C,IAAI,SAAS,YAC7C,IAAI,WAAW,YAAY,OAAO,UAAU,EAAE,EAAE,OAAO,YACvD,OAAO,UAAU,EAAE,EAAE,SACjC;AACD,UAAO;WACA,KAAK;AACZ,WAAQ,KAAK,sDAAsD,IAAI;AACvE,UAAO;;;CAIX,SAAS,QAAc;AACrB,MAAI,CAAC,gBAAiB;EACtB,MAAM,WAAW;AACjB,oBAAkB;AAClB,kBAAgB;AAChB,MAAI;AACF,cAAW,IAAI;IACb;IACA,KAAK,UAAU,SAAS;IACxB,SAAS;qBACT,IAAI,MAAM,EAAC,aAAa;IACzB,CAAC;WACK,KAAK;AACZ,WAAQ,KAAK,+CAA+C,IAAI;;;CAIpE,SAAS,KAAK,UAAmC;AAC/C,oBAAkB;AAClB,MAAI,kBAAkB,KAAM;AAC5B,kBAAgB,WAAW,OAAO,IAAI;;AAGxC,QAAO;EAAE;EAAM;EAAM;;AAKvB,IAAI,SAAiC;;;;;AAMrC,SAAgB,oBAAoB,IAAgC;AAClE,KAAI,OAAQ,QAAO;AACnB,UAAS,sBAAsB,GAAG;AAClC,QAAO;;;;;AAMT,SAAgB,qBAAsC;AACpD,KAAI,CAAC,OACH,OAAM,IAAI,MAAM,+EAA+E;AAEjG,QAAO"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/angular-html-Bp1-8yw7.js","assets/chunk-BEqpzyXh.js","assets/html-Dv3DVnHr.js","assets/css-BuARR_Qb.js","assets/javascript-DBCnrPrR.js","assets/angular-ts-Dc47XLpQ.js","assets/scss-Dl8-fX0q.js","assets/apl-BCQk3spK.js","assets/json-CdZYVWSM.js","assets/xml-C-aQor-e.js","assets/java-2Xsuzsw1.js","assets/astro-BPbMyfm1.js","assets/postcss-cZXfRCsF.js","assets/tsx-CwF67eOq.js","assets/typescript-BB21Zsih.js","assets/blade-Bij-_yC5.js","assets/html-derivative-tSjEs4-0.js","assets/sql-DZn-UGGv.js","assets/bsl-BODK--Fo.js","assets/sdbl-DOe8Nral.js","assets/c-oKNVj2rl.js","assets/cairo-BwpHIzLA.js","assets/python-BLpCXkJ6.js","assets/cobol-Dg5kg7hv.js","assets/coffee-3hfizWZM.js","assets/cpp-ULE387nU.js","assets/glsl-QoOzy-_r.js","assets/regexp-BloNfp_x.js","assets/crystal-Re5Pqbq7.js","assets/shellscript-CO-naGHU.js","assets/edge-CVs6JuhO.js","assets/elixir-vVBUmtB0.js","assets/elm-CJ1l6IcG.js","assets/erb-BhwFSwKc.js","assets/ruby-D9aJDC0S.js","assets/graphql-kqsYmXmx.js","assets/jsx-Dp3qsTLF.js","assets/haml-BQPi0z1w.js","assets/lua-BK1ZG2EC.js","assets/yaml-DkgEEdrA.js","assets/erlang-CjZU-VwD.js","assets/markdown-BFgBvytj.js","assets/fortran-fixed-form-CLgNuKMV.js","assets/fortran-free-form-CHQXX5JB.js","assets/fsharp-kVgJ9XJy.js","assets/gdresource-DDsMuL8p.js","assets/gdscript-DBkVGsC6.js","assets/gdshader-CWQhZP7Q.js","assets/git-commit-BKhxSJdF.js","assets/diff-G5H-0DNT.js","assets/git-rebase-f38O1g3a.js","assets/glimmer-js-ZD1Yvd1q.js","assets/glimmer-ts-bAi6wGX7.js","assets/hack-BgMu5Ipy.js","assets/handlebars-DPV5gbtW.js","assets/http-C4ysT5sQ.js","assets/hurl-DFMpPkw5.js","assets/csv-DPc9UZFt.js","assets/hxml-YehGxZ3T.js","assets/haxe-md5t_Y_E.js","assets/jinja-D5k2aV6r.js","assets/jison-DxRKYMci.js","assets/julia-C71yEfU9.js","assets/r-Oz8OzNPF.js","assets/just-CFLnnO7_.js","assets/perl-DhyBeoYG.js","assets/latex-vlM3VFwL.js","assets/tex-s1kBmY2H.js","assets/liquid-BfMw2dPx.js","assets/marko-C-FzIztO.js","assets/less-DwUMKQAG.js","assets/mdc-CpYiOYsD.js","assets/nextflow-C2lnptGp.js","assets/nextflow-groovy-DXLl8k8E.js","assets/nginx-C_FN4HXw.js","assets/nim-BsyQONjY.js","assets/php-CX--GDqC.js","assets/pug-BD4sRivj.js","assets/qml-CF1x2Id3.js","assets/razor-CIpRog1G.js","assets/csharp-BLhQzhUA.js","assets/rst-DEqAwrfS.js","assets/cmake-BmC4o4J9.js","assets/sas-D4Fr9SDG.js","assets/shaderlab-CCgEvKkt.js","assets/hlsl-CFf5czm3.js","assets/shellsession-Bh4VveDi.js","assets/soy-Cu-kYJAO.js","assets/sparql-DH0hFmAi.js","assets/turtle-BKcRDROw.js","assets/stata-BZdocy0T.js","assets/surrealql-D3TMbWym.js","assets/svelte-CD-ilbSU.js","assets/templ-DH5iy6rc.js","assets/go-DC_Zm44P.js","assets/ts-tags-CEZNZHfQ.js","assets/twig-D57SzOSi.js","assets/vue-B6oogzWX.js","assets/vue-html-v0GYjc-r.js","assets/vue-vine-CeA42ICb.js","assets/stylus-D69is74S.js","assets/xsl-C0dvDCZw.js"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{a as e,c as t,i as n,n as r,o as i,r as a,s as o,t as s}from"./index
|
|
2
|
+
import{a as e,c as t,i as n,n as r,o as i,r as a,s as o,t as s}from"./index-BCLmEMRf.js";var c={}.hasOwnProperty;function l(e,t){let n=t||{};function r(t,...n){let i=r.invalid,a=r.handlers;if(t&&c.call(t,e)){let n=String(t[e]);i=c.call(a,n)?a[n]:r.unknown}if(i)return i.call(this,t,...n)}return r.handlers=n.handlers||{},r.invalid=n.invalid,r.unknown=n.unknown,r}var u=[`area`,`base`,`basefont`,`bgsound`,`br`,`col`,`command`,`embed`,`frame`,`hr`,`image`,`img`,`input`,`keygen`,`link`,`meta`,`param`,`source`,`track`,`wbr`],d=/["&'<>`]/g,f=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g,p=/[\x01-\t\v\f\x0E-\x1F\x7F\x81\x8D\x8F\x90\x9D\xA0-\uFFFF]/g,m=/[|\\{}()[\]^$+*?.]/g,h=new WeakMap;function g(e,t){if(e=e.replace(t.subset?_(t.subset):d,r),t.subset||t.escapeOnly)return e;return e.replace(f,n).replace(p,r);function n(e,n,r){return t.format((e.charCodeAt(0)-55296)*1024+e.charCodeAt(1)-56320+65536,r.charCodeAt(n+2),t)}function r(e,n,r){return t.format(e.charCodeAt(0),r.charCodeAt(n+1),t)}}function _(e){let t=h.get(e);return t||(t=ee(e),h.set(e,t)),t}function ee(e){let t=[],n=-1;for(;++n<e.length;)t.push(e[n].replace(m,`\\$&`));return RegExp(`(?:`+t.join(`|`)+`)`,`g`)}var te=/[\dA-Fa-f]/;function ne(e,t,n){let r=`&#x`+e.toString(16).toUpperCase();return n&&t&&!te.test(String.fromCharCode(t))?r:r+`;`}var re=/\d/;function ie(e,t,n){let r=`&#`+String(e);return n&&t&&!re.test(String.fromCharCode(t))?r:r+`;`}var ae=`AElig.AMP.Aacute.Acirc.Agrave.Aring.Atilde.Auml.COPY.Ccedil.ETH.Eacute.Ecirc.Egrave.Euml.GT.Iacute.Icirc.Igrave.Iuml.LT.Ntilde.Oacute.Ocirc.Ograve.Oslash.Otilde.Ouml.QUOT.REG.THORN.Uacute.Ucirc.Ugrave.Uuml.Yacute.aacute.acirc.acute.aelig.agrave.amp.aring.atilde.auml.brvbar.ccedil.cedil.cent.copy.curren.deg.divide.eacute.ecirc.egrave.eth.euml.frac12.frac14.frac34.gt.iacute.icirc.iexcl.igrave.iquest.iuml.laquo.lt.macr.micro.middot.nbsp.not.ntilde.oacute.ocirc.ograve.ordf.ordm.oslash.otilde.ouml.para.plusmn.pound.quot.raquo.reg.sect.shy.sup1.sup2.sup3.szlig.thorn.times.uacute.ucirc.ugrave.uml.uuml.yacute.yen.yuml`.split(`.`),oe={nbsp:`\xA0`,iexcl:`¡`,cent:`¢`,pound:`£`,curren:`¤`,yen:`¥`,brvbar:`¦`,sect:`§`,uml:`¨`,copy:`©`,ordf:`ª`,laquo:`«`,not:`¬`,shy:``,reg:`®`,macr:`¯`,deg:`°`,plusmn:`±`,sup2:`²`,sup3:`³`,acute:`´`,micro:`µ`,para:`¶`,middot:`·`,cedil:`¸`,sup1:`¹`,ordm:`º`,raquo:`»`,frac14:`¼`,frac12:`½`,frac34:`¾`,iquest:`¿`,Agrave:`À`,Aacute:`Á`,Acirc:`Â`,Atilde:`Ã`,Auml:`Ä`,Aring:`Å`,AElig:`Æ`,Ccedil:`Ç`,Egrave:`È`,Eacute:`É`,Ecirc:`Ê`,Euml:`Ë`,Igrave:`Ì`,Iacute:`Í`,Icirc:`Î`,Iuml:`Ï`,ETH:`Ð`,Ntilde:`Ñ`,Ograve:`Ò`,Oacute:`Ó`,Ocirc:`Ô`,Otilde:`Õ`,Ouml:`Ö`,times:`×`,Oslash:`Ø`,Ugrave:`Ù`,Uacute:`Ú`,Ucirc:`Û`,Uuml:`Ü`,Yacute:`Ý`,THORN:`Þ`,szlig:`ß`,agrave:`à`,aacute:`á`,acirc:`â`,atilde:`ã`,auml:`ä`,aring:`å`,aelig:`æ`,ccedil:`ç`,egrave:`è`,eacute:`é`,ecirc:`ê`,euml:`ë`,igrave:`ì`,iacute:`í`,icirc:`î`,iuml:`ï`,eth:`ð`,ntilde:`ñ`,ograve:`ò`,oacute:`ó`,ocirc:`ô`,otilde:`õ`,ouml:`ö`,divide:`÷`,oslash:`ø`,ugrave:`ù`,uacute:`ú`,ucirc:`û`,uuml:`ü`,yacute:`ý`,thorn:`þ`,yuml:`ÿ`,fnof:`ƒ`,Alpha:`Α`,Beta:`Β`,Gamma:`Γ`,Delta:`Δ`,Epsilon:`Ε`,Zeta:`Ζ`,Eta:`Η`,Theta:`Θ`,Iota:`Ι`,Kappa:`Κ`,Lambda:`Λ`,Mu:`Μ`,Nu:`Ν`,Xi:`Ξ`,Omicron:`Ο`,Pi:`Π`,Rho:`Ρ`,Sigma:`Σ`,Tau:`Τ`,Upsilon:`Υ`,Phi:`Φ`,Chi:`Χ`,Psi:`Ψ`,Omega:`Ω`,alpha:`α`,beta:`β`,gamma:`γ`,delta:`δ`,epsilon:`ε`,zeta:`ζ`,eta:`η`,theta:`θ`,iota:`ι`,kappa:`κ`,lambda:`λ`,mu:`μ`,nu:`ν`,xi:`ξ`,omicron:`ο`,pi:`π`,rho:`ρ`,sigmaf:`ς`,sigma:`σ`,tau:`τ`,upsilon:`υ`,phi:`φ`,chi:`χ`,psi:`ψ`,omega:`ω`,thetasym:`ϑ`,upsih:`ϒ`,piv:`ϖ`,bull:`•`,hellip:`…`,prime:`′`,Prime:`″`,oline:`‾`,frasl:`⁄`,weierp:`℘`,image:`ℑ`,real:`ℜ`,trade:`™`,alefsym:`ℵ`,larr:`←`,uarr:`↑`,rarr:`→`,darr:`↓`,harr:`↔`,crarr:`↵`,lArr:`⇐`,uArr:`⇑`,rArr:`⇒`,dArr:`⇓`,hArr:`⇔`,forall:`∀`,part:`∂`,exist:`∃`,empty:`∅`,nabla:`∇`,isin:`∈`,notin:`∉`,ni:`∋`,prod:`∏`,sum:`∑`,minus:`−`,lowast:`∗`,radic:`√`,prop:`∝`,infin:`∞`,ang:`∠`,and:`∧`,or:`∨`,cap:`∩`,cup:`∪`,int:`∫`,there4:`∴`,sim:`∼`,cong:`≅`,asymp:`≈`,ne:`≠`,equiv:`≡`,le:`≤`,ge:`≥`,sub:`⊂`,sup:`⊃`,nsub:`⊄`,sube:`⊆`,supe:`⊇`,oplus:`⊕`,otimes:`⊗`,perp:`⊥`,sdot:`⋅`,lceil:`⌈`,rceil:`⌉`,lfloor:`⌊`,rfloor:`⌋`,lang:`〈`,rang:`〉`,loz:`◊`,spades:`♠`,clubs:`♣`,hearts:`♥`,diams:`♦`,quot:`"`,amp:`&`,lt:`<`,gt:`>`,OElig:`Œ`,oelig:`œ`,Scaron:`Š`,scaron:`š`,Yuml:`Ÿ`,circ:`ˆ`,tilde:`˜`,ensp:` `,emsp:` `,thinsp:` `,zwnj:``,zwj:``,lrm:``,rlm:``,ndash:`–`,mdash:`—`,lsquo:`‘`,rsquo:`’`,sbquo:`‚`,ldquo:`“`,rdquo:`”`,bdquo:`„`,dagger:`†`,Dagger:`‡`,permil:`‰`,lsaquo:`‹`,rsaquo:`›`,euro:`€`},se=[`cent`,`copy`,`divide`,`gt`,`lt`,`not`,`para`,`times`],ce={}.hasOwnProperty,le={},ue;for(ue in oe)ce.call(oe,ue)&&(le[oe[ue]]=ue);var de=/[^\dA-Za-z]/;function fe(e,t,n,r){let i=String.fromCharCode(e);if(ce.call(le,i)){let e=le[i],a=`&`+e;return n&&ae.includes(e)&&!se.includes(e)&&(!r||t&&t!==61&&de.test(String.fromCharCode(t)))?a:a+`;`}return``}function pe(e,t,n){let r=ne(e,t,n.omitOptionalSemicolons),i;if((n.useNamedReferences||n.useShortestReferences)&&(i=fe(e,t,n.omitOptionalSemicolons,n.attribute)),(n.useShortestReferences||!i)&&n.useShortestReferences){let i=ie(e,t,n.omitOptionalSemicolons);i.length<r.length&&(r=i)}return i&&(!n.useShortestReferences||i.length<r.length)?i:r}function v(e,t){return g(e,Object.assign({format:pe},t))}var me=/^>|^->|<!--|-->|--!>|<!-$/g,he=[`>`],ge=[`<`,`>`];function _e(e,t,n,r){return r.settings.bogusComments?`<?`+v(e.value,Object.assign({},r.settings.characterReferences,{subset:he}))+`>`:`<!--`+e.value.replace(me,i)+`-->`;function i(e){return v(e,Object.assign({},r.settings.characterReferences,{subset:ge}))}}function ve(e,t,n,r){return`<!`+(r.settings.upperDoctype?`DOCTYPE`:`doctype`)+(r.settings.tightDoctype?``:` `)+`html>`}var y=xe(1),ye=xe(-1),be=[];function xe(e){return t;function t(t,n,r){let i=t?t.children:be,a=(n||0)+e,s=i[a];if(!r)for(;s&&o(s);)a+=e,s=i[a];return s}}var Se={}.hasOwnProperty;function Ce(e){return t;function t(t,n,r){return Se.call(e,t.tagName)&&e[t.tagName](t,n,r)}}var we=Ce({body:De,caption:Te,colgroup:Te,dd:je,dt:Ae,head:Te,html:Ee,li:ke,optgroup:Ne,option:Pe,p:Oe,rp:Me,rt:Me,tbody:Ie,td:ze,tfoot:Le,th:ze,thead:Fe,tr:Re});function Te(e,t,n){let r=y(n,t,!0);return!r||r.type!==`comment`&&!(r.type===`text`&&o(r.value.charAt(0)))}function Ee(e,t,n){let r=y(n,t);return!r||r.type!==`comment`}function De(e,t,n){let r=y(n,t);return!r||r.type!==`comment`}function Oe(e,t,n){let r=y(n,t);return r?r.type===`element`&&(r.tagName===`address`||r.tagName===`article`||r.tagName===`aside`||r.tagName===`blockquote`||r.tagName===`details`||r.tagName===`div`||r.tagName===`dl`||r.tagName===`fieldset`||r.tagName===`figcaption`||r.tagName===`figure`||r.tagName===`footer`||r.tagName===`form`||r.tagName===`h1`||r.tagName===`h2`||r.tagName===`h3`||r.tagName===`h4`||r.tagName===`h5`||r.tagName===`h6`||r.tagName===`header`||r.tagName===`hgroup`||r.tagName===`hr`||r.tagName===`main`||r.tagName===`menu`||r.tagName===`nav`||r.tagName===`ol`||r.tagName===`p`||r.tagName===`pre`||r.tagName===`section`||r.tagName===`table`||r.tagName===`ul`):!n||!(n.type===`element`&&(n.tagName===`a`||n.tagName===`audio`||n.tagName===`del`||n.tagName===`ins`||n.tagName===`map`||n.tagName===`noscript`||n.tagName===`video`))}function ke(e,t,n){let r=y(n,t);return!r||r.type===`element`&&r.tagName===`li`}function Ae(e,t,n){let r=y(n,t);return!!(r&&r.type===`element`&&(r.tagName===`dt`||r.tagName===`dd`))}function je(e,t,n){let r=y(n,t);return!r||r.type===`element`&&(r.tagName===`dt`||r.tagName===`dd`)}function Me(e,t,n){let r=y(n,t);return!r||r.type===`element`&&(r.tagName===`rp`||r.tagName===`rt`)}function Ne(e,t,n){let r=y(n,t);return!r||r.type===`element`&&r.tagName===`optgroup`}function Pe(e,t,n){let r=y(n,t);return!r||r.type===`element`&&(r.tagName===`option`||r.tagName===`optgroup`)}function Fe(e,t,n){let r=y(n,t);return!!(r&&r.type===`element`&&(r.tagName===`tbody`||r.tagName===`tfoot`))}function Ie(e,t,n){let r=y(n,t);return!r||r.type===`element`&&(r.tagName===`tbody`||r.tagName===`tfoot`)}function Le(e,t,n){return!y(n,t)}function Re(e,t,n){let r=y(n,t);return!r||r.type===`element`&&r.tagName===`tr`}function ze(e,t,n){let r=y(n,t);return!r||r.type===`element`&&(r.tagName===`td`||r.tagName===`th`)}var Be=Ce({body:Ue,colgroup:We,head:He,html:Ve,tbody:Ge});function Ve(e){let t=y(e,-1);return!t||t.type!==`comment`}function He(e){let t=new Set;for(let n of e.children)if(n.type===`element`&&(n.tagName===`base`||n.tagName===`title`)){if(t.has(n.tagName))return!1;t.add(n.tagName)}let n=e.children[0];return!n||n.type===`element`}function Ue(e){let t=y(e,-1,!0);return!t||t.type!==`comment`&&!(t.type===`text`&&o(t.value.charAt(0)))&&!(t.type===`element`&&(t.tagName===`meta`||t.tagName===`link`||t.tagName===`script`||t.tagName===`style`||t.tagName===`template`))}function We(e,t,n){let r=ye(n,t),i=y(e,-1,!0);return n&&r&&r.type===`element`&&r.tagName===`colgroup`&&we(r,n.children.indexOf(r),n)?!1:!!(i&&i.type===`element`&&i.tagName===`col`)}function Ge(e,t,n){let r=ye(n,t),i=y(e,-1);return n&&r&&r.type===`element`&&(r.tagName===`thead`||r.tagName===`tbody`)&&we(r,n.children.indexOf(r),n)?!1:!!(i&&i.type===`element`&&i.tagName===`tr`)}var Ke={name:[[`
|
|
3
3
|
\f\r &/=>`.split(``),`
|
|
4
4
|
\f\r "&'/=>\``.split(``)],[`\0
|
|
5
5
|
\f\r "&'/<=>`.split(``),`\0
|