adr-kit 0.13.0 → 0.14.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/README.md +62 -211
- package/README.zh.md +54 -175
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +40 -25
- package/dist/cli.js.map +1 -1
- package/dist/commands/archive.d.ts +2 -0
- package/dist/commands/archive.d.ts.map +1 -0
- package/dist/commands/archive.js +62 -0
- package/dist/commands/archive.js.map +1 -0
- package/dist/commands/completion.d.ts.map +1 -1
- package/dist/commands/completion.js +5 -4
- package/dist/commands/completion.js.map +1 -1
- package/dist/commands/{accept.d.ts → implement.d.ts} +2 -2
- package/dist/commands/implement.d.ts.map +1 -0
- package/dist/commands/implement.js +42 -0
- package/dist/commands/implement.js.map +1 -0
- package/dist/commands/init.js +2 -2
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/instructions.d.ts.map +1 -1
- package/dist/commands/instructions.js +24 -81
- package/dist/commands/instructions.js.map +1 -1
- package/dist/commands/list.d.ts.map +1 -1
- package/dist/commands/list.js +9 -14
- package/dist/commands/list.js.map +1 -1
- package/dist/commands/propose.d.ts.map +1 -1
- package/dist/commands/propose.js +9 -10
- package/dist/commands/propose.js.map +1 -1
- package/dist/commands/{decide.d.ts → record.d.ts} +2 -2
- package/dist/commands/record.d.ts.map +1 -0
- package/dist/commands/{decide.js → record.js} +6 -6
- package/dist/commands/{decide.js.map → record.js.map} +1 -1
- package/dist/commands/reject.d.ts +1 -1
- package/dist/commands/reject.d.ts.map +1 -1
- package/dist/commands/reject.js +24 -8
- package/dist/commands/reject.js.map +1 -1
- package/dist/commands/show.d.ts.map +1 -1
- package/dist/commands/show.js +2 -16
- package/dist/commands/show.js.map +1 -1
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +6 -17
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/supersede.d.ts.map +1 -1
- package/dist/commands/supersede.js +44 -10
- package/dist/commands/supersede.js.map +1 -1
- package/dist/commands/validate.d.ts +1 -1
- package/dist/commands/validate.d.ts.map +1 -1
- package/dist/commands/validate.js +11 -3
- package/dist/commands/validate.js.map +1 -1
- package/dist/core/adr.d.ts +22 -20
- package/dist/core/adr.d.ts.map +1 -1
- package/dist/core/adr.js +31 -10
- package/dist/core/adr.js.map +1 -1
- package/dist/core/archive-seal.d.ts +48 -0
- package/dist/core/archive-seal.d.ts.map +1 -0
- package/dist/core/archive-seal.js +122 -0
- package/dist/core/archive-seal.js.map +1 -0
- package/dist/core/cli-options.d.ts +2 -2
- package/dist/core/cli-options.d.ts.map +1 -1
- package/dist/core/cli-options.js +8 -6
- package/dist/core/cli-options.js.map +1 -1
- package/dist/core/config.d.ts +1 -1
- package/dist/core/git.d.ts +17 -0
- package/dist/core/git.d.ts.map +1 -1
- package/dist/core/git.js +50 -0
- package/dist/core/git.js.map +1 -1
- package/dist/core/graph-html.js +5 -5
- package/dist/core/graph-html.js.map +1 -1
- package/dist/core/graph.d.ts +2 -1
- package/dist/core/graph.d.ts.map +1 -1
- package/dist/core/graph.js +9 -4
- package/dist/core/graph.js.map +1 -1
- package/dist/core/repository.d.ts +3 -11
- package/dist/core/repository.d.ts.map +1 -1
- package/dist/core/repository.js +52 -136
- package/dist/core/repository.js.map +1 -1
- package/dist/core/templates.d.ts +6 -7
- package/dist/core/templates.d.ts.map +1 -1
- package/dist/core/templates.js +11 -12
- package/dist/core/templates.js.map +1 -1
- package/dist/core/tool-integrations.d.ts.map +1 -1
- package/dist/core/tool-integrations.js +77 -422
- package/dist/core/tool-integrations.js.map +1 -1
- package/dist/core/validate.d.ts +20 -6
- package/dist/core/validate.d.ts.map +1 -1
- package/dist/core/validate.js +302 -90
- package/dist/core/validate.js.map +1 -1
- package/package.json +1 -1
- package/dist/commands/accept.d.ts.map +0 -1
- package/dist/commands/accept.js +0 -42
- package/dist/commands/accept.js.map +0 -1
- package/dist/commands/decide.d.ts.map +0 -1
|
@@ -8,474 +8,129 @@ const TARGET_DIRS = {
|
|
|
8
8
|
// machine-checked in test/integrations.test.ts.
|
|
9
9
|
export const WORKFLOWS = [
|
|
10
10
|
{
|
|
11
|
-
name:
|
|
12
|
-
description:
|
|
11
|
+
name: "adrkit-init",
|
|
12
|
+
description: "Use when initializing ADR Kit in a repository or when the agent cannot find an adr/ directory.",
|
|
13
13
|
body: `# ADR Kit Init
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
Run \`adrkit init [path]\` for a new repository, or \`adrkit update\` if \`adr/\` exists. Confirm the four lifecycle folders: \`proposed/\`, \`implemented/\`, \`rejected/\`, and \`archived/\`. The CLI installs workflow skills but does not rewrite a project's standing orders.
|
|
16
16
|
|
|
17
|
-
|
|
17
|
+
Add or update this section in \`AGENTS.md\` (and \`CLAUDE.md\` when used):
|
|
18
18
|
|
|
19
|
-
##
|
|
20
|
-
|
|
21
|
-
1. Decide the target directory (default: current working directory).
|
|
22
|
-
2. For a new repository, run:
|
|
23
|
-
|
|
24
|
-
\`\`\`bash
|
|
25
|
-
adrkit init [path]
|
|
26
|
-
\`\`\`
|
|
19
|
+
## Reading architecture decisions
|
|
27
20
|
|
|
28
|
-
|
|
29
|
-
the project instruction setup below.
|
|
21
|
+
At the start of a coding, design, or review task, if \`adr/\` exists, run \`adrkit list\`. Discover the active inventory, then read relevant implemented records in full with \`adrkit show <N>\` or their files. Check relevant proposed and rejected records; consult archived records only for history. Do not judge relevance by title alone: inspect tags, paths, relationships, and task scope. Compare constraints with current code; explain conflicts or changed assumptions before choosing a different approach. Mention relevant ADR numbers and verify affected behavior. Re-read on a new or resumed task, or when scope changes. Read a \`## Deliberation\` appendix only when its decision is in play.
|
|
30
22
|
|
|
31
|
-
|
|
32
|
-
\`adr/.gitignore\`. Proposals are not a separate folder: they are ephemeral
|
|
33
|
-
drafts in \`adr/.drafts/\`, created by \`adrkit propose\`. Durable records
|
|
34
|
-
carry \`raised-by\` and \`decided-by\` fields you declare; drafts never do.
|
|
23
|
+
Before creating a record, compare it with the active records covering the same choice or mechanism: extend a duplicate, fully replace through \`adrkit supersede --by\` in the same change, or link a partial overlap while the older record stays active. When shipping or reviewing, keep each active record's realization facts — paths, names, defaults — aligned with shipped code; a changed choice is a new record with an explicit relationship, not a rewrite of old rationale. Archived records are sealed in \`adr/archived/MANIFEST.json\` and never edited.
|
|
35
24
|
|
|
36
|
-
|
|
37
|
-
(\`AGENTS.md\`; also \`CLAUDE.md\` if that is the team's entry point). Preserve
|
|
38
|
-
existing instructions and update an equivalent section instead of adding
|
|
39
|
-
a duplicate. This agent step supplies the task-start entry point; the CLI
|
|
40
|
-
only installs workflow files. If ADR Kit is already initialized, use
|
|
41
|
-
\`adrkit update\` to refresh those files and still check this section.
|
|
25
|
+
Record an ADR when an architectural choice constrains future work and its rationale is not evident from code. Record genuine alternatives and trade-offs, not invented template filler. A grilling session records every choice it settles, but unshipped outcomes remain proposals. Use \`adrkit propose\` for unshipped work, \`adrkit implement\` after it ships, and \`adrkit record\` for an already-shipped decision. \`raised-by\` declares who introduced the choice; \`decided-by\` declares whose judgment settled it. The CLI neither infers nor verifies shipping or provenance.
|
|
42
26
|
|
|
43
|
-
|
|
44
|
-
## Reading architecture decisions
|
|
45
|
-
|
|
46
|
-
At the start of a coding, design, or review task, if \`adr/\` exists, run
|
|
47
|
-
\`adrkit list\` and read every decision in full with \`adrkit show <N>\` (or read
|
|
48
|
-
its file). ADR sets are small; do not filter by title alone. Treat accepted
|
|
49
|
-
records as decision context, superseded records as history, and pending
|
|
50
|
-
drafts as unaccepted proposals. Check relevant decisions against current
|
|
51
|
-
code and the task's requirements. Apply the constraints that still hold;
|
|
52
|
-
explain conflicts or changed assumptions before choosing a different approach.
|
|
53
|
-
Mention relevant ADR numbers in the implementation or review summary and
|
|
54
|
-
verify the affected behavior. If no decisions apply, continue normally;
|
|
55
|
-
reading does not require creating an ADR. Re-read on a new or resumed task,
|
|
56
|
-
or when scope or relevant files change, rather than relying on conversation
|
|
57
|
-
memory.
|
|
58
|
-
|
|
59
|
-
A \`## Deliberation\` appendix records the design tree behind a decision. It is
|
|
60
|
-
reference material: read it only when that decision is in play, not on every
|
|
61
|
-
task.
|
|
62
|
-
|
|
63
|
-
Record an ADR when an architectural choice will constrain future development
|
|
64
|
-
and its rationale is not apparent from code alone. Record only decisions
|
|
65
|
-
actually made and genuine alternatives and trade-offs; do not invent reasons
|
|
66
|
-
to fill a template. Reuse an existing record for the same choice; record a
|
|
67
|
-
replacement when important assumptions change. Routine implementation details,
|
|
68
|
-
local fixes, and easily reversible choices need no ADR. If no important
|
|
69
|
-
architectural decision was made, create none. When you grill a decision with
|
|
70
|
-
the \`adrkit-grill\` workflow, record every decision the session settles: the
|
|
71
|
-
session is itself the importance signal, so the bar above governs only the
|
|
72
|
-
direct \`decide\`/\`propose\` path. \`accepted\` means a recorded
|
|
73
|
-
decision, not proof of human review. \`decided-by\` is a declaration of where the
|
|
74
|
-
choice came from, not an inference: \`human\` when a person determined the
|
|
75
|
-
direction — they stated it, changed a proposal into what shipped, or you are
|
|
76
|
-
recording one they made earlier — \`agent\` when it came from the agent's own
|
|
77
|
-
judgment, including when a person only let it through. The CLI neither infers
|
|
78
|
-
nor verifies it.
|
|
79
|
-
\`\`\`
|
|
80
|
-
|
|
81
|
-
## Rules
|
|
82
|
-
|
|
83
|
-
- Never create \`adr/\` directories by hand; use the CLI so the config and
|
|
84
|
-
README stay canonical.
|
|
85
|
-
- After init, read existing decisions and continue the task. Use
|
|
86
|
-
\`adrkit decide "<title>" --raised-by human --decided-by human\` (\`agent\` on
|
|
87
|
-
either axis when that is the truth) only for an important architectural choice
|
|
88
|
-
already made, or \`adrkit propose "<title>"\` when such a choice still needs
|
|
89
|
-
review.`,
|
|
27
|
+
After installation, continue the original task; initializing ADR Kit is not itself a reason to create a record.`,
|
|
90
28
|
},
|
|
91
29
|
{
|
|
92
|
-
name:
|
|
93
|
-
description: "Use when a decision is still being shaped
|
|
30
|
+
name: "adrkit-grill",
|
|
31
|
+
description: "Use when a decision is still being shaped or the user asks to grill a plan; question it to shared understanding and record every settled choice.",
|
|
94
32
|
body: `# ADR Kit Grill
|
|
95
33
|
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
Interrogate the user about a decision until nothing is left silently
|
|
99
|
-
assumed, then record every decision the session settled. The session feeds the
|
|
100
|
-
record directly: the root questions become \`## Problem\`, the rejected options
|
|
101
|
-
become \`## Alternatives considered\`, and who raised and who overrode feeds
|
|
102
|
-
\`raised-by\` and \`decided-by\`.
|
|
103
|
-
|
|
104
|
-
The interrogation method is adapted from the \`grilling\` skill in
|
|
105
|
-
[mattpocock/skills](https://github.com/mattpocock/skills) (MIT).
|
|
34
|
+
Interrogate the user until the design tree has no silently assumed branch. This method is adapted from mattpocock/skills (MIT). For viewing existing records, use \`adrkit-visualize\`; grilling does not generate HTML by default.
|
|
106
35
|
|
|
107
|
-
|
|
108
|
-
and validates decisions without generating HTML or opening a browser.
|
|
36
|
+
## Method
|
|
109
37
|
|
|
110
|
-
|
|
38
|
+
1. Run \`adrkit list\`. Read relevant implemented records in full, check relevant proposed and rejected records, and consult archived records for history. Recheck the inventory even if this conversation read it earlier; do not reopen a settled choice without naming that change. As the tree takes shape, search the active records for anything covering the same choice or mechanism, so a settled direction lands in the right record rather than a duplicate.
|
|
39
|
+
2. Map root questions and their dependent questions. Work in rounds: ask every question on the currently answerable frontier, each with genuine options and your recommendation. A downstream question waits until its prerequisite is answered. Format questions as \`Q1 - <title>\` with a clear recommendation.
|
|
40
|
+
3. Research repository and environment facts yourself. Do not ask the user for facts you can inspect. Let answers reshape the tree; record which option or question unlocked each follow-up.
|
|
41
|
+
4. Stop questioning only when the frontier is empty. State the proposed shared understanding and wait for the user's confirmation before acting or writing records.
|
|
111
42
|
|
|
112
|
-
|
|
113
|
-
an architectural choice, or any other decision worth stress-testing before it
|
|
114
|
-
is recorded. The direct \`decide\`/\`propose\` paths keep the ADR importance bar;
|
|
115
|
-
a grilling session is itself the signal that its output is key, so its
|
|
116
|
-
decisions are not filtered again at record time.
|
|
43
|
+
## Recording
|
|
117
44
|
|
|
118
|
-
|
|
45
|
+
Record every choice the session settles; the session is the importance signal. Usually one primary record holds the tree, but split choices that can be superseded independently. An unshipped outcome goes to \`adrkit propose\`, even when the direction is settled. Fill \`## Problem\`, \`## Proposal\`, \`## Alternatives considered\`, \`## Acceptance criteria\`, and \`## Risks\` from actual answers. Keep the tree in an optional \`## Deliberation\` appendix: prefix questions \`Q:\`, options \`A:\`, tag nodes \`[settled]\`, \`[rejected]\`, or \`[open]\`, nest a follow-up beneath what raised it, mark the recommended option, and give rejected options a reason.
|
|
119
46
|
|
|
120
|
-
|
|
121
|
-
(or read its file), even if you ran it earlier in this conversation. The
|
|
122
|
-
tree must not re-ask what an existing record already settles; reopening a
|
|
123
|
-
settled decision is a supersede, not a question.
|
|
124
|
-
2. Map the decision as a design tree: every decision branches into the
|
|
125
|
-
decisions that hang off it.
|
|
126
|
-
3. Work the tree in rounds. The frontier is every question whose
|
|
127
|
-
prerequisites are already settled: the questions you can ask now without
|
|
128
|
-
guessing at answers you have not heard. Ask the whole frontier in one
|
|
129
|
-
round, then wait for the user's answers before the next round. Format
|
|
130
|
-
each question like:
|
|
131
|
-
|
|
132
|
-
\`\`\`
|
|
133
|
-
❓ **Q1 - <question title>**: <question body, with options if any>
|
|
134
|
-
|
|
135
|
-
➡️ <your recommended answer>
|
|
136
|
-
\`\`\`
|
|
137
|
-
|
|
138
|
-
4. Each round of answers reshapes the tree: settled decisions push the
|
|
139
|
-
frontier outward and unblock the questions that depended on them. A
|
|
140
|
-
question whose answer depends on another question still open in this
|
|
141
|
-
round belongs to a later round. As each answer settles, note which option
|
|
142
|
-
or question raised the next one; the record nests it under that node.
|
|
143
|
-
5. Finding facts is your job, never the user's: when a question needs a fact
|
|
144
|
-
from the repository or the environment, look it up yourself (or dispatch
|
|
145
|
-
a sub-agent) instead of asking. Do not block on a running lookup; only
|
|
146
|
-
the questions downstream of it wait. The decisions are the user's: put
|
|
147
|
-
each to them and wait.
|
|
148
|
-
6. The session is done when the frontier is empty: every branch visited,
|
|
149
|
-
nothing left silently assumed. Do not act and do not write records until
|
|
150
|
-
the user confirms you have reached shared understanding.
|
|
151
|
-
|
|
152
|
-
## Recording the outcome
|
|
153
|
-
|
|
154
|
-
1. Record every decision the session settled; there is no record-time filter.
|
|
155
|
-
One session often settles several decisions: usually one primary record
|
|
156
|
-
with the rest as branches, but split them when they can be superseded
|
|
157
|
-
independently. Run \`adrkit decide "<title>" --raised-by human
|
|
158
|
-
--decided-by human\` (or \`agent\` on either axis, per the rule below);
|
|
159
|
-
grilling ends in a decision, never a proposal. Then follow the decide
|
|
160
|
-
workflow.
|
|
161
|
-
2. Fill the record from the session: \`## Problem\` from the root questions,
|
|
162
|
-
\`## Decision\` from the user's answers, \`## Alternatives considered\` from
|
|
163
|
-
the frontier options they rejected, \`## Consequences\` from the branches
|
|
164
|
-
their answers unlocked. Keep the design tree in an optional
|
|
165
|
-
\`## Deliberation\` appendix: prefix a question \`Q:\` and an option \`A:\`, tag
|
|
166
|
-
each node \`[settled]\`, \`[rejected]\`, or \`[open]\`, nest each follow-up
|
|
167
|
-
question under the option or question that raised it, mark the option you
|
|
168
|
-
recommended \`(recommended)\`, and give a rejected option a \` — reason\`.
|
|
169
|
-
\`adrkit tree <N>\` renders it (\`--mermaid\`, or \`--html\` for a file). Add 2-4
|
|
170
|
-
kebab-case \`tags\` to the front matter.
|
|
171
|
-
3. Declare both provenance axes: \`--raised-by\` is who put the decision on the
|
|
172
|
-
table; \`--decided-by\` is whose judgment settled it. \`decided-by\` is \`human\`
|
|
173
|
-
when the user's answers determined the direction — especially where they
|
|
174
|
-
overrode your recommendations — and \`agent\` when they adopted every
|
|
175
|
-
recommendation without engaging. Put the nuance in the body: which
|
|
176
|
-
recommendations they changed and which they let through.
|
|
177
|
-
4. Run \`adrkit validate <N>\` until it returns OK.
|
|
178
|
-
|
|
179
|
-
## Rules
|
|
180
|
-
|
|
181
|
-
- One round at a time: never stack a question whose answer depends on a
|
|
182
|
-
question still open in the same round.
|
|
183
|
-
- Never ask the user for a fact you could look up yourself.
|
|
184
|
-
- Never write a record mid-session; records follow the user's confirmation
|
|
185
|
-
of shared understanding, and then every decision the session settled is
|
|
186
|
-
recorded.
|
|
187
|
-
- A settled decision the user reopens becomes a supersede once its
|
|
188
|
-
replacement is recorded and validated: use \`adrkit supersede\`, and say in
|
|
189
|
-
the new record's \`## Problem\` what assumption changed.`,
|
|
47
|
+
State who raised and settled the unshipped choice in prose; proposal front matter has no provenance fields. If the choice has already shipped, use \`adrkit record\` with truthful \`--raised-by\` and \`--decided-by\` declarations. Compare each settled choice with the active records before recording: a full replacement of an implemented decision is recorded and then resolved with \`adrkit supersede --by\` in the same change, a partial replacement keeps the older record active and links both, and a duplicate extends the existing record. Judge overlap from content; the CLI cannot infer it from titles or tags. Run \`adrkit validate <name>\` after filling the record. Report which outcomes are proposals, not implemented guidance; \`adrkit implement\` is reserved for work that actually ships.`,
|
|
190
48
|
},
|
|
191
49
|
{
|
|
192
|
-
name:
|
|
50
|
+
name: "adrkit-visualize",
|
|
193
51
|
description: "Use when the user asks to visualize an existing ADR, its deliberation tree, or the whole decision set and its relationships.",
|
|
194
52
|
body: `# ADR Kit Visualize
|
|
195
53
|
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
decision set, use
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
and \`adrkit show <N>\`, and read its \`## Deliberation\` appendix. If there is
|
|
204
|
-
no tree, explain that the record has no recorded deliberation to visualize;
|
|
205
|
-
do not invent one. Render it with \`adrkit tree <N> --html > "<path>.html"\`.
|
|
206
|
-
- **All decisions — the decision map.** Render the whole set with
|
|
207
|
-
\`adrkit graph --html --out "<path>.html"\`. It groups every decision by creation
|
|
208
|
-
date, draws supersede and reference edges, and marks the decisions that carry
|
|
209
|
-
a deliberation tree. A node links to its record file; it does not expand the
|
|
210
|
-
tree yet.
|
|
211
|
-
|
|
212
|
-
Both renderers are built in, not agent-designed replacement pages. Write the
|
|
213
|
-
map with \`--out\` to any new path the user asks for, a temporary directory
|
|
214
|
-
included: the command resolves its record links against the file's own
|
|
215
|
-
location, so the cards open wherever it lands. Redirecting stdout instead
|
|
216
|
-
leaves record-relative links, which only resolve for a file written inside the
|
|
217
|
-
repository. Quote paths and avoid overwriting a record or an existing file.
|
|
218
|
-
Check the command succeeded.
|
|
219
|
-
Deliver a clickable link; the file is self-contained and works offline. After
|
|
220
|
-
successful HTML generation, open the file in the user's default browser unless
|
|
221
|
-
the user asks for a file only or says not to open it. A visualization request
|
|
222
|
-
is sufficient; do not ask for separate confirmation to open the browser.
|
|
223
|
-
Use the platform opener with the quoted file path. If a browser is unavailable
|
|
224
|
-
or opening fails, keep the file link and explain that it could not be opened.
|
|
225
|
-
The agent opens the browser; the CLI continues to emit HTML to stdout only.
|
|
226
|
-
|
|
227
|
-
Generate HTML only on an explicit visualization request, never automatically at
|
|
228
|
-
the end of a grilling session. For explicit format requests, both commands support \`--text\` and \`--mermaid\`;
|
|
229
|
-
only \`graph\` supports \`--dot\`. Return those formats without opening a browser. Keep Markdown as the source of
|
|
230
|
-
truth.`,
|
|
54
|
+
Visualize existing records only when asked. Run \`adrkit list\` first, then read the record or relationships relevant to the requested view. Do not create a decision or invent a deliberation tree to make a picture.
|
|
55
|
+
|
|
56
|
+
- For one record's design tree, use \`adrkit tree <name> --html\` and save stdout to a local HTML file. If no \`## Deliberation\` appendix exists, say so instead of fabricating one.
|
|
57
|
+
- For the numbered decision set, use \`adrkit graph --html --out "<path>.html"\`. The map includes implemented guidance and archived history, but archived records are not current authority. Use \`--tag\` or \`--formal-only\` only when requested or useful to the question.
|
|
58
|
+
- For lightweight previews, \`--text\` or \`--mermaid\` may be enough; do not generate HTML merely because the CLI supports it.
|
|
59
|
+
|
|
60
|
+
When the user requests HTML visualization, open the generated file in the default browser if available and return a clickable file path. If the user asks for a file only or says not to open it, leave the browser alone. If opening is unavailable or fails, explain that briefly and still return the file path. The CLI emits HTML to stdout unless \`graph --out\` is used; the agent owns the browser handoff.`,
|
|
231
61
|
},
|
|
232
62
|
{
|
|
233
|
-
name:
|
|
234
|
-
description:
|
|
63
|
+
name: "adrkit-propose",
|
|
64
|
+
description: "Use when starting an architectural choice that has not shipped, whether its direction is open or settled.",
|
|
235
65
|
body: `# ADR Kit Propose
|
|
236
66
|
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
Use this workflow for architectural choices that constrain future development
|
|
246
|
-
and whose rationale is not apparent from code alone. Routine implementation
|
|
247
|
-
details, local fixes, and easily reversible choices need no ADR. Do not create
|
|
248
|
-
an ADR for every task or invent alternatives and reasons to fill a template.
|
|
249
|
-
|
|
250
|
-
## Steps
|
|
251
|
-
|
|
252
|
-
1. Run \`adrkit list\` and read every decision in full with \`adrkit show <N>\`
|
|
253
|
-
(or read its file), even if you ran it earlier in this conversation.
|
|
254
|
-
Check whether this decision supersedes or overlaps an existing one against
|
|
255
|
-
current code and requirements. Treat superseded records as history and
|
|
256
|
-
pending drafts as unaccepted proposals. Reuse an existing decision when
|
|
257
|
-
it already captures the same choice; explain changed assumptions when
|
|
258
|
-
replacing one, and use \`adrkit supersede\` after its replacement is recorded
|
|
259
|
-
and validated.
|
|
260
|
-
2. Run:
|
|
261
|
-
|
|
262
|
-
\`\`\`bash
|
|
263
|
-
adrkit propose "<title>"
|
|
264
|
-
\`\`\`
|
|
265
|
-
|
|
266
|
-
3. Edit the created draft. Fill every section with real content:
|
|
267
|
-
\`## Problem\`, \`## Proposal\`, \`## Alternatives considered\`,
|
|
268
|
-
\`## Acceptance criteria\`, \`## Risks\`.
|
|
269
|
-
4. Add 2-4 kebab-case \`tags\` to the front matter (for example \`frontend\`,
|
|
270
|
-
\`execution-layer\`) so the decision graph can group by theme.
|
|
271
|
-
5. Promote the completed draft with
|
|
272
|
-
\`adrkit accept "<title>" --raised-by human --decided-by human\` (\`agent\` on
|
|
273
|
-
either axis when that is the truth); the CLI validates it before promoting.
|
|
274
|
-
\`raised-by\` is who put the draft on the table, \`decided-by\` whose judgment
|
|
275
|
-
settled it. A person who merely lets a proposal through without engaging
|
|
276
|
-
with the choice leaves \`decided-by\` with you: that is \`agent\`, and the body
|
|
277
|
-
is where you say they approved it.
|
|
278
|
-
|
|
279
|
-
## Rules
|
|
280
|
-
|
|
281
|
-
- Do not skip \`## Alternatives considered\`. A proposal without alternatives
|
|
282
|
-
is invalid by design.
|
|
283
|
-
- Keep the front matter exactly \`status: proposed\`. Never write \`raised-by\` or
|
|
284
|
-
\`decided-by\`: a draft has no decision to attribute, so the values belong to
|
|
285
|
-
\`adrkit accept\`, which requires you to declare them. A value written here is
|
|
286
|
-
rejected while the draft exists and dropped when it is promoted.`,
|
|
67
|
+
Before writing, run \`adrkit list\` and search the active records — read relevant implemented records in full and check proposed and rejected ones — for anything covering the same choice, mechanism, or rejected alternative. Judge overlap from record content, not titles or tags; the CLI cannot infer it. Classify what you find:
|
|
68
|
+
|
|
69
|
+
- **Duplicate**: extend the existing record instead of opening a new one.
|
|
70
|
+
- **Full replacement**: write the new record, then resolve the old one in the same change with \`adrkit supersede --by\`; never leave duplicate active authority.
|
|
71
|
+
- **Partial replacement**: write the new record, keep the older one active, refresh the facts that remain current in it, and link the two records in prose.
|
|
72
|
+
- **Independent**: proceed without touching unrelated records.
|
|
73
|
+
|
|
74
|
+
Then run \`adrkit propose "<title>"\`; it creates a dated, unnumbered file in \`adr/proposed/\`. Fill Problem, Proposal, Alternatives considered, Acceptance criteria, and Risks with actual content. A settled direction stays proposed until shipped. An uncommitted file is a local working-tree draft; Git commit makes it shared. Run \`adrkit validate <name>\` and resolve missing requirements before formal review. Do not put provenance flags in proposal front matter; describe participants and reasoning in the body.`,
|
|
287
75
|
},
|
|
288
76
|
{
|
|
289
|
-
name:
|
|
290
|
-
description:
|
|
291
|
-
body: `# ADR Kit
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
\`N\` number.
|
|
297
|
-
|
|
298
|
-
## When to record
|
|
299
|
-
|
|
300
|
-
Use this workflow for architectural choices that constrain future development
|
|
301
|
-
and whose rationale is not apparent from code alone. Routine implementation
|
|
302
|
-
details, local fixes, and easily reversible choices need no ADR. Do not create
|
|
303
|
-
an ADR for every task or invent alternatives and reasons to fill a template.
|
|
304
|
-
|
|
305
|
-
## Steps
|
|
306
|
-
|
|
307
|
-
1. Run \`adrkit list\` and read every decision in full with \`adrkit show <N>\`
|
|
308
|
-
(or read its file), even if you ran it earlier in this conversation.
|
|
309
|
-
Check whether this decision supersedes or overlaps an existing one against
|
|
310
|
-
current code and requirements. Treat superseded records as history and
|
|
311
|
-
pending drafts as unaccepted proposals. Reuse an existing decision when
|
|
312
|
-
it already captures the same choice; explain changed assumptions when
|
|
313
|
-
replacing one, and use \`adrkit supersede\` after its replacement is recorded
|
|
314
|
-
and validated.
|
|
315
|
-
2. Run:
|
|
316
|
-
|
|
317
|
-
\`\`\`bash
|
|
318
|
-
adrkit decide "<title>" --raised-by human --decided-by human # or agent on either axis
|
|
319
|
-
\`\`\`
|
|
320
|
-
|
|
321
|
-
3. Edit the created file and fill \`## Problem\`, \`## Decision\`,
|
|
322
|
-
\`## Alternatives considered\`, and \`## Consequences\`. Add 2-4 kebab-case
|
|
323
|
-
\`tags\` to the front matter (for example \`frontend\`, \`execution-layer\`)
|
|
324
|
-
so the decision graph can group by theme.
|
|
325
|
-
4. Run \`adrkit validate <N>\` until it returns OK.
|
|
326
|
-
|
|
327
|
-
## Rules
|
|
328
|
-
|
|
329
|
-
- \`raised-by\` and \`decided-by\` declare the decision's provenance:
|
|
330
|
-
\`raised-by\` is who put it on the table, \`decided-by\` whose judgment settled
|
|
331
|
-
it. For \`decided-by\`, \`human\` means a person determined the direction — they
|
|
332
|
-
stated it, changed your proposal into what shipped, or made it earlier and
|
|
333
|
-
you are only recording it now; \`agent\` means it came from your own judgment,
|
|
334
|
-
including when a person let your choice through without engaging with it. The
|
|
335
|
-
fields record the source of the choice, not who ran the command: recording a
|
|
336
|
-
person's decision makes it \`human\`, not \`agent\`. The CLI neither infers nor
|
|
337
|
-
verifies either, so put the nuance (who redirected or approved) in the body.
|
|
338
|
-
- Accepted decisions must not contain \`## Proposal\`, \`## Acceptance
|
|
339
|
-
criteria\`, or \`## Risks\` sections.
|
|
340
|
-
- Never edit the \`raised-by\` or \`decided-by\` value afterwards. A wrong value
|
|
341
|
-
is a false provenance claim no later check can detect. A record missing the
|
|
342
|
-
fields is not a blank to fill on a hunch: write them only when you know where
|
|
343
|
-
the choice came from — your own judgment, or the person who directed it — and
|
|
344
|
-
ask the person when you do not.
|
|
345
|
-
- \`accepted\` means a recorded decision, not proof of human review.
|
|
346
|
-
- \`adrkit accept\` is the better path when a proposal already exists.`,
|
|
77
|
+
name: "adrkit-record",
|
|
78
|
+
description: "Use when recording an already-shipped architectural decision directly, without a pending proposal.",
|
|
79
|
+
body: `# ADR Kit Record
|
|
80
|
+
|
|
81
|
+
First run \`adrkit list\` and read relevant implemented records in full; also check proposed and rejected records for the same choice or mechanism. Compare content, not titles or tags — the CLI cannot infer semantic overlap. A duplicate means recording the choice in the existing record instead; a full replacement means recording the new decision and resolving the old one with \`adrkit supersede --by\` in the same change; a partial replacement keeps the older record active with a prose link between them.
|
|
82
|
+
|
|
83
|
+
Confirm the choice has actually shipped, and compare its claimed paths, names, defaults, and mechanisms with the current code and tests; the CLI cannot verify delivery. If a code change altered only the realization of an active decision, update those facts in the existing record rather than recording a new one; a changed choice always needs a new record and an explicit relationship. Run \`adrkit record "<title>" --raised-by <human|agent> --decided-by <human|agent>\`. Fill Problem, Decision, Alternatives considered, and Consequences with the shipped choice and genuine trade-offs. Use \`human\` for a person's judgment, \`agent\` for the agent's; passive human approval does not change an agent-origin choice. Run \`adrkit validate <N>\`.`,
|
|
347
84
|
},
|
|
348
85
|
{
|
|
349
|
-
name:
|
|
350
|
-
description:
|
|
86
|
+
name: "adrkit-validate",
|
|
87
|
+
description: "Use when checking ADR record format before implementation, rejection, archival, or commit.",
|
|
351
88
|
body: `# ADR Kit Validate
|
|
352
89
|
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
Run the machine checks for one record or the whole repository.
|
|
356
|
-
|
|
357
|
-
## Steps
|
|
358
|
-
|
|
359
|
-
\`\`\`bash
|
|
360
|
-
adrkit validate [name] [--all]
|
|
361
|
-
\`\`\`
|
|
90
|
+
Run \`adrkit validate [name]\` for one record or \`adrkit validate\` for the repository. All four lifecycle folders are checked. A fresh proposal or record template intentionally fails until required sections contain real content. Fix the exact reported requirement; do not add placeholder prose merely to pass. Validate again after every lifecycle move.
|
|
362
91
|
|
|
363
|
-
-
|
|
364
|
-
- \`name\` resolves by title, file name, or decision number.
|
|
365
|
-
|
|
366
|
-
## Rules
|
|
367
|
-
|
|
368
|
-
- Treat any non-OK output as a blocker for \`adrkit accept\`.
|
|
369
|
-
- A \`front matter must include "raised-by"\` or \`"decided-by"\` issue on a
|
|
370
|
-
record that lacks the field is not yours to repair on a hunch: the value
|
|
371
|
-
comes from whoever knows where that choice came from — your own judgment, or
|
|
372
|
-
the person who directed it — so ask when you do not.
|
|
373
|
-
- \`adrkit validate\` checks durable decisions only; a draft in \`adr/.drafts/\`
|
|
374
|
-
is validated by \`adrkit accept\` right before it is promoted.`,
|
|
92
|
+
Repository-wide validation also checks the archive seal: \`adr/archived/MANIFEST.json\` must cover exactly the archived records and match their bytes. When it reports drift — edited bytes, an unsealed file, a missing file, a malformed or missing manifest — restore the sealed bytes, the manifest entry, or the empty manifest; never re-seal changed archived content to make the check pass. Before pushing, \`adrkit validate --base <git-ref>\` additionally proves the archive only grew since that ref: entries sealed at the base must remain byte-identical, so a coordinated edit of an archived file and its hash still fails. An absent base manifest means no prior seals; one that exists but cannot be read fails.`,
|
|
375
93
|
},
|
|
376
94
|
{
|
|
377
|
-
name:
|
|
378
|
-
description:
|
|
379
|
-
body: `# ADR Kit
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
Promote a completed draft to a decision. The CLI validates the draft, assigns
|
|
384
|
-
the next \`N\` number, rewrites \`## Proposal\` to \`## Decision\`, folds
|
|
385
|
-
\`Acceptance criteria\` and \`Risks\` into \`## Consequences\`, writes
|
|
386
|
-
\`adr/decisions/N-*.md\`, and discards the draft from \`adr/.drafts/\`.
|
|
387
|
-
|
|
388
|
-
## Steps
|
|
389
|
-
|
|
390
|
-
1. Review the draft with \`adrkit show "<name>"\`; every section must have real
|
|
391
|
-
content before accepting.
|
|
392
|
-
2. Run:
|
|
393
|
-
|
|
394
|
-
\`\`\`bash
|
|
395
|
-
adrkit accept "<name>" --raised-by human --decided-by human # or agent on either axis
|
|
396
|
-
\`\`\`
|
|
397
|
-
|
|
398
|
-
3. Confirm the output names the new \`adr/decisions/N-*.md\` file.
|
|
399
|
-
|
|
400
|
-
## Rules
|
|
401
|
-
|
|
402
|
-
- Declare \`raised-by\` and \`decided-by\` when you promote: \`raised-by\` is who
|
|
403
|
-
put the draft on the table, \`decided-by\` whose judgment settled it. For
|
|
404
|
-
\`decided-by\`, \`human\` means a person determined the direction (they stated
|
|
405
|
-
it, changed this draft into what shipped, or you are recording one they made
|
|
406
|
-
earlier), \`agent\` means it came from your own judgment, including when a
|
|
407
|
-
person only let the draft through. Promotion is the last moment either value
|
|
408
|
-
can be set; the CLI records what you declare without inferring or checking
|
|
409
|
-
it. If the person redirected or approved your proposal, say so in the body.
|
|
410
|
-
- Never accept an invalid draft; the command refuses.
|
|
411
|
-
- Re-run \`adrkit show "<name>"\` immediately before accepting, even if you
|
|
412
|
-
reviewed it earlier in this conversation; the repo may have changed since.
|
|
413
|
-
- \`accepted\` means a recorded decision, not proof of human review.
|
|
414
|
-
- Review the generated \`## Consequences\` after accepting.
|
|
415
|
-
- The command warns when a proposal contains sections that have no place in
|
|
416
|
-
an accepted decision (for example \`## Plan\`); save their content elsewhere
|
|
417
|
-
if it still matters.`,
|
|
95
|
+
name: "adrkit-implement",
|
|
96
|
+
description: "Use when a proposal has shipped and should become a numbered, active decision.",
|
|
97
|
+
body: `# ADR Kit Implement
|
|
98
|
+
|
|
99
|
+
Confirm the proposal's work is shipped, not merely accepted for review. Compare the record's claimed paths, names, defaults, and mechanisms with the current code and tests, and check the active records for overlap with this choice: a full replacement is promoted and then resolved with \`adrkit supersede --by\` in the same change, while a partial replacement keeps the older record active and links both. Run \`adrkit show <name>\` and \`adrkit validate <name>\`; resolve errors. Then run \`adrkit implement <name> --raised-by <human|agent> --decided-by <human|agent>\`. The command assigns the next stable ADR number, rewrites proposal sections into a shipped decision, moves the record from \`proposed/\` to \`implemented/\`, and preserves \`created\` and \`tags\`. Inspect the generated Decision and Consequences so they state shipped facts rather than proposal-era intent, then validate the numbered record. Do not infer the two provenance declarations from the command runner.`,
|
|
418
100
|
},
|
|
419
101
|
{
|
|
420
|
-
name:
|
|
421
|
-
description:
|
|
422
|
-
body: `# ADR Kit
|
|
423
|
-
|
|
424
|
-
## Overview
|
|
102
|
+
name: "adrkit-review",
|
|
103
|
+
description: "Use when checking whether changed code and changed decision records still agree; scoped to record coherence, not general code review.",
|
|
104
|
+
body: `# ADR Kit Review
|
|
425
105
|
|
|
426
|
-
|
|
427
|
-
leaves no record - rejection lives in the winning decision's
|
|
428
|
-
\`## Alternatives considered\`, not in a standalone rejected record.
|
|
106
|
+
Review decision-record coherence for a change, not general code quality. Run \`adrkit list\` first, then:
|
|
429
107
|
|
|
430
|
-
|
|
108
|
+
- Compare each changed or newly shipped record with the changed code and tests: claimed paths, names, defaults, mechanisms, and verification evidence must match what actually shipped.
|
|
109
|
+
- Search active implemented records for realization facts the change invalidated — moved files, renamed options, altered defaults, changed behavior — and report each stale record for a factual update in the same change. A decision reversal is a new record with an explicit relationship, never a rewrite of old rationale.
|
|
110
|
+
- Look for unresolved supersession: a new record that fully replaces an active one without \`adrkit supersede --by\`, or a partial overlap that should be linked in prose while both stay active.
|
|
431
111
|
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
112
|
+
Report evidence-backed findings that name the record and the code evidence. Finding no issue is a valid result; do not demand a record for a mechanical edit. A disagreement with the decision itself is a design question to raise, not a license to rewrite a historical record. Archived records are sealed history: report changes to them rather than editing them.`,
|
|
113
|
+
},
|
|
114
|
+
{
|
|
115
|
+
name: "adrkit-reject",
|
|
116
|
+
description: "Use when a formal proposal is declined and its rejection rationale should be retained.",
|
|
117
|
+
body: `# ADR Kit Reject
|
|
435
118
|
|
|
436
|
-
|
|
119
|
+
Read the proposal and check its alternatives. Run \`adrkit reject <name> --reason "<why declined>"\`. It moves the dated file from \`proposed/\` to \`rejected/\`, stamps the lifecycle date, and preserves the record and reason. A rejected proposal gets no ADR number. Do not use rejection to erase a settled but merely unshipped choice; that remains proposed.`,
|
|
120
|
+
},
|
|
121
|
+
{
|
|
122
|
+
name: "adrkit-archive",
|
|
123
|
+
description: "Use when an implemented record no longer guides work and current behavior has another authoritative owner.",
|
|
124
|
+
body: `# ADR Kit Archive
|
|
437
125
|
|
|
438
|
-
|
|
439
|
-
rejection matters, record it in \`## Alternatives considered\` of the decision
|
|
440
|
-
that won.`,
|
|
126
|
+
Confirm the record has shipped, its distinct rationale no longer guides future work, and current behavior has another authoritative owner. Do not archive by age or quota. Run \`adrkit archive <N> --reason "<owner and why retired>"\`. The numbered record moves from \`implemented/\` to frozen \`archived/\`, its number and history remain, and the command appends a content seal for the final archived file to \`adr/archived/MANIFEST.json\`. Validate afterward. Never edit an archived file or its seal after archival; if validation reports drift, restore the sealed bytes. If a newer implemented decision fully replaces it, use \`adrkit supersede --by\` instead; partial replacement leaves the still-relevant record active.`,
|
|
441
127
|
},
|
|
442
128
|
{
|
|
443
|
-
name:
|
|
444
|
-
description:
|
|
129
|
+
name: "adrkit-supersede",
|
|
130
|
+
description: "Use when one implemented decision fully replaces another and the old record must become archived history.",
|
|
445
131
|
body: `# ADR Kit Supersede
|
|
446
132
|
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
Mark an accepted decision as superseded. The CLI rewrites its front matter
|
|
450
|
-
to \`status: superseded\` with \`superseded-by: N\`, stamps the supersede date
|
|
451
|
-
on the \`date\` field, and leaves the record in \`adr/decisions/\` as frozen
|
|
452
|
-
history.
|
|
453
|
-
|
|
454
|
-
## Steps
|
|
455
|
-
|
|
456
|
-
1. Record the replacement first (\`adrkit decide\` or \`adrkit propose\` +
|
|
457
|
-
\`adrkit accept\`), and make sure it validates.
|
|
458
|
-
2. Run:
|
|
459
|
-
|
|
460
|
-
\`\`\`bash
|
|
461
|
-
adrkit supersede "<old name or number>" --by "<new name or number>"
|
|
462
|
-
\`\`\`
|
|
463
|
-
|
|
464
|
-
## Rules
|
|
465
|
-
|
|
466
|
-
- \`--by\` must reference an existing accepted decision that is not itself
|
|
467
|
-
superseded when this move is made. That replacement may later be superseded
|
|
468
|
-
in turn; validation follows the chain to an accepted decision and rejects
|
|
469
|
-
missing targets and cycles. Keep earlier historical links unchanged.
|
|
470
|
-
- Re-run \`adrkit list\` right before superseding to confirm the \`--by\` target
|
|
471
|
-
still exists and is not itself superseded, even if you checked earlier in
|
|
472
|
-
this conversation.
|
|
473
|
-
- Never hand-edit a superseded record afterwards; it is history, including
|
|
474
|
-
its \`raised-by\` and \`decided-by\` values, which the command preserves rather
|
|
475
|
-
than replacing with whoever retired it. Superseding changes the record's
|
|
476
|
-
status, not who raised or decided it.
|
|
477
|
-
- Mention what it supersedes in the new decision's \`## Problem\` section so
|
|
478
|
-
the causal link survives in prose.`,
|
|
133
|
+
First record or implement the replacement and validate it. Confirm it fully replaces the old decision; partial overlap calls for prose links while the old record remains active. Run \`adrkit supersede <old> --by <new>\`. Both records must be implemented; the command stamps \`superseded-by\`, moves the old numbered file into \`archived/\`, preserves its provenance and number, and seals the archived file in \`adr/archived/MANIFEST.json\`. Run \`adrkit validate\` to check the chain and the new seal. Do not edit the archived choice or rationale afterward.`,
|
|
479
134
|
},
|
|
480
135
|
];
|
|
481
136
|
/** Bare workflow names (without the `adrkit-` prefix), in canonical order. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-integrations.js","sourceRoot":"","sources":["../../src/core/tool-integrations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7G,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAuBpD,MAAM,WAAW,GAA0C;IACzD,MAAM,EAAE,EAAE,QAAQ,EAAE,kBAAkB,EAAE,MAAM,EAAE,gBAAgB,EAAE;IAClE,MAAM,EAAE,EAAE,QAAQ,EAAE,kBAAkB,EAAE,MAAM,EAAE,gBAAgB,EAAE;CACnE,CAAC;AAQF,mEAAmE;AACnE,gDAAgD;AAChD,MAAM,CAAC,MAAM,SAAS,GAAe;IACnC;QACE,IAAI,EAAE,aAAa;QACnB,WAAW,EAAE,gGAAgG;QAC7G,IAAI,EAAE
|
|
1
|
+
{"version":3,"file":"tool-integrations.js","sourceRoot":"","sources":["../../src/core/tool-integrations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7G,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAuBpD,MAAM,WAAW,GAA0C;IACzD,MAAM,EAAE,EAAE,QAAQ,EAAE,kBAAkB,EAAE,MAAM,EAAE,gBAAgB,EAAE;IAClE,MAAM,EAAE,EAAE,QAAQ,EAAE,kBAAkB,EAAE,MAAM,EAAE,gBAAgB,EAAE;CACnE,CAAC;AAQF,mEAAmE;AACnE,gDAAgD;AAChD,MAAM,CAAC,MAAM,SAAS,GAAe;IACnC;QACE,IAAI,EAAE,aAAa;QACnB,WAAW,EAAE,gGAAgG;QAC7G,IAAI,EAAE;;;;;;;;;;;;;;gHAcsG;KAC7G;IACD;QACE,IAAI,EAAE,cAAc;QACpB,WAAW,EAAE,kJAAkJ;QAC/J,IAAI,EAAE;;;;;;;;;;;;;;;4xBAekxB;KACzxB;IACD;QACE,IAAI,EAAE,kBAAkB;QACxB,WAAW,EAAE,8HAA8H;QAC3I,IAAI,EAAE;;;;;;;;qZAQ2Y;KAClZ;IACD;QACE,IAAI,EAAE,gBAAgB;QACtB,WAAW,EAAE,2GAA2G;QACxH,IAAI,EAAE;;;;;;;;;ogBAS0f;KACjgB;IACD;QACE,IAAI,EAAE,eAAe;QACrB,WAAW,EAAE,oGAAoG;QACjH,IAAI,EAAE;;;;wuBAI8tB;KACruB;IACD;QACE,IAAI,EAAE,iBAAiB;QACvB,WAAW,EAAE,4FAA4F;QACzG,IAAI,EAAE;;;;usBAI6rB;KACpsB;IACD;QACE,IAAI,EAAE,kBAAkB;QACxB,WAAW,EAAE,gFAAgF;QAC7F,IAAI,EAAE;;u9BAE68B;KACp9B;IACD;QACE,IAAI,EAAE,eAAe;QACrB,WAAW,EAAE,uIAAuI;QACpJ,IAAI,EAAE;;;;;;;;yWAQ+V;KACtW;IACD;QACE,IAAI,EAAE,eAAe;QACrB,WAAW,EAAE,wFAAwF;QACrG,IAAI,EAAE;;uWAE6V;KACpW;IACD;QACE,IAAI,EAAE,gBAAgB;QACtB,WAAW,EAAE,4GAA4G;QACzH,IAAI,EAAE;;ktBAEwsB;KAC/sB;IACD;QACE,IAAI,EAAE,kBAAkB;QACxB,WAAW,EAAE,2GAA2G;QACxH,IAAI,EAAE;;8iBAEoiB;KAC3iB;CACF,CAAC;AAEF,8EAA8E;AAC9E,MAAM,CAAC,MAAM,cAAc,GAAa,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CACjE,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CACtC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,KAAyB;IACtD,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,CAAC,GAAG,cAAc,CAAC,CAAC;IACpD,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC1B,IAAI,IAAI,KAAK,KAAK;QAAE,OAAO,CAAC,GAAG,cAAc,CAAC,CAAC;IAC/C,MAAM,SAAS,GAAG,IAAI;SACnB,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;SACpD,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACvC,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;IAC7E,CAAC;IACD,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,cAAc,CAAC,CAAC;IACtC,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;IAC7D,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,qBAAqB,OAAO,iBAAiB,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC5F,CAAC;IACD,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC;IACpC,OAAO,cAAc,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;AAC7D,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,KAAyB;IAClD,0EAA0E;IAC1E,uEAAuE;IACvE,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC3C,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC1B,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,KAAK,MAAM;QAAE,OAAO,EAAE,CAAC;IACpD,MAAM,SAAS,GAAG,IAAI;SACnB,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;SAC5B,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAEvC,MAAM,OAAO,GAAwB,EAAE,CAAC;IACxC,KAAK,MAAM,KAAK,IAAI,SAAS,EAAE,CAAC;QAC9B,IAAI,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC7C,MAAM,IAAI,KAAK,CAAC,iBAAiB,KAAK,8CAA8C,CAAC,CAAC;QACxF,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACtB,CAAC;IACD,2EAA2E;IAC3E,6DAA6D;IAC7D,OAAO,CAAC,GAAG,IAAI,GAAG,CAAoB,CAAC,QAAQ,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;AACjE,CAAC;AAED,6EAA6E;AAC7E,SAAS,gBAAgB,CAAC,QAAkB;IAC1C,OAAO;QACD,QAAQ,CAAC,IAAI;eACN,QAAQ,CAAC,WAAW;;;EAGjC,QAAQ,CAAC,IAAI;CACd,CAAC;AACF,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,IAAY,EACZ,KAA0B,EAC1B,SAAS,GAAa,cAAc;IAEpC,MAAM,OAAO,GAAsB,EAAE,CAAC;IACtC,MAAM,QAAQ,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CAC7C,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,CAC1D,CAAC;IACF,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;QAC/B,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1D,KAAK,MAAM,QAAQ,IAAI,QAAQ,EAAE,CAAC;YAChC,MAAM,QAAQ,GAAG,GAAG,QAAQ,CAAC,IAAI,KAAK,CAAC;YACvC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;YACjD,aAAa,CACX,IAAI,EACJ;eACO,QAAQ,CAAC,WAAW;;;EAGjC,QAAQ,CAAC,IAAI;CACd,CACM,CAAC;YACF,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/B,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC9B,KAAK,MAAM,QAAQ,IAAI,QAAQ,EAAE,CAAC;gBAChC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;gBACrE,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;gBACnD,aAAa,CAAC,SAAS,EAAE,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC;gBACrD,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;YAC1C,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,cAAc,CAAC,GAAW;IACjC,IAAI,CAAC;QACH,oEAAoE;QACpE,uEAAuE;QACvE,IAAI,WAAW,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAClC,SAAS,CAAC,GAAG,CAAC,CAAC;QACjB,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,8DAA8D;IAChE,CAAC;AACH,CAAC;AAED,SAAS,qBAAqB,CAAC,IAAY,EAAE,IAAgB;IAC3D,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,GAAG,QAAQ,CAAC,IAAI,KAAK,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC;QAC9E,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,EAAE,CAAC;YAChG,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,yEAAyE;AACzE,MAAM,UAAU,oBAAoB,CAAC,QAAkB;IACrD,OAAO,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;AAC3E,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,sBAAsB,CAAC,IAAY,EAAE,IAAc;IACjE,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,IAAI,GAAG,WAAW,CAAC,GAAwB,CAAC,CAAC;QACnD,IAAI,IAAI,KAAK,SAAS;YAAE,SAAS;QACjC,MAAM,QAAQ,GAAG,qBAAqB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACnD,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YACjC,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,GAAG,QAAQ,CAAC,IAAI,KAAK,CAAC,CAAC;YACrE,IAAI,UAAU,CAAC,WAAW,CAAC;gBAAE,MAAM,CAAC,WAAW,CAAC,CAAC;YACjD,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBAC9B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;gBACxD,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;gBAC7C,IAAI,UAAU,CAAC,SAAS,CAAC;oBAAE,MAAM,CAAC,SAAS,CAAC,CAAC;gBAC7C,cAAc,CAAC,QAAQ,CAAC,CAAC;YAC3B,CAAC;QACH,CAAC;QACD,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC1C,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS;YAAE,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;QACvE,uEAAuE;QACvE,mEAAmE;QACnE,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QACnD,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS;YAAE,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAChF,IAAI,QAAQ;YAAE,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAClC,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,0BAA0B,CACxC,IAAY,EACZ,KAA0B,EAC1B,SAAmB;IAEnB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;QAC/B,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YACjC,IAAI,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;gBAAE,SAAS;YACxE,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,GAAG,QAAQ,CAAC,IAAI,KAAK,CAAC,CAAC;YACrE,IAAI,UAAU,CAAC,WAAW,CAAC;gBAAE,MAAM,CAAC,WAAW,CAAC,CAAC;YACjD,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBAC9B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;gBACxD,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;gBAC7C,IAAI,UAAU,CAAC,SAAS,CAAC;oBAAE,MAAM,CAAC,SAAS,CAAC,CAAC;gBAC7C,cAAc,CAAC,QAAQ,CAAC,CAAC;YAC3B,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,IAAY,EAAE,OAA0B;IACzE,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,aAAa,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;AACxF,CAAC;AAED,qFAAqF;AACrF,MAAM,CAAC,MAAM,uBAAuB,GAAG,mCAAmC,CAAC;AAE3E;;;;;GAKG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,4CAA4C,CAAC;AAEjF;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC7C,KAAK,MAAM,IAAI,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,EAAE,CAAC;QAC9C,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC;YACpD,IAAI,IAAI,CAAC,QAAQ,CAAC,uBAAuB,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,CAAC;gBAClF,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,mEAAmE;QACrE,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,kBAAkB,CAChC,IAAY,EACZ,YAA+B;IAE/B,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAChD,IAAI,kBAAkB,CAAC,IAAI,CAAC,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC7D,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAC3C,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC,CACpD,CAAC;IACF,MAAM,MAAM,GAAG,SAAS;QACtB,CAAC,CAAC,aAAa,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,CAAC,EAAE;QAC/C,CAAC,CAAC,6DAA6D,CAAC;IAClE,OAAO;QACL,8EAA8E;QAC9E,gFAAgF;QAChF,kBAAkB,MAAM,kBAAkB;KAC3C,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC"}
|