adr-kit 0.2.0 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -1
- package/README.md +62 -45
- package/README.zh.md +59 -41
- package/dist/cli.js +19 -19
- package/dist/cli.js.map +1 -1
- package/dist/commands/accept.d.ts.map +1 -1
- package/dist/commands/accept.js +12 -5
- package/dist/commands/accept.js.map +1 -1
- package/dist/commands/completion.js +4 -4
- package/dist/commands/completion.js.map +1 -1
- package/dist/commands/decide.js +4 -4
- package/dist/commands/decide.js.map +1 -1
- package/dist/commands/init.js +3 -3
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/instructions.d.ts.map +1 -1
- package/dist/commands/instructions.js +64 -17
- package/dist/commands/instructions.js.map +1 -1
- package/dist/commands/list.js +1 -1
- package/dist/commands/list.js.map +1 -1
- package/dist/commands/propose.js +4 -4
- package/dist/commands/propose.js.map +1 -1
- package/dist/commands/reject.js +5 -5
- package/dist/commands/reject.js.map +1 -1
- package/dist/commands/supersede.d.ts.map +1 -1
- package/dist/commands/supersede.js +2 -3
- package/dist/commands/supersede.js.map +1 -1
- package/dist/commands/update.d.ts.map +1 -1
- package/dist/commands/update.js +11 -6
- package/dist/commands/update.js.map +1 -1
- package/dist/core/adr.d.ts +0 -5
- package/dist/core/adr.d.ts.map +1 -1
- package/dist/core/adr.js +0 -13
- package/dist/core/adr.js.map +1 -1
- package/dist/core/config.d.ts +10 -3
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/config.js +36 -8
- package/dist/core/config.js.map +1 -1
- package/dist/core/repository.d.ts.map +1 -1
- package/dist/core/repository.js +7 -8
- package/dist/core/repository.js.map +1 -1
- package/dist/core/templates.d.ts +7 -1
- package/dist/core/templates.d.ts.map +1 -1
- package/dist/core/templates.js +20 -1
- package/dist/core/templates.js.map +1 -1
- package/dist/core/tool-integrations.d.ts +3 -2
- package/dist/core/tool-integrations.d.ts.map +1 -1
- package/dist/core/tool-integrations.js +103 -36
- package/dist/core/tool-integrations.js.map +1 -1
- package/package.json +10 -2
- /package/bin/{openadr.js → adrkit.js} +0 -0
package/LICENSE
CHANGED
package/README.md
CHANGED
|
@@ -1,24 +1,23 @@
|
|
|
1
|
-
<
|
|
2
|
-
<img src="
|
|
1
|
+
<div align="right">
|
|
2
|
+
<a title="English" href="README.md"><img src="https://img.shields.io/badge/-English-A31F34?style=for-the-badge" alt="English" /></a>
|
|
3
|
+
<a title="简体中文" href="README.zh.md"><img src="https://img.shields.io/badge/-%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87-545759?style=for-the-badge" alt="简体中文"></a>
|
|
4
|
+
</div>
|
|
5
|
+
|
|
6
|
+
# ADR Kit
|
|
7
|
+
|
|
8
|
+
<p>
|
|
9
|
+
<a href="https://www.npmjs.com/package/adr-kit"><img src="https://img.shields.io/npm/v/adr-kit?style=flat-square&color=0e7490" alt="npm version" /></a>
|
|
10
|
+
<a href="https://github.com/luochang212/adr-kit/actions/workflows/ci.yml"><img src="https://github.com/luochang212/adr-kit/actions/workflows/ci.yml/badge.svg" alt="ci" /></a>
|
|
11
|
+
<a href="https://www.npmjs.com/package/adr-kit"><img src="https://img.shields.io/npm/dm/adr-kit?style=flat-square&color=0e7490" alt="npm downloads" /></a>
|
|
12
|
+
<a href="https://nodejs.org/"><img src="https://img.shields.io/node/v/adr-kit?style=flat-square&color=0e7490" alt="node" /></a>
|
|
13
|
+
<a href="LICENSE"><img src="https://img.shields.io/npm/l/adr-kit?style=flat-square&color=0e7490" alt="license" /></a>
|
|
3
14
|
</p>
|
|
4
15
|
|
|
5
|
-
<p
|
|
6
|
-
<
|
|
16
|
+
<p>
|
|
17
|
+
<img src="assets/social-preview.png" alt="ADR Kit — Open Architecture Decision Records" width="100%" />
|
|
7
18
|
</p>
|
|
8
19
|
|
|
9
|
-
|
|
10
|
-
<a href="https://www.npmjs.com/package/adr-kit"><img src="https://img.shields.io/npm/v/adr-kit" alt="npm version" /></a>
|
|
11
|
-
<a href="https://github.com/luochang212/OpenADR/actions/workflows/ci.yml"><img src="https://github.com/luochang212/OpenADR/actions/workflows/ci.yml/badge.svg" alt="ci" /></a>
|
|
12
|
-
<a href="https://www.npmjs.com/package/adr-kit"><img src="https://img.shields.io/npm/dm/adr-kit" alt="npm downloads" /></a>
|
|
13
|
-
<a href="https://nodejs.org/"><img src="https://img.shields.io/node/v/adr-kit" alt="node" /></a>
|
|
14
|
-
<a href="LICENSE"><img src="https://img.shields.io/npm/l/adr-kit" alt="license" /></a>
|
|
15
|
-
</p>
|
|
16
|
-
|
|
17
|
-
<p align="center">
|
|
18
|
-
<a href="README.md">English</a> | <a href="README.zh.md">中文</a>
|
|
19
|
-
</p>
|
|
20
|
-
|
|
21
|
-
OpenADR turns architecture decisions into plain Markdown files with a
|
|
20
|
+
ADR Kit turns architecture decisions into plain Markdown files with a
|
|
22
21
|
machine-checkable lifecycle: **proposed → accepted / rejected / superseded**. It borrows
|
|
23
22
|
the spec-driven spirit of [OpenSpec](https://github.com/Fission-AI/OpenSpec)
|
|
24
23
|
and the decision-record discipline of agent-native codebases: every record
|
|
@@ -38,11 +37,11 @@ Requires Node.js 20.19 or later.
|
|
|
38
37
|
```bash
|
|
39
38
|
npm install -g adr-kit
|
|
40
39
|
cd your-project
|
|
41
|
-
|
|
42
|
-
|
|
40
|
+
adrkit init
|
|
41
|
+
adrkit propose "Use SQLite for session storage"
|
|
43
42
|
```
|
|
44
43
|
|
|
45
|
-
`
|
|
44
|
+
`adrkit init` creates an `adr/` directory:
|
|
46
45
|
|
|
47
46
|
```text
|
|
48
47
|
adr/
|
|
@@ -56,29 +55,29 @@ adr/
|
|
|
56
55
|
Fill in the proposal, then:
|
|
57
56
|
|
|
58
57
|
```bash
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
58
|
+
adrkit validate
|
|
59
|
+
adrkit accept "Use SQLite for session storage"
|
|
60
|
+
adrkit list
|
|
62
61
|
```
|
|
63
62
|
|
|
64
63
|
## Commands
|
|
65
64
|
|
|
66
65
|
```text
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
66
|
+
adrkit init [path] Initialize an ADR Kit repository
|
|
67
|
+
adrkit propose <title> Create a proposed decision
|
|
68
|
+
adrkit decide <title> Record an already-accepted decision
|
|
69
|
+
adrkit accept <name> Accept a proposal (assigns NNNN)
|
|
70
|
+
adrkit reject <name> --reason <text> Reject a proposal
|
|
71
|
+
adrkit supersede <name> --by <name> Mark an accepted decision as superseded
|
|
72
|
+
adrkit list [--json] List all records
|
|
73
|
+
adrkit show <name> Show a record
|
|
74
|
+
adrkit status [--json] Show lifecycle counts and validity
|
|
75
|
+
adrkit instructions [--json] Print the next step; flag pending proposals as ready or needing work
|
|
76
|
+
adrkit validate [name] [--all] [--json] Validate one record or the repository
|
|
77
|
+
adrkit update [--tools <list>] Rewrite AI tool integrations
|
|
78
|
+
adrkit config [--json] Print the current configuration
|
|
79
|
+
adrkit completion <bash|zsh|fish> Print a shell completion script
|
|
80
|
+
adrkit version Print the version
|
|
82
81
|
```
|
|
83
82
|
|
|
84
83
|
`<name>` resolves by title, file name, or decision number (`0001`).
|
|
@@ -96,7 +95,6 @@ Every record is plain Markdown with a three-line header:
|
|
|
96
95
|
|
|
97
96
|
```markdown
|
|
98
97
|
# ADR: Use SQLite for session storage
|
|
99
|
-
|
|
100
98
|
Status: proposed
|
|
101
99
|
|
|
102
100
|
## Problem
|
|
@@ -112,13 +110,36 @@ Status: proposed
|
|
|
112
110
|
`Status: rejected — <reason>`.
|
|
113
111
|
- **Superseded** decisions stay in `adr/decisions/` as history, with the
|
|
114
112
|
replacing decision on the status line: `Status: superseded by NNNN`.
|
|
115
|
-
`
|
|
113
|
+
`adrkit supersede <old> --by <new>` performs the rewrite; `validate`
|
|
116
114
|
checks that `NNNN` exists and is not itself superseded.
|
|
117
115
|
|
|
118
|
-
`
|
|
116
|
+
`adrkit accept` performs the mechanical rewrite a lifecycle move always
|
|
119
117
|
owed: `## Proposal` becomes `## Decision`, and `Acceptance criteria` plus
|
|
120
118
|
`Risks` are folded into `## Consequences`.
|
|
121
119
|
|
|
120
|
+
## Sources of Inspiration
|
|
121
|
+
|
|
122
|
+
ADR Kit stands on two projects, in two different roles:
|
|
123
|
+
|
|
124
|
+
- **[OpenSpec](https://github.com/Fission-AI/OpenSpec)** shaped *how* the
|
|
125
|
+
tool is built: an agent-first CLI whose instructions are installed as
|
|
126
|
+
agent skills, a deterministic `validate`, machine-readable `--json`
|
|
127
|
+
output, and a "fluid not rigid" workflow. Like OpenSpec, ADR Kit
|
|
128
|
+
*steers* agents — session-visible skills rather than imposing hard phase
|
|
129
|
+
gates or mandating that every change be recorded.
|
|
130
|
+
- **[deepseek-harness](https://github.com/deepseek-ai/deepseek-harness)**
|
|
131
|
+
gave ADR Kit *what a record is*. Its **Agent Notes** — plain Markdown
|
|
132
|
+
with a `Status:` line, lifecycle folders
|
|
133
|
+
(`proposed` → `implemented` → `rejected`, plus a frozen archive), and a
|
|
134
|
+
`Problem` / `Proposal`·`Decision` / `Alternatives considered` /
|
|
135
|
+
`Consequences` skeleton — is the direct ancestor of the ADR Kit record
|
|
136
|
+
format.
|
|
137
|
+
|
|
138
|
+
Adapted, not copied. Accepted records carry a `NNNN` number, `supersede`
|
|
139
|
+
retires a decision in place, and `accept` mechanically rewrites a proposal
|
|
140
|
+
into a decision. Records are immutable once accepted: a decision record is
|
|
141
|
+
history, and current facts live in code, not in the record.
|
|
142
|
+
|
|
122
143
|
## Philosophy
|
|
123
144
|
|
|
124
145
|
- **The record is the source of truth.** Code comments rot, docs drift; an
|
|
@@ -141,10 +162,6 @@ npm test
|
|
|
141
162
|
npm run build
|
|
142
163
|
```
|
|
143
164
|
|
|
144
|
-
## Star History
|
|
145
|
-
|
|
146
|
-
[](https://www.star-history.com/#luochang212/OpenADR&Date)
|
|
147
|
-
|
|
148
165
|
## License
|
|
149
166
|
|
|
150
167
|
[MIT](LICENSE)
|
package/README.zh.md
CHANGED
|
@@ -1,24 +1,23 @@
|
|
|
1
|
-
<
|
|
2
|
-
<img src="
|
|
1
|
+
<div align="right">
|
|
2
|
+
<a title="English" href="README.md"><img src="https://img.shields.io/badge/-English-545759?style=for-the-badge" alt="English" /></a>
|
|
3
|
+
<a title="简体中文" href="README.zh.md"><img src="https://img.shields.io/badge/-%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87-A31F34?style=for-the-badge" alt="简体中文"></a>
|
|
4
|
+
</div>
|
|
5
|
+
|
|
6
|
+
# ADR Kit
|
|
7
|
+
|
|
8
|
+
<p>
|
|
9
|
+
<a href="https://www.npmjs.com/package/adr-kit"><img src="https://img.shields.io/npm/v/adr-kit?style=flat-square&color=0e7490" alt="npm version" /></a>
|
|
10
|
+
<a href="https://github.com/luochang212/adr-kit/actions/workflows/ci.yml"><img src="https://github.com/luochang212/adr-kit/actions/workflows/ci.yml/badge.svg" alt="ci" /></a>
|
|
11
|
+
<a href="https://www.npmjs.com/package/adr-kit"><img src="https://img.shields.io/npm/dm/adr-kit?style=flat-square&color=0e7490" alt="npm downloads" /></a>
|
|
12
|
+
<a href="https://nodejs.org/"><img src="https://img.shields.io/node/v/adr-kit?style=flat-square&color=0e7490" alt="node" /></a>
|
|
13
|
+
<a href="LICENSE"><img src="https://img.shields.io/npm/l/adr-kit?style=flat-square&color=0e7490" alt="license" /></a>
|
|
3
14
|
</p>
|
|
4
15
|
|
|
5
|
-
<p
|
|
6
|
-
<
|
|
16
|
+
<p>
|
|
17
|
+
<img src="assets/social-preview.png" alt="ADR Kit — Open Architecture Decision Records" width="100%" />
|
|
7
18
|
</p>
|
|
8
19
|
|
|
9
|
-
|
|
10
|
-
<a href="https://www.npmjs.com/package/adr-kit"><img src="https://img.shields.io/npm/v/adr-kit" alt="npm version" /></a>
|
|
11
|
-
<a href="https://github.com/luochang212/OpenADR/actions/workflows/ci.yml"><img src="https://github.com/luochang212/OpenADR/actions/workflows/ci.yml/badge.svg" alt="ci" /></a>
|
|
12
|
-
<a href="https://www.npmjs.com/package/adr-kit"><img src="https://img.shields.io/npm/dm/adr-kit" alt="npm downloads" /></a>
|
|
13
|
-
<a href="https://nodejs.org/"><img src="https://img.shields.io/node/v/adr-kit" alt="node" /></a>
|
|
14
|
-
<a href="LICENSE"><img src="https://img.shields.io/npm/l/adr-kit" alt="license" /></a>
|
|
15
|
-
</p>
|
|
16
|
-
|
|
17
|
-
<p align="center">
|
|
18
|
-
<a href="README.md">English</a> | <a href="README.zh.md">中文</a>
|
|
19
|
-
</p>
|
|
20
|
-
|
|
21
|
-
OpenADR 把架构决策变成纯 Markdown 文件,并带有机检的生命周期:
|
|
20
|
+
ADR Kit 把架构决策变成纯 Markdown 文件,并带有机检的生命周期:
|
|
22
21
|
**proposed → accepted / rejected / superseded**。它借鉴了
|
|
23
22
|
[OpenSpec](https://github.com/Fission-AI/OpenSpec) 的 spec-driven 思路,以及
|
|
24
23
|
agent 原生代码库的决策记录纪律:每条记录都必须说明它解决什么问题、选择了什么、
|
|
@@ -38,11 +37,11 @@ agent 原生代码库的决策记录纪律:每条记录都必须说明它解
|
|
|
38
37
|
```bash
|
|
39
38
|
npm install -g adr-kit
|
|
40
39
|
cd your-project
|
|
41
|
-
|
|
42
|
-
|
|
40
|
+
adrkit init
|
|
41
|
+
adrkit propose "使用 SQLite 存储会话"
|
|
43
42
|
```
|
|
44
43
|
|
|
45
|
-
`
|
|
44
|
+
`adrkit init` 会创建 `adr/` 目录:
|
|
46
45
|
|
|
47
46
|
```text
|
|
48
47
|
adr/
|
|
@@ -56,29 +55,29 @@ adr/
|
|
|
56
55
|
填写提案内容后:
|
|
57
56
|
|
|
58
57
|
```bash
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
58
|
+
adrkit validate
|
|
59
|
+
adrkit accept "使用 SQLite 存储会话"
|
|
60
|
+
adrkit list
|
|
62
61
|
```
|
|
63
62
|
|
|
64
63
|
## 命令
|
|
65
64
|
|
|
66
65
|
```text
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
66
|
+
adrkit init [path] 初始化 ADR Kit 仓库
|
|
67
|
+
adrkit propose <title> 创建提案
|
|
68
|
+
adrkit decide <title> 直接记录已接受的决策
|
|
69
|
+
adrkit accept <name> 接受提案(分配 NNNN 编号)
|
|
70
|
+
adrkit reject <name> --reason <text> 拒绝提案
|
|
71
|
+
adrkit supersede <name> --by <name> 标记已接受决策被新决策取代
|
|
72
|
+
adrkit list [--json] 列出所有记录
|
|
73
|
+
adrkit show <name> 查看记录
|
|
74
|
+
adrkit status [--json] 查看生命周期计数与校验状态
|
|
75
|
+
adrkit instructions [--json] 查看下一步该做什么
|
|
76
|
+
adrkit validate [name] [--all] [--json] 校验单条记录或整个仓库
|
|
77
|
+
adrkit update [--tools <list>] 重写 AI 工具集成文件
|
|
78
|
+
adrkit config [--json] 查看当前配置
|
|
79
|
+
adrkit completion <bash|zsh|fish> 打印 shell 补全脚本
|
|
80
|
+
adrkit version 查看版本
|
|
82
81
|
```
|
|
83
82
|
|
|
84
83
|
`<name>` 支持按标题、文件名或决策编号(`0001`)查找。
|
|
@@ -89,7 +88,6 @@ openadr version 查看版本
|
|
|
89
88
|
|
|
90
89
|
```markdown
|
|
91
90
|
# ADR: 使用 SQLite 存储会话
|
|
92
|
-
|
|
93
91
|
Status: proposed
|
|
94
92
|
|
|
95
93
|
## Problem
|
|
@@ -102,12 +100,32 @@ Status: proposed
|
|
|
102
100
|
`Consequences`;`validate` 会拒绝提案时代的标题出现在已接受决策中。
|
|
103
101
|
- **Rejected** 冻结提案,拒绝原因写在状态行:`Status: rejected — <reason>`。
|
|
104
102
|
- **Superseded** 决策保留在 `adr/decisions/` 作为历史,状态行指向取代它的决策:
|
|
105
|
-
`Status: superseded by NNNN`。`
|
|
103
|
+
`Status: superseded by NNNN`。`adrkit supersede <旧> --by <新>` 完成改写;
|
|
106
104
|
`validate` 校验 `NNNN` 存在且自身未被取代。
|
|
107
105
|
|
|
108
|
-
`
|
|
106
|
+
`adrkit accept` 会自动完成生命周期迁移所要求的改写:`## Proposal` 改为
|
|
109
107
|
`## Decision`,`Acceptance criteria` 与 `Risks` 合并进 `## Consequences`。
|
|
110
108
|
|
|
109
|
+
## 灵感来源
|
|
110
|
+
|
|
111
|
+
ADR Kit 站在两个项目之上,两者角色不同:
|
|
112
|
+
|
|
113
|
+
- **[OpenSpec](https://github.com/Fission-AI/OpenSpec)** 决定了这个工具*怎么建*:
|
|
114
|
+
agent 优先的 CLI、指令以 agent skills 安装、确定性的 `validate`、
|
|
115
|
+
机器可读的 `--json` 输出,以及"灵活而不僵化"的工作流。和 OpenSpec 一样,
|
|
116
|
+
ADR Kit 靠*引导* agent——会话开始可见的 skills——而不是硬性阶段门禁,
|
|
117
|
+
也不强制每次变更都记录。
|
|
118
|
+
- **[deepseek-harness](https://github.com/deepseek-ai/deepseek-harness)**
|
|
119
|
+
决定了 ADR Kit 里*记录是什么*。它的 **Agent Notes**——带 `Status:` 行的
|
|
120
|
+
纯 Markdown、生命周期文件夹(`proposed` → `implemented` → `rejected`,
|
|
121
|
+
外加冻结归档)、以及 `Problem` / `Proposal`·`Decision` /
|
|
122
|
+
`Alternatives considered` / `Consequences` 骨架——是 ADR Kit 记录格式的
|
|
123
|
+
直接祖先。
|
|
124
|
+
|
|
125
|
+
是改编,不是照抄。已接受记录带 `NNNN` 编号,`supersede` 原地退役一条决策,
|
|
126
|
+
`accept` 机械地把提案改写成决策。记录一旦接受就不可变:决策记录是历史,
|
|
127
|
+
当前事实以代码为准,不在记录里。
|
|
128
|
+
|
|
111
129
|
## 理念
|
|
112
130
|
|
|
113
131
|
- **记录是事实来源。** 代码注释会腐化,文档会漂移;一条写明了决定与代价的
|
package/dist/cli.js
CHANGED
|
@@ -15,26 +15,26 @@ import { statusCommand } from './commands/status.js';
|
|
|
15
15
|
import { supersedeCommand } from './commands/supersede.js';
|
|
16
16
|
import { updateCommand } from './commands/update.js';
|
|
17
17
|
import { validateCommand } from './commands/validate.js';
|
|
18
|
-
const HELP = `
|
|
18
|
+
const HELP = `adrkit ${VERSION} — Open Architecture Decision Records
|
|
19
19
|
|
|
20
20
|
Usage:
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
21
|
+
adrkit init [path] [--tools <list>] Initialize an ADR Kit repository
|
|
22
|
+
adrkit propose <title> Create a proposed decision
|
|
23
|
+
adrkit decide <title> Create an accepted decision draft
|
|
24
|
+
adrkit accept <name> Accept a proposal (assigns NNNN)
|
|
25
|
+
adrkit reject <name> --reason <reason> Reject a proposal
|
|
26
|
+
adrkit supersede <name> --by <name> Mark an accepted decision as superseded
|
|
27
|
+
adrkit list [--json] List all decision records
|
|
28
|
+
adrkit show <name> Show a decision record
|
|
29
|
+
adrkit status [--json] Show lifecycle counts and validity
|
|
30
|
+
adrkit instructions [--json] Print the next workflow step
|
|
31
|
+
adrkit validate [name] [--all] [--json] Validate one record or the whole repo
|
|
32
|
+
adrkit update [--tools <list>] Rewrite AI tool integrations
|
|
33
|
+
adrkit config [--json] Print the current configuration
|
|
34
|
+
adrkit completion <bash|zsh|fish> Print a shell completion script
|
|
35
|
+
adrkit version Print the version
|
|
36
|
+
adrkit -h, --help Print this help
|
|
37
|
+
adrkit -V, --version Print the version
|
|
38
38
|
|
|
39
39
|
Run from anywhere inside the project; commands discover the nearest adr/ directory.
|
|
40
40
|
`;
|
|
@@ -149,7 +149,7 @@ export function main(argv) {
|
|
|
149
149
|
return;
|
|
150
150
|
}
|
|
151
151
|
case 'validate': {
|
|
152
|
-
const result = validateCommand(process.cwd(), rest[0], values.json);
|
|
152
|
+
const result = validateCommand(process.cwd(), values.all ? undefined : rest[0], values.json);
|
|
153
153
|
console.log(result.output);
|
|
154
154
|
if (result.valid === false)
|
|
155
155
|
process.exitCode = 1;
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAEzD,MAAM,IAAI,GAAG,
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"accept.d.ts","sourceRoot":"","sources":["../../src/commands/accept.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"accept.d.ts","sourceRoot":"","sources":["../../src/commands/accept.ts"],"names":[],"mappings":"AAaA,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAmChE"}
|
package/dist/commands/accept.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { existsSync } from 'node:fs';
|
|
2
2
|
import { join } from 'node:path';
|
|
3
3
|
import { requireRoot } from '../core/config.js';
|
|
4
|
-
import { nextDecisionNumber, removeRecord, resolveRecord, writeRecord, } from '../core/repository.js';
|
|
5
|
-
import { proposalToDecision } from '../core/templates.js';
|
|
4
|
+
import { folderPath, nextDecisionNumber, removeRecord, resolveRecord, writeRecord, } from '../core/repository.js';
|
|
5
|
+
import { droppedSections, proposalToDecision } from '../core/templates.js';
|
|
6
6
|
import { formatIssues, validateRecord } from '../core/validate.js';
|
|
7
7
|
export function acceptCommand(query, cwd) {
|
|
8
8
|
const root = requireRoot(cwd);
|
|
@@ -11,7 +11,7 @@ export function acceptCommand(query, cwd) {
|
|
|
11
11
|
throw new Error(`"${query}" is not a proposal (it is in ${record.folder})`);
|
|
12
12
|
}
|
|
13
13
|
if (/^\d{4}\s+/.test(record.title)) {
|
|
14
|
-
throw new Error('proposal title must not start with a four-digit number;
|
|
14
|
+
throw new Error('proposal title must not start with a four-digit number; ADR Kit assigns decision numbers');
|
|
15
15
|
}
|
|
16
16
|
const issues = validateRecord(root, record);
|
|
17
17
|
if (issues.length > 0) {
|
|
@@ -21,13 +21,20 @@ export function acceptCommand(query, cwd) {
|
|
|
21
21
|
const padded = String(number).padStart(4, '0');
|
|
22
22
|
const slug = record.fileName.replace(/^\d{4}-\d{2}-\d{2}-/, '').replace(/\.md$/, '');
|
|
23
23
|
const fileName = `${padded}-${slug}.md`;
|
|
24
|
-
const path = join(root, '
|
|
24
|
+
const path = join(folderPath(root, 'decisions'), fileName);
|
|
25
25
|
if (existsSync(path)) {
|
|
26
26
|
throw new Error(`decision already exists: adr/decisions/${fileName}`);
|
|
27
27
|
}
|
|
28
28
|
const content = proposalToDecision(record, number);
|
|
29
29
|
writeRecord(root, 'decisions', fileName, content);
|
|
30
30
|
removeRecord(record);
|
|
31
|
-
|
|
31
|
+
let output = `accepted adr/proposed/${record.fileName} as adr/decisions/${fileName}`;
|
|
32
|
+
const dropped = droppedSections(record);
|
|
33
|
+
if (dropped.length > 0) {
|
|
34
|
+
output += `\nwarning: dropped section(s) with no place in an accepted decision: ${dropped
|
|
35
|
+
.map((heading) => `## ${heading}`)
|
|
36
|
+
.join(', ')}`;
|
|
37
|
+
}
|
|
38
|
+
return output;
|
|
32
39
|
}
|
|
33
40
|
//# sourceMappingURL=accept.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"accept.js","sourceRoot":"","sources":["../../src/commands/accept.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EACL,kBAAkB,EAClB,YAAY,EACZ,aAAa,EACb,WAAW,GACZ,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"accept.js","sourceRoot":"","sources":["../../src/commands/accept.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EACL,UAAU,EACV,kBAAkB,EAClB,YAAY,EACZ,aAAa,EACb,WAAW,GACZ,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC3E,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAEnE,MAAM,UAAU,aAAa,CAAC,KAAa,EAAE,GAAW;IACtD,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;IAC9B,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC1C,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;QACjC,MAAM,IAAI,KAAK,CAAC,IAAI,KAAK,iCAAiC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;IAC9E,CAAC;IACD,IAAI,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;QACnC,MAAM,IAAI,KAAK,CAAC,0FAA0F,CAAC,CAAC;IAC9G,CAAC;IAED,MAAM,MAAM,GAAG,cAAc,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC5C,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,oDAAoD,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAC9F,CAAC;IAED,MAAM,MAAM,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;IACxC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAC/C,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,qBAAqB,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IACrF,MAAM,QAAQ,GAAG,GAAG,MAAM,IAAI,IAAI,KAAK,CAAC;IACxC,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,WAAW,CAAC,EAAE,QAAQ,CAAC,CAAC;IAC3D,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CAAC,0CAA0C,QAAQ,EAAE,CAAC,CAAC;IACxE,CAAC;IAED,MAAM,OAAO,GAAG,kBAAkB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnD,WAAW,CAAC,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;IAClD,YAAY,CAAC,MAAM,CAAC,CAAC;IACrB,IAAI,MAAM,GAAG,yBAAyB,MAAM,CAAC,QAAQ,qBAAqB,QAAQ,EAAE,CAAC;IACrF,MAAM,OAAO,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;IACxC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,wEAAwE,OAAO;aACtF,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,MAAM,OAAO,EAAE,CAAC;aACjC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;IAClB,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -20,19 +20,19 @@ export function completionCommand(shell) {
|
|
|
20
20
|
const words = COMMANDS.join(' ');
|
|
21
21
|
switch (shell) {
|
|
22
22
|
case 'bash':
|
|
23
|
-
return `
|
|
23
|
+
return `_adrkit_completion() {
|
|
24
24
|
local cur
|
|
25
25
|
cur="\${COMP_WORDS[COMP_CWORD]}"
|
|
26
26
|
COMPREPLY=( $(compgen -W "${words}" -- "$cur") )
|
|
27
27
|
}
|
|
28
|
-
complete -F
|
|
28
|
+
complete -F _adrkit_completion adrkit
|
|
29
29
|
`;
|
|
30
30
|
case 'zsh':
|
|
31
|
-
return `#compdef
|
|
31
|
+
return `#compdef adrkit
|
|
32
32
|
_arguments '1:command:(${words})'
|
|
33
33
|
`;
|
|
34
34
|
case 'fish':
|
|
35
|
-
return COMMANDS.map((command) => `complete -c
|
|
35
|
+
return COMMANDS.map((command) => `complete -c adrkit -f -a "${command}"`).join('\n') + '\n';
|
|
36
36
|
default:
|
|
37
37
|
throw new Error(`unsupported shell "${shell}". Supported: bash, zsh, fish`);
|
|
38
38
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"completion.js","sourceRoot":"","sources":["../../src/commands/completion.ts"],"names":[],"mappings":"AAAA,MAAM,QAAQ,GAAG;IACf,MAAM;IACN,SAAS;IACT,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,WAAW;IACX,MAAM;IACN,MAAM;IACN,QAAQ;IACR,cAAc;IACd,UAAU;IACV,QAAQ;IACR,QAAQ;IACR,YAAY;IACZ,SAAS;IACT,MAAM;CACP,CAAC;AAEF,MAAM,UAAU,iBAAiB,CAAC,KAAa;IAC7C,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACjC,QAAQ,KAAK,EAAE,CAAC;QACd,KAAK,MAAM;YACT,OAAO;;;8BAGiB,KAAK;;;CAGlC,CAAC;QACE,KAAK,KAAK;YACR,OAAO;yBACY,KAAK;CAC7B,CAAC;QACE,KAAK,MAAM;YACT,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"completion.js","sourceRoot":"","sources":["../../src/commands/completion.ts"],"names":[],"mappings":"AAAA,MAAM,QAAQ,GAAG;IACf,MAAM;IACN,SAAS;IACT,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,WAAW;IACX,MAAM;IACN,MAAM;IACN,QAAQ;IACR,cAAc;IACd,UAAU;IACV,QAAQ;IACR,QAAQ;IACR,YAAY;IACZ,SAAS;IACT,MAAM;CACP,CAAC;AAEF,MAAM,UAAU,iBAAiB,CAAC,KAAa;IAC7C,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACjC,QAAQ,KAAK,EAAE,CAAC;QACd,KAAK,MAAM;YACT,OAAO;;;8BAGiB,KAAK;;;CAGlC,CAAC;QACE,KAAK,KAAK;YACR,OAAO;yBACY,KAAK;CAC7B,CAAC;QACE,KAAK,MAAM;YACT,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,6BAA6B,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;QAC9F;YACE,MAAM,IAAI,KAAK,CAAC,sBAAsB,KAAK,+BAA+B,CAAC,CAAC;IAChF,CAAC;AACH,CAAC"}
|
package/dist/commands/decide.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { existsSync } from 'node:fs';
|
|
2
2
|
import { join } from 'node:path';
|
|
3
3
|
import { readConfig, requireRoot } from '../core/config.js';
|
|
4
|
-
import { nextDecisionNumber, writeRecord } from '../core/repository.js';
|
|
4
|
+
import { folderPath, nextDecisionNumber, writeRecord } from '../core/repository.js';
|
|
5
5
|
import { decisionTemplate } from '../core/templates.js';
|
|
6
6
|
import { slugify } from '../core/slug.js';
|
|
7
7
|
export function decideCommand(title, cwd) {
|
|
@@ -10,18 +10,18 @@ export function decideCommand(title, cwd) {
|
|
|
10
10
|
throw new Error('title must not be empty');
|
|
11
11
|
}
|
|
12
12
|
if (/^\d{4}\s+/.test(trimmed)) {
|
|
13
|
-
throw new Error('title must not start with a four-digit number;
|
|
13
|
+
throw new Error('title must not start with a four-digit number; ADR Kit assigns decision numbers');
|
|
14
14
|
}
|
|
15
15
|
const root = requireRoot(cwd);
|
|
16
16
|
const number = nextDecisionNumber(root);
|
|
17
17
|
const padded = String(number).padStart(4, '0');
|
|
18
18
|
const fileName = `${padded}-${slugify(trimmed)}.md`;
|
|
19
|
-
const path = join(root, '
|
|
19
|
+
const path = join(folderPath(root, 'decisions'), fileName);
|
|
20
20
|
if (existsSync(path)) {
|
|
21
21
|
throw new Error(`decision already exists: adr/decisions/${fileName}`);
|
|
22
22
|
}
|
|
23
23
|
const content = decisionTemplate(number, trimmed, readConfig(root).context);
|
|
24
24
|
writeRecord(root, 'decisions', fileName, content);
|
|
25
|
-
return `created adr/decisions/${fileName}\n\nfill in the draft and validate it with:\n
|
|
25
|
+
return `created adr/decisions/${fileName}\n\nfill in the draft and validate it with:\n adrkit validate ${padded}`;
|
|
26
26
|
}
|
|
27
27
|
//# sourceMappingURL=decide.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decide.js","sourceRoot":"","sources":["../../src/commands/decide.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"decide.js","sourceRoot":"","sources":["../../src/commands/decide.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpF,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAE1C,MAAM,UAAU,aAAa,CAAC,KAAa,EAAE,GAAW;IACtD,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC7C,CAAC;IACD,IAAI,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,iFAAiF,CAAC,CAAC;IACrG,CAAC;IACD,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;IAC9B,MAAM,MAAM,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;IACxC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAC/C,MAAM,QAAQ,GAAG,GAAG,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC;IACpD,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,WAAW,CAAC,EAAE,QAAQ,CAAC,CAAC;IAC3D,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CAAC,0CAA0C,QAAQ,EAAE,CAAC,CAAC;IACxE,CAAC;IACD,MAAM,OAAO,GAAG,gBAAgB,CAAC,MAAM,EAAE,OAAO,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC;IAC5E,WAAW,CAAC,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;IAClD,OAAO,yBAAyB,QAAQ,kEAAkE,MAAM,EAAE,CAAC;AACrH,CAAC"}
|
package/dist/commands/init.js
CHANGED
|
@@ -6,13 +6,13 @@ export function initCommand(targetDir, toolsValue) {
|
|
|
6
6
|
const lines = created.map((path) => ` created ${path}`);
|
|
7
7
|
const integrations = writeToolIntegrations(root, tools);
|
|
8
8
|
return [
|
|
9
|
-
`
|
|
9
|
+
`ADR Kit initialized at ${root}`,
|
|
10
10
|
...lines,
|
|
11
11
|
...integrationSummary(root, integrations),
|
|
12
12
|
'',
|
|
13
13
|
'Next:',
|
|
14
|
-
'
|
|
15
|
-
'
|
|
14
|
+
' adrkit propose "your first decision" # start a proposal',
|
|
15
|
+
' adrkit decide "use sqlite for sessions" # record an accepted decision',
|
|
16
16
|
].join('\n');
|
|
17
17
|
}
|
|
18
18
|
//# sourceMappingURL=init.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,UAAU,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAErG,MAAM,UAAU,WAAW,CAAC,SAAiB,EAAE,UAAmB;IAChE,MAAM,KAAK,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;IACrC,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,cAAc,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IAC3D,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,aAAa,IAAI,EAAE,CAAC,CAAC;IACzD,MAAM,YAAY,GAAG,qBAAqB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACxD,OAAO;QACL,0BAA0B,IAAI,EAAE;QAChC,GAAG,KAAK;QACR,GAAG,kBAAkB,CAAC,IAAI,EAAE,YAAY,CAAC;QACzC,EAAE;QACF,OAAO;QACP,
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,UAAU,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAErG,MAAM,UAAU,WAAW,CAAC,SAAiB,EAAE,UAAmB;IAChE,MAAM,KAAK,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;IACrC,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,cAAc,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IAC3D,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,aAAa,IAAI,EAAE,CAAC,CAAC;IACzD,MAAM,YAAY,GAAG,qBAAqB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACxD,OAAO;QACL,0BAA0B,IAAI,EAAE;QAChC,GAAG,KAAK;QACR,GAAG,kBAAkB,CAAC,IAAI,EAAE,YAAY,CAAC;QACzC,EAAE;QACF,OAAO;QACP,6DAA6D;QAC7D,yEAAyE;KAC1E,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instructions.d.ts","sourceRoot":"","sources":["../../src/commands/instructions.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"instructions.d.ts","sourceRoot":"","sources":["../../src/commands/instructions.ts"],"names":[],"mappings":"AAKA,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,UAAQ,GAAG,MAAM,CA4GvE"}
|