otacon 0.1.0
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 +88 -0
- package/dist/cli/client.js +188 -0
- package/dist/cli/client.js.map +1 -0
- package/dist/cli/commands/answer.js +63 -0
- package/dist/cli/commands/answer.js.map +1 -0
- package/dist/cli/commands/ask.js +117 -0
- package/dist/cli/commands/ask.js.map +1 -0
- package/dist/cli/commands/clean.js +48 -0
- package/dist/cli/commands/clean.js.map +1 -0
- package/dist/cli/commands/doctor.js +86 -0
- package/dist/cli/commands/doctor.js.map +1 -0
- package/dist/cli/commands/expose.js +104 -0
- package/dist/cli/commands/expose.js.map +1 -0
- package/dist/cli/commands/implement-done.js +53 -0
- package/dist/cli/commands/implement-done.js.map +1 -0
- package/dist/cli/commands/install.js +113 -0
- package/dist/cli/commands/install.js.map +1 -0
- package/dist/cli/commands/open.js +37 -0
- package/dist/cli/commands/open.js.map +1 -0
- package/dist/cli/commands/progress.js +45 -0
- package/dist/cli/commands/progress.js.map +1 -0
- package/dist/cli/commands/start.js +66 -0
- package/dist/cli/commands/start.js.map +1 -0
- package/dist/cli/commands/status.js +44 -0
- package/dist/cli/commands/status.js.map +1 -0
- package/dist/cli/commands/submit.js +64 -0
- package/dist/cli/commands/submit.js.map +1 -0
- package/dist/cli/commands/wait.js +66 -0
- package/dist/cli/commands/wait.js.map +1 -0
- package/dist/cli/install/assets.js +285 -0
- package/dist/cli/install/assets.js.map +1 -0
- package/dist/cli/install/locations.js +92 -0
- package/dist/cli/install/locations.js.map +1 -0
- package/dist/cli/install/tailscale.js +39 -0
- package/dist/cli/install/tailscale.js.map +1 -0
- package/dist/cli/main.js +73 -0
- package/dist/cli/main.js.map +1 -0
- package/dist/cli/output.js +39 -0
- package/dist/cli/output.js.map +1 -0
- package/dist/cli/session.js +77 -0
- package/dist/cli/session.js.map +1 -0
- package/dist/daemon/activity.js +56 -0
- package/dist/daemon/activity.js.map +1 -0
- package/dist/daemon/anchor.js +143 -0
- package/dist/daemon/anchor.js.map +1 -0
- package/dist/daemon/app.js +1081 -0
- package/dist/daemon/app.js.map +1 -0
- package/dist/daemon/approve.js +71 -0
- package/dist/daemon/approve.js.map +1 -0
- package/dist/daemon/desktop-notify.js +69 -0
- package/dist/daemon/desktop-notify.js.map +1 -0
- package/dist/daemon/diff.js +187 -0
- package/dist/daemon/diff.js.map +1 -0
- package/dist/daemon/linter/index.js +19 -0
- package/dist/daemon/linter/index.js.map +1 -0
- package/dist/daemon/linter/parse.js +350 -0
- package/dist/daemon/linter/parse.js.map +1 -0
- package/dist/daemon/linter/rules.js +359 -0
- package/dist/daemon/linter/rules.js.map +1 -0
- package/dist/daemon/main.js +48 -0
- package/dist/daemon/main.js.map +1 -0
- package/dist/daemon/notify.js +23 -0
- package/dist/daemon/notify.js.map +1 -0
- package/dist/daemon/presence.js +37 -0
- package/dist/daemon/presence.js.map +1 -0
- package/dist/daemon/queue.js +160 -0
- package/dist/daemon/queue.js.map +1 -0
- package/dist/daemon/store.js +393 -0
- package/dist/daemon/store.js.map +1 -0
- package/dist/daemon/threads.js +153 -0
- package/dist/daemon/threads.js.map +1 -0
- package/dist/daemon/transcript.js +89 -0
- package/dist/daemon/transcript.js.map +1 -0
- package/dist/daemon/ui.js +175 -0
- package/dist/daemon/ui.js.map +1 -0
- package/dist/shared/config.js +93 -0
- package/dist/shared/config.js.map +1 -0
- package/dist/shared/gwt.js +69 -0
- package/dist/shared/gwt.js.map +1 -0
- package/dist/shared/paths.js +67 -0
- package/dist/shared/paths.js.map +1 -0
- package/dist/shared/question-spec.js +44 -0
- package/dist/shared/question-spec.js.map +1 -0
- package/dist/shared/types.js +35 -0
- package/dist/shared/types.js.map +1 -0
- package/dist/shared/version.js +5 -0
- package/dist/shared/version.js.map +1 -0
- package/dist/ui/assets/arc-HhPfdCPZ.js +1 -0
- package/dist/ui/assets/architecture-7EHR7CIX-BPLblcyi.js +1 -0
- package/dist/ui/assets/architectureDiagram-3BPJPVTR-D2PIxGOb.js +36 -0
- package/dist/ui/assets/array-BifhSqXX.js +1 -0
- package/dist/ui/assets/blockDiagram-GPEHLZMM-DQ3Dn17h.js +132 -0
- package/dist/ui/assets/c4Diagram-AAUBKEIU-DxITrQgS.js +10 -0
- package/dist/ui/assets/channel-ipcU8ZNI.js +1 -0
- package/dist/ui/assets/chunk-2J33WTMH-Du1JoPx5.js +1 -0
- package/dist/ui/assets/chunk-3OPIFGDE-Dn7x2Yqf.js +62 -0
- package/dist/ui/assets/chunk-4BX2VUAB-DVnrE-4n.js +1 -0
- package/dist/ui/assets/chunk-55IACEB6-BAhFAimA.js +1 -0
- package/dist/ui/assets/chunk-5ZQYHXKU-0hEZptem.js +2 -0
- package/dist/ui/assets/chunk-727SXJPM-C1FN_cI3.js +206 -0
- package/dist/ui/assets/chunk-AQP2D5EJ-A656OBd4.js +231 -0
- package/dist/ui/assets/chunk-BSJP7CBP-D8oMbjm8.js +1 -0
- package/dist/ui/assets/chunk-CSCIHK7Q-DjIL8GLi.js +122 -0
- package/dist/ui/assets/chunk-FMBD7UC4-Otblfqvz.js +15 -0
- package/dist/ui/assets/chunk-KSCS5N6A-BOjTvm3H.js +10 -0
- package/dist/ui/assets/chunk-L5ZTLDWV-CaTLaw6L.js +1 -0
- package/dist/ui/assets/chunk-LZXEDZCA-Dq5p7qrD.js +2 -0
- package/dist/ui/assets/chunk-ND2GUHAM-jZ_NNnWi.js +1 -0
- package/dist/ui/assets/chunk-NNHCCRGN-DlpIbxXb.js +159 -0
- package/dist/ui/assets/chunk-NZK2D7GU-U_7l_sCh.js +1 -0
- package/dist/ui/assets/chunk-O5CBEL6O-MewqqNB7.js +70 -0
- package/dist/ui/assets/chunk-QZHKN3VN-DzGPH44B.js +1 -0
- package/dist/ui/assets/chunk-WU5MYG2G-DyEIVjoo.js +1 -0
- package/dist/ui/assets/chunk-XPW4576I-D5ArxNEF.js +32 -0
- package/dist/ui/assets/classDiagram-4FO5ZUOK-Byg2Hl9D.js +1 -0
- package/dist/ui/assets/classDiagram-v2-Q7XG4LA2-Byg2Hl9D.js +1 -0
- package/dist/ui/assets/cose-bilkent-S5V4N54A-PFXzf7WV.js +1 -0
- package/dist/ui/assets/cytoscape.esm-h6BdjjI9.js +321 -0
- package/dist/ui/assets/dagre-BM42HDAG-xrCfjZuZ.js +4 -0
- package/dist/ui/assets/dagre-Bx709z4p.js +1 -0
- package/dist/ui/assets/defaultLocale-C8Fc0cco.js +1 -0
- package/dist/ui/assets/diagram-2AECGRRQ-BFf-cyKY.js +43 -0
- package/dist/ui/assets/diagram-5GNKFQAL-kNPV4NfV.js +10 -0
- package/dist/ui/assets/diagram-KO2AKTUF-ByC1IUwG.js +3 -0
- package/dist/ui/assets/diagram-LMA3HP47-DZIJMPK0.js +24 -0
- package/dist/ui/assets/diagram-OG6HWLK6-CSDED9A-.js +24 -0
- package/dist/ui/assets/dist-YwjsDswi.js +1 -0
- package/dist/ui/assets/erDiagram-TEJ5UH35-yuzvjE6J.js +85 -0
- package/dist/ui/assets/eventmodeling-FCH6USID-CZR4eNG-.js +1 -0
- package/dist/ui/assets/flowDiagram-I6XJVG4X-ApPtVyYM.js +162 -0
- package/dist/ui/assets/ganttDiagram-6RSMTGT7-BeMLXtAr.js +292 -0
- package/dist/ui/assets/gitGraph-WXDBUCRP-JmTTBa7j.js +1 -0
- package/dist/ui/assets/gitGraphDiagram-PVQCEYII-Cjjnjs71.js +106 -0
- package/dist/ui/assets/graphlib-B8gBHxth.js +1 -0
- package/dist/ui/assets/index-BFQVRcSI.js +11 -0
- package/dist/ui/assets/index-Bj_kTrwP.css +1 -0
- package/dist/ui/assets/info-J43DQDTF-8vZ3gome.js +1 -0
- package/dist/ui/assets/infoDiagram-5YYISTIA-CnMk1cA-.js +2 -0
- package/dist/ui/assets/init-D6jRqBbL.js +1 -0
- package/dist/ui/assets/ishikawaDiagram-YF4QCWOH-Bl8z6huD.js +70 -0
- package/dist/ui/assets/journeyDiagram-JHISSGLW-DYIVfMpS.js +139 -0
- package/dist/ui/assets/kanban-definition-UN3LZRKU-BnR0ZzOz.js +89 -0
- package/dist/ui/assets/katex-Vhh-h91d.js +257 -0
- package/dist/ui/assets/line-DcBdQit6.js +1 -0
- package/dist/ui/assets/linear-HKjRHFAO.js +1 -0
- package/dist/ui/assets/mermaid-parser.core-DkYXrPlA.js +4 -0
- package/dist/ui/assets/mermaid.core-BmkfCI3b.js +9 -0
- package/dist/ui/assets/mindmap-definition-RKZ34NQL-sIAd4nDi.js +96 -0
- package/dist/ui/assets/ordinal-hYBb2elL.js +1 -0
- package/dist/ui/assets/otacon-DPXGiaVj.svg +11 -0
- package/dist/ui/assets/packet-YPE3B663-BxbxcfXN.js +1 -0
- package/dist/ui/assets/path-BWPyau1x.js +1 -0
- package/dist/ui/assets/pie-LRSECV5Y-BJxazjNs.js +1 -0
- package/dist/ui/assets/pieDiagram-4H26LBE5-BiOhc9GR.js +30 -0
- package/dist/ui/assets/plan-view-CH6NzUDb.js +74 -0
- package/dist/ui/assets/purify.es-CDvCXckx.js +3 -0
- package/dist/ui/assets/quadrantDiagram-W4KKPZXB-CVyHbWgo.js +7 -0
- package/dist/ui/assets/radar-GUYGQ44K-D9ohbnbV.js +1 -0
- package/dist/ui/assets/requirementDiagram-4Y6WPE33-Ba24_hqc.js +84 -0
- package/dist/ui/assets/rough.esm-CSKSodPl.js +1 -0
- package/dist/ui/assets/sankeyDiagram-5OEKKPKP-CxD4wiPL.js +40 -0
- package/dist/ui/assets/sequenceDiagram-3UESZ5HK-7qA7lD61.js +162 -0
- package/dist/ui/assets/src-IM8AE8MK.js +1 -0
- package/dist/ui/assets/stateDiagram-AJRCARHV-DNElRCuH.js +1 -0
- package/dist/ui/assets/stateDiagram-v2-BHNVJYJU-D6qTYpY3.js +1 -0
- package/dist/ui/assets/timeline-definition-PNZ67QCA-ChYC4Grd.js +120 -0
- package/dist/ui/assets/treeView-BLDUP644-Il0KnMi_.js +1 -0
- package/dist/ui/assets/treemap-LRROVOQU-CIiKcdRo.js +1 -0
- package/dist/ui/assets/vennDiagram-CIIHVFJN-Ulhkum9i.js +34 -0
- package/dist/ui/assets/wardley-L42UT6IY-BNd4ljz7.js +1 -0
- package/dist/ui/assets/wardleyDiagram-YWT4CUSO-BicXxh84.js +78 -0
- package/dist/ui/assets/xychartDiagram-2RQKCTM6-Duf-m_th.js +7 -0
- package/dist/ui/index.html +20 -0
- package/package.json +66 -0
|
@@ -0,0 +1,350 @@
|
|
|
1
|
+
import { parseGwt } from "../../shared/gwt.js";
|
|
2
|
+
const FIELD_LABELS = {
|
|
3
|
+
Goal: "goal",
|
|
4
|
+
Files: "files",
|
|
5
|
+
Verification: "verification",
|
|
6
|
+
"Out of scope": "outOfScope",
|
|
7
|
+
};
|
|
8
|
+
// Accepts "Goal:", "**Goal**:", and "**Goal:**" (DECISIONS.md "Plan grammar").
|
|
9
|
+
const FIELD_RE = /^(?:\*\*)?(Goal|Files|Verification|Out of scope)(?:\*\*)?:(?:\*\*)?\s*(.*)$/;
|
|
10
|
+
const PHASE_RE = /^### Phase (\d+) [—-] (.+?)\s*$/;
|
|
11
|
+
const HEADING_RE = /^(#{2,4})\s+(.+?)\s*$/;
|
|
12
|
+
// Capture the info string too — a `gwt` fence is a behavioral-assertion block,
|
|
13
|
+
// not a budgeted/visual fence (DESIGN.md §4). Group 1 stays the delimiter.
|
|
14
|
+
const FENCE_RE = /^\s*(`{3,}|~{3,})\s*(.*)$/;
|
|
15
|
+
const LIST_ITEM_RE = /^[-*+]\s+/;
|
|
16
|
+
// A blockquote line, and the callout marker that must be its first line — the
|
|
17
|
+
// same closed type set the renderer styles (src/ui/plan/callout.tsx). A known
|
|
18
|
+
// callout's lines are budget-exempt and count as one visual; a plain
|
|
19
|
+
// blockquote (or an unknown `[!type]`) stays ordinary budgeted prose.
|
|
20
|
+
const QUOTE_RE = /^\s*>/;
|
|
21
|
+
const CALLOUT_RE = /^\s*>\s*\[!(?:risk|note|decision|assumption)\]\s*$/i;
|
|
22
|
+
// The lead-diagram escape hatch (DESIGN.md §4): an HTML-comment directive that
|
|
23
|
+
// suppresses the L7 nudge when a chart isn't meaningful. Like a callout marker
|
|
24
|
+
// it is chrome, not prose, so a section's read path exempts it from the budget.
|
|
25
|
+
const LEAD_OPT_OUT_RE = /^\s*<!--\s*no-lead-diagram\b.*?-->\s*$/i;
|
|
26
|
+
// A GFM table: a header row (has a pipe) immediately followed by a delimiter
|
|
27
|
+
// row (pipes plus only `-:` and spaces, with at least one `-`). The renderer
|
|
28
|
+
// styles such tables as decision matrices; the parser exempts their lines from
|
|
29
|
+
// the line budget and counts the table as one visual, like a callout.
|
|
30
|
+
const TABLE_ROW_RE = /\|/;
|
|
31
|
+
function isTableDelimiter(line) {
|
|
32
|
+
const trimmed = line.trim();
|
|
33
|
+
return trimmed.includes("-") && trimmed.includes("|") && /^[|\s:-]+$/.test(trimmed);
|
|
34
|
+
}
|
|
35
|
+
const FRONTMATTER_KEY_RE = /^([A-Za-z_][A-Za-z0-9_-]*):\s*(.*)$/;
|
|
36
|
+
export function slugify(title) {
|
|
37
|
+
return title
|
|
38
|
+
.toLowerCase()
|
|
39
|
+
.replace(/[^a-z0-9]+/g, "-")
|
|
40
|
+
.replace(/^-+|-+$/g, "");
|
|
41
|
+
}
|
|
42
|
+
export function parsePlan(content) {
|
|
43
|
+
const lines = content.split("\n");
|
|
44
|
+
const parseErrors = [];
|
|
45
|
+
const sections = [];
|
|
46
|
+
let frontmatter = null;
|
|
47
|
+
let frontmatterEndLine = 0;
|
|
48
|
+
let start = 0;
|
|
49
|
+
if (lines[0]?.trim() === "---") {
|
|
50
|
+
const close = lines.findIndex((l, i) => i > 0 && l.trim() === "---");
|
|
51
|
+
if (close === -1) {
|
|
52
|
+
parseErrors.push({
|
|
53
|
+
rule: "L1",
|
|
54
|
+
code: "E_FRONTMATTER_UNCLOSED",
|
|
55
|
+
severity: "error",
|
|
56
|
+
line: 1,
|
|
57
|
+
message: "Frontmatter opened on line 1 is never closed",
|
|
58
|
+
});
|
|
59
|
+
start = 1;
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
frontmatter = {};
|
|
63
|
+
for (let i = 1; i < close; i++) {
|
|
64
|
+
const m = FRONTMATTER_KEY_RE.exec(lines[i] ?? "");
|
|
65
|
+
if (m) {
|
|
66
|
+
frontmatter[m[1]] = (m[2] ?? "").trim().replace(/^["']|["']$/g, "");
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
frontmatterEndLine = close + 1;
|
|
70
|
+
start = close + 1;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
let section = null;
|
|
74
|
+
let phase = null;
|
|
75
|
+
let field = null;
|
|
76
|
+
/** Name of the active phase field — gwt placement keys off it. */
|
|
77
|
+
let fieldName = null;
|
|
78
|
+
let item = null;
|
|
79
|
+
let fence = null;
|
|
80
|
+
let fenceOpenLine = 0;
|
|
81
|
+
// When the open fence is a ```gwt block, collect its body here instead of
|
|
82
|
+
// counting it as a read-path fence; finalized onto its container at the close.
|
|
83
|
+
// `gwtTarget` is the array (a phase's or a stray section's) the finished block
|
|
84
|
+
// lands in — fixed at open time so it survives even if structure closes mid-fence.
|
|
85
|
+
let gwtBody = null;
|
|
86
|
+
let gwtStartLine = 0;
|
|
87
|
+
let gwtField = null;
|
|
88
|
+
let gwtTarget = null;
|
|
89
|
+
// Open blockquote run: a callout (budget-exempt, counts as one visual) or a
|
|
90
|
+
// plain quote (ordinary budgeted prose). Reset by any structural boundary.
|
|
91
|
+
let quote = null;
|
|
92
|
+
// Open GFM table run (a decision matrix): budget-exempt, counts as one
|
|
93
|
+
// visual. Reset by any structural boundary.
|
|
94
|
+
let inTable = false;
|
|
95
|
+
let inDetails = false;
|
|
96
|
+
let openDetails = null;
|
|
97
|
+
let detailsLastContent = 0;
|
|
98
|
+
const closeItem = () => {
|
|
99
|
+
item = null;
|
|
100
|
+
};
|
|
101
|
+
const closeField = () => {
|
|
102
|
+
field = null;
|
|
103
|
+
fieldName = null;
|
|
104
|
+
closeItem();
|
|
105
|
+
};
|
|
106
|
+
const closeDetails = () => {
|
|
107
|
+
if (openDetails) {
|
|
108
|
+
openDetails.lineCount = Math.max(0, detailsLastContent - openDetails.startLine);
|
|
109
|
+
}
|
|
110
|
+
openDetails = null;
|
|
111
|
+
inDetails = false;
|
|
112
|
+
};
|
|
113
|
+
const closePhase = () => {
|
|
114
|
+
closeDetails();
|
|
115
|
+
closeField();
|
|
116
|
+
phase = null;
|
|
117
|
+
};
|
|
118
|
+
const closeSection = (endLine) => {
|
|
119
|
+
closePhase();
|
|
120
|
+
if (section)
|
|
121
|
+
section.endLine = endLine;
|
|
122
|
+
section = null;
|
|
123
|
+
};
|
|
124
|
+
for (let idx = start; idx < lines.length; idx++) {
|
|
125
|
+
const line = lines[idx] ?? "";
|
|
126
|
+
const lineNo = idx + 1;
|
|
127
|
+
const blank = line.trim() === "";
|
|
128
|
+
if (fence) {
|
|
129
|
+
if (inDetails && !blank)
|
|
130
|
+
detailsLastContent = lineNo;
|
|
131
|
+
if (line.trimStart().startsWith(fence)) {
|
|
132
|
+
fence = null;
|
|
133
|
+
if (gwtBody !== null && gwtTarget) {
|
|
134
|
+
gwtTarget.push({
|
|
135
|
+
startLine: gwtStartLine,
|
|
136
|
+
field: gwtField,
|
|
137
|
+
scenarios: parseGwt(gwtBody.join("\n")).scenarios,
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
gwtBody = null;
|
|
141
|
+
gwtTarget = null;
|
|
142
|
+
}
|
|
143
|
+
else if (gwtBody !== null) {
|
|
144
|
+
gwtBody.push(line);
|
|
145
|
+
}
|
|
146
|
+
continue;
|
|
147
|
+
}
|
|
148
|
+
const fenceMatch = FENCE_RE.exec(line);
|
|
149
|
+
if (fenceMatch) {
|
|
150
|
+
fence = fenceMatch[1];
|
|
151
|
+
fenceOpenLine = lineNo;
|
|
152
|
+
const lang = (fenceMatch[2] ?? "").trim().toLowerCase().split(/\s+/)[0];
|
|
153
|
+
const isGwt = lang === "gwt";
|
|
154
|
+
quote = null;
|
|
155
|
+
inTable = false;
|
|
156
|
+
closeItem();
|
|
157
|
+
if (inDetails)
|
|
158
|
+
detailsLastContent = lineNo;
|
|
159
|
+
else if (isGwt && (phase || section)) {
|
|
160
|
+
// A gwt block is the read path's behavioral-assertion checklist, exempt
|
|
161
|
+
// from the one-fence cap; its body is buffered and validated separately.
|
|
162
|
+
// It belongs in a phase's Verification, but we also capture a stray block
|
|
163
|
+
// in a non-phase section (field null) so the linter rejects it as
|
|
164
|
+
// misplaced — otherwise it would slip through as a budgeted fence while
|
|
165
|
+
// the UI still renders it as scenario cards (producer/consumer drift).
|
|
166
|
+
gwtBody = [];
|
|
167
|
+
gwtStartLine = lineNo;
|
|
168
|
+
gwtField = phase ? fieldName : null;
|
|
169
|
+
gwtTarget = phase ? phase.gwtBlocks : section.gwtBlocks;
|
|
170
|
+
}
|
|
171
|
+
else if (phase)
|
|
172
|
+
phase.fenceCount++;
|
|
173
|
+
else if (section) {
|
|
174
|
+
section.fenceCount++;
|
|
175
|
+
// A mermaid fence in a section read path is a candidate lead diagram
|
|
176
|
+
// (L7 reads Summary's count); it still spends the one-fence allowance.
|
|
177
|
+
if (lang === "mermaid")
|
|
178
|
+
section.diagramCount++;
|
|
179
|
+
}
|
|
180
|
+
continue;
|
|
181
|
+
}
|
|
182
|
+
const heading = HEADING_RE.exec(line);
|
|
183
|
+
if (heading) {
|
|
184
|
+
quote = null; // a heading ends any open blockquote run
|
|
185
|
+
inTable = false;
|
|
186
|
+
const level = heading[1].length;
|
|
187
|
+
const title = heading[2];
|
|
188
|
+
if (level === 2) {
|
|
189
|
+
closeSection(lineNo - 1);
|
|
190
|
+
section = {
|
|
191
|
+
id: slugify(title),
|
|
192
|
+
title,
|
|
193
|
+
startLine: lineNo,
|
|
194
|
+
endLine: lines.length,
|
|
195
|
+
budgetedLineCount: 0,
|
|
196
|
+
fenceCount: 0,
|
|
197
|
+
visualCount: 0,
|
|
198
|
+
diagramCount: 0,
|
|
199
|
+
leadDiagramOptOut: false,
|
|
200
|
+
gwtBlocks: [],
|
|
201
|
+
listItems: [],
|
|
202
|
+
};
|
|
203
|
+
sections.push(section);
|
|
204
|
+
continue;
|
|
205
|
+
}
|
|
206
|
+
if (level === 3 && section?.id === "phases") {
|
|
207
|
+
closeDetails();
|
|
208
|
+
closeField();
|
|
209
|
+
const m = PHASE_RE.exec(line);
|
|
210
|
+
phase = {
|
|
211
|
+
n: m ? Number(m[1]) : -1,
|
|
212
|
+
name: m ? m[2] : "",
|
|
213
|
+
startLine: lineNo,
|
|
214
|
+
headingValid: m !== null,
|
|
215
|
+
rawHeading: line,
|
|
216
|
+
fields: {},
|
|
217
|
+
detailsCount: 0,
|
|
218
|
+
strayH4s: [],
|
|
219
|
+
fenceCount: 0,
|
|
220
|
+
visualCount: 0,
|
|
221
|
+
gwtBlocks: [],
|
|
222
|
+
};
|
|
223
|
+
(section.phases ??= []).push(phase);
|
|
224
|
+
continue;
|
|
225
|
+
}
|
|
226
|
+
if (level === 4 && phase) {
|
|
227
|
+
closeDetails();
|
|
228
|
+
closeField();
|
|
229
|
+
if (title === "Details") {
|
|
230
|
+
phase.detailsCount++;
|
|
231
|
+
openDetails = { startLine: lineNo, lineCount: 0 };
|
|
232
|
+
detailsLastContent = lineNo;
|
|
233
|
+
if (phase.detailsCount === 1)
|
|
234
|
+
phase.details = openDetails;
|
|
235
|
+
inDetails = true;
|
|
236
|
+
}
|
|
237
|
+
else {
|
|
238
|
+
phase.strayH4s.push(lineNo);
|
|
239
|
+
}
|
|
240
|
+
continue;
|
|
241
|
+
}
|
|
242
|
+
// Any other heading (H3 outside Phases, H4 outside a phase) is content.
|
|
243
|
+
}
|
|
244
|
+
if (inDetails) {
|
|
245
|
+
if (!blank)
|
|
246
|
+
detailsLastContent = lineNo;
|
|
247
|
+
continue;
|
|
248
|
+
}
|
|
249
|
+
// Blockquote runs (outside Details). A known callout is exempt from the
|
|
250
|
+
// line budget and counts as one visual; a plain blockquote stays budgeted
|
|
251
|
+
// prose, exactly as before this primitive existed.
|
|
252
|
+
if (quote) {
|
|
253
|
+
if (QUOTE_RE.test(line)) {
|
|
254
|
+
if (!quote.callout && !phase && section)
|
|
255
|
+
section.budgetedLineCount++;
|
|
256
|
+
continue;
|
|
257
|
+
}
|
|
258
|
+
quote = null; // a non-quote line ends the run; fall through to handle it
|
|
259
|
+
}
|
|
260
|
+
if (QUOTE_RE.test(line)) {
|
|
261
|
+
const callout = CALLOUT_RE.test(line);
|
|
262
|
+
quote = { callout };
|
|
263
|
+
closeItem();
|
|
264
|
+
if (callout) {
|
|
265
|
+
if (phase)
|
|
266
|
+
phase.visualCount++;
|
|
267
|
+
else if (section)
|
|
268
|
+
section.visualCount++;
|
|
269
|
+
}
|
|
270
|
+
else if (!phase && section) {
|
|
271
|
+
section.budgetedLineCount++;
|
|
272
|
+
}
|
|
273
|
+
continue;
|
|
274
|
+
}
|
|
275
|
+
// GFM table runs (outside Details): budget-exempt, one visual each. A table
|
|
276
|
+
// starts where a pipe-bearing line is followed by a delimiter row.
|
|
277
|
+
if (inTable) {
|
|
278
|
+
if (TABLE_ROW_RE.test(line))
|
|
279
|
+
continue;
|
|
280
|
+
inTable = false; // a non-row line ends the table; fall through
|
|
281
|
+
}
|
|
282
|
+
if (TABLE_ROW_RE.test(line) && isTableDelimiter(lines[idx + 1] ?? "")) {
|
|
283
|
+
inTable = true;
|
|
284
|
+
closeItem();
|
|
285
|
+
if (phase)
|
|
286
|
+
phase.visualCount++;
|
|
287
|
+
else if (section)
|
|
288
|
+
section.visualCount++;
|
|
289
|
+
continue;
|
|
290
|
+
}
|
|
291
|
+
// The lead-diagram escape hatch (DESIGN.md §4): in a section's read path it
|
|
292
|
+
// records the opt-out and, being chrome, is exempt from the line budget —
|
|
293
|
+
// so declining a diagram never costs a Summary content line.
|
|
294
|
+
if (section && !phase && LEAD_OPT_OUT_RE.test(line)) {
|
|
295
|
+
section.leadDiagramOptOut = true;
|
|
296
|
+
closeItem();
|
|
297
|
+
continue;
|
|
298
|
+
}
|
|
299
|
+
if (phase) {
|
|
300
|
+
const fm = FIELD_RE.exec(line);
|
|
301
|
+
if (fm) {
|
|
302
|
+
closeField();
|
|
303
|
+
fieldName = FIELD_LABELS[fm[1]];
|
|
304
|
+
field = { startLine: lineNo, budgetedLineCount: 1, listItemCount: 0 };
|
|
305
|
+
phase.fields[fieldName] = field;
|
|
306
|
+
continue;
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
if (blank) {
|
|
310
|
+
closeItem();
|
|
311
|
+
continue;
|
|
312
|
+
}
|
|
313
|
+
if (LIST_ITEM_RE.test(line)) {
|
|
314
|
+
closeItem();
|
|
315
|
+
if (field) {
|
|
316
|
+
field.listItemCount++;
|
|
317
|
+
field.budgetedLineCount++;
|
|
318
|
+
}
|
|
319
|
+
else if (!phase && section) {
|
|
320
|
+
item = { startLine: lineNo, lineCount: 1, text: line };
|
|
321
|
+
section.listItems.push(item);
|
|
322
|
+
section.budgetedLineCount++;
|
|
323
|
+
}
|
|
324
|
+
continue;
|
|
325
|
+
}
|
|
326
|
+
if (field) {
|
|
327
|
+
field.budgetedLineCount++;
|
|
328
|
+
}
|
|
329
|
+
else if (item && section) {
|
|
330
|
+
item.lineCount++;
|
|
331
|
+
item.text += `\n${line}`;
|
|
332
|
+
section.budgetedLineCount++;
|
|
333
|
+
}
|
|
334
|
+
else if (!phase && section) {
|
|
335
|
+
section.budgetedLineCount++;
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
if (fence) {
|
|
339
|
+
parseErrors.push({
|
|
340
|
+
rule: "L1",
|
|
341
|
+
code: "E_UNCLOSED_FENCE",
|
|
342
|
+
severity: "error",
|
|
343
|
+
line: fenceOpenLine,
|
|
344
|
+
message: `Code fence opened on line ${fenceOpenLine} is never closed`,
|
|
345
|
+
});
|
|
346
|
+
}
|
|
347
|
+
closeSection(lines.length);
|
|
348
|
+
return { frontmatter, frontmatterEndLine, sections, parseErrors };
|
|
349
|
+
}
|
|
350
|
+
//# sourceMappingURL=parse.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse.js","sourceRoot":"","sources":["../../../src/daemon/linter/parse.ts"],"names":[],"mappings":"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"}
|