domain-knowledge-kit 0.2.11 → 0.2.13
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/dist/cli.js +41 -10
- package/dist/cli.js.map +1 -1
- package/dist/features/agent/commands/init.d.ts.map +1 -1
- package/dist/features/agent/commands/init.js +78 -21
- package/dist/features/agent/commands/init.js.map +1 -1
- package/dist/features/agent/commands/prime.d.ts.map +1 -1
- package/dist/features/agent/commands/prime.js +22 -13
- package/dist/features/agent/commands/prime.js.map +1 -1
- package/dist/features/audit/commands/stats.js +1 -1
- package/dist/features/audit/commands/stats.js.map +1 -1
- package/dist/features/pipeline/renderer.d.ts.map +1 -1
- package/dist/features/pipeline/renderer.js +4 -0
- package/dist/features/pipeline/renderer.js.map +1 -1
- package/dist/features/pipeline/validator.d.ts.map +1 -1
- package/dist/features/pipeline/validator.js +15 -14
- package/dist/features/pipeline/validator.js.map +1 -1
- package/dist/features/query/commands/graph.d.ts +10 -0
- package/dist/features/query/commands/graph.d.ts.map +1 -1
- package/dist/features/query/commands/graph.js +121 -3
- package/dist/features/query/commands/graph.js.map +1 -1
- package/dist/features/query/commands/list.d.ts.map +1 -1
- package/dist/features/query/commands/list.js +3 -1
- package/dist/features/query/commands/list.js.map +1 -1
- package/dist/features/query/commands/locate.d.ts +3 -0
- package/dist/features/query/commands/locate.d.ts.map +1 -0
- package/dist/features/query/commands/locate.js +96 -0
- package/dist/features/query/commands/locate.js.map +1 -0
- package/dist/features/query/commands/related.js +1 -1
- package/dist/features/query/commands/related.js.map +1 -1
- package/dist/features/query/commands/search.js +1 -1
- package/dist/features/query/commands/search.js.map +1 -1
- package/dist/features/query/commands/show.js +1 -1
- package/dist/features/query/commands/show.js.map +1 -1
- package/dist/features/query/commands/story.d.ts +12 -0
- package/dist/features/query/commands/story.d.ts.map +1 -0
- package/dist/features/query/commands/story.js +337 -0
- package/dist/features/query/commands/story.js.map +1 -0
- package/dist/features/query/commands/summary.js +1 -1
- package/dist/features/query/commands/summary.js.map +1 -1
- package/dist/features/refactor/commands/move.d.ts.map +1 -1
- package/dist/features/refactor/commands/move.js +1 -1
- package/dist/features/refactor/commands/move.js.map +1 -1
- package/dist/features/refactor/commands/rename.d.ts.map +1 -1
- package/dist/features/refactor/commands/rename.js +1 -1
- package/dist/features/refactor/commands/rename.js.map +1 -1
- package/dist/features/refactor/commands/rm.d.ts.map +1 -1
- package/dist/features/refactor/commands/rm.js +1 -1
- package/dist/features/refactor/commands/rm.js.map +1 -1
- package/dist/features/scaffold/commands/add-item.d.ts +2 -13
- package/dist/features/scaffold/commands/add-item.d.ts.map +1 -1
- package/dist/features/scaffold/commands/add-item.js +34 -110
- package/dist/features/scaffold/commands/add-item.js.map +1 -1
- package/dist/features/scaffold/commands/new-adr.d.ts.map +1 -1
- package/dist/features/scaffold/commands/new-adr.js +1 -20
- package/dist/features/scaffold/commands/new-adr.js.map +1 -1
- package/dist/shared/paths.d.ts +7 -0
- package/dist/shared/paths.d.ts.map +1 -1
- package/dist/shared/paths.js +9 -0
- package/dist/shared/paths.js.map +1 -1
- package/dist/shared/similarity.d.ts +3 -0
- package/dist/shared/similarity.d.ts.map +1 -0
- package/dist/shared/similarity.js +52 -0
- package/dist/shared/similarity.js.map +1 -0
- package/package.json +1 -1
- package/tools/dkk/templates/index.md.hbs +4 -0
- package/dist/features/adr/commands/adr-related.d.ts +0 -14
- package/dist/features/adr/commands/adr-related.d.ts.map +0 -1
- package/dist/features/adr/commands/adr-related.js +0 -147
- package/dist/features/adr/commands/adr-related.js.map +0 -1
- package/dist/features/adr/commands/adr-show.d.ts +0 -10
- package/dist/features/adr/commands/adr-show.d.ts.map +0 -1
- package/dist/features/adr/commands/adr-show.js +0 -31
- package/dist/features/adr/commands/adr-show.js.map +0 -1
- package/dist/features/scaffold/wiring.d.ts +0 -29
- package/dist/features/scaffold/wiring.d.ts.map +0 -1
- package/dist/features/scaffold/wiring.js +0 -180
- package/dist/features/scaffold/wiring.js.map +0 -1
package/dist/cli.js
CHANGED
|
@@ -6,10 +6,10 @@ import { registerSummary } from "./features/query/commands/summary.js";
|
|
|
6
6
|
import { registerSearch } from "./features/query/commands/search.js";
|
|
7
7
|
import { registerRelated } from "./features/query/commands/related.js";
|
|
8
8
|
import { registerGraph } from "./features/query/commands/graph.js";
|
|
9
|
+
import { registerLocate } from "./features/query/commands/locate.js";
|
|
10
|
+
import { registerStory } from "./features/query/commands/story.js";
|
|
9
11
|
import { registerValidate } from "./features/pipeline/commands/validate.js";
|
|
10
12
|
import { registerRender } from "./features/pipeline/commands/render.js";
|
|
11
|
-
import { registerAdrShow } from "./features/adr/commands/adr-show.js";
|
|
12
|
-
import { registerAdrRelated } from "./features/adr/commands/adr-related.js";
|
|
13
13
|
import { registerInit } from "./features/agent/commands/init.js";
|
|
14
14
|
import { registerPrime } from "./features/agent/commands/prime.js";
|
|
15
15
|
import { registerNewDomain } from "./features/scaffold/commands/new-domain.js";
|
|
@@ -27,8 +27,17 @@ const DEBUG = Boolean(process.env.DEBUG);
|
|
|
27
27
|
const program = new Command();
|
|
28
28
|
program
|
|
29
29
|
.name("dkk")
|
|
30
|
-
.description("Domain Knowledge
|
|
31
|
-
.version("0.1.0")
|
|
30
|
+
.description("Domain Knowledge Kit CLI")
|
|
31
|
+
.version("0.1.0")
|
|
32
|
+
.configureHelp({ helpWidth: 100 })
|
|
33
|
+
.addHelpText("after", `
|
|
34
|
+
Domain Types:
|
|
35
|
+
aggregate, command, event, policy, read_model, actor, glossary, rule, context, adr, flow
|
|
36
|
+
|
|
37
|
+
ID Formats:
|
|
38
|
+
PascalCase (domain items: OrderPlaced, PlaceOrder, etc.)
|
|
39
|
+
kebab-case (contexts, adrs: sales, adr-0001, etc.)
|
|
40
|
+
`);
|
|
32
41
|
// Top-level commands
|
|
33
42
|
registerList(program);
|
|
34
43
|
registerShow(program);
|
|
@@ -36,6 +45,8 @@ registerSummary(program);
|
|
|
36
45
|
registerSearch(program);
|
|
37
46
|
registerRelated(program);
|
|
38
47
|
registerGraph(program);
|
|
48
|
+
registerLocate(program);
|
|
49
|
+
registerStory(program);
|
|
39
50
|
registerValidate(program);
|
|
40
51
|
registerRender(program);
|
|
41
52
|
registerInit(program);
|
|
@@ -44,12 +55,6 @@ registerRename(program);
|
|
|
44
55
|
registerRm(program);
|
|
45
56
|
registerMove(program);
|
|
46
57
|
registerStats(program);
|
|
47
|
-
// ADR sub-command group
|
|
48
|
-
const adrCmd = program
|
|
49
|
-
.command("adr")
|
|
50
|
-
.description("ADR-related commands");
|
|
51
|
-
registerAdrShow(adrCmd);
|
|
52
|
-
registerAdrRelated(adrCmd);
|
|
53
58
|
// "new" sub-command group
|
|
54
59
|
const newCmd = program
|
|
55
60
|
.command("new")
|
|
@@ -59,6 +64,32 @@ registerNewContext(newCmd);
|
|
|
59
64
|
registerNewAdr(newCmd);
|
|
60
65
|
// Top-level "add" command for individual domain items
|
|
61
66
|
registerAddItem(program);
|
|
67
|
+
// ── Agent mode injection ─────────────────────────────────────────────
|
|
68
|
+
program.option("--agent", "Enable agent mode (JSON + minify by default)");
|
|
69
|
+
// Add --no-json to commands that have --json
|
|
70
|
+
function injectAgentModeOpts(cmd) {
|
|
71
|
+
if (cmd.options.some((o) => o.long === "--json")) {
|
|
72
|
+
cmd.option("--no-json", "Disable JSON output");
|
|
73
|
+
}
|
|
74
|
+
if (cmd.options.some((o) => o.long === "--minify")) {
|
|
75
|
+
cmd.option("--no-minify", "Disable minified output");
|
|
76
|
+
}
|
|
77
|
+
cmd.commands.forEach(injectAgentModeOpts);
|
|
78
|
+
}
|
|
79
|
+
injectAgentModeOpts(program);
|
|
80
|
+
program.hook("preAction", (thisCmd, actionCmd) => {
|
|
81
|
+
const isAgent = thisCmd.opts().agent || process.env.DKK_AGENT_MODE === "1";
|
|
82
|
+
if (isAgent) {
|
|
83
|
+
if (actionCmd.options.some((o) => o.long === "--json") &&
|
|
84
|
+
actionCmd.getOptionValue("json") === undefined) {
|
|
85
|
+
actionCmd.setOptionValue("json", true);
|
|
86
|
+
}
|
|
87
|
+
if (actionCmd.options.some((o) => o.long === "--minify") &&
|
|
88
|
+
actionCmd.getOptionValue("minify") === undefined) {
|
|
89
|
+
actionCmd.setOptionValue("minify", true);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
});
|
|
62
93
|
program.parseAsync().catch((err) => {
|
|
63
94
|
console.error(`Error: ${formatCliError(err)}`);
|
|
64
95
|
if (DEBUG && err instanceof Error && err.stack) {
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AACvE,OAAO,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AACvE,OAAO,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AACnE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../../src/features/agent/commands/init.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EAAE,OAAO,IAAI,GAAG,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../../src/features/agent/commands/init.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EAAE,OAAO,IAAI,GAAG,EAAE,MAAM,WAAW,CAAC;AAmIhD,sCAAsC;AACtC,wBAAgB,YAAY,CAAC,OAAO,EAAE,GAAG,GAAG,IAAI,CAwC/C"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { readFileSync, writeFileSync, existsSync } from "node:fs";
|
|
1
|
+
import { readFileSync, writeFileSync, existsSync, mkdirSync, readdirSync, statSync } from "node:fs";
|
|
2
2
|
import { join } from "node:path";
|
|
3
|
-
import { repoRoot } from "../../../shared/paths.js";
|
|
3
|
+
import { repoRoot, packageSkillsDir } from "../../../shared/paths.js";
|
|
4
4
|
const START_MARKER = "<!-- dkk:start -->";
|
|
5
5
|
const END_MARKER = "<!-- dkk:end -->";
|
|
6
6
|
/**
|
|
@@ -15,6 +15,21 @@ This project uses a structured, YAML-based domain model managed by **dkk** (Doma
|
|
|
15
15
|
|
|
16
16
|
Run \`dkk prime\` to get full agent context including domain structure, CLI commands, and workflows.
|
|
17
17
|
|
|
18
|
+
### ⚠️ Events vs Architecture
|
|
19
|
+
|
|
20
|
+
Events and Commands map business domain concepts. They **DO NOT** imply Event-Driven Architecture (EDA) or CQRS decisions.
|
|
21
|
+
|
|
22
|
+
### 🏗️ Structural vs. Content Edits
|
|
23
|
+
|
|
24
|
+
**Domain YAML is the single source of truth.**
|
|
25
|
+
|
|
26
|
+
- **For structural changes (creates, renames, deletes):** ALWAYS use the DKK CLI commands (e.g., \`dkk add\`, \`dkk rename\`, \`dkk rm\`).
|
|
27
|
+
- **For content updates (descriptions, properties, references):** You MUST edit the YAML files directly, but you must respect the JSON Schemas (\`tools/dkk/schema/\`) and run \`dkk render\` immediately afterward to ensure cross-reference integrity and schema validation.
|
|
28
|
+
|
|
29
|
+
### 🏛️ Prioritize ADRs
|
|
30
|
+
|
|
31
|
+
**Always consult Architecture Decision Records.** Before proposing architectural refactors, making tech choices, or modifying domain logic, use \`dkk search "your topic"\` or \`dkk show <id>\` to understand existing constraints and decisions.
|
|
32
|
+
|
|
18
33
|
### Quick Reference
|
|
19
34
|
|
|
20
35
|
\`\`\`bash
|
|
@@ -31,8 +46,6 @@ dkk validate # Schema + cross-reference validation
|
|
|
31
46
|
dkk render # Validate, render docs, rebuild search index
|
|
32
47
|
|
|
33
48
|
# ADR
|
|
34
|
-
dkk adr show <id> # Display ADR frontmatter
|
|
35
|
-
dkk adr related <id> # Bidirectional ADR ↔ domain links
|
|
36
49
|
|
|
37
50
|
# Scaffold
|
|
38
51
|
dkk new domain # Scaffold .dkk/domain/ structure
|
|
@@ -67,11 +80,51 @@ dkk render # Validates → renders docs → rebuilds search index
|
|
|
67
80
|
function delimitedSection() {
|
|
68
81
|
return `${START_MARKER}\n${dkkSection()}${END_MARKER}\n`;
|
|
69
82
|
}
|
|
83
|
+
/**
|
|
84
|
+
* Copy all skill files from the DKK package's `.github/skills/` directory
|
|
85
|
+
* into the target project's `.github/skills/` directory.
|
|
86
|
+
*
|
|
87
|
+
* Each skill lives in a subdirectory (e.g. `story-analyst/skill.md`).
|
|
88
|
+
* Files are skipped if they already exist, unless `force` is true.
|
|
89
|
+
*/
|
|
90
|
+
function installSkills(root, force) {
|
|
91
|
+
const srcDir = packageSkillsDir();
|
|
92
|
+
const destDir = join(root, ".github", "skills");
|
|
93
|
+
if (!existsSync(srcDir)) {
|
|
94
|
+
console.warn(`Warning: DKK package skills directory not found at ${srcDir}`);
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
// Walk one level of subdirectories (skill-name/skill.md)
|
|
98
|
+
for (const skillName of readdirSync(srcDir)) {
|
|
99
|
+
const skillSrcDir = join(srcDir, skillName);
|
|
100
|
+
if (!statSync(skillSrcDir).isDirectory())
|
|
101
|
+
continue;
|
|
102
|
+
const skillDestDir = join(destDir, skillName);
|
|
103
|
+
mkdirSync(skillDestDir, { recursive: true });
|
|
104
|
+
for (const fileName of readdirSync(skillSrcDir)) {
|
|
105
|
+
const srcFile = join(skillSrcDir, fileName);
|
|
106
|
+
if (!statSync(srcFile).isFile())
|
|
107
|
+
continue;
|
|
108
|
+
const destFile = join(skillDestDir, fileName);
|
|
109
|
+
const relPath = `.github/skills/${skillName}/${fileName}`;
|
|
110
|
+
if (existsSync(destFile) && !force) {
|
|
111
|
+
console.log(`Skipped ${relPath} (already exists — use --force to overwrite)`);
|
|
112
|
+
continue;
|
|
113
|
+
}
|
|
114
|
+
const alreadyExisted = existsSync(destFile);
|
|
115
|
+
const contents = readFileSync(srcFile, "utf-8");
|
|
116
|
+
writeFileSync(destFile, contents, "utf-8");
|
|
117
|
+
console.log(`${alreadyExisted ? "Updated" : "Created"} ${relPath}`);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
70
121
|
/** Register the `init` subcommand. */
|
|
71
122
|
export function registerInit(program) {
|
|
72
123
|
program
|
|
73
124
|
.command("init")
|
|
74
125
|
.description("Create or update AGENTS.md with DKK onboarding section")
|
|
126
|
+
.option("--skills", "Also install DKK skill files into .github/skills/")
|
|
127
|
+
.option("--force", "Overwrite existing skill files (only applies with --skills)")
|
|
75
128
|
.option("-r, --root <path>", "Override repository root")
|
|
76
129
|
.action((opts) => {
|
|
77
130
|
const root = repoRoot(opts.root);
|
|
@@ -80,25 +133,29 @@ export function registerInit(program) {
|
|
|
80
133
|
if (!existsSync(agentsPath)) {
|
|
81
134
|
// Create new file with the DKK section
|
|
82
135
|
writeFileSync(agentsPath, `# Agent Instructions\n\n${section}`, "utf-8");
|
|
83
|
-
console.log(`Created
|
|
84
|
-
return;
|
|
85
|
-
}
|
|
86
|
-
const existing = readFileSync(agentsPath, "utf-8");
|
|
87
|
-
const startIdx = existing.indexOf(START_MARKER);
|
|
88
|
-
const endIdx = existing.indexOf(END_MARKER);
|
|
89
|
-
if (startIdx !== -1 && endIdx !== -1 && endIdx > startIdx) {
|
|
90
|
-
// Replace existing section between markers (include trailing newline if present)
|
|
91
|
-
const markerEnd = endIdx + END_MARKER.length;
|
|
92
|
-
const before = existing.slice(0, startIdx);
|
|
93
|
-
const after = existing.slice(existing[markerEnd] === "\n" ? markerEnd + 1 : markerEnd);
|
|
94
|
-
writeFileSync(agentsPath, `${before}${section}${after}`, "utf-8");
|
|
95
|
-
console.log(`Updated DKK section in ${agentsPath}`);
|
|
136
|
+
console.log(`Created AGENTS.md`);
|
|
96
137
|
}
|
|
97
138
|
else {
|
|
98
|
-
|
|
99
|
-
const
|
|
100
|
-
|
|
101
|
-
|
|
139
|
+
const existing = readFileSync(agentsPath, "utf-8");
|
|
140
|
+
const startIdx = existing.indexOf(START_MARKER);
|
|
141
|
+
const endIdx = existing.indexOf(END_MARKER);
|
|
142
|
+
if (startIdx !== -1 && endIdx !== -1 && endIdx > startIdx) {
|
|
143
|
+
// Replace existing section between markers (include trailing newline if present)
|
|
144
|
+
const markerEnd = endIdx + END_MARKER.length;
|
|
145
|
+
const before = existing.slice(0, startIdx);
|
|
146
|
+
const after = existing.slice(existing[markerEnd] === "\n" ? markerEnd + 1 : markerEnd);
|
|
147
|
+
writeFileSync(agentsPath, `${before}${section}${after}`, "utf-8");
|
|
148
|
+
console.log(`Updated AGENTS.md (DKK section refreshed)`);
|
|
149
|
+
}
|
|
150
|
+
else {
|
|
151
|
+
// Append section at the end
|
|
152
|
+
const separator = existing.endsWith("\n") ? "\n" : "\n\n";
|
|
153
|
+
writeFileSync(agentsPath, `${existing}${separator}${section}`, "utf-8");
|
|
154
|
+
console.log(`Appended DKK section to AGENTS.md`);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
if (opts.skills) {
|
|
158
|
+
installSkills(root, opts.force ?? false);
|
|
102
159
|
}
|
|
103
160
|
});
|
|
104
161
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../../../src/features/agent/commands/init.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../../../src/features/agent/commands/init.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACpG,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAEtE,MAAM,YAAY,GAAG,oBAAoB,CAAC;AAC1C,MAAM,UAAU,GAAG,kBAAkB,CAAC;AAEtC;;;GAGG;AACH,SAAS,UAAU;IACjB,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkER,CAAC,SAAS,EAAE,CAAC;AACd,CAAC;AAED,sCAAsC;AACtC,SAAS,gBAAgB;IACvB,OAAO,GAAG,YAAY,KAAK,UAAU,EAAE,GAAG,UAAU,IAAI,CAAC;AAC3D,CAAC;AAED;;;;;;GAMG;AACH,SAAS,aAAa,CAAC,IAAY,EAAE,KAAc;IACjD,MAAM,MAAM,GAAG,gBAAgB,EAAE,CAAC;IAClC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;IAEhD,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QACxB,OAAO,CAAC,IAAI,CAAC,sDAAsD,MAAM,EAAE,CAAC,CAAC;QAC7E,OAAO;IACT,CAAC;IAED,yDAAyD;IACzD,KAAK,MAAM,SAAS,IAAI,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;QAC5C,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QAC5C,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,WAAW,EAAE;YAAE,SAAS;QAEnD,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QAC9C,SAAS,CAAC,YAAY,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAE7C,KAAK,MAAM,QAAQ,IAAI,WAAW,CAAC,WAAW,CAAC,EAAE,CAAC;YAChD,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;YAC5C,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE;gBAAE,SAAS;YAE1C,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;YAC9C,MAAM,OAAO,GAAG,kBAAkB,SAAS,IAAI,QAAQ,EAAE,CAAC;YAE1D,IAAI,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;gBACnC,OAAO,CAAC,GAAG,CAAC,YAAY,OAAO,8CAA8C,CAAC,CAAC;gBAC/E,SAAS;YACX,CAAC;YAED,MAAM,cAAc,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;YAC5C,MAAM,QAAQ,GAAG,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAChD,aAAa,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;YAC3C,OAAO,CAAC,GAAG,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,KAAK,OAAO,EAAE,CAAC,CAAC;QACvE,CAAC;IACH,CAAC;AACH,CAAC;AAED,sCAAsC;AACtC,MAAM,UAAU,YAAY,CAAC,OAAY;IACvC,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,wDAAwD,CAAC;SACrE,MAAM,CAAC,UAAU,EAAE,mDAAmD,CAAC;SACvE,MAAM,CAAC,SAAS,EAAE,6DAA6D,CAAC;SAChF,MAAM,CAAC,mBAAmB,EAAE,0BAA0B,CAAC;SACvD,MAAM,CAAC,CAAC,IAA0D,EAAE,EAAE;QACrE,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QAC3C,MAAM,OAAO,GAAG,gBAAgB,EAAE,CAAC;QAEnC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC5B,uCAAuC;YACvC,aAAa,CAAC,UAAU,EAAE,2BAA2B,OAAO,EAAE,EAAE,OAAO,CAAC,CAAC;YACzE,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;QACpC,CAAC;aAAM,CAAC;YACN,MAAM,QAAQ,GAAG,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YACnD,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;YAChD,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YAE5C,IAAI,QAAQ,KAAK,CAAC,CAAC,IAAI,MAAM,KAAK,CAAC,CAAC,IAAI,MAAM,GAAG,QAAQ,EAAE,CAAC;gBAC1D,iFAAiF;gBACjF,MAAM,SAAS,GAAG,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;gBAC7C,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;gBAC3C,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;gBACvF,aAAa,CAAC,UAAU,EAAE,GAAG,MAAM,GAAG,OAAO,GAAG,KAAK,EAAE,EAAE,OAAO,CAAC,CAAC;gBAClE,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;YAC5D,CAAC;iBAAM,CAAC;gBACN,4BAA4B;gBAC5B,MAAM,SAAS,GAAG,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC;gBAC1D,aAAa,CAAC,UAAU,EAAE,GAAG,QAAQ,GAAG,SAAS,GAAG,OAAO,EAAE,EAAE,OAAO,CAAC,CAAC;gBACxE,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;YACnD,CAAC;QACH,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prime.d.ts","sourceRoot":"","sources":["../../../../src/features/agent/commands/prime.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,KAAK,EAAE,OAAO,IAAI,GAAG,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"prime.d.ts","sourceRoot":"","sources":["../../../../src/features/agent/commands/prime.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,KAAK,EAAE,OAAO,IAAI,GAAG,EAAE,MAAM,WAAW,CAAC;AAmehD,uCAAuC;AACvC,wBAAgB,aAAa,CAAC,OAAO,EAAE,GAAG,GAAG,IAAI,CAYhD"}
|
|
@@ -15,9 +15,12 @@ This project uses a **Domain Knowledge Pack**: a structured, YAML-based domain m
|
|
|
15
15
|
|
|
16
16
|
## Core Principles
|
|
17
17
|
|
|
18
|
-
1. **Domain YAML is the single source of truth.** Never generate domain knowledge from code
|
|
18
|
+
1. **Domain YAML is the single source of truth.** Never generate domain knowledge from code.
|
|
19
|
+
- **For structural changes (creates, renames, deletes):** ALWAYS use the DKK CLI commands (e.g., \`dkk add\`, \`dkk rename\`, \`dkk rm\`).
|
|
20
|
+
- **For content updates (descriptions, properties, references):** You MUST edit the YAML files directly, but you must respect the JSON Schemas (\`tools/dkk/schema/\`) and run \`dkk render\` immediately afterward to ensure cross-reference integrity and schema validation.
|
|
19
21
|
2. **ADRs live in \`.dkk/adr/\`** as Markdown files with YAML frontmatter. They link to domain items via \`domain_refs\` and domain items link back via \`adr_refs\`.
|
|
20
|
-
3. **
|
|
22
|
+
3. **Prioritize ADRs in decision-making.** Before proposing architectural refactors, making tech choices, or modifying domain logic, consult existing decisions via \`dkk search "your topic"\` or \`dkk show <id>\`.
|
|
23
|
+
4. **Every change to domain files must pass quality gates:** run \`dkk render\` before committing (validates automatically, then renders docs and rebuilds the search index). Use \`dkk validate\` for a quick dry-run check without rendering.
|
|
21
24
|
|
|
22
25
|
## Domain Model Structure
|
|
23
26
|
|
|
@@ -85,8 +88,8 @@ This project uses a **Domain Knowledge Pack**: a structured, YAML-based domain m
|
|
|
85
88
|
|
|
86
89
|
| Command | Purpose |
|
|
87
90
|
|-------------------------------|------------------------------------------------------|
|
|
88
|
-
| \`dkk
|
|
89
|
-
| \`dkk
|
|
91
|
+
| \`dkk show <id>\` | Display ADR frontmatter |
|
|
92
|
+
| \`dkk related <id>\` | Show bidirectional ADR ↔ domain links |
|
|
90
93
|
|
|
91
94
|
### Scaffold
|
|
92
95
|
|
|
@@ -137,7 +140,7 @@ When answering questions about the domain, always query the model — never gues
|
|
|
137
140
|
\`\`\`
|
|
138
141
|
5. **Check ADR links** — Find architecture decisions connected to results:
|
|
139
142
|
\`\`\`bash
|
|
140
|
-
dkk
|
|
143
|
+
dkk related <id>
|
|
141
144
|
\`\`\`
|
|
142
145
|
6. **Compile the answer** — Present results as a structured summary including:
|
|
143
146
|
- Relevant domain items with ID, type, context, name, and excerpt.
|
|
@@ -146,37 +149,43 @@ When answering questions about the domain, always query the model — never gues
|
|
|
146
149
|
|
|
147
150
|
## Domain Update Workflow
|
|
148
151
|
|
|
149
|
-
When modifying the domain model:
|
|
152
|
+
When modifying the domain model or proposing architectural refactors:
|
|
150
153
|
|
|
151
|
-
1. **
|
|
154
|
+
1. **Consult ADRs First** — Before making decisions or structural changes, check existing constraints and decisions:
|
|
155
|
+
\`\`\`bash
|
|
156
|
+
dkk search "<topic>" --type adr
|
|
157
|
+
# or
|
|
158
|
+
dkk related <id>
|
|
159
|
+
\`\`\`
|
|
160
|
+
2. **Inspect current state** — Load current definitions and neighbours:
|
|
152
161
|
\`\`\`bash
|
|
153
162
|
dkk show <id>
|
|
154
163
|
dkk related <id>
|
|
155
164
|
dkk list --context <name>
|
|
156
165
|
\`\`\`
|
|
157
|
-
|
|
166
|
+
3. **Edit YAML files directly** — Apply changes to the appropriate files:
|
|
158
167
|
- **New context:** Create \`.dkk/domain/contexts/<name>/context.yml\` with name/description/glossary, create subdirs (\`events/\`, \`commands/\`, etc.), and register in \`.dkk/domain/index.yml\`.
|
|
159
168
|
- **New domain item:** Create a new \`.yml\` file in the correct subdirectory (e.g. \`.dkk/domain/contexts/<name>/events/OrderPlaced.yml\`).
|
|
160
169
|
- **New actor:** Add to \`.dkk/domain/actors.yml\` under \`actors\`.
|
|
161
170
|
- **New flow:** Add to \`.dkk/domain/index.yml\` under \`flows\`.
|
|
162
171
|
- **Modified item:** Edit the item's \`.yml\` file in place, preserving all existing fields.
|
|
163
|
-
|
|
172
|
+
4. **Maintain referential integrity:**
|
|
164
173
|
- \`adr_refs\` must point to existing ADRs in \`.dkk/adr/\`.
|
|
165
174
|
- \`domain_refs\` in ADR frontmatter must point to existing domain items.
|
|
166
175
|
- Update cross-references (\`handles\`, \`emits\`, \`triggers\`, \`subscribes_to\`, \`used_by\`, \`raised_by\`, \`handled_by\`, \`actor\`) on related items to stay consistent.
|
|
167
176
|
- Every new event should have \`raised_by\` pointing to its aggregate.
|
|
168
177
|
- Every new command should have \`handled_by\` pointing to its aggregate.
|
|
169
178
|
- Update aggregate \`handles.commands\` and \`emits.events\` arrays when adding commands/events.
|
|
170
|
-
|
|
179
|
+
5. **Follow naming conventions:**
|
|
171
180
|
- Items: PascalCase (\`OrderPlaced\`, \`PlaceOrder\`).
|
|
172
181
|
- Contexts: kebab-case (\`ordering\`, \`inventory-management\`).
|
|
173
182
|
- ADR ids: \`adr-NNNN\` (zero-padded 4-digit number).
|
|
174
183
|
- Actors: PascalCase (\`Customer\`, \`PaymentGateway\`).
|
|
175
|
-
|
|
184
|
+
6. **Update ADRs** — If the change affects an architectural decision:
|
|
176
185
|
- Add \`domain_refs\` to the ADR frontmatter for new items.
|
|
177
186
|
- Add \`adr_refs\` to new/modified domain items pointing to relevant ADRs.
|
|
178
187
|
- Consider creating a new ADR if the change introduces a significant decision.
|
|
179
|
-
|
|
188
|
+
7. **Run quality gates:**
|
|
180
189
|
\`\`\`bash
|
|
181
190
|
dkk render # Validates → renders docs → rebuilds search index
|
|
182
191
|
\`\`\`
|
|
@@ -306,7 +315,7 @@ When reviewing changes for domain impact:
|
|
|
306
315
|
Watch for: broken \`adr_refs\`, broken \`domain_refs\` in ADRs, dangling cross-references, missing context registrations.
|
|
307
316
|
6. **Find linked ADRs** — Identify decisions that may need updating:
|
|
308
317
|
\`\`\`bash
|
|
309
|
-
dkk
|
|
318
|
+
dkk related <id>
|
|
310
319
|
\`\`\`
|
|
311
320
|
7. **Compile impact analysis** — Report impacted items, blast radius, invariant violations, affected ADRs, and recommendations.
|
|
312
321
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prime.js","sourceRoot":"","sources":["../../../../src/features/agent/commands/prime.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAiB,MAAM,iCAAiC,CAAC;AAC7E,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAGrD;;;GAGG;AACH,SAAS,YAAY;IACnB,OAAO
|
|
1
|
+
{"version":3,"file":"prime.js","sourceRoot":"","sources":["../../../../src/features/agent/commands/prime.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,7 +3,7 @@ import { DomainGraph } from "../../../shared/graph.js";
|
|
|
3
3
|
export function registerStats(program) {
|
|
4
4
|
program
|
|
5
5
|
.command("stats")
|
|
6
|
-
.description("Print domain model statistics and
|
|
6
|
+
.description("Print domain model statistics and detect unreferenced items")
|
|
7
7
|
.option("--json", "Output as JSON")
|
|
8
8
|
.option("--minify", "Minify JSON output (useful for AI agents)")
|
|
9
9
|
.option("-r, --root <path>", "Override repository root")
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stats.js","sourceRoot":"","sources":["../../../../src/features/audit/commands/stats.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAEvD,MAAM,UAAU,aAAa,CAAC,OAAY;IACxC,OAAO;SACJ,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,
|
|
1
|
+
{"version":3,"file":"stats.js","sourceRoot":"","sources":["../../../../src/features/audit/commands/stats.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAEvD,MAAM,UAAU,aAAa,CAAC,OAAY;IACxC,OAAO;SACJ,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,6DAA6D,CAAC;SAC1E,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;SAClC,MAAM,CAAC,UAAU,EAAE,2CAA2C,CAAC;SAC/D,MAAM,CAAC,mBAAmB,EAAE,0BAA0B,CAAC;SACvD,MAAM,CACL,CACE,IAAyD,EACzD,EAAE;QACF,MAAM,KAAK,GAAG,eAAe,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QACnD,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAEtC,MAAM,KAAK,GAAG;YACV,QAAQ,EAAE,CAAC;YACX,MAAM,EAAE,CAAC;YACT,QAAQ,EAAE,CAAC;YACX,UAAU,EAAE,CAAC;YACb,QAAQ,EAAE,CAAC;YACX,UAAU,EAAE,CAAC;YACb,MAAM,EAAE,CAAC;YACT,IAAI,EAAE,CAAC;YACP,KAAK,EAAE,CAAC;YACR,QAAQ,EAAE,EAAc;SAC3B,CAAC;QAEF,KAAK,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;YACnC,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;gBAChB,KAAK,SAAS;oBAAE,KAAK,CAAC,QAAQ,EAAE,CAAC;oBAAC,MAAM;gBACxC,KAAK,OAAO;oBAAE,KAAK,CAAC,MAAM,EAAE,CAAC;oBAAC,MAAM;gBACpC,KAAK,SAAS;oBAAE,KAAK,CAAC,QAAQ,EAAE,CAAC;oBAAC,MAAM;gBACxC,KAAK,WAAW;oBAAE,KAAK,CAAC,UAAU,EAAE,CAAC;oBAAC,MAAM;gBAC5C,KAAK,QAAQ;oBAAE,KAAK,CAAC,QAAQ,EAAE,CAAC;oBAAC,MAAM;gBACvC,KAAK,YAAY;oBAAE,KAAK,CAAC,UAAU,EAAE,CAAC;oBAAC,MAAM;gBAC7C,KAAK,OAAO;oBAAE,KAAK,CAAC,MAAM,EAAE,CAAC;oBAAC,MAAM;gBACpC,KAAK,KAAK;oBAAE,KAAK,CAAC,IAAI,EAAE,CAAC;oBAAC,MAAM;gBAChC,KAAK,MAAM;oBAAE,KAAK,CAAC,KAAK,EAAE,CAAC;oBAAC,MAAM;YACtC,CAAC;YAED,8EAA8E;YAC9E,iFAAiF;YACjF,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;gBAC9H,IAAI,eAAe,GAAG,CAAC,CAAC;gBACxB,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;oBAC7B,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,EAAE,IAAI,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,IAAI,IAAI,CAAC,KAAK,KAAK,UAAU,EAAE,CAAC;wBACpE,eAAe,EAAE,CAAC;oBACtB,CAAC;gBACL,CAAC;gBACD,IAAI,eAAe,KAAK,CAAC,EAAE,CAAC;oBACxB,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAC5B,CAAC;YACL,CAAC;QACL,CAAC;QAED,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,MAAM,OAAO,GAAG;gBACd,MAAM,EAAE;oBACN,QAAQ,EAAE,KAAK,CAAC,QAAQ;oBACxB,MAAM,EAAE,KAAK,CAAC,MAAM;oBACpB,QAAQ,EAAE,KAAK,CAAC,QAAQ;oBACxB,UAAU,EAAE,KAAK,CAAC,UAAU;oBAC5B,QAAQ,EAAE,KAAK,CAAC,QAAQ;oBACxB,UAAU,EAAE,KAAK,CAAC,UAAU;oBAC5B,MAAM,EAAE,KAAK,CAAC,MAAM;oBACpB,KAAK,EAAE,KAAK,CAAC,KAAK;oBAClB,IAAI,EAAE,KAAK,CAAC,IAAI;iBACjB;gBACD,MAAM,EAAE;oBACN,aAAa,EAAE,KAAK,CAAC,QAAQ,CAAC,MAAM;oBACpC,QAAQ,EAAE,KAAK,CAAC,QAAQ;iBACzB;aACF,CAAC;YACF,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAChE,OAAO;QACT,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;QAC9C,OAAO,CAAC,GAAG,CAAC,kBAAkB,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;QAChD,OAAO,CAAC,GAAG,CAAC,kBAAkB,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;QAC9C,OAAO,CAAC,GAAG,CAAC,kBAAkB,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;QAChD,OAAO,CAAC,GAAG,CAAC,kBAAkB,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC;QAClD,OAAO,CAAC,GAAG,CAAC,kBAAkB,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;QAChD,OAAO,CAAC,GAAG,CAAC,kBAAkB,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC;QAClD,OAAO,CAAC,GAAG,CAAC,kBAAkB,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;QAC9C,OAAO,CAAC,GAAG,CAAC,kBAAkB,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;QAC7C,OAAO,CAAC,GAAG,CAAC,kBAAkB,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;QAE5C,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;QACjC,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5B,OAAO,CAAC,GAAG,CAAC,WAAW,KAAK,CAAC,QAAQ,CAAC,MAAM,iDAAiD,CAAC,CAAC;YAC/F,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;gBAClC,OAAO,CAAC,GAAG,CAAC,SAAS,MAAM,EAAE,CAAC,CAAC;YACnC,CAAC;QACL,CAAC;aAAM,CAAC;YACJ,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC;QACzD,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC,CACF,CAAC;AACN,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../../../src/features/pipeline/renderer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAKH,OAAO,KAAK,EACV,WAAW,EAKZ,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../../../src/features/pipeline/renderer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAKH,OAAO,KAAK,EACV,WAAW,EAKZ,MAAM,8BAA8B,CAAC;AAQtC,gCAAgC;AAChC,MAAM,WAAW,eAAe;IAC9B,yDAAyD;IACzD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,oCAAoC;IACpC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iCAAiC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,iDAAiD;AACjD,MAAM,WAAW,YAAY;IAC3B,qCAAqC;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,6CAA6C;IAC7C,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAkOD;;;;;;;;;GASG;AACH,wBAAgB,UAAU,CACxB,KAAK,EAAE,WAAW,EAClB,OAAO,GAAE,eAAoB,GAC5B,YAAY,CA+Ed"}
|
|
@@ -16,6 +16,8 @@ import { join } from "node:path";
|
|
|
16
16
|
import Handlebars from "handlebars";
|
|
17
17
|
import { forEachItem, itemAdrRefs } from "../../shared/item-visitor.js";
|
|
18
18
|
import { docsDir, templatesDir } from "../../shared/paths.js";
|
|
19
|
+
import { DomainGraph } from "../../shared/graph.js";
|
|
20
|
+
import { generateFlowSequence } from "../query/commands/graph.js";
|
|
19
21
|
// ── Handlebars helpers ────────────────────────────────────────────────
|
|
20
22
|
/** Register custom Handlebars helpers used across all templates. */
|
|
21
23
|
function registerHelpers(hbs) {
|
|
@@ -193,9 +195,11 @@ export function renderDocs(model, options = {}) {
|
|
|
193
195
|
rmSync(outDir, { recursive: true, force: true });
|
|
194
196
|
ensureDir(outDir);
|
|
195
197
|
// ── 1. Render top-level index ─────────────────────────────────────
|
|
198
|
+
const graph = DomainGraph.from(model);
|
|
196
199
|
const flowsData = (model.index.flows ?? []).map((f) => ({
|
|
197
200
|
...f,
|
|
198
201
|
steps: f.steps.map((s, i) => ({ ...s, stepNumber: i + 1 })),
|
|
202
|
+
sequenceDiagram: generateFlowSequence(f, graph),
|
|
199
203
|
}));
|
|
200
204
|
const indexData = {
|
|
201
205
|
contexts: model.index.contexts,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderer.js","sourceRoot":"","sources":["../../../src/features/pipeline/renderer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACrF,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,UAAU,MAAM,YAAY,CAAC;AAQpC,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AACxE,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"renderer.js","sourceRoot":"","sources":["../../../src/features/pipeline/renderer.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validator.d.ts","sourceRoot":"","sources":["../../../src/features/pipeline/validator.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EACV,WAAW,EAMZ,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"validator.d.ts","sourceRoot":"","sources":["../../../src/features/pipeline/validator.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EACV,WAAW,EAMZ,MAAM,8BAA8B,CAAC;AAatC,wCAAwC;AACxC,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,SAAS,CAAC;AAE3C,mCAAmC;AACnC,MAAM,WAAW,eAAe;IAC9B,wDAAwD;IACxD,QAAQ,EAAE,QAAQ,CAAC;IACnB,0CAA0C;IAC1C,OAAO,EAAE,MAAM,CAAC;IAChB,+DAA+D;IAC/D,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,kCAAkC;AAClC,MAAM,WAAW,gBAAgB;IAC/B,yDAAyD;IACzD,KAAK,EAAE,OAAO,CAAC;IACf,4CAA4C;IAC5C,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,QAAQ,EAAE,eAAe,EAAE,CAAC;CAC7B;AAED,gDAAgD;AAChD,MAAM,WAAW,gBAAgB;IAC/B;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;OAGG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAyWD;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,WAAW,EAClB,OAAO,GAAE,gBAAqB,GAC7B,gBAAgB,CAgBlB"}
|
|
@@ -16,6 +16,7 @@ import { createRequire } from "node:module";
|
|
|
16
16
|
import { readFileSync, readdirSync } from "node:fs";
|
|
17
17
|
import { join } from "node:path";
|
|
18
18
|
import { forEachItem, itemAdrRefs } from "../../shared/item-visitor.js";
|
|
19
|
+
import { didYouMean } from "../../shared/similarity.js";
|
|
19
20
|
// ajv & ajv-formats are CJS packages; use createRequire for clean interop
|
|
20
21
|
// under both tsc (Node16 resolution) and tsx (ESM runtime).
|
|
21
22
|
const require = createRequire(import.meta.url);
|
|
@@ -131,7 +132,7 @@ function validateCrossRefs(model, options, issues) {
|
|
|
131
132
|
const indexedContextNames = new Set(model.index.contexts.map((e) => e.name));
|
|
132
133
|
for (const entry of model.index.contexts) {
|
|
133
134
|
if (!contextNames.has(entry.name)) {
|
|
134
|
-
err(issues, `Index references context "${entry.name}" but no context file was loaded`, "index");
|
|
135
|
+
err(issues, `Index references context "${entry.name}" but no context file was loaded.${didYouMean(entry.name, contextNames)}`, "index");
|
|
135
136
|
}
|
|
136
137
|
}
|
|
137
138
|
// Reverse: context on disk but not registered in the index
|
|
@@ -145,7 +146,7 @@ function validateCrossRefs(model, options, issues) {
|
|
|
145
146
|
function checkAdrRefs(refs, path) {
|
|
146
147
|
for (const ref of refs ?? []) {
|
|
147
148
|
if (!adrIds.has(ref)) {
|
|
148
|
-
err(issues, `adr_ref "${ref}" does not resolve to any ADR`, path);
|
|
149
|
+
err(issues, `adr_ref "${ref}" does not resolve to any ADR.${didYouMean(ref, adrIds)}`, path);
|
|
149
150
|
}
|
|
150
151
|
}
|
|
151
152
|
}
|
|
@@ -161,12 +162,12 @@ function validateCrossRefs(model, options, issues) {
|
|
|
161
162
|
for (const [id, adr] of model.adrs) {
|
|
162
163
|
for (const ref of adr.domain_refs ?? []) {
|
|
163
164
|
if (!domainItemIds.has(ref)) {
|
|
164
|
-
err(issues, `ADR domain_ref "${ref}" does not resolve to any domain item`, `adr:${id}`);
|
|
165
|
+
err(issues, `ADR domain_ref "${ref}" does not resolve to any domain item.${didYouMean(ref, domainItemIds)}`, `adr:${id}`);
|
|
165
166
|
}
|
|
166
167
|
}
|
|
167
168
|
// superseded_by must resolve
|
|
168
169
|
if (adr.superseded_by && !adrIds.has(adr.superseded_by)) {
|
|
169
|
-
err(issues, `ADR superseded_by "${adr.superseded_by}" does not resolve to any ADR`, `adr:${id}`);
|
|
170
|
+
err(issues, `ADR superseded_by "${adr.superseded_by}" does not resolve to any ADR.${didYouMean(adr.superseded_by, adrIds)}`, `adr:${id}`);
|
|
170
171
|
}
|
|
171
172
|
}
|
|
172
173
|
// ─ 5. Intra-context reference resolution ───────────────────────────
|
|
@@ -178,17 +179,17 @@ function validateCrossRefs(model, options, issues) {
|
|
|
178
179
|
case "event": {
|
|
179
180
|
const e = item;
|
|
180
181
|
if (e.raised_by && !sets.aggregates.has(e.raised_by)) {
|
|
181
|
-
err(issues, `Event "${e.name}" raised_by "${e.raised_by}" does not match any aggregate in context "${ctxName}"`, path("event", e.name));
|
|
182
|
+
err(issues, `Event "${e.name}" raised_by "${e.raised_by}" does not match any aggregate in context "${ctxName}".${didYouMean(e.raised_by, sets.aggregates)}`, path("event", e.name));
|
|
182
183
|
}
|
|
183
184
|
break;
|
|
184
185
|
}
|
|
185
186
|
case "command": {
|
|
186
187
|
const c = item;
|
|
187
188
|
if (c.handled_by && !sets.aggregates.has(c.handled_by)) {
|
|
188
|
-
err(issues, `Command "${c.name}" handled_by "${c.handled_by}" does not match any aggregate in context "${ctxName}"`, path("command", c.name));
|
|
189
|
+
err(issues, `Command "${c.name}" handled_by "${c.handled_by}" does not match any aggregate in context "${ctxName}".${didYouMean(c.handled_by, sets.aggregates)}`, path("command", c.name));
|
|
189
190
|
}
|
|
190
191
|
if (c.actor && !actorNames.has(c.actor)) {
|
|
191
|
-
err(issues, `Command "${c.name}" actor "${c.actor}" does not match any actor`, path("command", c.name));
|
|
192
|
+
err(issues, `Command "${c.name}" actor "${c.actor}" does not match any actor.${didYouMean(c.actor, actorNames)}`, path("command", c.name));
|
|
192
193
|
}
|
|
193
194
|
break;
|
|
194
195
|
}
|
|
@@ -196,12 +197,12 @@ function validateCrossRefs(model, options, issues) {
|
|
|
196
197
|
const a = item;
|
|
197
198
|
for (const h of a.handles?.commands ?? []) {
|
|
198
199
|
if (!sets.commands.has(h)) {
|
|
199
|
-
err(issues, `Aggregate "${a.name}" handles "${h}" but no such command in context "${ctxName}"`, path("aggregate", a.name));
|
|
200
|
+
err(issues, `Aggregate "${a.name}" handles "${h}" but no such command in context "${ctxName}".${didYouMean(h, sets.commands)}`, path("aggregate", a.name));
|
|
200
201
|
}
|
|
201
202
|
}
|
|
202
203
|
for (const e of a.emits?.events ?? []) {
|
|
203
204
|
if (!sets.events.has(e)) {
|
|
204
|
-
err(issues, `Aggregate "${a.name}" emits "${e}" but no such event in context "${ctxName}"`, path("aggregate", a.name));
|
|
205
|
+
err(issues, `Aggregate "${a.name}" emits "${e}" but no such event in context "${ctxName}".${didYouMean(e, sets.events)}`, path("aggregate", a.name));
|
|
205
206
|
}
|
|
206
207
|
}
|
|
207
208
|
break;
|
|
@@ -210,12 +211,12 @@ function validateCrossRefs(model, options, issues) {
|
|
|
210
211
|
const p = item;
|
|
211
212
|
for (const t of p.when?.events ?? []) {
|
|
212
213
|
if (!sets.events.has(t)) {
|
|
213
|
-
err(issues, `Policy "${p.name}" when.events "${t}" but no such event in context "${ctxName}"`, path("policy", p.name));
|
|
214
|
+
err(issues, `Policy "${p.name}" when.events "${t}" but no such event in context "${ctxName}".${didYouMean(t, sets.events)}`, path("policy", p.name));
|
|
214
215
|
}
|
|
215
216
|
}
|
|
216
217
|
for (const e of p.then?.commands ?? []) {
|
|
217
218
|
if (!sets.commands.has(e)) {
|
|
218
|
-
err(issues, `Policy "${p.name}" then.commands "${e}" but no such command in context "${ctxName}"`, path("policy", p.name));
|
|
219
|
+
err(issues, `Policy "${p.name}" then.commands "${e}" but no such command in context "${ctxName}".${didYouMean(e, sets.commands)}`, path("policy", p.name));
|
|
219
220
|
}
|
|
220
221
|
}
|
|
221
222
|
break;
|
|
@@ -224,12 +225,12 @@ function validateCrossRefs(model, options, issues) {
|
|
|
224
225
|
const r = item;
|
|
225
226
|
for (const s of r.subscribes_to ?? []) {
|
|
226
227
|
if (!sets.events.has(s)) {
|
|
227
|
-
err(issues, `ReadModel "${r.name}" subscribes_to "${s}" but no such event in context "${ctxName}"`, path("read_model", r.name));
|
|
228
|
+
err(issues, `ReadModel "${r.name}" subscribes_to "${s}" but no such event in context "${ctxName}".${didYouMean(s, sets.events)}`, path("read_model", r.name));
|
|
228
229
|
}
|
|
229
230
|
}
|
|
230
231
|
for (const u of r.used_by ?? []) {
|
|
231
232
|
if (!actorNames.has(u)) {
|
|
232
|
-
err(issues, `ReadModel "${r.name}" used_by "${u}" but no such actor`, path("read_model", r.name));
|
|
233
|
+
err(issues, `ReadModel "${r.name}" used_by "${u}" but no such actor.${didYouMean(u, actorNames)}`, path("read_model", r.name));
|
|
233
234
|
}
|
|
234
235
|
}
|
|
235
236
|
break;
|
|
@@ -244,7 +245,7 @@ function validateCrossRefs(model, options, issues) {
|
|
|
244
245
|
for (const flow of model.index.flows ?? []) {
|
|
245
246
|
for (const step of flow.steps) {
|
|
246
247
|
if (!domainItemIds.has(step.ref)) {
|
|
247
|
-
err(issues, `Flow "${flow.name}" step ref "${step.ref}" does not resolve to any domain item`, `flow:${flow.name}`);
|
|
248
|
+
err(issues, `Flow "${flow.name}" step ref "${step.ref}" does not resolve to any domain item.${didYouMean(step.ref, domainItemIds)}`, `flow:${flow.name}`);
|
|
248
249
|
}
|
|
249
250
|
}
|
|
250
251
|
}
|