adr-kit 0.9.0 → 0.10.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 +18 -5
- package/README.zh.md +14 -4
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +14 -5
- package/dist/cli.js.map +1 -1
- package/dist/commands/completion.js +2 -2
- package/dist/commands/completion.js.map +1 -1
- package/dist/commands/graph.d.ts +1 -0
- package/dist/commands/graph.d.ts.map +1 -1
- package/dist/commands/graph.js +4 -1
- package/dist/commands/graph.js.map +1 -1
- package/dist/commands/tree.d.ts +1 -1
- package/dist/commands/tree.d.ts.map +1 -1
- package/dist/commands/tree.js +4 -1
- package/dist/commands/tree.js.map +1 -1
- package/dist/core/canvas-view.d.ts +5 -0
- package/dist/core/canvas-view.d.ts.map +1 -0
- package/dist/core/canvas-view.js +121 -0
- package/dist/core/canvas-view.js.map +1 -0
- package/dist/core/deliberation-html.d.ts +4 -0
- package/dist/core/deliberation-html.d.ts.map +1 -0
- package/dist/core/deliberation-html.js +81 -0
- package/dist/core/deliberation-html.js.map +1 -0
- package/dist/core/deliberation-view.d.ts +4 -0
- package/dist/core/deliberation-view.d.ts.map +1 -0
- package/dist/core/deliberation-view.js +508 -0
- package/dist/core/deliberation-view.js.map +1 -0
- package/dist/core/deliberation.d.ts +26 -7
- package/dist/core/deliberation.d.ts.map +1 -1
- package/dist/core/deliberation.js +165 -35
- package/dist/core/deliberation.js.map +1 -1
- package/dist/core/graph-html.d.ts +8 -0
- package/dist/core/graph-html.d.ts.map +1 -0
- package/dist/core/graph-html.js +180 -0
- package/dist/core/graph-html.js.map +1 -0
- package/dist/core/graph-view.d.ts +3 -0
- package/dist/core/graph-view.d.ts.map +1 -0
- package/dist/core/graph-view.js +258 -0
- package/dist/core/graph-view.js.map +1 -0
- package/dist/core/graph.d.ts +4 -1
- package/dist/core/graph.d.ts.map +1 -1
- package/dist/core/graph.js +11 -2
- package/dist/core/graph.js.map +1 -1
- package/dist/core/repository.d.ts.map +1 -1
- package/dist/core/repository.js +6 -2
- package/dist/core/repository.js.map +1 -1
- package/dist/core/templates.d.ts +8 -3
- package/dist/core/templates.d.ts.map +1 -1
- package/dist/core/templates.js +10 -2
- package/dist/core/templates.js.map +1 -1
- package/dist/core/tool-integrations.d.ts.map +1 -1
- package/dist/core/tool-integrations.js +37 -5
- package/dist/core/tool-integrations.js.map +1 -1
- package/dist/core/validate.d.ts.map +1 -1
- package/dist/core/validate.js +31 -1
- package/dist/core/validate.js.map +1 -1
- package/dist/core/view-text.d.ts +14 -0
- package/dist/core/view-text.d.ts.map +1 -0
- package/dist/core/view-text.js +77 -0
- package/dist/core/view-text.js.map +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -70,7 +70,7 @@ adrkit list
|
|
|
70
70
|
Paste this into any AI coding agent to record key decisions automatically:
|
|
71
71
|
|
|
72
72
|
```text
|
|
73
|
-
Use github.com/luochang212/adr-kit in this repository to automatically record key
|
|
73
|
+
Use github.com/luochang212/adr-kit in this repository to automatically record key decisions. Prefer `adrkit decide`; use `adrkit propose` only when a decision still needs review. Every record declares two flags: `--raised-by` (who put the decision on the table) and `--decided-by` (whose judgment settled it). Use `human` when a person determined it, `agent` when it came from your own judgment, even if a person let it through.
|
|
74
74
|
```
|
|
75
75
|
|
|
76
76
|
To use decisions in later coding tasks, add the [reading rule](docs/workflow.md#read-decisions-before-coding)
|
|
@@ -103,9 +103,9 @@ adrkit validate [name] [--all] Validate one record or the repository
|
|
|
103
103
|
adrkit update [--tools <list>] [--workflows <list>]
|
|
104
104
|
Rewrite AI tool integrations
|
|
105
105
|
adrkit config Print the current configuration
|
|
106
|
-
adrkit graph [--mermaid|--dot|--text] [--formal-only] [--tag <tag>]
|
|
106
|
+
adrkit graph [--mermaid|--dot|--text|--html] [--formal-only] [--tag <tag>]
|
|
107
107
|
Emit the decision relationship graph
|
|
108
|
-
adrkit tree <name> [--mermaid|--text]
|
|
108
|
+
adrkit tree <name> [--mermaid|--text|--html] Render a record's deliberation tree
|
|
109
109
|
adrkit completion <bash|zsh|fish> Print a shell completion script
|
|
110
110
|
adrkit version Print the version
|
|
111
111
|
```
|
|
@@ -201,8 +201,21 @@ owed: `## Proposal` becomes `## Decision`, and `Acceptance criteria` plus
|
|
|
201
201
|
|
|
202
202
|
A decision may also carry an optional `## Deliberation` appendix: the design
|
|
203
203
|
tree behind the choice, stored as a nested Markdown list whose nodes may be
|
|
204
|
-
tagged `[settled]`, `[rejected]`, or `[open]`.
|
|
205
|
-
|
|
204
|
+
tagged `[settled]`, `[rejected]`, or `[open]`. A follow-up question is
|
|
205
|
+
nested under the node that raised it, so related questions run deeper and
|
|
206
|
+
unrelated ones stay flat. Render it with `adrkit tree <name>` (text by default,
|
|
207
|
+
`--mermaid` for a graph, `--html` for an offline interactive card tree). The
|
|
208
|
+
`adrkit-grill` workflow produces that tree and records every decision the
|
|
209
|
+
session settles. The whole set renders as an interactive offline decision map with
|
|
210
|
+
`adrkit graph --html`, which marks the decisions that carry a tree. Ask your
|
|
211
|
+
agent to visualize a recorded decision when needed;
|
|
212
|
+
it uses the built-in renderer and returns an HTML file link. HTML is not a
|
|
213
|
+
default grilling deliverable, and a browser opens only on an explicit request.
|
|
214
|
+
Run `adrkit update` to refresh installed skills.
|
|
215
|
+
|
|
216
|
+
```sh
|
|
217
|
+
adrkit tree 7 --html > "adr-7.html"
|
|
218
|
+
```
|
|
206
219
|
|
|
207
220
|
## Compatibility with other tools
|
|
208
221
|
|
package/README.zh.md
CHANGED
|
@@ -66,7 +66,7 @@ adrkit list
|
|
|
66
66
|
把下面这行贴给任意 AI 编码 Agent,它就会自动把关键决策记录成 ADR:
|
|
67
67
|
|
|
68
68
|
```text
|
|
69
|
-
在本仓库用 github.com/luochang212/adr-kit
|
|
69
|
+
在本仓库用 github.com/luochang212/adr-kit 自动记录关键决策。优先用 `adrkit decide`,仅当决策还需评审时才用 `adrkit propose`。每条记录都要声明两个值:`raised-by`(谁把决策提上台面)与 `decided-by`(谁的判断定下它);方向由人决定用 `human`,由你自己的判断得出用 `agent`,即使人只是放行。
|
|
70
70
|
```
|
|
71
71
|
|
|
72
72
|
让后续编码任务也用上决策:在项目 `AGENTS.md`(Claude Code 团队也包括
|
|
@@ -96,9 +96,9 @@ adrkit validate [name] [--all] 校验单条记录或整个仓库
|
|
|
96
96
|
adrkit update [--tools <list>] [--workflows <list>]
|
|
97
97
|
重写 AI 工具集成文件
|
|
98
98
|
adrkit config 查看当前配置
|
|
99
|
-
adrkit graph [--mermaid|--dot|--text] [--formal-only] [--tag <tag>]
|
|
99
|
+
adrkit graph [--mermaid|--dot|--text|--html] [--formal-only] [--tag <tag>]
|
|
100
100
|
输出决策关系图
|
|
101
|
-
adrkit tree <name> [--mermaid|--text]
|
|
101
|
+
adrkit tree <name> [--mermaid|--text|--html] 渲染记录的 deliberation 树
|
|
102
102
|
adrkit completion <bash|zsh|fish> 打印 shell 补全脚本
|
|
103
103
|
adrkit version 查看版本
|
|
104
104
|
```
|
|
@@ -182,7 +182,17 @@ CLI 既不推断也不校验,只记录声明,所以它不能证明是谁自
|
|
|
182
182
|
|
|
183
183
|
决策还可以携带可选的 `## Deliberation` 附录:记录选择背后的 design tree,
|
|
184
184
|
用嵌套 Markdown 列表存储,节点可标注 `[settled]`、`[rejected]`、`[open]`。
|
|
185
|
-
|
|
185
|
+
后续问题嵌在提出它的节点之下,因此相关问题更深、无关问题平铺。用 `adrkit tree
|
|
186
|
+
<name>` 渲染(默认文本,加 `--mermaid` 输出图形,加 `--html` 输出离线交互卡片树)。这
|
|
187
|
+
棵树通常来自 `adrkit-grill` 工作流,它记录会话定下的每个决策。
|
|
188
|
+
需要时让 AI 可视化指定决策,它会调用内置渲染器并提供 HTML 文件链接。
|
|
189
|
+
HTML 不是 grilling 的默认交付,只有明确要求时才打开浏览器。
|
|
190
|
+
整套决策可用 `adrkit graph --html` 渲染为可交互的离线决策地图,并标出带 deliberation 树的决策。
|
|
191
|
+
用 `adrkit update` 更新已安装的技能。
|
|
192
|
+
|
|
193
|
+
```sh
|
|
194
|
+
adrkit tree 7 --html > "adr-7.html"
|
|
195
|
+
```
|
|
186
196
|
|
|
187
197
|
## 工具兼容性
|
|
188
198
|
|
package/dist/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAsEA,wBAAgB,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAmLzC"}
|
package/dist/cli.js
CHANGED
|
@@ -47,9 +47,9 @@ Usage:
|
|
|
47
47
|
adrkit update [--tools <list>] [--workflows <list>]
|
|
48
48
|
Rewrite AI tool integrations
|
|
49
49
|
adrkit config Print the current configuration
|
|
50
|
-
adrkit graph [--mermaid|--dot|--text] [--formal-only] [--tag <tag>]
|
|
50
|
+
adrkit graph [--mermaid|--dot|--text|--html] [--formal-only] [--tag <tag>]
|
|
51
51
|
Emit the decision relationship graph
|
|
52
|
-
adrkit tree <name> [--mermaid|--text]
|
|
52
|
+
adrkit tree <name> [--mermaid|--text|--html] Render the record's deliberation tree
|
|
53
53
|
adrkit completion <bash|zsh|fish> Print a shell completion script
|
|
54
54
|
adrkit version Print the version
|
|
55
55
|
adrkit -h, --help Print this help
|
|
@@ -59,8 +59,9 @@ adrkit graph visualizes the decision history: solid edges are formal
|
|
|
59
59
|
superseded-by links, dashed edges are ADR-N references mined from record
|
|
60
60
|
bodies, and nodes group by their created date. --mermaid pastes into any
|
|
61
61
|
Markdown and renders natively on GitHub (nodes are tinted by their tags),
|
|
62
|
-
--dot feeds Graphviz (dot -Tpng), --text prints a terminal-friendly tree
|
|
63
|
-
--
|
|
62
|
+
--dot feeds Graphviz (dot -Tpng), --text prints a terminal-friendly tree,
|
|
63
|
+
--html emits an offline self-contained decision map; --tag <tag> filters to
|
|
64
|
+
one theme, --formal-only drops the mined edges.
|
|
64
65
|
|
|
65
66
|
Run from anywhere inside the project; commands discover the nearest adr/ directory.
|
|
66
67
|
`;
|
|
@@ -76,6 +77,7 @@ export function main(argv) {
|
|
|
76
77
|
dot: { type: 'boolean', default: false },
|
|
77
78
|
'formal-only': { type: 'boolean', default: false },
|
|
78
79
|
mermaid: { type: 'boolean', default: false },
|
|
80
|
+
html: { type: 'boolean', default: false },
|
|
79
81
|
text: { type: 'boolean', default: false },
|
|
80
82
|
tag: { type: 'string' },
|
|
81
83
|
reason: { type: 'string' },
|
|
@@ -185,6 +187,7 @@ export function main(argv) {
|
|
|
185
187
|
mermaid: values.mermaid,
|
|
186
188
|
dot: values.dot,
|
|
187
189
|
text: values.text,
|
|
190
|
+
html: values.html,
|
|
188
191
|
formalOnly: values['formal-only'],
|
|
189
192
|
tag: values.tag,
|
|
190
193
|
}));
|
|
@@ -192,7 +195,13 @@ export function main(argv) {
|
|
|
192
195
|
}
|
|
193
196
|
case 'tree': {
|
|
194
197
|
requireTitle(rest, 'tree');
|
|
195
|
-
|
|
198
|
+
// Mirror `graph`: a second format flag is a mistake, not a hint to
|
|
199
|
+
// pick one for the caller.
|
|
200
|
+
const formats = ['mermaid', 'text', 'html'].filter((format) => values[format]);
|
|
201
|
+
if (formats.length > 1) {
|
|
202
|
+
throw new Error(`--${formats.join(' and --')} are mutually exclusive; pick one output format`);
|
|
203
|
+
}
|
|
204
|
+
console.log(treeCommand(rest[0], process.cwd(), formats[0] ?? 'text'));
|
|
196
205
|
return;
|
|
197
206
|
}
|
|
198
207
|
case 'completion': {
|
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;AAEvC,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AACxD,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,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,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,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAEzD,MAAM,IAAI,GAAG,UAAU,OAAO
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -39,8 +39,8 @@ const COMMAND_OPTIONS = {
|
|
|
39
39
|
validate: ['--all', '--help'],
|
|
40
40
|
update: ['--tools', '--workflows', '--help'],
|
|
41
41
|
config: ['--help'],
|
|
42
|
-
graph: ['--mermaid', '--dot', '--text', '--formal-only', '--tag', '--help'],
|
|
43
|
-
tree: ['--mermaid', '--text', '--help'],
|
|
42
|
+
graph: ['--mermaid', '--dot', '--text', '--html', '--formal-only', '--tag', '--help'],
|
|
43
|
+
tree: ['--mermaid', '--text', '--html', '--help'],
|
|
44
44
|
completion: ['--help'],
|
|
45
45
|
version: ['--help'],
|
|
46
46
|
help: ['--help'],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"completion.js","sourceRoot":"","sources":["../../src/commands/completion.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAEnD,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,OAAO;IACP,MAAM;IACN,YAAY;IACZ,SAAS;IACT,MAAM;CACP,CAAC;AAEF;;;;;GAKG;AACH,MAAM,eAAe,GAA6B;IAChD,IAAI,EAAE,CAAC,SAAS,EAAE,aAAa,EAAE,QAAQ,CAAC;IAC1C,OAAO,EAAE,CAAC,QAAQ,CAAC;IACnB,MAAM,EAAE,CAAC,aAAa,EAAE,cAAc,EAAE,QAAQ,CAAC;IACjD,MAAM,EAAE,CAAC,aAAa,EAAE,cAAc,EAAE,QAAQ,CAAC;IACjD,MAAM,EAAE,CAAC,UAAU,EAAE,QAAQ,CAAC;IAC9B,SAAS,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC;IAC7B,IAAI,EAAE,CAAC,QAAQ,CAAC;IAChB,IAAI,EAAE,CAAC,QAAQ,CAAC;IAChB,MAAM,EAAE,CAAC,QAAQ,CAAC;IAClB,YAAY,EAAE,CAAC,QAAQ,CAAC;IACxB,QAAQ,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC;IAC7B,MAAM,EAAE,CAAC,SAAS,EAAE,aAAa,EAAE,QAAQ,CAAC;IAC5C,MAAM,EAAE,CAAC,QAAQ,CAAC;IAClB,KAAK,EAAE,CAAC,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,OAAO,EAAE,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"completion.js","sourceRoot":"","sources":["../../src/commands/completion.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/graph.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graph.d.ts","sourceRoot":"","sources":["../../src/commands/graph.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"graph.d.ts","sourceRoot":"","sources":["../../src/commands/graph.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,gBAAgB;IAC/B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,gBAAgB,GAAG,MAAM,CAgBzE"}
|
package/dist/commands/graph.js
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { requireRoot } from '../core/config.js';
|
|
2
2
|
import { listRecords } from '../core/repository.js';
|
|
3
3
|
import { buildDecisionGraph, dotGraph, mermaidGraph, textTree } from '../core/graph.js';
|
|
4
|
+
import { renderDecisionMapHtml } from '../core/graph-html.js';
|
|
4
5
|
export function graphCommand(cwd, flags) {
|
|
5
|
-
const formats = ['mermaid', 'dot', 'text'].filter((format) => flags[format]);
|
|
6
|
+
const formats = ['mermaid', 'dot', 'text', 'html'].filter((format) => flags[format]);
|
|
6
7
|
if (formats.length > 1) {
|
|
7
8
|
throw new Error(`--${formats.join(' and --')} are mutually exclusive; pick one output format`);
|
|
8
9
|
}
|
|
@@ -15,6 +16,8 @@ export function graphCommand(cwd, flags) {
|
|
|
15
16
|
return dotGraph(graph);
|
|
16
17
|
if (formats[0] === 'text')
|
|
17
18
|
return textTree(graph);
|
|
19
|
+
if (formats[0] === 'html')
|
|
20
|
+
return renderDecisionMapHtml(graph);
|
|
18
21
|
return mermaidGraph(graph);
|
|
19
22
|
}
|
|
20
23
|
//# sourceMappingURL=graph.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graph.js","sourceRoot":"","sources":["../../src/commands/graph.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"graph.js","sourceRoot":"","sources":["../../src/commands/graph.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACxF,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAW9D,MAAM,UAAU,YAAY,CAAC,GAAW,EAAE,KAAuB;IAC/D,MAAM,OAAO,GAAI,CAAC,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAW,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IAChG,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CACb,KAAK,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,iDAAiD,CAC9E,CAAC;IACJ,CAAC;IACD,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;IAC9B,MAAM,KAAK,GAAG,kBAAkB,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE;QAClD,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,GAAG,EAAE,KAAK,CAAC,GAAG;KACf,CAAC,CAAC;IACH,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,KAAK;QAAE,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC;IACjD,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,MAAM;QAAE,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC;IAClD,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,MAAM;QAAE,OAAO,qBAAqB,CAAC,KAAK,CAAC,CAAC;IAC/D,OAAO,YAAY,CAAC,KAAK,CAAC,CAAC;AAC7B,CAAC"}
|
package/dist/commands/tree.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
/** Render a record's optional `## Deliberation` design tree. */
|
|
2
|
-
export declare function treeCommand(query: string, cwd: string, format: 'mermaid' | 'text'): string;
|
|
2
|
+
export declare function treeCommand(query: string, cwd: string, format: 'html' | 'mermaid' | 'text'): string;
|
|
3
3
|
//# sourceMappingURL=tree.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tree.d.ts","sourceRoot":"","sources":["../../src/commands/tree.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"tree.d.ts","sourceRoot":"","sources":["../../src/commands/tree.ts"],"names":[],"mappings":"AAUA,gEAAgE;AAChE,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,MAAM,CAWnG"}
|
package/dist/commands/tree.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { section } from '../core/adr.js';
|
|
2
2
|
import { requireRoot } from '../core/config.js';
|
|
3
|
-
import { parseDeliberation, renderDeliberationMermaid, renderDeliberationText, } from '../core/deliberation.js';
|
|
3
|
+
import { parseDeliberation, renderDeliberationHtml, renderDeliberationMermaid, renderDeliberationText, } from '../core/deliberation.js';
|
|
4
4
|
import { resolveRecord } from '../core/repository.js';
|
|
5
5
|
/** Render a record's optional `## Deliberation` design tree. */
|
|
6
6
|
export function treeCommand(query, cwd, format) {
|
|
@@ -10,6 +10,9 @@ export function treeCommand(query, cwd, format) {
|
|
|
10
10
|
if (nodes.length === 0) {
|
|
11
11
|
throw new Error(`"${record.title}" has no "## Deliberation" tree to render`);
|
|
12
12
|
}
|
|
13
|
+
if (format === 'html') {
|
|
14
|
+
return renderDeliberationHtml(nodes, record.title);
|
|
15
|
+
}
|
|
13
16
|
return format === 'mermaid' ? renderDeliberationMermaid(nodes) : renderDeliberationText(nodes);
|
|
14
17
|
}
|
|
15
18
|
//# sourceMappingURL=tree.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tree.js","sourceRoot":"","sources":["../../src/commands/tree.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EACL,iBAAiB,EACjB,yBAAyB,EACzB,sBAAsB,GACvB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEtD,gEAAgE;AAChE,MAAM,UAAU,WAAW,CAAC,KAAa,EAAE,GAAW,EAAE,
|
|
1
|
+
{"version":3,"file":"tree.js","sourceRoot":"","sources":["../../src/commands/tree.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EACL,iBAAiB,EACjB,sBAAsB,EACtB,yBAAyB,EACzB,sBAAsB,GACvB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEtD,gEAAgE;AAChE,MAAM,UAAU,WAAW,CAAC,KAAa,EAAE,GAAW,EAAE,MAAmC;IACzF,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;IAC9B,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC1C,MAAM,KAAK,GAAG,iBAAiB,CAAC,OAAO,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC;IACjE,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,IAAI,MAAM,CAAC,KAAK,2CAA2C,CAAC,CAAC;IAC/E,CAAC;IACD,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QACtB,OAAO,sBAAsB,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;IACrD,CAAC;IACD,OAAO,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,yBAAyB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC;AACjG,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/** Shared pan/zoom controller and canvased markup for the offline HTML views. */
|
|
2
|
+
export declare const CANVAS_SCRIPT: string;
|
|
3
|
+
export declare const CANVAS_HINT = "Drag background or scroll to pan \u00B7 Pinch or Ctrl/\u2318 + scroll to zoom at the pointer \u00B7 Arrow keys move \u00B7 + / \u2212 zoom \u00B7 0 fits";
|
|
4
|
+
export declare function canvasControlsHTML(fitLabel: string): string;
|
|
5
|
+
//# sourceMappingURL=canvas-view.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canvas-view.d.ts","sourceRoot":"","sources":["../../src/core/canvas-view.ts"],"names":[],"mappings":"AAAA,iFAAiF;AACjF,eAAO,MAAM,aAAa,QA4GzB,CAAC;AACF,eAAO,MAAM,WAAW,6JAA+H,CAAC;AACxJ,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAQ3D"}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
/** Shared pan/zoom controller and canvased markup for the offline HTML views. */
|
|
2
|
+
export const CANVAS_SCRIPT = String.raw `
|
|
3
|
+
|
|
4
|
+
(() => {
|
|
5
|
+
const viewport = document.getElementById('viewport');
|
|
6
|
+
const world = document.getElementById('world');
|
|
7
|
+
if (!viewport || !world) return;
|
|
8
|
+
document.body.classList.add('interactive');
|
|
9
|
+
let scale = 1, tx = 0, ty = 0, frame = 0;
|
|
10
|
+
|
|
11
|
+
function paint() {
|
|
12
|
+
world.style.transform = 'translate(' + tx + 'px,' + ty + 'px) scale(' + scale + ')';
|
|
13
|
+
const zoom = document.getElementById('zoom');
|
|
14
|
+
if (zoom) zoom.value = Math.round(scale * 100) + '%';
|
|
15
|
+
}
|
|
16
|
+
function fit() {
|
|
17
|
+
const width = world.offsetWidth, height = world.offsetHeight;
|
|
18
|
+
if (!width || !height) return;
|
|
19
|
+
scale = Math.min(1, (viewport.clientWidth - 48) / width, (viewport.clientHeight - 88) / height);
|
|
20
|
+
tx = (viewport.clientWidth - width * scale) / 2;
|
|
21
|
+
ty = Math.max(16, (viewport.clientHeight - height * scale - 45) / 2);
|
|
22
|
+
paint();
|
|
23
|
+
}
|
|
24
|
+
function zoomAt(factor, clientX, clientY) {
|
|
25
|
+
const next = Math.max(Math.min(scale, .05), Math.min(2, scale * factor));
|
|
26
|
+
const rect = viewport.getBoundingClientRect();
|
|
27
|
+
const x = clientX === undefined ? viewport.clientWidth / 2 : clientX - rect.left;
|
|
28
|
+
const y = clientY === undefined ? viewport.clientHeight / 2 : clientY - rect.top;
|
|
29
|
+
tx = x - (x - tx) * next / scale;
|
|
30
|
+
ty = y - (y - ty) * next / scale;
|
|
31
|
+
scale = next;
|
|
32
|
+
paint();
|
|
33
|
+
}
|
|
34
|
+
function zoom(factor) { zoomAt(factor); }
|
|
35
|
+
function addPan(dx, dy) { tx += dx; ty += dy; paint(); }
|
|
36
|
+
function relayout() { if (typeof window.__adrCanvasLayout === 'function') window.__adrCanvasLayout(); }
|
|
37
|
+
function schedule() {
|
|
38
|
+
if (frame) return;
|
|
39
|
+
frame = requestAnimationFrame(() => { frame = 0; relayout(); });
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
const plus = document.getElementById('plus');
|
|
43
|
+
const minus = document.getElementById('minus');
|
|
44
|
+
const fitButton = document.getElementById('fit');
|
|
45
|
+
const reset = document.getElementById('reset');
|
|
46
|
+
if (plus) plus.addEventListener('click', () => zoom(1.2));
|
|
47
|
+
if (minus) minus.addEventListener('click', () => zoom(1 / 1.2));
|
|
48
|
+
if (fitButton) fitButton.addEventListener('click', fit);
|
|
49
|
+
if (reset) reset.addEventListener('click', () => zoom(1 / scale));
|
|
50
|
+
|
|
51
|
+
let drag = null;
|
|
52
|
+
viewport.addEventListener('pointerdown', event => {
|
|
53
|
+
if (event.button !== 0 || event.target.closest('.card, .node, .controls')) return;
|
|
54
|
+
drag = { x: event.clientX, y: event.clientY, id: event.pointerId };
|
|
55
|
+
viewport.setPointerCapture(event.pointerId);
|
|
56
|
+
viewport.classList.add('dragging');
|
|
57
|
+
});
|
|
58
|
+
viewport.addEventListener('pointermove', event => {
|
|
59
|
+
if (!drag || drag.id !== event.pointerId) return;
|
|
60
|
+
tx += event.clientX - drag.x;
|
|
61
|
+
ty += event.clientY - drag.y;
|
|
62
|
+
drag.x = event.clientX;
|
|
63
|
+
drag.y = event.clientY;
|
|
64
|
+
paint();
|
|
65
|
+
});
|
|
66
|
+
for (const name of ['pointerup', 'pointercancel', 'lostpointercapture']) {
|
|
67
|
+
viewport.addEventListener(name, () => { drag = null; viewport.classList.remove('dragging'); });
|
|
68
|
+
}
|
|
69
|
+
// A trackpad pinch arrives as a ctrlKey wheel event; macOS also reports
|
|
70
|
+
// Command as metaKey. Either one zooms toward the pointer so the point under
|
|
71
|
+
// the cursor stays put (ADR 11), matching the on-screen hint. A plain wheel
|
|
72
|
+
// pans.
|
|
73
|
+
viewport.addEventListener('wheel', event => {
|
|
74
|
+
event.preventDefault();
|
|
75
|
+
if (event.ctrlKey || event.metaKey) {
|
|
76
|
+
zoomAt(Math.exp(-event.deltaY / 100), event.clientX, event.clientY);
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
tx -= event.deltaX;
|
|
80
|
+
ty -= event.deltaY;
|
|
81
|
+
paint();
|
|
82
|
+
}, { passive: false });
|
|
83
|
+
viewport.addEventListener('keydown', event => {
|
|
84
|
+
if (event.target !== viewport) return;
|
|
85
|
+
const actions = {
|
|
86
|
+
ArrowLeft: () => { tx += 50; }, ArrowRight: () => { tx -= 50; },
|
|
87
|
+
ArrowUp: () => { ty += 50; }, ArrowDown: () => { ty -= 50; },
|
|
88
|
+
'+': () => zoom(1.2), '=': () => zoom(1.2), '-': () => zoom(1 / 1.2), '0': fit
|
|
89
|
+
};
|
|
90
|
+
if (actions[event.key]) { event.preventDefault(); actions[event.key](); paint(); }
|
|
91
|
+
});
|
|
92
|
+
viewport.addEventListener('focusin', event => {
|
|
93
|
+
if (!event.target.closest('.card')) return;
|
|
94
|
+
const target = event.target.getBoundingClientRect();
|
|
95
|
+
const view = viewport.getBoundingClientRect();
|
|
96
|
+
if (target.left < view.left || target.right > view.right || target.top < view.top || target.bottom > view.bottom - 70) {
|
|
97
|
+
tx += view.left + view.width / 2 - (target.left + target.width / 2);
|
|
98
|
+
ty += view.top + view.height / 2 - (target.top + target.height / 2);
|
|
99
|
+
paint();
|
|
100
|
+
}
|
|
101
|
+
});
|
|
102
|
+
window.addEventListener('resize', () => { relayout(); fit(); });
|
|
103
|
+
|
|
104
|
+
window.__adrCanvas = {
|
|
105
|
+
viewport, world,
|
|
106
|
+
get scale() { return scale; },
|
|
107
|
+
paint, fit, zoom, zoomAt, addPan, schedule, relayout
|
|
108
|
+
};
|
|
109
|
+
})();
|
|
110
|
+
`;
|
|
111
|
+
export const CANVAS_HINT = 'Drag background or scroll to pan · Pinch or Ctrl/⌘ + scroll to zoom at the pointer · Arrow keys move · + / − zoom · 0 fits';
|
|
112
|
+
export function canvasControlsHTML(fitLabel) {
|
|
113
|
+
return '<div class="controls js-control">'
|
|
114
|
+
+ '<button id="minus" aria-label="Zoom out">−</button>'
|
|
115
|
+
+ '<output id="zoom" aria-label="Zoom level">100%</output>'
|
|
116
|
+
+ '<button id="plus" aria-label="Zoom in">+</button>'
|
|
117
|
+
+ '<button id="fit">' + fitLabel + '</button>'
|
|
118
|
+
+ '<button id="reset">1:1</button>'
|
|
119
|
+
+ '</div>';
|
|
120
|
+
}
|
|
121
|
+
//# sourceMappingURL=canvas-view.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canvas-view.js","sourceRoot":"","sources":["../../src/core/canvas-view.ts"],"names":[],"mappings":"AAAA,iFAAiF;AACjF,MAAM,CAAC,MAAM,aAAa,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4GtC,CAAC;AACF,MAAM,CAAC,MAAM,WAAW,GAAG,4HAA4H,CAAC;AACxJ,MAAM,UAAU,kBAAkB,CAAC,QAAgB;IACjD,OAAO,mCAAmC;UACtC,qDAAqD;UACrD,yDAAyD;UACzD,mDAAmD;UACnD,mBAAmB,GAAG,QAAQ,GAAG,WAAW;UAC5C,iCAAiC;UACjC,QAAQ,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { DeliberationNode } from './deliberation.js';
|
|
2
|
+
/** Render semantic cards on the server; the embedded script only lays them out. */
|
|
3
|
+
export declare function renderCardTree(nodes: DeliberationNode[], title: string): string;
|
|
4
|
+
//# sourceMappingURL=deliberation-html.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deliberation-html.d.ts","sourceRoot":"","sources":["../../src/core/deliberation-html.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAgC1D,mFAAmF;AACnF,wBAAgB,cAAc,CAAC,KAAK,EAAE,gBAAgB,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CA6D/E"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { CANVAS_HINT, CANVAS_SCRIPT, canvasControlsHTML } from './canvas-view.js';
|
|
2
|
+
import { TREE_STYLE, TREE_SCRIPT } from './deliberation-view.js';
|
|
3
|
+
import { escapeHtml } from './view-text.js';
|
|
4
|
+
function kindOf(node) {
|
|
5
|
+
return node.type ?? (node.children.length > 0 ? 'question' : 'option');
|
|
6
|
+
}
|
|
7
|
+
/** Only option children can be answers; a settled follow-up is not an answer. */
|
|
8
|
+
function overridden(card) {
|
|
9
|
+
const chosen = card.options.filter(({ node }) => node.status === 'settled');
|
|
10
|
+
return card.kind === 'question' && chosen.length > 0
|
|
11
|
+
&& card.options.some(({ node }) => node.recommended)
|
|
12
|
+
&& !chosen.some(({ node }) => node.recommended);
|
|
13
|
+
}
|
|
14
|
+
function reason(node) {
|
|
15
|
+
return node.reason === undefined ? '' : `<p class="reason">${escapeHtml(node.reason)}</p>`;
|
|
16
|
+
}
|
|
17
|
+
/** Render semantic cards on the server; the embedded script only lays them out. */
|
|
18
|
+
export function renderCardTree(nodes, title) {
|
|
19
|
+
const cards = [];
|
|
20
|
+
let sequence = 0;
|
|
21
|
+
function collect(node, parent = '', anchor = '', depth = 0) {
|
|
22
|
+
const kind = depth === 0 && node.type === undefined ? 'root' : kindOf(node);
|
|
23
|
+
const card = { id: `n${++sequence}`, node, kind, parent, anchor, depth, options: [], children: [] };
|
|
24
|
+
cards.push(card);
|
|
25
|
+
for (const child of node.children) {
|
|
26
|
+
if (kind !== 'option' && kindOf(child) === 'option') {
|
|
27
|
+
const id = `n${++sequence}`;
|
|
28
|
+
card.options.push({ id, node: child });
|
|
29
|
+
for (const followup of child.children) {
|
|
30
|
+
card.children.push(collect(followup, card.id, id, depth + 1).id);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
card.children.push(collect(child, card.id, '', depth + 1).id);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
return card;
|
|
38
|
+
}
|
|
39
|
+
nodes.forEach((node) => collect(node));
|
|
40
|
+
let questionNumber = 0;
|
|
41
|
+
const markup = cards.map((card) => {
|
|
42
|
+
const { node, id, kind } = card;
|
|
43
|
+
const override = overridden(card);
|
|
44
|
+
const chosen = card.options.filter((option) => option.node.status === 'settled');
|
|
45
|
+
const other = card.options.filter((option) => option.node.status !== 'settled');
|
|
46
|
+
const status = node.status ?? 'unrecorded';
|
|
47
|
+
const label = kind === 'question' ? `QUESTION ${String(++questionNumber).padStart(2, '0')}` : kind.toUpperCase();
|
|
48
|
+
const optionMarkup = (option) => {
|
|
49
|
+
const selected = option.node.status === 'settled';
|
|
50
|
+
const state = option.node.status ?? 'unrecorded';
|
|
51
|
+
return `<div id="${option.id}" class="${selected ? 'answer' : 'alt'}" data-state="${state}">
|
|
52
|
+
<span class="badge">${selected ? '✓ Selected' : escapeHtml(state)}${option.node.recommended ? ' · Agent recommended' : ''}</span>
|
|
53
|
+
<p>${escapeHtml(option.node.text)}</p>${reason(option.node)}</div>`;
|
|
54
|
+
};
|
|
55
|
+
return `<article id="${id}" class="card ${kind}" data-parent="${card.parent}" data-anchor="${card.anchor}" data-state="${status}" style="--depth:${card.depth}" aria-labelledby="${id}-title">
|
|
56
|
+
<div class="cardhead"><div class="label"><span>${label}</span><span class="state ${status}">${status}</span></div>
|
|
57
|
+
<h2 id="${id}-title">${escapeHtml(node.text)}</h2>${reason(node)}
|
|
58
|
+
${node.recommended ? '<p class="badge">Agent recommended</p>' : ''}
|
|
59
|
+
${override ? '<p class="override">Human override · recommendation not taken</p>' : ''}</div>
|
|
60
|
+
${chosen.map(optionMarkup).join('\n')}
|
|
61
|
+
${other.length === 0 ? '' : `<details class="alts"><summary>${other.length} other option${other.length === 1 ? '' : 's'}${override ? ' · includes recommendation' : ''}</summary>${other.map(optionMarkup).join('\n')}</details>`}
|
|
62
|
+
${card.children.length === 0 ? '' : `<button class="branch" aria-expanded="true" aria-controls="${card.children.join(' ')}" aria-label="Toggle follow-ups: ${escapeHtml(node.text)}">−</button>`}
|
|
63
|
+
</article>`;
|
|
64
|
+
}).join('\n');
|
|
65
|
+
return `<!doctype html>
|
|
66
|
+
<html lang="en">
|
|
67
|
+
<head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1">
|
|
68
|
+
<title>${escapeHtml(title)} — deliberation tree</title><style>${TREE_STYLE}</style></head>
|
|
69
|
+
<body>
|
|
70
|
+
<header><div class="brand"><span class="logo" aria-hidden="true">↳</span> ADR Kit <small>DECISION EXPLORER</small></div><button id="all" class="js-control">Expand all options</button></header>
|
|
71
|
+
<section class="intro"><div><div class="eyebrow">DELIBERATION / DESIGN TREE</div><h1>${escapeHtml(title)}</h1><p>Follow the choices. See what each answer unlocked.</p></div>
|
|
72
|
+
<div class="stats"><div><strong>${questionNumber}</strong><span>questions</span></div><div><strong>${cards.reduce((sum, card) => sum + card.options.length, 0)}</strong><span>options</span></div><div><strong>${cards.filter(overridden).length}</strong><span>overrides</span></div></div></section>
|
|
73
|
+
<main id="viewport" tabindex="0" aria-label="Decision tree" aria-describedby="instructions"><div id="world"><svg id="edges" aria-hidden="true"></svg><div id="cards">${markup}</div></div>
|
|
74
|
+
<div id="instructions" class="hint">${CANVAS_HINT}</div>
|
|
75
|
+
${canvasControlsHTML('Fit tree')}</main>
|
|
76
|
+
<footer><span>ADR Kit / Deliberation</span><div class="legend"><span>✓ Selected answer</span><span>— Unlocked question</span><span class="override-key">● Human override</span></div></footer>
|
|
77
|
+
<noscript><p class="no-script">JavaScript is disabled. All cards are shown in outline order; expand other options to read their reasons.</p></noscript>
|
|
78
|
+
<script>${CANVAS_SCRIPT}${TREE_SCRIPT}</script>
|
|
79
|
+
</body></html>\n`;
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=deliberation-html.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deliberation-html.js","sourceRoot":"","sources":["../../src/core/deliberation-html.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deliberation-view.d.ts","sourceRoot":"","sources":["../../src/core/deliberation-view.ts"],"names":[],"mappings":"AAAA,mFAAmF;AACnF,eAAO,MAAM,UAAU,QAmXtB,CAAC;AAIF,eAAO,MAAM,WAAW,QAmIvB,CAAC"}
|