@inharness-ai/claude4spec 1.0.19 → 1.0.20
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/CHANGELOG.md +12 -1
- package/dist/bin/c4s/commands/find-references.js +2 -1
- package/dist/bin/c4s/commands/find-references.js.map +1 -1
- package/dist/client/assets/{arc-Y_Y7YYxJ.js → arc-qrIe4IVl.js} +1 -1
- package/dist/client/assets/{architectureDiagram-3BPJPVTR-BvfJSQGS.js → architectureDiagram-3BPJPVTR-CF6sgG8n.js} +1 -1
- package/dist/client/assets/{blockDiagram-GPEHLZMM-0ER_5Ga5.js → blockDiagram-GPEHLZMM-Cf8Tx0VN.js} +1 -1
- package/dist/client/assets/{c4Diagram-AAUBKEIU-CulSeIur.js → c4Diagram-AAUBKEIU-BDkuMEyf.js} +1 -1
- package/dist/client/assets/channel-CTF_J4I4.js +1 -0
- package/dist/client/assets/{chunk-2J33WTMH-BR0UTxIH.js → chunk-2J33WTMH-ChycTonk.js} +1 -1
- package/dist/client/assets/{chunk-4BX2VUAB-C3CE1iTm.js → chunk-4BX2VUAB-BpUgWjxx.js} +1 -1
- package/dist/client/assets/{chunk-55IACEB6-WYG0SMCq.js → chunk-55IACEB6-CeHg_yjT.js} +1 -1
- package/dist/client/assets/{chunk-727SXJPM-CFxvH3KU.js → chunk-727SXJPM-BpxYq7ab.js} +1 -1
- package/dist/client/assets/{chunk-AQP2D5EJ-CW3tCRq5.js → chunk-AQP2D5EJ-bghkOtr6.js} +1 -1
- package/dist/client/assets/{chunk-FMBD7UC4-DhWed3oG.js → chunk-FMBD7UC4-4sXokGgd.js} +1 -1
- package/dist/client/assets/{chunk-ND2GUHAM-wKw1Twd3.js → chunk-ND2GUHAM-DYQOCE5T.js} +1 -1
- package/dist/client/assets/{chunk-QZHKN3VN-N2YJn9Rv.js → chunk-QZHKN3VN-NkVuDlFD.js} +1 -1
- package/dist/client/assets/classDiagram-4FO5ZUOK-Dt9RLC8r.js +1 -0
- package/dist/client/assets/classDiagram-v2-Q7XG4LA2-Dt9RLC8r.js +1 -0
- package/dist/client/assets/{cose-bilkent-S5V4N54A-BwTia-tr.js → cose-bilkent-S5V4N54A-1l4P4WRI.js} +1 -1
- package/dist/client/assets/{dagre-BM42HDAG-qaDS43Ui.js → dagre-BM42HDAG-CSQie-gR.js} +1 -1
- package/dist/client/assets/{diagram-2AECGRRQ-D_kuEzAN.js → diagram-2AECGRRQ-DME9ULoN.js} +1 -1
- package/dist/client/assets/{diagram-5GNKFQAL-BYj6JmFh.js → diagram-5GNKFQAL-Dn1Rw5k5.js} +1 -1
- package/dist/client/assets/{diagram-KO2AKTUF-C5GerpKU.js → diagram-KO2AKTUF-Duh_PNWR.js} +1 -1
- package/dist/client/assets/{diagram-LMA3HP47-BCCWR_VJ.js → diagram-LMA3HP47-B7Q5pV60.js} +1 -1
- package/dist/client/assets/{diagram-OG6HWLK6-zQ3cOHd6.js → diagram-OG6HWLK6-C0KL_RDd.js} +1 -1
- package/dist/client/assets/{erDiagram-TEJ5UH35-CXGKcFZT.js → erDiagram-TEJ5UH35-D5elfwSC.js} +1 -1
- package/dist/client/assets/{flowDiagram-I6XJVG4X-CtZxh2DT.js → flowDiagram-I6XJVG4X-BHmjX-WI.js} +1 -1
- package/dist/client/assets/{ganttDiagram-6RSMTGT7-BUdwVJfD.js → ganttDiagram-6RSMTGT7-KvoGFbS2.js} +1 -1
- package/dist/client/assets/{gitGraphDiagram-PVQCEYII-DAJUpS0c.js → gitGraphDiagram-PVQCEYII-DsZL8BfK.js} +1 -1
- package/dist/client/assets/{index-CSz40CWW.js → index-ClaVbrEF.js} +1 -1
- package/dist/client/assets/{index-nd9N-ch1.js → index-DnLELaLA.js} +208 -202
- package/dist/client/assets/index-oh_mP_1v.css +1 -0
- package/dist/client/assets/{index-g9hdRfKL.js → index-zzILqHQN.js} +1 -1
- package/dist/client/assets/{infoDiagram-5YYISTIA-Dkqaeq-d.js → infoDiagram-5YYISTIA-DoQ6iSpJ.js} +1 -1
- package/dist/client/assets/{ishikawaDiagram-YF4QCWOH-BDZbcL20.js → ishikawaDiagram-YF4QCWOH-akftyN0J.js} +1 -1
- package/dist/client/assets/{journeyDiagram-JHISSGLW-DQ8LraKA.js → journeyDiagram-JHISSGLW-PPex4PiV.js} +1 -1
- package/dist/client/assets/{kanban-definition-UN3LZRKU-CQOW2Mao.js → kanban-definition-UN3LZRKU-D114i3s1.js} +1 -1
- package/dist/client/assets/{linear-B-ZW0b9t.js → linear-BuwQPJom.js} +1 -1
- package/dist/client/assets/{mermaid.core-BdFxxBuE.js → mermaid.core-CMX3GAvM.js} +4 -4
- package/dist/client/assets/{mindmap-definition-RKZ34NQL-CcsZCub_.js → mindmap-definition-RKZ34NQL-ClBxWJju.js} +1 -1
- package/dist/client/assets/{pieDiagram-4H26LBE5-DpFgB1Qa.js → pieDiagram-4H26LBE5-hj5zVPj5.js} +1 -1
- package/dist/client/assets/{quadrantDiagram-W4KKPZXB-CItGhZSD.js → quadrantDiagram-W4KKPZXB-CRbR0G7M.js} +1 -1
- package/dist/client/assets/{requirementDiagram-4Y6WPE33-CMfRtv6V.js → requirementDiagram-4Y6WPE33-Dto4B70I.js} +1 -1
- package/dist/client/assets/{sankeyDiagram-5OEKKPKP-LUqs9QQq.js → sankeyDiagram-5OEKKPKP-DyYP8rwY.js} +1 -1
- package/dist/client/assets/{sequenceDiagram-3UESZ5HK-BZt_Nz-I.js → sequenceDiagram-3UESZ5HK-C-mrSLrJ.js} +1 -1
- package/dist/client/assets/{stateDiagram-AJRCARHV-DDCaA4Lh.js → stateDiagram-AJRCARHV-IoDlhAe6.js} +1 -1
- package/dist/client/assets/stateDiagram-v2-BHNVJYJU-BblFLijq.js +1 -0
- package/dist/client/assets/{timeline-definition-PNZ67QCA-Chrt6eh8.js → timeline-definition-PNZ67QCA-DEXg3TEw.js} +1 -1
- package/dist/client/assets/{vennDiagram-CIIHVFJN-7L-WzZJY.js → vennDiagram-CIIHVFJN-CNu7LaT1.js} +1 -1
- package/dist/client/assets/{wardley-L42UT6IY-CTNWz-UZ.js → wardley-L42UT6IY-0hGvREmD.js} +1 -1
- package/dist/client/assets/{wardleyDiagram-YWT4CUSO-BIhHmbRz.js → wardleyDiagram-YWT4CUSO-CVLz-xFz.js} +1 -1
- package/dist/client/assets/{xychartDiagram-2RQKCTM6-eqxCYjS7.js → xychartDiagram-2RQKCTM6-CFymKAcX.js} +1 -1
- package/dist/client/index.html +2 -2
- package/dist/server/config.js +11 -5
- package/dist/server/config.js.map +1 -1
- package/dist/server/fs/watcher.js +4 -2
- package/dist/server/fs/watcher.js.map +1 -1
- package/dist/server/routes/agent-turn.js +4 -1
- package/dist/server/routes/agent-turn.js.map +1 -1
- package/dist/server/services/chat-context.d.ts +7 -0
- package/dist/server/services/chat-context.js +99 -0
- package/dist/server/services/chat-context.js.map +1 -1
- package/dist/server/services/pages.js +5 -4
- package/dist/server/services/pages.js.map +1 -1
- package/dist/server/services/remote-http-client.d.ts +0 -8
- package/dist/server/services/remote-http-client.js +0 -16
- package/dist/server/services/remote-http-client.js.map +1 -1
- package/dist/server/workspace/project-context.js +5 -7
- package/dist/server/workspace/project-context.js.map +1 -1
- package/dist/shared/code-ranges.d.ts +13 -0
- package/dist/shared/code-ranges.js +20 -0
- package/dist/shared/code-ranges.js.map +1 -1
- package/dist/shared/jsx-passthrough.d.ts +44 -0
- package/dist/shared/jsx-passthrough.js +140 -0
- package/dist/shared/jsx-passthrough.js.map +1 -0
- package/dist/shared/page-files.d.ts +13 -0
- package/dist/shared/page-files.js +22 -0
- package/dist/shared/page-files.js.map +1 -0
- package/dist/shared/raw-jsx-escape.d.ts +15 -0
- package/dist/shared/raw-jsx-escape.js +32 -0
- package/dist/shared/raw-jsx-escape.js.map +1 -0
- package/dist/shared/xml-tag-kinds.d.ts +9 -0
- package/dist/shared/xml-tag-kinds.js +16 -0
- package/dist/shared/xml-tag-kinds.js.map +1 -0
- package/dist/shared/xml-tags.d.ts +2 -2
- package/dist/shared/xml-tags.js +8 -10
- package/dist/shared/xml-tags.js.map +1 -1
- package/package.json +2 -2
- package/dist/client/assets/channel-COuoa9K9.js +0 -1
- package/dist/client/assets/classDiagram-4FO5ZUOK-BESpN0be.js +0 -1
- package/dist/client/assets/classDiagram-v2-Q7XG4LA2-BESpN0be.js +0 -1
- package/dist/client/assets/index-BKuHIaMg.css +0 -1
- package/dist/client/assets/stateDiagram-v2-BHNVJYJU-DfEoRDHz.js +0 -1
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
* output and on spec pages, which use fences/inline). markdown-it does detect
|
|
13
13
|
* them, so the editor render path diverges here; closeable later if needed.
|
|
14
14
|
*/
|
|
15
|
+
import { findUnknownJsxRanges } from './jsx-passthrough.js';
|
|
15
16
|
/**
|
|
16
17
|
* Scan fenced code blocks (``` / ~~~), returning the fenced ranges and the
|
|
17
18
|
* gaps between them. An unclosed fence extends to end-of-string — matching how
|
|
@@ -110,6 +111,25 @@ export function computeCodeRanges(text) {
|
|
|
110
111
|
ranges.sort((a, b) => a[0] - b[0]);
|
|
111
112
|
return ranges;
|
|
112
113
|
}
|
|
114
|
+
/**
|
|
115
|
+
* Char ranges that reference operations must treat as "not a live reference":
|
|
116
|
+
* code (fenced + inline) PLUS unknown-JSX component regions (`.mdx` tags ∉
|
|
117
|
+
* dispatch allowlist — M20 raw code node). The JSX scan skips matches already
|
|
118
|
+
* inside code ranges. Returned sorted by start.
|
|
119
|
+
*
|
|
120
|
+
* `parseXmlTagsExcludingCode` filters against this so a registered ref nested
|
|
121
|
+
* inside `<Callout>…</Callout>` is ignored — without it, slug rename would
|
|
122
|
+
* byte-rewrite that ref and corrupt the JSX block (M19 `ykze87pl`). Editor
|
|
123
|
+
* render (`computeCodeRanges`) is intentionally left untouched: the editor
|
|
124
|
+
* handles unknown JSX via its own markdown-it rules, not via code ranges.
|
|
125
|
+
*/
|
|
126
|
+
export function computeExcludedRanges(text) {
|
|
127
|
+
const codeRanges = computeCodeRanges(text);
|
|
128
|
+
const jsxRanges = findUnknownJsxRanges(text, codeRanges);
|
|
129
|
+
if (jsxRanges.length === 0)
|
|
130
|
+
return codeRanges;
|
|
131
|
+
return [...codeRanges, ...jsxRanges].sort((a, b) => a[0] - b[0]);
|
|
132
|
+
}
|
|
113
133
|
/** True when [start, end) overlaps any of the (sorted) code ranges. */
|
|
114
134
|
export function intersectsCode(start, end, ranges) {
|
|
115
135
|
for (const [rs, re] of ranges) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"code-ranges.js","sourceRoot":"","sources":["../../src/shared/code-ranges.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;
|
|
1
|
+
{"version":3,"file":"code-ranges.js","sourceRoot":"","sources":["../../src/shared/code-ranges.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import type { CodeRange } from './code-ranges.js';
|
|
2
|
+
/**
|
|
3
|
+
* The set of tag names dispatched to dedicated NodeViews by `xml_inline` /
|
|
4
|
+
* `xml_block` — DERIVED from the registries (the 6 core kinds + every
|
|
5
|
+
* registered extension reference type), never a hardcoded count. Today: 8
|
|
6
|
+
* (`inline_mention`, `single_element`, `element_list`, `tagged_list`,
|
|
7
|
+
* `tagged_list_mixed`, `todo`, `section_ref`, `diagram`). Evaluated lazily so
|
|
8
|
+
* extension types registered after import (e.g. `section_ref`, `diagram`) are
|
|
9
|
+
* always seen.
|
|
10
|
+
*/
|
|
11
|
+
export declare function getDispatchAllowlist(): Set<string>;
|
|
12
|
+
/**
|
|
13
|
+
* JSX component shape: name starts with an uppercase letter (`<Callout/>`) or
|
|
14
|
+
* is a member expression (`<ui.Card/>`). Lowercase host/HTML tags (`<br>`,
|
|
15
|
+
* `<strong>`, `<img>`, `<div>`) are NOT components — they stay in the
|
|
16
|
+
* tiptap-markdown pipeline (→ hardBreak / bold / image) and must not be
|
|
17
|
+
* swallowed into the raw node.
|
|
18
|
+
*/
|
|
19
|
+
export declare function isJsxComponentName(name: string): boolean;
|
|
20
|
+
/** True when a tag should be routed to the raw JSX node: component-shaped AND ∉ allowlist. */
|
|
21
|
+
export declare function isPassthroughTag(name: string): boolean;
|
|
22
|
+
export interface JsxTagOpen {
|
|
23
|
+
name: string;
|
|
24
|
+
selfClosing: boolean;
|
|
25
|
+
/** Absolute offset just past the `>` of the opening tag. */
|
|
26
|
+
openEnd: number;
|
|
27
|
+
}
|
|
28
|
+
/** Match a tag-open (`<Name …>` or `<Name …/>`) anchored exactly at `pos`, else null. */
|
|
29
|
+
export declare function matchJsxTagOpen(text: string, pos: number): JsxTagOpen | null;
|
|
30
|
+
/**
|
|
31
|
+
* Given an opening `<name …>` at `openStart`, return the absolute offset just
|
|
32
|
+
* past the matching `</name>`, closing nested same-name pairs via
|
|
33
|
+
* depth-counting. Returns -1 if unbalanced (no matching close) or if the tag at
|
|
34
|
+
* `openStart` is not a non-self-closing `<name>`.
|
|
35
|
+
*/
|
|
36
|
+
export declare function findJsxSpanEnd(text: string, openStart: number, name: string): number;
|
|
37
|
+
/**
|
|
38
|
+
* Half-open `[start, end)` ranges of unknown JSX component tags (self-closing
|
|
39
|
+
* AND paired) ∉ allowlist. Matches inside `codeRanges` (fenced/inline code) are
|
|
40
|
+
* skipped. Unbalanced paired opens (no matching close) are skipped — not
|
|
41
|
+
* excluded — to avoid over-excluding on malformed input. Used by
|
|
42
|
+
* `code-ranges.ts` so server reference operations ignore refs inside JSX.
|
|
43
|
+
*/
|
|
44
|
+
export declare function findUnknownJsxRanges(text: string, codeRanges?: ReadonlyArray<CodeRange>): CodeRange[];
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Single source of truth for the unknown-JSX passthrough mechanism (`.mdx`
|
|
3
|
+
* component tags ∉ dispatch allowlist). Reused by BOTH the editor markdown-it
|
|
4
|
+
* rules (M20 — `RawJsxNode`) and the server-side reference parser (M19 —
|
|
5
|
+
* `code-ranges.ts` → `parseXmlTagsExcludingCode`), so both treat the exact same
|
|
6
|
+
* regions as "raw JSX, not a reference". No duplication of the allowlist or the
|
|
7
|
+
* depth-counting logic.
|
|
8
|
+
*
|
|
9
|
+
* Leaf-ish: imports only the two registry leaves; the `CodeRange` import is
|
|
10
|
+
* type-only (erased at compile time) so `code-ranges.ts` can depend on this
|
|
11
|
+
* module without an import cycle.
|
|
12
|
+
*/
|
|
13
|
+
import { XML_TAG_KINDS } from './xml-tag-kinds.js';
|
|
14
|
+
import { listExtensionReferenceTypes } from './reference-extensions.js';
|
|
15
|
+
/**
|
|
16
|
+
* The set of tag names dispatched to dedicated NodeViews by `xml_inline` /
|
|
17
|
+
* `xml_block` — DERIVED from the registries (the 6 core kinds + every
|
|
18
|
+
* registered extension reference type), never a hardcoded count. Today: 8
|
|
19
|
+
* (`inline_mention`, `single_element`, `element_list`, `tagged_list`,
|
|
20
|
+
* `tagged_list_mixed`, `todo`, `section_ref`, `diagram`). Evaluated lazily so
|
|
21
|
+
* extension types registered after import (e.g. `section_ref`, `diagram`) are
|
|
22
|
+
* always seen.
|
|
23
|
+
*/
|
|
24
|
+
export function getDispatchAllowlist() {
|
|
25
|
+
return new Set([
|
|
26
|
+
...XML_TAG_KINDS,
|
|
27
|
+
...listExtensionReferenceTypes().map((e) => e.tag),
|
|
28
|
+
]);
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* JSX component shape: name starts with an uppercase letter (`<Callout/>`) or
|
|
32
|
+
* is a member expression (`<ui.Card/>`). Lowercase host/HTML tags (`<br>`,
|
|
33
|
+
* `<strong>`, `<img>`, `<div>`) are NOT components — they stay in the
|
|
34
|
+
* tiptap-markdown pipeline (→ hardBreak / bold / image) and must not be
|
|
35
|
+
* swallowed into the raw node.
|
|
36
|
+
*/
|
|
37
|
+
export function isJsxComponentName(name) {
|
|
38
|
+
return /^[A-Z]/.test(name) || name.includes('.');
|
|
39
|
+
}
|
|
40
|
+
/** True when a tag should be routed to the raw JSX node: component-shaped AND ∉ allowlist. */
|
|
41
|
+
export function isPassthroughTag(name) {
|
|
42
|
+
return isJsxComponentName(name) && !getDispatchAllowlist().has(name);
|
|
43
|
+
}
|
|
44
|
+
const TAG_NAME = '[A-Za-z][\\w.-]*';
|
|
45
|
+
const OPEN_AT_START_RE = new RegExp(`^<(${TAG_NAME})((?:\\s[^>]*?)?)(\\/?)>`);
|
|
46
|
+
function escapeRegExp(s) {
|
|
47
|
+
return s.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
48
|
+
}
|
|
49
|
+
/** Match a tag-open (`<Name …>` or `<Name …/>`) anchored exactly at `pos`, else null. */
|
|
50
|
+
export function matchJsxTagOpen(text, pos) {
|
|
51
|
+
if (text.charCodeAt(pos) !== 0x3c /* < */)
|
|
52
|
+
return null;
|
|
53
|
+
const m = OPEN_AT_START_RE.exec(text.slice(pos));
|
|
54
|
+
if (!m)
|
|
55
|
+
return null;
|
|
56
|
+
return {
|
|
57
|
+
name: m[1],
|
|
58
|
+
selfClosing: m[3] === '/',
|
|
59
|
+
openEnd: pos + m[0].length,
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Given an opening `<name …>` at `openStart`, return the absolute offset just
|
|
64
|
+
* past the matching `</name>`, closing nested same-name pairs via
|
|
65
|
+
* depth-counting. Returns -1 if unbalanced (no matching close) or if the tag at
|
|
66
|
+
* `openStart` is not a non-self-closing `<name>`.
|
|
67
|
+
*/
|
|
68
|
+
export function findJsxSpanEnd(text, openStart, name) {
|
|
69
|
+
const open = matchJsxTagOpen(text, openStart);
|
|
70
|
+
if (!open || open.name !== name || open.selfClosing)
|
|
71
|
+
return -1;
|
|
72
|
+
const openRe = new RegExp(`^<${escapeRegExp(name)}((?:\\s[^>]*?)?)(\\/?)>`);
|
|
73
|
+
const closeRe = new RegExp(`^<\\/${escapeRegExp(name)}\\s*>`);
|
|
74
|
+
let depth = 1;
|
|
75
|
+
let i = open.openEnd;
|
|
76
|
+
while (i < text.length) {
|
|
77
|
+
if (text.charCodeAt(i) === 0x3c /* < */) {
|
|
78
|
+
const tail = text.slice(i);
|
|
79
|
+
const c = closeRe.exec(tail);
|
|
80
|
+
if (c) {
|
|
81
|
+
depth--;
|
|
82
|
+
i += c[0].length;
|
|
83
|
+
if (depth === 0)
|
|
84
|
+
return i;
|
|
85
|
+
continue;
|
|
86
|
+
}
|
|
87
|
+
const o = openRe.exec(tail);
|
|
88
|
+
if (o) {
|
|
89
|
+
if (o[2] !== '/')
|
|
90
|
+
depth++; // non-self-closing open of same name nests
|
|
91
|
+
i += o[0].length;
|
|
92
|
+
continue;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
i++;
|
|
96
|
+
}
|
|
97
|
+
return -1;
|
|
98
|
+
}
|
|
99
|
+
function insideRanges(pos, ranges) {
|
|
100
|
+
for (const [rs, re] of ranges) {
|
|
101
|
+
if (pos >= rs && pos < re)
|
|
102
|
+
return true;
|
|
103
|
+
}
|
|
104
|
+
return false;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Half-open `[start, end)` ranges of unknown JSX component tags (self-closing
|
|
108
|
+
* AND paired) ∉ allowlist. Matches inside `codeRanges` (fenced/inline code) are
|
|
109
|
+
* skipped. Unbalanced paired opens (no matching close) are skipped — not
|
|
110
|
+
* excluded — to avoid over-excluding on malformed input. Used by
|
|
111
|
+
* `code-ranges.ts` so server reference operations ignore refs inside JSX.
|
|
112
|
+
*/
|
|
113
|
+
export function findUnknownJsxRanges(text, codeRanges = []) {
|
|
114
|
+
const ranges = [];
|
|
115
|
+
let i = 0;
|
|
116
|
+
while (i < text.length) {
|
|
117
|
+
if (text.charCodeAt(i) === 0x3c /* < */) {
|
|
118
|
+
const open = matchJsxTagOpen(text, i);
|
|
119
|
+
if (open && isPassthroughTag(open.name) && !insideRanges(i, codeRanges)) {
|
|
120
|
+
if (open.selfClosing) {
|
|
121
|
+
ranges.push([i, open.openEnd]);
|
|
122
|
+
i = open.openEnd;
|
|
123
|
+
continue;
|
|
124
|
+
}
|
|
125
|
+
const end = findJsxSpanEnd(text, i, open.name);
|
|
126
|
+
if (end !== -1) {
|
|
127
|
+
ranges.push([i, end]);
|
|
128
|
+
i = end;
|
|
129
|
+
continue;
|
|
130
|
+
}
|
|
131
|
+
// unbalanced open — leave it for normal processing
|
|
132
|
+
i = open.openEnd;
|
|
133
|
+
continue;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
i++;
|
|
137
|
+
}
|
|
138
|
+
return ranges;
|
|
139
|
+
}
|
|
140
|
+
//# sourceMappingURL=jsx-passthrough.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jsx-passthrough.js","sourceRoot":"","sources":["../../src/shared/jsx-passthrough.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Page file-extension classification (M02 `e16qvg1n`). `.md` and `.mdx` are one
|
|
3
|
+
* markdown class — both edited in tiptap, section-indexed (M06), reference-
|
|
4
|
+
* validated (M19) and versioned (M17). `.html` is a read-only preview (M30).
|
|
5
|
+
*
|
|
6
|
+
* The `.md`/`.mdx` distinction is purely an icon affordance derived from the file
|
|
7
|
+
* NAME, never from `fileType` (both map to `fileType='markdown'`).
|
|
8
|
+
*/
|
|
9
|
+
export declare const MARKDOWN_PAGE_EXTENSIONS: readonly [".md", ".mdx"];
|
|
10
|
+
/** True when a path/name is a markdown page (`.md` or `.mdx`). */
|
|
11
|
+
export declare function isMarkdownPath(p: string): boolean;
|
|
12
|
+
/** The markdown extension of a name (`'md'` | `'mdx'`), or null if not markdown. */
|
|
13
|
+
export declare function markdownExtension(name: string): 'md' | 'mdx' | null;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Page file-extension classification (M02 `e16qvg1n`). `.md` and `.mdx` are one
|
|
3
|
+
* markdown class — both edited in tiptap, section-indexed (M06), reference-
|
|
4
|
+
* validated (M19) and versioned (M17). `.html` is a read-only preview (M30).
|
|
5
|
+
*
|
|
6
|
+
* The `.md`/`.mdx` distinction is purely an icon affordance derived from the file
|
|
7
|
+
* NAME, never from `fileType` (both map to `fileType='markdown'`).
|
|
8
|
+
*/
|
|
9
|
+
export const MARKDOWN_PAGE_EXTENSIONS = ['.md', '.mdx'];
|
|
10
|
+
/** True when a path/name is a markdown page (`.md` or `.mdx`). */
|
|
11
|
+
export function isMarkdownPath(p) {
|
|
12
|
+
return MARKDOWN_PAGE_EXTENSIONS.some((ext) => p.endsWith(ext));
|
|
13
|
+
}
|
|
14
|
+
/** The markdown extension of a name (`'md'` | `'mdx'`), or null if not markdown. */
|
|
15
|
+
export function markdownExtension(name) {
|
|
16
|
+
if (name.endsWith('.mdx'))
|
|
17
|
+
return 'mdx';
|
|
18
|
+
if (name.endsWith('.md'))
|
|
19
|
+
return 'md';
|
|
20
|
+
return null;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=page-files.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"page-files.js","sourceRoot":"","sources":["../../src/shared/page-files.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,KAAK,EAAE,MAAM,CAAU,CAAC;AAEjE,kEAAkE;AAClE,MAAM,UAAU,cAAc,CAAC,CAAS;IACtC,OAAO,wBAAwB,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;AACjE,CAAC;AAED,oFAAoF;AACpF,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC5C,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,OAAO,KAAK,CAAC;IACxC,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACtC,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Verbatim-attribute escaping for the raw JSX node (M20 — unknown `.mdx`
|
|
3
|
+
* component tags). The original tag bytes are smuggled through the
|
|
4
|
+
* `markdown → DOMParser → ProseMirror → markdown` pipeline inside a
|
|
5
|
+
* `data-c4s-raw="…"` attribute, so they must survive HTML attribute-value
|
|
6
|
+
* normalization byte-for-byte.
|
|
7
|
+
*
|
|
8
|
+
* Newline encoding (` `/` `) is load-bearing: DOMParser collapses raw
|
|
9
|
+
* CR/LF/tab in attribute values to spaces, so multi-line paired bodies would be
|
|
10
|
+
* mangled without it. `&` is escaped first (and unescaped last) to avoid
|
|
11
|
+
* double-encoding. This is the scheme used by the former content-bearing
|
|
12
|
+
* diagram node (`diagram-source-escape.ts`, removed in v0.1.64).
|
|
13
|
+
*/
|
|
14
|
+
export declare function escapeRawAttr(raw: string): string;
|
|
15
|
+
export declare function unescapeRawAttr(escaped: string): string;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Verbatim-attribute escaping for the raw JSX node (M20 — unknown `.mdx`
|
|
3
|
+
* component tags). The original tag bytes are smuggled through the
|
|
4
|
+
* `markdown → DOMParser → ProseMirror → markdown` pipeline inside a
|
|
5
|
+
* `data-c4s-raw="…"` attribute, so they must survive HTML attribute-value
|
|
6
|
+
* normalization byte-for-byte.
|
|
7
|
+
*
|
|
8
|
+
* Newline encoding (` `/` `) is load-bearing: DOMParser collapses raw
|
|
9
|
+
* CR/LF/tab in attribute values to spaces, so multi-line paired bodies would be
|
|
10
|
+
* mangled without it. `&` is escaped first (and unescaped last) to avoid
|
|
11
|
+
* double-encoding. This is the scheme used by the former content-bearing
|
|
12
|
+
* diagram node (`diagram-source-escape.ts`, removed in v0.1.64).
|
|
13
|
+
*/
|
|
14
|
+
export function escapeRawAttr(raw) {
|
|
15
|
+
return raw
|
|
16
|
+
.replace(/&/g, '&')
|
|
17
|
+
.replace(/"/g, '"')
|
|
18
|
+
.replace(/\n/g, ' ')
|
|
19
|
+
.replace(/\r/g, ' ')
|
|
20
|
+
.replace(/</g, '<')
|
|
21
|
+
.replace(/>/g, '>');
|
|
22
|
+
}
|
|
23
|
+
export function unescapeRawAttr(escaped) {
|
|
24
|
+
return escaped
|
|
25
|
+
.replace(/>/g, '>')
|
|
26
|
+
.replace(/</g, '<')
|
|
27
|
+
.replace(/ /g, '\r')
|
|
28
|
+
.replace(/ /g, '\n')
|
|
29
|
+
.replace(/"/g, '"')
|
|
30
|
+
.replace(/&/g, '&');
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=raw-jsx-escape.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"raw-jsx-escape.js","sourceRoot":"","sources":["../../src/shared/raw-jsx-escape.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,aAAa,CAAC,GAAW;IACvC,OAAO,GAAG;SACP,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;SACtB,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC;SACvB,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC;SACvB,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC;SACvB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAC3B,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,OAAe;IAC7C,OAAO,OAAO;SACX,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC;SACrB,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC;SACrB,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC;SACvB,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC;SACvB,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC;SACvB,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;AAC5B,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The 6 core XML tag kinds (5 reference type registry types M19 + `todo` M08).
|
|
3
|
+
*
|
|
4
|
+
* Extracted into a dependency-free leaf module so it can be imported by both
|
|
5
|
+
* `xml-tags.ts` (which depends on `code-ranges.ts`) and `jsx-passthrough.ts`
|
|
6
|
+
* (which `code-ranges.ts` depends on) without forming an import cycle.
|
|
7
|
+
*/
|
|
8
|
+
export declare const XML_TAG_KINDS: readonly ["inline_mention", "single_element", "element_list", "tagged_list", "tagged_list_mixed", "todo"];
|
|
9
|
+
export type XmlTagKind = (typeof XML_TAG_KINDS)[number];
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The 6 core XML tag kinds (5 reference type registry types M19 + `todo` M08).
|
|
3
|
+
*
|
|
4
|
+
* Extracted into a dependency-free leaf module so it can be imported by both
|
|
5
|
+
* `xml-tags.ts` (which depends on `code-ranges.ts`) and `jsx-passthrough.ts`
|
|
6
|
+
* (which `code-ranges.ts` depends on) without forming an import cycle.
|
|
7
|
+
*/
|
|
8
|
+
export const XML_TAG_KINDS = [
|
|
9
|
+
'inline_mention',
|
|
10
|
+
'single_element',
|
|
11
|
+
'element_list',
|
|
12
|
+
'tagged_list',
|
|
13
|
+
'tagged_list_mixed',
|
|
14
|
+
'todo',
|
|
15
|
+
];
|
|
16
|
+
//# sourceMappingURL=xml-tag-kinds.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"xml-tag-kinds.js","sourceRoot":"","sources":["../../src/shared/xml-tag-kinds.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,gBAAgB;IAChB,gBAAgB;IAChB,cAAc;IACd,aAAa;IACb,mBAAmB;IACnB,MAAM;CACE,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
export type XmlTagKind
|
|
1
|
+
import { XML_TAG_KINDS, type XmlTagKind } from './xml-tag-kinds.js';
|
|
2
|
+
export { XML_TAG_KINDS, type XmlTagKind };
|
|
3
3
|
export interface XmlTag {
|
|
4
4
|
kind: XmlTagKind | string;
|
|
5
5
|
source: 'core' | 'extension';
|
package/dist/shared/xml-tags.js
CHANGED
|
@@ -1,13 +1,7 @@
|
|
|
1
1
|
import { getExtensionReferenceType, listExtensionReferenceTypes, } from './reference-extensions.js';
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
'single_element',
|
|
6
|
-
'element_list',
|
|
7
|
-
'tagged_list',
|
|
8
|
-
'tagged_list_mixed',
|
|
9
|
-
'todo',
|
|
10
|
-
];
|
|
2
|
+
import { computeExcludedRanges, intersectsCode } from './code-ranges.js';
|
|
3
|
+
import { XML_TAG_KINDS } from './xml-tag-kinds.js';
|
|
4
|
+
export { XML_TAG_KINDS };
|
|
11
5
|
export const XML_TAG_REGEX = /<(inline_mention|single_element|element_list|tagged_list|tagged_list_mixed|todo)\s+([^>]*?)\/?>/g;
|
|
12
6
|
const ATTR_REGEX = /(\w+)="([^"]*)"/g;
|
|
13
7
|
const ATTR_ORDER = {
|
|
@@ -74,7 +68,11 @@ export function parseXmlTagsExcludingCode(md) {
|
|
|
74
68
|
const tags = parseXmlTags(md);
|
|
75
69
|
if (tags.length === 0)
|
|
76
70
|
return tags;
|
|
77
|
-
|
|
71
|
+
// Exclude fenced/inline code AND unknown-JSX regions (`.mdx` component tags →
|
|
72
|
+
// raw code node in the editor M20). Without the JSX exclusion a registered ref
|
|
73
|
+
// nested inside `<Callout>…<inline_mention/>…</Callout>` would look live and a
|
|
74
|
+
// slug rename would byte-rewrite it, corrupting the JSX block. See code-ranges.ts.
|
|
75
|
+
const ranges = computeExcludedRanges(md);
|
|
78
76
|
return tags.filter((t) => !intersectsCode(t.start, t.end, ranges));
|
|
79
77
|
}
|
|
80
78
|
export function serializeXmlTag(kind, attrs) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"xml-tags.js","sourceRoot":"","sources":["../../src/shared/xml-tags.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,yBAAyB,EACzB,2BAA2B,GAC5B,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"xml-tags.js","sourceRoot":"","sources":["../../src/shared/xml-tags.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@inharness-ai/claude4spec",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.20",
|
|
4
4
|
"description": "Plan the whole system before your agent writes a line of code. Local-first planning layer with structured entities and typed relations.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Mike Tomala <mike@inharness.ai>",
|
|
@@ -57,7 +57,7 @@
|
|
|
57
57
|
"dependencies": {
|
|
58
58
|
"@anthropic-ai/claude-agent-sdk": "^0.2.109",
|
|
59
59
|
"@google/gemini-cli-core": "^0.42.0",
|
|
60
|
-
"@inharness-ai/agent-adapters": "^0.8.
|
|
60
|
+
"@inharness-ai/agent-adapters": "^0.8.4",
|
|
61
61
|
"@inharness-ai/agent-chat": "^0.3.1",
|
|
62
62
|
"@modelcontextprotocol/sdk": "^1.29.0",
|
|
63
63
|
"@monaco-editor/react": "^4.7.0",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{ai as o,aj as n}from"./mermaid.core-BdFxxBuE.js";const t=(a,r)=>o.lang.round(n.parse(a)[r]);export{t as c};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{s as a,c as s,a as e,C as t}from"./chunk-727SXJPM-CFxvH3KU.js";import{_ as i}from"./mermaid.core-BdFxxBuE.js";import"./chunk-FMBD7UC4-DhWed3oG.js";import"./chunk-ND2GUHAM-wKw1Twd3.js";import"./chunk-55IACEB6-WYG0SMCq.js";import"./chunk-2J33WTMH-BR0UTxIH.js";import"./index-nd9N-ch1.js";var n={parser:e,get db(){return new t},renderer:s,styles:a,init:i(r=>{r.class||(r.class={}),r.class.arrowMarkerAbsolute=r.arrowMarkerAbsolute},"init")};export{n as diagram};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{s as a,c as s,a as e,C as t}from"./chunk-727SXJPM-CFxvH3KU.js";import{_ as i}from"./mermaid.core-BdFxxBuE.js";import"./chunk-FMBD7UC4-DhWed3oG.js";import"./chunk-ND2GUHAM-wKw1Twd3.js";import"./chunk-55IACEB6-WYG0SMCq.js";import"./chunk-2J33WTMH-BR0UTxIH.js";import"./index-nd9N-ch1.js";var n={parser:e,get db(){return new t},renderer:s,styles:a,init:i(r=>{r.class||(r.class={}),r.class.arrowMarkerAbsolute=r.arrowMarkerAbsolute},"init")};export{n as diagram};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
:root{--c-bg: #faf8f4;--c-panel: #f3efe7;--c-card: #fffdf8;--c-ink: #2a2722;--c-muted: #7a7368;--c-subtle: #a39b8e;--c-hair: #e8e2d5;--c-hair-strong: #d8d1c0;--c-accent: #c45a3b;--c-accent-soft: #f5dfd3;--c-accent-ink: #8a3a22;--c-yellow: #f9e6a2;--c-yellow-ink: #7a5c00;--c-green: #6e8a5f;--c-green-soft: #dfe7d6;--c-blue: #5d7ea2;--c-blue-soft: #d8e2ef;--c-purple: #8a6da3;--c-purple-soft: #e3d8ec;--c-red: #b6553c;--c-red-soft: #efd4c9}.dark{--c-bg: #1b1a17;--c-panel: #242320;--c-card: #2c2b27;--c-ink: #ece7dc;--c-muted: #9a9184;--c-subtle: #6a6357;--c-hair: #383530;--c-hair-strong: #4a463e;--c-accent: #e07a5c;--c-accent-soft: #4a2a1e;--c-accent-ink: #f3b49a;--c-yellow: #5a4820;--c-yellow-ink: #e8cf7a;--c-green: #8fa87f;--c-green-soft: #2f3d28;--c-blue: #8aa5c9;--c-blue-soft: #2a3646;--c-purple: #b39cca;--c-purple-soft: #3a2f46;--c-red: #d87a5f;--c-red-soft: #4a2820}html,body,#root{height:100%}body{margin:0;background:var(--c-bg);color:var(--c-ink);font-family:Inter,system-ui,sans-serif;-webkit-font-smoothing:antialiased;overflow:hidden}.prose-spec h1{font-family:Lora,Georgia,serif;font-size:34px;line-height:1.15;font-weight:600;margin:0 0 14px;letter-spacing:-.01em}.prose-spec h2{font-family:Lora,Georgia,serif;font-size:22px;line-height:1.2;font-weight:600;margin:34px 0 10px;letter-spacing:-.005em}.prose-spec h3{font-size:15px;font-weight:600;margin:22px 0 6px;color:var(--c-ink);text-transform:uppercase;letter-spacing:.06em}.prose-spec p{font-size:15.5px;line-height:1.7;margin:0 0 14px;color:var(--c-ink)}.prose-spec p.lede{font-size:17px;color:var(--c-muted);font-style:italic;font-family:Lora,serif}.prose-spec code{font-family:JetBrains Mono,monospace;font-size:13px;background:var(--c-panel);border:1px solid var(--c-hair);border-radius:4px;padding:1px 5px;color:var(--c-accent-ink)}.prose-spec pre{font-family:JetBrains Mono,monospace;font-size:13px;background:var(--c-panel);border:1px solid var(--c-hair);border-radius:6px;padding:10px 12px;overflow-x:auto;margin:10px 0 16px}.prose-spec pre code{background:transparent;border:0;padding:0;color:var(--c-ink)}.prose-spec strong{font-weight:600;color:var(--c-ink)}.prose-spec blockquote{border-left:3px solid var(--c-accent);padding:2px 0 2px 14px;margin:16px 0;color:var(--c-muted);font-style:italic}.prose-spec a{color:var(--c-accent-ink);text-decoration:underline;text-decoration-color:var(--c-hair-strong);text-underline-offset:3px}.prose-spec hr{border:0;border-top:1px solid var(--c-hair);margin:24px 0}.prose-spec table{width:100%;font-size:13.5px;border-collapse:collapse;margin:16px 0}.prose-spec th,.prose-spec td{border:1px solid var(--c-hair);padding:6px 10px;text-align:left;vertical-align:top}.prose-spec th{background:var(--c-panel);font-weight:600;color:var(--c-accent-ink)}.prose-spec .selectedCell{background:color-mix(in srgb,var(--c-accent) 10%,transparent)}.prose-spec .ProseMirror:focus{outline:none}.prose-spec .ProseMirror p.is-editor-empty:first-child:before{content:attr(data-placeholder);float:left;color:var(--c-subtle);pointer-events:none;height:0}.chat-input-pm{font-size:13px;line-height:1.54;min-height:20px;color:var(--c-ink)}.chat-input-pm p{margin:0}.chat-input-pm p+p{margin-top:.25em}.chat-input-pm p.is-editor-empty:first-child:before{content:attr(data-placeholder);float:left;color:var(--c-muted);pointer-events:none;height:0}.chat-prose{font-size:13.5px;line-height:1.6;color:var(--c-ink)}.chat-prose>*:first-child{margin-top:0}.chat-prose>*:last-child{margin-bottom:0}.chat-prose h1{font-family:Lora,Georgia,serif;font-size:18px;font-weight:600;margin:10px 0 6px;line-height:1.25}.chat-prose h2{font-family:Lora,Georgia,serif;font-size:15.5px;font-weight:600;margin:12px 0 4px;line-height:1.3}.chat-prose h3{font-size:12px;font-weight:600;text-transform:uppercase;letter-spacing:.06em;margin:12px 0 2px;color:var(--c-ink)}.chat-prose p{font-size:13.5px;line-height:1.6;margin:0 0 8px}.chat-prose ul{margin:4px 0 8px;padding-left:20px;list-style-type:disc}.chat-prose ol{margin:4px 0 8px;padding-left:22px;list-style-type:decimal}.chat-prose ul ul{list-style-type:circle}.chat-prose ul ul ul{list-style-type:square}.chat-prose ol ol{list-style-type:lower-alpha}.chat-prose ol ol ol{list-style-type:lower-roman}.chat-prose li{font-size:13.5px;line-height:1.55;margin:2px 0}.chat-prose li::marker{color:var(--c-subtle)}.chat-prose li>p{margin:0}.chat-prose blockquote{border-left:3px solid var(--c-accent);padding:2px 0 2px 10px;margin:8px 0;color:var(--c-muted);font-style:italic}.chat-prose a{color:var(--c-accent-ink);text-decoration:underline;text-decoration-color:var(--c-hair-strong);text-underline-offset:2px}.chat-prose strong{font-weight:600;color:var(--c-ink)}.chat-prose em{font-style:italic}.chat-prose hr{border:0;border-top:1px solid var(--c-hair);margin:12px 0}.chat-prose :not(pre)>code{font-family:JetBrains Mono,monospace;font-size:12px;background:var(--c-panel);border:1px solid var(--c-hair);border-radius:4px;padding:1px 5px;color:var(--c-accent-ink)}.chat-prose table{font-size:12.5px;border-collapse:collapse;margin:8px 0;display:block;overflow-x:auto}.chat-prose th,.chat-prose td{border:1px solid var(--c-hair);padding:4px 8px;text-align:left}.chat-prose th{background:var(--c-panel);font-weight:600}.nice-scroll::-webkit-scrollbar{width:10px;height:10px}.nice-scroll::-webkit-scrollbar-track{background:transparent}.nice-scroll::-webkit-scrollbar-thumb{background:var(--c-hair-strong);border-radius:999px;border:2px solid var(--c-bg)}.nice-scroll::-webkit-scrollbar-thumb:hover{background:var(--c-subtle)}@keyframes caret-blink{0%,50%{opacity:1}50.01%,to{opacity:0}}.caret{display:inline-block;width:2px;height:1.15em;background:var(--c-accent);vertical-align:text-bottom;margin-left:1px;animation:caret-blink 1.1s step-end infinite}@keyframes dot-pulse{0%,80%,to{opacity:.25;transform:translateY(0)}40%{opacity:1;transform:translateY(-2px)}}.dot-pulse span{display:inline-block;width:5px;height:5px;margin:0 1.5px;background:var(--c-muted);border-radius:999px;animation:dot-pulse 1.2s infinite ease-in-out}.dot-pulse span:nth-child(2){animation-delay:.15s}.dot-pulse span:nth-child(3){animation-delay:.3s}@keyframes skeleton-pulse{0%,to{opacity:.45}50%{opacity:.85}}.skeleton{background:var(--c-hair);border-radius:4px;animation:skeleton-pulse 1.4s ease-in-out infinite}.tool-json-btn{transition:background .15s ease,color .15s ease}.tool-json-btn:hover{background:var(--c-hair);color:var(--c-ink)}.scroll-thin{scrollbar-width:thin;scrollbar-color:transparent transparent}.scroll-thin:hover,.scroll-thin:focus-within{scrollbar-color:var(--c-hair-strong) transparent}.scroll-thin::-webkit-scrollbar{height:6px;width:6px;background:transparent}.scroll-thin::-webkit-scrollbar-thumb{background:transparent;border-radius:3px;-webkit-transition:background .12s ease;transition:background .12s ease}.scroll-thin:hover::-webkit-scrollbar-thumb,.scroll-thin:focus-within::-webkit-scrollbar-thumb{background:var(--c-hair-strong)}.scroll-thin::-webkit-scrollbar-thumb:hover{background:var(--c-muted)}.hair{background:var(--c-hair)}.hair-strong{background:var(--c-hair-strong)}@keyframes fade-in-up{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:none}}.fade-in-up{animation:fade-in-up .35s ease-out both}.msg-enter{animation:fade-in-up .4s ease-out both}.paper{background-color:var(--c-bg);background-image:radial-gradient(rgba(120,100,60,.04) 1px,transparent 1px);background-size:22px 22px}.btn-ghost{color:var(--c-muted)}.btn-ghost:hover{color:var(--c-ink);background:var(--c-panel)}.focus-ring:focus{outline:2px solid var(--c-accent);outline-offset:1px}.chip-hover:hover{filter:brightness(.96)}kbd{font-family:JetBrains Mono,monospace;font-size:10.5px;padding:1.5px 5px;border:1px solid var(--c-hair-strong);border-bottom-width:2px;border-radius:4px;background:var(--c-card);color:var(--c-muted)}.anno-hl{background:var(--c-yellow);border-bottom:1.5px solid rgba(0,0,0,.15);padding:0 2px;border-radius:2px;cursor:help}::-moz-selection{background:var(--c-yellow);color:var(--c-ink)}::selection{background:var(--c-yellow);color:var(--c-ink)}.plan-blame{position:relative}.plan-blame:before{content:"";position:absolute;left:-16px;top:2px;bottom:2px;width:3px;border-radius:1.5px;background:var(--blame-color, var(--c-accent));pointer-events:none}.plan-blame:after{content:"v" attr(data-version);position:absolute;left:-40px;top:3px;font-family:var(--font-mono, ui-monospace, SFMono-Regular, monospace);font-size:10px;line-height:1;letter-spacing:.02em;color:var(--blame-color, var(--c-accent));opacity:.85;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.plan-blame-v1{--blame-color: #c45a3b}.plan-blame-v2{--blame-color: #5d7ea2}.plan-blame-v3{--blame-color: #6e8a5f}.plan-blame-v4{--blame-color: #8a6da3}.plan-blame-v5{--blame-color: #b6553c}.plan-blame-v6{--blame-color: #7a7368}.plan-blame-v7{--blame-color: #c4a24f}.plan-blame-v8{--blame-color: #4d7e86}.prose-spec h1,.prose-spec h2,.prose-spec h3,.prose-spec h4,.prose-spec h5,.prose-spec h6{position:relative;padding-right:56px;scroll-margin-top:10px}.heading-actions{position:absolute;right:4px;top:50%;transform:translateY(-50%);display:inline-flex;gap:2px;padding:2px;border-radius:5px;background:var(--c-bg);opacity:0;transition:opacity .1s ease;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.prose-spec h1:hover .heading-actions,.prose-spec h2:hover .heading-actions,.prose-spec h3:hover .heading-actions,.prose-spec h4:hover .heading-actions,.prose-spec h5:hover .heading-actions,.prose-spec h6:hover .heading-actions,.heading-actions:hover{opacity:1;pointer-events:auto}.heading-actions__btn{display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;padding:0;border:0;border-radius:4px;background:transparent;color:var(--c-subtle);cursor:pointer;transition:background 80ms ease,color 80ms ease}.heading-actions__btn:hover{background:var(--c-accent-soft);color:var(--c-ink)}.heading-actions__btn--disabled,.heading-actions__btn--disabled:hover{opacity:.4;cursor:not-allowed;background:transparent;color:var(--c-subtle)}@keyframes anchor-pulse{0%,30%{background-color:var(--c-accent-soft);box-shadow:0 0 0 6px var(--c-accent-soft)}to{background-color:transparent;box-shadow:0 0 0 0 transparent}}.prose-spec h1.anchor-highlight,.prose-spec h2.anchor-highlight,.prose-spec h3.anchor-highlight,.prose-spec h4.anchor-highlight,.prose-spec h5.anchor-highlight,.prose-spec h6.anchor-highlight{animation:anchor-pulse 1s ease-out;border-radius:4px}*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:Inter,system-ui,sans-serif;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:JetBrains Mono,ui-monospace,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}.container{width:100%}@media(min-width:640px){.container{max-width:640px}}@media(min-width:768px){.container{max-width:768px}}@media(min-width:1024px){.container{max-width:1024px}}@media(min-width:1280px){.container{max-width:1280px}}@media(min-width:1536px){.container{max-width:1536px}}:where(.prose-spec) ul{margin:8px 0 16px;padding-left:22px;list-style-type:disc}:where(.prose-spec) ol{margin:8px 0 16px;padding-left:22px;list-style-type:decimal}:where(.prose-spec) ul ul{list-style-type:circle}:where(.prose-spec) ul ul ul{list-style-type:square}:where(.prose-spec) ol ol{list-style-type:lower-alpha}:where(.prose-spec) ol ol ol{list-style-type:lower-roman}:where(.prose-spec) li{font-size:15.5px;line-height:1.65;margin:4px 0}:where(.prose-spec) li::marker{color:var(--c-subtle)}:where(.prose-spec) ul[data-type=taskList]{list-style:none;padding-left:0}:where(.prose-spec) ul[data-type=taskList] li{display:flex;align-items:flex-start;gap:8px;margin:4px 0}:where(.prose-spec) ul[data-type=taskList] li::marker{content:none}:where(.prose-spec) ul[data-type=taskList] li>label{flex:0 0 auto;margin-top:2px;-webkit-user-select:none;-moz-user-select:none;user-select:none}:where(.prose-spec) ul[data-type=taskList] li>div{flex:1 1 auto;min-width:0}:where(.prose-spec) ul[data-type=taskList] input[type=checkbox]{accent-color:var(--c-accent);cursor:pointer}:where(.not-prose) ul,:where(.not-prose) ol{padding-left:0;margin:0;list-style:none}:where(.not-prose) li{margin:0}:where(.not-prose) li::marker{content:none}:where(.not-prose) p{margin:0}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.visible{visibility:visible}.invisible{visibility:hidden}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{top:0;right:0;bottom:0;left:0}.-right-0\.5{right:-.125rem}.-top-0\.5{top:-.125rem}.left-0{left:0}.right-0{right:0}.right-1\.5{right:.375rem}.right-3{right:.75rem}.top-1\.5{top:.375rem}.top-12{top:3rem}.top-full{top:100%}.z-30{z-index:30}.z-40{z-index:40}.z-50{z-index:50}.col-span-2{grid-column:span 2 / span 2}.m-0{margin:0}.-mx-1{margin-left:-.25rem;margin-right:-.25rem}.mx-1{margin-left:.25rem;margin-right:.25rem}.mx-3{margin-left:.75rem;margin-right:.75rem}.mx-6{margin-left:1.5rem;margin-right:1.5rem}.mx-auto{margin-left:auto;margin-right:auto}.my-1{margin-top:.25rem;margin-bottom:.25rem}.my-12{margin-top:3rem;margin-bottom:3rem}.my-2{margin-top:.5rem;margin-bottom:.5rem}.my-3{margin-top:.75rem;margin-bottom:.75rem}.-ml-1{margin-left:-.25rem}.-ml-2{margin-left:-.5rem}.-mt-0\.5{margin-top:-.125rem}.mb-0\.5{margin-bottom:.125rem}.mb-1{margin-bottom:.25rem}.mb-1\.5{margin-bottom:.375rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.mb-5{margin-bottom:1.25rem}.mb-6{margin-bottom:1.5rem}.ml-0\.5{margin-left:.125rem}.ml-2{margin-left:.5rem}.ml-4{margin-left:1rem}.ml-6{margin-left:1.5rem}.ml-auto{margin-left:auto}.mr-1{margin-right:.25rem}.mr-auto{margin-right:auto}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-1\.5{margin-top:.375rem}.mt-10{margin-top:2.5rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.mt-5{margin-top:1.25rem}.mt-6{margin-top:1.5rem}.mt-8{margin-top:2rem}.\!block{display:block!important}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.list-item{display:list-item}.hidden{display:none}.h-4{height:1rem}.h-7{height:1.75rem}.h-full{height:100%}.max-h-32{max-height:8rem}.max-h-52{max-height:13rem}.max-h-80{max-height:20rem}.min-h-0{min-height:0px}.w-4{width:1rem}.w-48{width:12rem}.w-64{width:16rem}.w-7{width:1.75rem}.w-\[480px\]{width:480px}.w-fit{width:-moz-fit-content;width:fit-content}.w-full{width:100%}.min-w-0{min-width:0px}.min-w-\[240px\]{min-width:240px}.min-w-\[260px\]{min-width:260px}.max-w-\[640px\]{max-width:640px}.max-w-\[85\%\]{max-width:85%}.max-w-md{max-width:28rem}.flex-1{flex:1 1 0%}.flex-shrink-0,.shrink-0{flex-shrink:0}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes spin{to{transform:rotate(360deg)}}.animate-spin{animation:spin 1s linear infinite}.cursor-pointer{cursor:pointer}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.select-all{-webkit-user-select:all;-moz-user-select:all;user-select:all}.resize-none{resize:none}.resize-y{resize:vertical}.resize{resize:both}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-\[240px_1fr\]{grid-template-columns:240px 1fr}.grid-cols-\[260px_1fr\]{grid-template-columns:260px 1fr}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.items-baseline{align-items:baseline}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-0\.5{gap:.125rem}.gap-1{gap:.25rem}.gap-1\.5{gap:.375rem}.gap-2{gap:.5rem}.gap-2\.5{gap:.625rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-6{gap:1.5rem}.space-y-0\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.125rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.125rem * var(--tw-space-y-reverse))}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem * var(--tw-space-y-reverse))}.space-y-1\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.375rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.375rem * var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.space-y-2\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.625rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.625rem * var(--tw-space-y-reverse))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.75rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem * var(--tw-space-y-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem * var(--tw-space-y-reverse))}.divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse: 0;border-top-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)));border-bottom-width:calc(1px * var(--tw-divide-y-reverse))}.self-stretch{align-self:stretch}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:1rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-sm{border-radius:.125rem}.rounded-xl{border-radius:.75rem}.rounded-tr-sm{border-top-right-radius:.125rem}.border{border-width:1px}.border-0{border-width:0px}.bg-transparent{background-color:transparent}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.p-0\.5{padding:.125rem}.p-1{padding:.25rem}.p-1\.5{padding:.375rem}.p-10{padding:2.5rem}.p-2{padding:.5rem}.p-2\.5{padding:.625rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-5{padding:1.25rem}.p-6{padding:1.5rem}.p-8{padding:2rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-10{padding-left:2.5rem;padding-right:2.5rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-3\.5{padding-left:.875rem;padding-right:.875rem}.px-4{padding-left:1rem;padding-right:1rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.px-8{padding-left:2rem;padding-right:2rem}.py-0{padding-top:0;padding-bottom:0}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-10{padding-top:2.5rem;padding-bottom:2.5rem}.py-12{padding-top:3rem;padding-bottom:3rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-2\.5{padding-top:.625rem;padding-bottom:.625rem}.py-20{padding-top:5rem;padding-bottom:5rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.py-8{padding-top:2rem;padding-bottom:2rem}.py-9{padding-top:2.25rem;padding-bottom:2.25rem}.py-\[1px\]{padding-top:1px;padding-bottom:1px}.py-\[2px\]{padding-top:2px;padding-bottom:2px}.py-\[3px\]{padding-top:3px;padding-bottom:3px}.pb-0\.5{padding-bottom:.125rem}.pb-1{padding-bottom:.25rem}.pb-1\.5{padding-bottom:.375rem}.pb-2{padding-bottom:.5rem}.pb-3{padding-bottom:.75rem}.pb-4{padding-bottom:1rem}.pl-1\.5{padding-left:.375rem}.pl-3{padding-left:.75rem}.pl-4{padding-left:1rem}.pl-6{padding-left:1.5rem}.pl-\[18px\]{padding-left:18px}.pl-\[2\.5rem\]{padding-left:2.5rem}.pl-\[30px\]{padding-left:30px}.pr-1{padding-right:.25rem}.pr-2{padding-right:.5rem}.pr-3{padding-right:.75rem}.pr-4{padding-right:1rem}.pt-0\.5{padding-top:.125rem}.pt-1{padding-top:.25rem}.pt-1\.5{padding-top:.375rem}.pt-2{padding-top:.5rem}.pt-2\.5{padding-top:.625rem}.pt-3{padding-top:.75rem}.text-left{text-align:left}.text-center{text-align:center}.align-middle{vertical-align:middle}.font-mono{font-family:JetBrains Mono,ui-monospace,monospace}.font-serif{font-family:Lora,Georgia,serif}.text-\[10\.5px\]{font-size:10.5px}.text-\[10px\]{font-size:10px}.text-\[11\.5px\]{font-size:11.5px}.text-\[11px\]{font-size:11px}.text-\[12\.5px\]{font-size:12.5px}.text-\[12px\]{font-size:12px}.text-\[13\.5px\]{font-size:13.5px}.text-\[13px\]{font-size:13px}.text-\[14\.5px\]{font-size:14.5px}.text-\[14px\]{font-size:14px}.text-\[15px\]{font-size:15px}.text-\[18px\]{font-size:18px}.text-\[19px\]{font-size:19px}.text-\[22px\]{font-size:22px}.text-\[26px\]{font-size:26px}.text-\[9\.5px\]{font-size:9.5px}.text-\[9px\]{font-size:9px}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.normal-case{text-transform:none}.italic{font-style:italic}.tabular-nums{--tw-numeric-spacing: tabular-nums;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction)}.leading-\[1\.5\]{line-height:1.5}.leading-relaxed{line-height:1.625}.leading-snug{line-height:1.375}.leading-tight{line-height:1.25}.tracking-tight{letter-spacing:-.025em}.tracking-wide{letter-spacing:.025em}.tracking-wider{letter-spacing:.05em}.underline{text-decoration-line:underline}.line-through{text-decoration-line:line-through}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.shadow{--tw-shadow: 0 1px 3px 0 rgb(0 0 0 / .1), 0 1px 2px -1px rgb(0 0 0 / .1);--tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-2xl{--tw-shadow: 0 25px 50px -12px rgb(0 0 0 / .25);--tw-shadow-colored: 0 25px 50px -12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-xl{--tw-shadow: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1);--tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.outline-none{outline:2px solid transparent;outline-offset:2px}.outline{outline-style:solid}.blur{--tw-blur: blur(8px);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.hover\:bg-\[var\(--c-accent\)\]:hover{background-color:var(--c-accent)}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-100:hover{opacity:1}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-40:disabled{opacity:.4}.disabled\:opacity-50:disabled{opacity:.5}@media(min-width:1280px){.xl\:block{display:block}.xl\:hidden{display:none}}pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{color:#abb2bf;background:#282c34}.hljs-comment,.hljs-quote{color:#5c6370;font-style:italic}.hljs-doctag,.hljs-keyword,.hljs-formula{color:#c678dd}.hljs-section,.hljs-name,.hljs-selector-tag,.hljs-deletion,.hljs-subst{color:#e06c75}.hljs-literal{color:#56b6c2}.hljs-string,.hljs-regexp,.hljs-addition,.hljs-attribute,.hljs-meta .hljs-string{color:#98c379}.hljs-attr,.hljs-variable,.hljs-template-variable,.hljs-type,.hljs-selector-class,.hljs-selector-attr,.hljs-selector-pseudo,.hljs-number{color:#d19a66}.hljs-symbol,.hljs-bullet,.hljs-link,.hljs-meta,.hljs-selector-id,.hljs-title{color:#61aeee}.hljs-built_in,.hljs-title.class_,.hljs-class .hljs-title{color:#e6c07b}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}.hljs-link{text-decoration:underline}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{s as e,b as r,a,S as s}from"./chunk-AQP2D5EJ-CW3tCRq5.js";import{_ as i}from"./mermaid.core-BdFxxBuE.js";import"./chunk-55IACEB6-WYG0SMCq.js";import"./chunk-2J33WTMH-BR0UTxIH.js";import"./index-nd9N-ch1.js";var p={parser:a,get db(){return new s(2)},renderer:r,styles:e,init:i(t=>{t.state||(t.state={}),t.state.arrowMarkerAbsolute=t.arrowMarkerAbsolute},"init")};export{p as diagram};
|