domain-knowledge-kit 0.2.15 → 0.2.16
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 +4 -0
- package/dist/cli.js +20 -0
- 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 +141 -3
- package/dist/features/agent/commands/init.js.map +1 -1
- package/dist/features/agent/commands/prime.d.ts +11 -0
- package/dist/features/agent/commands/prime.d.ts.map +1 -1
- package/dist/features/agent/commands/prime.js +104 -8
- package/dist/features/agent/commands/prime.js.map +1 -1
- package/dist/features/federation/commands/consumers.d.ts +40 -0
- package/dist/features/federation/commands/consumers.d.ts.map +1 -0
- package/dist/features/federation/commands/consumers.js +126 -0
- package/dist/features/federation/commands/consumers.js.map +1 -0
- package/dist/features/federation/commands/peers-add.d.ts +14 -0
- package/dist/features/federation/commands/peers-add.d.ts.map +1 -0
- package/dist/features/federation/commands/peers-add.js +79 -0
- package/dist/features/federation/commands/peers-add.js.map +1 -0
- package/dist/features/federation/commands/peers-list.d.ts +8 -0
- package/dist/features/federation/commands/peers-list.d.ts.map +1 -0
- package/dist/features/federation/commands/peers-list.js +51 -0
- package/dist/features/federation/commands/peers-list.js.map +1 -0
- package/dist/features/federation/commands/peers-status.d.ts +8 -0
- package/dist/features/federation/commands/peers-status.d.ts.map +1 -0
- package/dist/features/federation/commands/peers-status.js +78 -0
- package/dist/features/federation/commands/peers-status.js.map +1 -0
- package/dist/features/federation/commands/pull.d.ts +18 -0
- package/dist/features/federation/commands/pull.d.ts.map +1 -0
- package/dist/features/federation/commands/pull.js +153 -0
- package/dist/features/federation/commands/pull.js.map +1 -0
- package/dist/features/federation/git-fetcher.d.ts +45 -0
- package/dist/features/federation/git-fetcher.d.ts.map +1 -0
- package/dist/features/federation/git-fetcher.js +70 -0
- package/dist/features/federation/git-fetcher.js.map +1 -0
- package/dist/features/federation/loader.d.ts +60 -0
- package/dist/features/federation/loader.d.ts.map +1 -0
- package/dist/features/federation/loader.js +193 -0
- package/dist/features/federation/loader.js.map +1 -0
- package/dist/features/federation/lock.d.ts +12 -0
- package/dist/features/federation/lock.d.ts.map +1 -0
- package/dist/features/federation/lock.js +48 -0
- package/dist/features/federation/lock.js.map +1 -0
- package/dist/features/federation/tests/git-fetcher.test.d.ts +2 -0
- package/dist/features/federation/tests/git-fetcher.test.d.ts.map +1 -0
- package/dist/features/federation/tests/git-fetcher.test.js +167 -0
- package/dist/features/federation/tests/git-fetcher.test.js.map +1 -0
- package/dist/features/federation/tests/loader.test.d.ts +2 -0
- package/dist/features/federation/tests/loader.test.d.ts.map +1 -0
- package/dist/features/federation/tests/loader.test.js +144 -0
- package/dist/features/federation/tests/loader.test.js.map +1 -0
- package/dist/features/federation/tests/phase5.test.d.ts +2 -0
- package/dist/features/federation/tests/phase5.test.d.ts.map +1 -0
- package/dist/features/federation/tests/phase5.test.js +137 -0
- package/dist/features/federation/tests/phase5.test.js.map +1 -0
- package/dist/features/federation/tests/schema-load.test.d.ts +2 -0
- package/dist/features/federation/tests/schema-load.test.d.ts.map +1 -0
- package/dist/features/federation/tests/schema-load.test.js +97 -0
- package/dist/features/federation/tests/schema-load.test.js.map +1 -0
- package/dist/features/federation/tests/validator.test.d.ts +2 -0
- package/dist/features/federation/tests/validator.test.d.ts.map +1 -0
- package/dist/features/federation/tests/validator.test.js +319 -0
- package/dist/features/federation/tests/validator.test.js.map +1 -0
- package/dist/features/mcp/commands/serve.d.ts +10 -0
- package/dist/features/mcp/commands/serve.d.ts.map +1 -0
- package/dist/features/mcp/commands/serve.js +12 -0
- package/dist/features/mcp/commands/serve.js.map +1 -0
- package/dist/features/mcp/server.d.ts +15 -0
- package/dist/features/mcp/server.d.ts.map +1 -0
- package/dist/features/mcp/server.js +438 -0
- package/dist/features/mcp/server.js.map +1 -0
- package/dist/features/pipeline/commands/validate.d.ts.map +1 -1
- package/dist/features/pipeline/commands/validate.js +7 -0
- package/dist/features/pipeline/commands/validate.js.map +1 -1
- package/dist/features/pipeline/indexer.d.ts +28 -2
- package/dist/features/pipeline/indexer.d.ts.map +1 -1
- package/dist/features/pipeline/indexer.js +82 -27
- package/dist/features/pipeline/indexer.js.map +1 -1
- package/dist/features/pipeline/validator.d.ts +10 -0
- package/dist/features/pipeline/validator.d.ts.map +1 -1
- package/dist/features/pipeline/validator.js +274 -27
- package/dist/features/pipeline/validator.js.map +1 -1
- package/dist/features/query/commands/list.d.ts +10 -0
- package/dist/features/query/commands/list.d.ts.map +1 -1
- package/dist/features/query/commands/list.js +1 -1
- package/dist/features/query/commands/list.js.map +1 -1
- package/dist/features/query/commands/locate.d.ts +1 -0
- package/dist/features/query/commands/locate.d.ts.map +1 -1
- package/dist/features/query/commands/locate.js +1 -1
- package/dist/features/query/commands/locate.js.map +1 -1
- package/dist/features/query/commands/search.d.ts.map +1 -1
- package/dist/features/query/commands/search.js +2 -0
- package/dist/features/query/commands/search.js.map +1 -1
- package/dist/features/query/commands/show.d.ts +15 -0
- package/dist/features/query/commands/show.d.ts.map +1 -1
- package/dist/features/query/commands/show.js +116 -58
- package/dist/features/query/commands/show.js.map +1 -1
- package/dist/features/query/commands/story.d.ts +70 -0
- package/dist/features/query/commands/story.d.ts.map +1 -1
- package/dist/features/query/commands/story.js +2 -2
- package/dist/features/query/commands/story.js.map +1 -1
- package/dist/features/query/commands/summary.d.ts +3 -0
- package/dist/features/query/commands/summary.d.ts.map +1 -1
- package/dist/features/query/commands/summary.js +1 -1
- package/dist/features/query/commands/summary.js.map +1 -1
- package/dist/features/query/searcher.d.ts +18 -1
- package/dist/features/query/searcher.d.ts.map +1 -1
- package/dist/features/query/searcher.js +11 -2
- package/dist/features/query/searcher.js.map +1 -1
- package/dist/features/scaffold/commands/service-init.d.ts +12 -0
- package/dist/features/scaffold/commands/service-init.d.ts.map +1 -0
- package/dist/features/scaffold/commands/service-init.js +69 -0
- package/dist/features/scaffold/commands/service-init.js.map +1 -0
- package/dist/shared/graph.d.ts +8 -0
- package/dist/shared/graph.d.ts.map +1 -1
- package/dist/shared/graph.js +180 -112
- package/dist/shared/graph.js.map +1 -1
- package/dist/shared/index.d.ts +4 -1
- package/dist/shared/index.d.ts.map +1 -1
- package/dist/shared/index.js +6 -1
- package/dist/shared/index.js.map +1 -1
- package/dist/shared/loader.d.ts +22 -0
- package/dist/shared/loader.d.ts.map +1 -1
- package/dist/shared/loader.js +31 -1
- package/dist/shared/loader.js.map +1 -1
- package/dist/shared/paths.d.ts +59 -7
- package/dist/shared/paths.d.ts.map +1 -1
- package/dist/shared/paths.js +93 -11
- package/dist/shared/paths.js.map +1 -1
- package/dist/shared/refs.d.ts +96 -0
- package/dist/shared/refs.d.ts.map +1 -0
- package/dist/shared/refs.js +182 -0
- package/dist/shared/refs.js.map +1 -0
- package/dist/shared/service-id.d.ts +11 -0
- package/dist/shared/service-id.d.ts.map +1 -0
- package/dist/shared/service-id.js +64 -0
- package/dist/shared/service-id.js.map +1 -0
- package/dist/shared/tests/paths.test.d.ts +2 -0
- package/dist/shared/tests/paths.test.d.ts.map +1 -0
- package/dist/shared/tests/paths.test.js +111 -0
- package/dist/shared/tests/paths.test.js.map +1 -0
- package/dist/shared/tests/refs.test.d.ts +2 -0
- package/dist/shared/tests/refs.test.d.ts.map +1 -0
- package/dist/shared/tests/refs.test.js +104 -0
- package/dist/shared/tests/refs.test.js.map +1 -0
- package/dist/shared/types/domain.d.ts +14 -0
- package/dist/shared/types/domain.d.ts.map +1 -1
- package/dist/shared/types/federation.d.ts +60 -0
- package/dist/shared/types/federation.d.ts.map +1 -0
- package/dist/shared/types/federation.js +12 -0
- package/dist/shared/types/federation.js.map +1 -0
- package/package.json +6 -3
- package/tools/dkk/claude/agents/dkk-domain-reviewer.md +69 -0
- package/tools/dkk/claude/commands/dkk-adr.md +11 -0
- package/tools/dkk/claude/commands/dkk-impact.md +34 -0
- package/tools/dkk/claude/commands/dkk-implement.md +12 -0
- package/tools/dkk/claude/commands/dkk-prime.md +6 -0
- package/tools/dkk/claude/commands/dkk-review.md +12 -0
- package/tools/dkk/claude/commands/dkk-story.md +12 -0
- package/tools/dkk/claude/hooks/post-edit-validate.mjs +51 -0
- package/tools/dkk/claude/hooks/pre-edit-block-generated.mjs +39 -0
- package/tools/dkk/claude/hooks/session-start-prime.mjs +33 -0
- package/tools/dkk/claude/hooks/stop-validate.mjs +48 -0
- package/tools/dkk/claude/settings.json +62 -0
- package/tools/dkk/claude/skills/dkk-adr-author/SKILL.md +54 -0
- package/tools/dkk/claude/skills/dkk-flow-implementer/SKILL.md +51 -0
- package/tools/dkk/claude/skills/dkk-story-analyst/SKILL.md +108 -0
- package/tools/dkk/schema/actors.schema.json +1 -1
- package/tools/dkk/schema/adr-frontmatter.schema.json +4 -4
- package/tools/dkk/schema/aggregate.schema.json +1 -1
- package/tools/dkk/schema/command.schema.json +1 -1
- package/tools/dkk/schema/event.schema.json +1 -1
- package/tools/dkk/schema/federation.schema.json +71 -0
- package/tools/dkk/schema/glossary.schema.json +1 -1
- package/tools/dkk/schema/index.schema.json +2 -2
- package/tools/dkk/schema/policy.schema.json +1 -1
- package/tools/dkk/schema/read-model.schema.json +1 -1
- package/tools/dkk/schema/service.schema.json +30 -0
package/README.md
CHANGED
|
@@ -24,6 +24,10 @@ Architectural decisions aren't born in a vacuum. Understanding *why* a choice wa
|
|
|
24
24
|
|
|
25
25
|
Knowledge that lives next to the code is knowledge that gets used. DKK colocates your domain model, ADRs, and generated docs inside the repository itself. AI agents can discover, query, and traverse this knowledge without leaving the codebase — making every interaction domain-aware.
|
|
26
26
|
|
|
27
|
+
### One domain model can span many repositories
|
|
28
|
+
|
|
29
|
+
In enterprise architectures each service lives in its own repo, but the domain it participates in does not. DKK supports **multi-repo federation**: a repo declares itself a service with `.dkk/service.yml`, lists peer services in `.dkk/federation.yml` (by filesystem path or git URL + branch), and the loader transparently merges peer domain models into the local one. Cross-service references use the additive grammar `<service>:<context>.<Item>` — bare refs stay local-only. No CI required, no publish step, no orphan branches: a peer's raw `.dkk/` directory is the artifact. The AI assistant in any repo can answer "what does `ordering:OrderPlaced` contain, and who else consumes it?" without leaving the current working directory.
|
|
30
|
+
|
|
27
31
|
---
|
|
28
32
|
|
|
29
33
|
## Documentation
|
package/dist/cli.js
CHANGED
|
@@ -16,10 +16,17 @@ import { registerNewDomain } from "./features/scaffold/commands/new-domain.js";
|
|
|
16
16
|
import { registerNewContext } from "./features/scaffold/commands/new-context.js";
|
|
17
17
|
import { registerNewAdr } from "./features/scaffold/commands/new-adr.js";
|
|
18
18
|
import { registerAddItem } from "./features/scaffold/commands/add-item.js";
|
|
19
|
+
import { registerServiceInit } from "./features/scaffold/commands/service-init.js";
|
|
20
|
+
import { registerPeersAdd } from "./features/federation/commands/peers-add.js";
|
|
21
|
+
import { registerPeersList } from "./features/federation/commands/peers-list.js";
|
|
22
|
+
import { registerPeersStatus } from "./features/federation/commands/peers-status.js";
|
|
23
|
+
import { registerPull } from "./features/federation/commands/pull.js";
|
|
24
|
+
import { registerConsumers } from "./features/federation/commands/consumers.js";
|
|
19
25
|
import { registerRename } from "./features/refactor/commands/rename.js";
|
|
20
26
|
import { registerRm } from "./features/refactor/commands/rm.js";
|
|
21
27
|
import { registerMove } from "./features/refactor/commands/move.js";
|
|
22
28
|
import { registerStats } from "./features/audit/commands/stats.js";
|
|
29
|
+
import { registerMcp } from "./features/mcp/commands/serve.js";
|
|
23
30
|
import { formatCliError } from "./shared/errors.js";
|
|
24
31
|
/** Whether to show full stack traces (set DEBUG=1 in env). */
|
|
25
32
|
const DEBUG = Boolean(process.env.DEBUG);
|
|
@@ -55,6 +62,7 @@ registerRename(program);
|
|
|
55
62
|
registerRm(program);
|
|
56
63
|
registerMove(program);
|
|
57
64
|
registerStats(program);
|
|
65
|
+
registerMcp(program);
|
|
58
66
|
// "new" sub-command group
|
|
59
67
|
const newCmd = program
|
|
60
68
|
.command("new")
|
|
@@ -64,6 +72,18 @@ registerNewContext(newCmd);
|
|
|
64
72
|
registerNewAdr(newCmd);
|
|
65
73
|
// Top-level "add" command for individual domain items
|
|
66
74
|
registerAddItem(program);
|
|
75
|
+
// Federation: service identity
|
|
76
|
+
registerServiceInit(program);
|
|
77
|
+
// Federation: peer management
|
|
78
|
+
const peersCmd = program
|
|
79
|
+
.command("peers")
|
|
80
|
+
.description("Federation peer management");
|
|
81
|
+
registerPeersAdd(peersCmd);
|
|
82
|
+
registerPeersList(peersCmd);
|
|
83
|
+
registerPeersStatus(peersCmd);
|
|
84
|
+
// Federation: dkk pull + dkk consumers
|
|
85
|
+
registerPull(program);
|
|
86
|
+
registerConsumers(program);
|
|
67
87
|
// ── Agent mode injection ─────────────────────────────────────────────
|
|
68
88
|
program.option("--agent", "Enable agent mode (JSON + minify by default)");
|
|
69
89
|
// Add --no-json to commands that have --json
|
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,cAAc,EAAE,MAAM,qCAAqC,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,0CAA0C,CAAC;AAC5E,OAAO,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAC;AACxE,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AACnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,4CAA4C,CAAC;AAC/E,OAAO,EAAE,kBAAkB,EAAE,MAAM,6CAA6C,CAAC;AACjF,OAAO,EAAE,cAAc,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,EAAE,eAAe,EAAE,MAAM,0CAA0C,CAAC;AAC3E,OAAO,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAC;AACxE,OAAO,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEpD,8DAA8D;AAC9D,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAEzC,yEAAyE;AAEzE,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,KAAK,CAAC;KACX,WAAW,CAAC,0BAA0B,CAAC;KACvC,OAAO,CAAC,OAAO,CAAC;KAChB,aAAa,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC;KACjC,WAAW,CACV,OAAO,EACP;;;;;;;CAOH,CACE,CAAC;AAEJ,qBAAqB;AACrB,YAAY,CAAC,OAAO,CAAC,CAAC;AACtB,YAAY,CAAC,OAAO,CAAC,CAAC;AACtB,eAAe,CAAC,OAAO,CAAC,CAAC;AACzB,cAAc,CAAC,OAAO,CAAC,CAAC;AACxB,eAAe,CAAC,OAAO,CAAC,CAAC;AACzB,aAAa,CAAC,OAAO,CAAC,CAAC;AACvB,cAAc,CAAC,OAAO,CAAC,CAAC;AACxB,aAAa,CAAC,OAAO,CAAC,CAAC;AACvB,gBAAgB,CAAC,OAAO,CAAC,CAAC;AAC1B,cAAc,CAAC,OAAO,CAAC,CAAC;AACxB,YAAY,CAAC,OAAO,CAAC,CAAC;AACtB,aAAa,CAAC,OAAO,CAAC,CAAC;AACvB,cAAc,CAAC,OAAO,CAAC,CAAC;AACxB,UAAU,CAAC,OAAO,CAAC,CAAC;AACpB,YAAY,CAAC,OAAO,CAAC,CAAC;AACtB,aAAa,CAAC,OAAO,CAAC,CAAC;
|
|
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,cAAc,EAAE,MAAM,qCAAqC,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,0CAA0C,CAAC;AAC5E,OAAO,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAC;AACxE,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AACnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,4CAA4C,CAAC;AAC/E,OAAO,EAAE,kBAAkB,EAAE,MAAM,6CAA6C,CAAC;AACjF,OAAO,EAAE,cAAc,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,EAAE,eAAe,EAAE,MAAM,0CAA0C,CAAC;AAC3E,OAAO,EAAE,mBAAmB,EAAE,MAAM,8CAA8C,CAAC;AACnF,OAAO,EAAE,gBAAgB,EAAE,MAAM,6CAA6C,CAAC;AAC/E,OAAO,EAAE,iBAAiB,EAAE,MAAM,8CAA8C,CAAC;AACjF,OAAO,EAAE,mBAAmB,EAAE,MAAM,gDAAgD,CAAC;AACrF,OAAO,EAAE,YAAY,EAAE,MAAM,wCAAwC,CAAC;AACtE,OAAO,EAAE,iBAAiB,EAAE,MAAM,6CAA6C,CAAC;AAChF,OAAO,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAC;AACxE,OAAO,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AACnE,OAAO,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEpD,8DAA8D;AAC9D,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAEzC,yEAAyE;AAEzE,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,KAAK,CAAC;KACX,WAAW,CAAC,0BAA0B,CAAC;KACvC,OAAO,CAAC,OAAO,CAAC;KAChB,aAAa,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC;KACjC,WAAW,CACV,OAAO,EACP;;;;;;;CAOH,CACE,CAAC;AAEJ,qBAAqB;AACrB,YAAY,CAAC,OAAO,CAAC,CAAC;AACtB,YAAY,CAAC,OAAO,CAAC,CAAC;AACtB,eAAe,CAAC,OAAO,CAAC,CAAC;AACzB,cAAc,CAAC,OAAO,CAAC,CAAC;AACxB,eAAe,CAAC,OAAO,CAAC,CAAC;AACzB,aAAa,CAAC,OAAO,CAAC,CAAC;AACvB,cAAc,CAAC,OAAO,CAAC,CAAC;AACxB,aAAa,CAAC,OAAO,CAAC,CAAC;AACvB,gBAAgB,CAAC,OAAO,CAAC,CAAC;AAC1B,cAAc,CAAC,OAAO,CAAC,CAAC;AACxB,YAAY,CAAC,OAAO,CAAC,CAAC;AACtB,aAAa,CAAC,OAAO,CAAC,CAAC;AACvB,cAAc,CAAC,OAAO,CAAC,CAAC;AACxB,UAAU,CAAC,OAAO,CAAC,CAAC;AACpB,YAAY,CAAC,OAAO,CAAC,CAAC;AACtB,aAAa,CAAC,OAAO,CAAC,CAAC;AACvB,WAAW,CAAC,OAAO,CAAC,CAAC;AAErB,0BAA0B;AAC1B,MAAM,MAAM,GAAG,OAAO;KACnB,OAAO,CAAC,KAAK,CAAC;KACd,WAAW,CAAC,gCAAgC,CAAC,CAAC;AAEjD,iBAAiB,CAAC,MAAM,CAAC,CAAC;AAC1B,kBAAkB,CAAC,MAAM,CAAC,CAAC;AAC3B,cAAc,CAAC,MAAM,CAAC,CAAC;AAEvB,sDAAsD;AACtD,eAAe,CAAC,OAAO,CAAC,CAAC;AAEzB,+BAA+B;AAC/B,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAE7B,8BAA8B;AAC9B,MAAM,QAAQ,GAAG,OAAO;KACrB,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,4BAA4B,CAAC,CAAC;AAC7C,gBAAgB,CAAC,QAAQ,CAAC,CAAC;AAC3B,iBAAiB,CAAC,QAAQ,CAAC,CAAC;AAC5B,mBAAmB,CAAC,QAAQ,CAAC,CAAC;AAE9B,uCAAuC;AACvC,YAAY,CAAC,OAAO,CAAC,CAAC;AACtB,iBAAiB,CAAC,OAAO,CAAC,CAAC;AAE3B,wEAAwE;AACxE,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,8CAA8C,CAAC,CAAC;AAE1E,6CAA6C;AAC7C,SAAS,mBAAmB,CAAC,GAAY;IACvC,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,EAAE,CAAC;QACjD,GAAG,CAAC,MAAM,CAAC,WAAW,EAAE,qBAAqB,CAAC,CAAC;IACjD,CAAC;IACD,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,EAAE,CAAC;QACnD,GAAG,CAAC,MAAM,CAAC,aAAa,EAAE,yBAAyB,CAAC,CAAC;IACvD,CAAC;IACD,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;AAC5C,CAAC;AACD,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAE7B,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,EAAE,SAAS,EAAE,EAAE;IAC/C,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,KAAK,GAAG,CAAC;IAC3E,IAAI,OAAO,EAAE,CAAC;QACZ,IACE,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC;YAClD,SAAS,CAAC,cAAc,CAAC,MAAM,CAAC,KAAK,SAAS,EAC9C,CAAC;YACD,SAAS,CAAC,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QACzC,CAAC;QACD,IACE,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC;YACpD,SAAS,CAAC,cAAc,CAAC,QAAQ,CAAC,KAAK,SAAS,EAChD,CAAC;YACD,SAAS,CAAC,cAAc,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,OAAO,CAAC,UAAU,EAAE,CAAC,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;IAC1C,OAAO,CAAC,KAAK,CAAC,UAAU,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC/C,IAAI,KAAK,IAAI,GAAG,YAAY,KAAK,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;QAC/C,OAAO,CAAC,KAAK,CAAC,mBAAmB,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;IAChD,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
|
@@ -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;AA+RhD,sCAAsC;AACtC,wBAAgB,YAAY,CAAC,OAAO,EAAE,GAAG,GAAG,IAAI,CA6C/C"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { readFileSync, writeFileSync, existsSync, mkdirSync, readdirSync, statSync } from "node:fs";
|
|
1
|
+
import { readFileSync, writeFileSync, existsSync, mkdirSync, readdirSync, statSync, chmodSync } from "node:fs";
|
|
2
2
|
import { join } from "node:path";
|
|
3
|
-
import { repoRoot, packageSkillsDir } from "../../../shared/paths.js";
|
|
3
|
+
import { repoRoot, packageSkillsDir, packageClaudeDir } from "../../../shared/paths.js";
|
|
4
4
|
const START_MARKER = "<!-- dkk:start -->";
|
|
5
5
|
const END_MARKER = "<!-- dkk:end -->";
|
|
6
6
|
/**
|
|
@@ -62,7 +62,10 @@ dkk stats # Domain statistics + orphaned items
|
|
|
62
62
|
|
|
63
63
|
# Agent
|
|
64
64
|
dkk init # Create/update AGENTS.md with DKK section
|
|
65
|
+
dkk init --claude # Also scaffold .claude/ (settings, hooks, skills, agents, commands)
|
|
66
|
+
dkk init --skills # Also install agent skills into .github/skills/
|
|
65
67
|
dkk prime # Output full agent context
|
|
68
|
+
dkk mcp # Run the DKK MCP server (stdio) for Claude Code etc.
|
|
66
69
|
\`\`\`
|
|
67
70
|
|
|
68
71
|
### Quality Gates
|
|
@@ -118,13 +121,145 @@ function installSkills(root, force) {
|
|
|
118
121
|
}
|
|
119
122
|
}
|
|
120
123
|
}
|
|
124
|
+
/**
|
|
125
|
+
* Copy every file in `srcDir` (one level deep) into `destDir`. Skips files
|
|
126
|
+
* that already exist unless `force` is true. Reports each file with a
|
|
127
|
+
* `.claude/<relSubpath>/<filename>` label.
|
|
128
|
+
*
|
|
129
|
+
* If `executable` is true, sets 0o755 on each copied file (used for hook
|
|
130
|
+
* scripts).
|
|
131
|
+
*/
|
|
132
|
+
function copyFlatDir(opts) {
|
|
133
|
+
const { srcDir, destDir, relSubpath, force, executable } = opts;
|
|
134
|
+
if (!existsSync(srcDir))
|
|
135
|
+
return;
|
|
136
|
+
mkdirSync(destDir, { recursive: true });
|
|
137
|
+
for (const fileName of readdirSync(srcDir)) {
|
|
138
|
+
const srcFile = join(srcDir, fileName);
|
|
139
|
+
if (!statSync(srcFile).isFile())
|
|
140
|
+
continue;
|
|
141
|
+
const destFile = join(destDir, fileName);
|
|
142
|
+
const relPath = `${relSubpath}/${fileName}`;
|
|
143
|
+
if (existsSync(destFile) && !force) {
|
|
144
|
+
console.log(`Skipped ${relPath} (already exists — use --force to overwrite)`);
|
|
145
|
+
continue;
|
|
146
|
+
}
|
|
147
|
+
const alreadyExisted = existsSync(destFile);
|
|
148
|
+
writeFileSync(destFile, readFileSync(srcFile, "utf-8"), "utf-8");
|
|
149
|
+
if (executable) {
|
|
150
|
+
try {
|
|
151
|
+
chmodSync(destFile, 0o755);
|
|
152
|
+
}
|
|
153
|
+
catch {
|
|
154
|
+
// Non-POSIX filesystems may reject chmod — safe to ignore.
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
console.log(`${alreadyExisted ? "Updated" : "Created"} ${relPath}`);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Copy a directory of skill subdirectories. Layout is `<srcDir>/<skill>/<file>`,
|
|
162
|
+
* mirrored under `<destDir>/<skill>/<file>`. Skips files that already exist
|
|
163
|
+
* unless `force` is true.
|
|
164
|
+
*/
|
|
165
|
+
function copyNestedDir(opts) {
|
|
166
|
+
const { srcDir, destDir, relSubpath, force } = opts;
|
|
167
|
+
if (!existsSync(srcDir))
|
|
168
|
+
return;
|
|
169
|
+
for (const subName of readdirSync(srcDir)) {
|
|
170
|
+
const subSrc = join(srcDir, subName);
|
|
171
|
+
if (!statSync(subSrc).isDirectory())
|
|
172
|
+
continue;
|
|
173
|
+
const subDest = join(destDir, subName);
|
|
174
|
+
mkdirSync(subDest, { recursive: true });
|
|
175
|
+
for (const fileName of readdirSync(subSrc)) {
|
|
176
|
+
const srcFile = join(subSrc, fileName);
|
|
177
|
+
if (!statSync(srcFile).isFile())
|
|
178
|
+
continue;
|
|
179
|
+
const destFile = join(subDest, fileName);
|
|
180
|
+
const relPath = `${relSubpath}/${subName}/${fileName}`;
|
|
181
|
+
if (existsSync(destFile) && !force) {
|
|
182
|
+
console.log(`Skipped ${relPath} (already exists — use --force to overwrite)`);
|
|
183
|
+
continue;
|
|
184
|
+
}
|
|
185
|
+
const alreadyExisted = existsSync(destFile);
|
|
186
|
+
writeFileSync(destFile, readFileSync(srcFile, "utf-8"), "utf-8");
|
|
187
|
+
console.log(`${alreadyExisted ? "Updated" : "Created"} ${relPath}`);
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Copy the bundled Claude Code config (`settings.json`, hooks, skills,
|
|
193
|
+
* subagents, slash commands) from the DKK package into the consumer
|
|
194
|
+
* project's `.claude/` directory.
|
|
195
|
+
*
|
|
196
|
+
* Layout produced (all skip-if-present unless `--force`):
|
|
197
|
+
* .claude/
|
|
198
|
+
* settings.json
|
|
199
|
+
* hooks/<hook>.mjs (executable bit set)
|
|
200
|
+
* skills/<skill>/SKILL.md
|
|
201
|
+
* agents/<agent>.md
|
|
202
|
+
* commands/<command>.md
|
|
203
|
+
*/
|
|
204
|
+
function installClaudeConfig(root, force) {
|
|
205
|
+
const srcDir = packageClaudeDir();
|
|
206
|
+
const destDir = join(root, ".claude");
|
|
207
|
+
if (!existsSync(srcDir)) {
|
|
208
|
+
console.warn(`Warning: DKK package Claude template not found at ${srcDir}`);
|
|
209
|
+
return;
|
|
210
|
+
}
|
|
211
|
+
mkdirSync(destDir, { recursive: true });
|
|
212
|
+
// 1. settings.json
|
|
213
|
+
const settingsSrc = join(srcDir, "settings.json");
|
|
214
|
+
const settingsDest = join(destDir, "settings.json");
|
|
215
|
+
if (existsSync(settingsSrc)) {
|
|
216
|
+
if (existsSync(settingsDest) && !force) {
|
|
217
|
+
console.log(`Skipped .claude/settings.json (already exists — use --force to overwrite)`);
|
|
218
|
+
}
|
|
219
|
+
else {
|
|
220
|
+
const alreadyExisted = existsSync(settingsDest);
|
|
221
|
+
writeFileSync(settingsDest, readFileSync(settingsSrc, "utf-8"), "utf-8");
|
|
222
|
+
console.log(`${alreadyExisted ? "Updated" : "Created"} .claude/settings.json`);
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
// 2. hooks/ (flat, executable)
|
|
226
|
+
copyFlatDir({
|
|
227
|
+
srcDir: join(srcDir, "hooks"),
|
|
228
|
+
destDir: join(destDir, "hooks"),
|
|
229
|
+
relSubpath: ".claude/hooks",
|
|
230
|
+
force,
|
|
231
|
+
executable: true,
|
|
232
|
+
});
|
|
233
|
+
// 3. skills/<skill>/SKILL.md (nested)
|
|
234
|
+
copyNestedDir({
|
|
235
|
+
srcDir: join(srcDir, "skills"),
|
|
236
|
+
destDir: join(destDir, "skills"),
|
|
237
|
+
relSubpath: ".claude/skills",
|
|
238
|
+
force,
|
|
239
|
+
});
|
|
240
|
+
// 4. agents/<agent>.md (flat)
|
|
241
|
+
copyFlatDir({
|
|
242
|
+
srcDir: join(srcDir, "agents"),
|
|
243
|
+
destDir: join(destDir, "agents"),
|
|
244
|
+
relSubpath: ".claude/agents",
|
|
245
|
+
force,
|
|
246
|
+
});
|
|
247
|
+
// 5. commands/<command>.md (flat)
|
|
248
|
+
copyFlatDir({
|
|
249
|
+
srcDir: join(srcDir, "commands"),
|
|
250
|
+
destDir: join(destDir, "commands"),
|
|
251
|
+
relSubpath: ".claude/commands",
|
|
252
|
+
force,
|
|
253
|
+
});
|
|
254
|
+
}
|
|
121
255
|
/** Register the `init` subcommand. */
|
|
122
256
|
export function registerInit(program) {
|
|
123
257
|
program
|
|
124
258
|
.command("init")
|
|
125
259
|
.description("Create or update AGENTS.md with DKK onboarding section")
|
|
126
260
|
.option("--skills", "Also install DKK skill files into .github/skills/")
|
|
127
|
-
.option("--
|
|
261
|
+
.option("--claude", "Also install Claude Code config (.claude/ settings, hooks, skills, agents, commands)")
|
|
262
|
+
.option("--force", "Overwrite existing skill or Claude files (applies with --skills or --claude)")
|
|
128
263
|
.option("-r, --root <path>", "Override repository root")
|
|
129
264
|
.action((opts) => {
|
|
130
265
|
const root = repoRoot(opts.root);
|
|
@@ -157,6 +292,9 @@ export function registerInit(program) {
|
|
|
157
292
|
if (opts.skills) {
|
|
158
293
|
installSkills(root, opts.force ?? false);
|
|
159
294
|
}
|
|
295
|
+
if (opts.claude) {
|
|
296
|
+
installClaudeConfig(root, opts.force ?? false);
|
|
297
|
+
}
|
|
160
298
|
});
|
|
161
299
|
}
|
|
162
300
|
//# sourceMappingURL=init.js.map
|
|
@@ -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,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../../../src/features/agent/commands/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,6 +10,17 @@
|
|
|
10
10
|
* CLI reference, and file conventions.
|
|
11
11
|
*/
|
|
12
12
|
import type { Command as Cmd } from "commander";
|
|
13
|
+
/**
|
|
14
|
+
* The full agent context document.
|
|
15
|
+
* Keep the CLI Command Reference tables in sync with the Quick Reference block in init.ts#dkkSection.
|
|
16
|
+
*/
|
|
17
|
+
export declare function primeContent(): string;
|
|
18
|
+
/**
|
|
19
|
+
* Build a dynamic "Current Domain Summary" section from the live domain
|
|
20
|
+
* model on disk. Returns the Markdown string to append after the static
|
|
21
|
+
* instructions.
|
|
22
|
+
*/
|
|
23
|
+
export declare function buildDomainSummary(root?: string): string;
|
|
13
24
|
/** Register the `prime` subcommand. */
|
|
14
25
|
export declare function registerPrime(program: Cmd): void;
|
|
15
26
|
//# sourceMappingURL=prime.d.ts.map
|
|
@@ -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;AAOhD;;;GAGG;AACH,wBAAgB,YAAY,IAAI,MAAM,CA6arC;AAID;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAiJxD;AAED,uCAAuC;AACvC,wBAAgB,aAAa,CAAC,OAAO,EAAE,GAAG,GAAG,IAAI,CAYhD"}
|
|
@@ -6,13 +6,15 @@ import { domainDir } from "../../../shared/paths.js";
|
|
|
6
6
|
* The full agent context document.
|
|
7
7
|
* Keep the CLI Command Reference tables in sync with the Quick Reference block in init.ts#dkkSection.
|
|
8
8
|
*/
|
|
9
|
-
function primeContent() {
|
|
9
|
+
export function primeContent() {
|
|
10
10
|
return `# Domain Knowledge Kit — Agent Context
|
|
11
11
|
|
|
12
12
|
## Project Overview
|
|
13
13
|
|
|
14
14
|
This project uses a **Domain Knowledge Pack**: a structured, YAML-based domain model with Architecture Decision Records (ADRs), full-text search, and generated Markdown documentation. The CLI tool is \`dkk\`.
|
|
15
15
|
|
|
16
|
+
DKK supports **multi-repo federation**: when a \`.dkk/service.yml\` exists, the repo declares itself a service, and a \`.dkk/federation.yml\` can list peer services (other repos, by local path or git URL). The loader transparently merges peer domain models so that queries, search, graph traversal, validation, and \`dkk consumers\` span every loaded peer. Cross-service references use the additive grammar \`<service>:<context>.<Item>\` — bare refs stay local-only.
|
|
17
|
+
|
|
16
18
|
## Core Principles
|
|
17
19
|
|
|
18
20
|
1. **Domain YAML is the single source of truth.** Never generate domain knowledge from code.
|
|
@@ -26,6 +28,11 @@ This project uses a **Domain Knowledge Pack**: a structured, YAML-based domain m
|
|
|
26
28
|
|
|
27
29
|
\`\`\`
|
|
28
30
|
.dkk/
|
|
31
|
+
service.yml # OPTIONAL: declares this repo as a federated service
|
|
32
|
+
# { name: kebab-case, exports: [<ctx-name>, ...] }
|
|
33
|
+
federation.yml # OPTIONAL: lists peer services (local path or git URL+branch)
|
|
34
|
+
federation.lock.json # AUTO: pins resolved git-source commit SHAs
|
|
35
|
+
imports/ # AUTO (gitignored): cached peer .dkk/ trees from \`dkk pull\`
|
|
29
36
|
domain/
|
|
30
37
|
index.yml # Top-level: registered contexts + cross-context flows
|
|
31
38
|
actors.yml # Global actors (human | system | external)
|
|
@@ -64,6 +71,18 @@ This project uses a **Domain Knowledge Pack**: a structured, YAML-based domain m
|
|
|
64
71
|
| Flow | \`flow.<Name>\` | \`flow.OrderFulfillment\` |
|
|
65
72
|
| Context | \`context.<name>\` | \`context.ordering\` |
|
|
66
73
|
|
|
74
|
+
**Federated form** (cross-repo references): prefix any id with \`<service>:\`.
|
|
75
|
+
|
|
76
|
+
| Federated Form | Example |
|
|
77
|
+
|------------------------------------------------|----------------------------------------|
|
|
78
|
+
| \`<service>:<context>.<ItemName>\` | \`ordering:ordering.OrderPlaced\` |
|
|
79
|
+
| \`<service>:actor.<Name>\` | \`payments:actor.PaymentGateway\` |
|
|
80
|
+
| \`<service>:adr-NNNN\` | \`ordering:adr-0007\` |
|
|
81
|
+
| \`<service>:flow.<Name>\` | \`ordering:flow.OrderFulfillment\` |
|
|
82
|
+
| \`<service>:context.<name>\` | \`ordering:context.ordering\` |
|
|
83
|
+
|
|
84
|
+
Bare ids resolve only against the local repo. Service-prefixed ids resolve against \`model.peers.get(<service>)\`. A self-prefix (\`<localService>:<id>\`) is treated as local. Use the fully-qualified form (\`<service>:<context>.<Name>\`) when writing cross-service refs in YAML — the name-only shorthand is reserved for \`dkk show\`.
|
|
85
|
+
|
|
67
86
|
## CLI Command Reference
|
|
68
87
|
|
|
69
88
|
### Query
|
|
@@ -115,10 +134,29 @@ This project uses a **Domain Knowledge Pack**: a structured, YAML-based domain m
|
|
|
115
134
|
|
|
116
135
|
### Agent
|
|
117
136
|
|
|
118
|
-
| Command
|
|
119
|
-
|
|
120
|
-
| \`dkk init\`
|
|
121
|
-
| \`dkk
|
|
137
|
+
| Command | Purpose |
|
|
138
|
+
|------------------------|------------------------------------------------------|
|
|
139
|
+
| \`dkk init\` | Create/update AGENTS.md with DKK section |
|
|
140
|
+
| \`dkk init --skills\` | Also install agent skills into \`.github/skills/\` |
|
|
141
|
+
| \`dkk init --claude\` | Also scaffold \`.claude/\` (settings, hooks, skills, agents, commands) |
|
|
142
|
+
| \`dkk prime\` | Output this agent context to stdout |
|
|
143
|
+
| \`dkk mcp\` | Run the DKK MCP server over stdio |
|
|
144
|
+
|
|
145
|
+
### Federation
|
|
146
|
+
|
|
147
|
+
| Command | Purpose |
|
|
148
|
+
|----------------------------------------------------|------------------------------------------------------|
|
|
149
|
+
| \`dkk service init --name <n> --export <ctx>\` | Declare this repo a federated service (writes \`.dkk/service.yml\`) |
|
|
150
|
+
| \`dkk peers add <name> --local <path>\` | Register a peer by filesystem path |
|
|
151
|
+
| \`dkk peers add <name> --git <url> --branch <b>\` | Register a peer by git URL + branch |
|
|
152
|
+
| \`dkk peers list\` | List configured peers + reachability state |
|
|
153
|
+
| \`dkk peers status\` | Detailed peer status: service id, exports, contexts |
|
|
154
|
+
| \`dkk pull [name]\` | Sparse-checkout git peers into \`.dkk/imports/\` |
|
|
155
|
+
| \`dkk pull --refresh\` | Re-fetch even when cache exists |
|
|
156
|
+
| \`dkk pull --offline\` | Use cache only; no network |
|
|
157
|
+
| \`dkk consumers <id>\` | Reverse-lookup: which peers reference this item |
|
|
158
|
+
| \`dkk validate --federation strict\` | Promote unreachable-peer warnings to errors (CI gate) |
|
|
159
|
+
| \`dkk search --service <n>\` | Narrow search to one service (local or peer) |
|
|
122
160
|
|
|
123
161
|
## Domain Search Workflow
|
|
124
162
|
|
|
@@ -335,13 +373,49 @@ When reviewing changes for domain impact:
|
|
|
335
373
|
\`\`\`
|
|
336
374
|
7. **Compile impact analysis** — Report impacted items, blast radius, invariant violations, affected ADRs, and recommendations.
|
|
337
375
|
|
|
376
|
+
## Federation Workflow
|
|
377
|
+
|
|
378
|
+
When the local repo has a \`.dkk/federation.yml\`, the loader hydrates every reachable peer's domain into \`model.peers\`. Reading commands (\`dkk show\`, \`dkk search\`, \`dkk related\`, \`dkk graph\`) and the MCP server transparently span peers.
|
|
379
|
+
|
|
380
|
+
1. **Inspect peer state**:
|
|
381
|
+
\`\`\`bash
|
|
382
|
+
dkk peers list # quick overview
|
|
383
|
+
dkk peers status # exports + contexts per peer
|
|
384
|
+
\`\`\`
|
|
385
|
+
2. **Reference a peer item** — when authoring a local policy, ADR, or flow that consumes something across the boundary, use the fully-qualified form:
|
|
386
|
+
\`\`\`yaml
|
|
387
|
+
when:
|
|
388
|
+
events:
|
|
389
|
+
- ordering:ordering.OrderPlaced # peer service "ordering", context "ordering", item "OrderPlaced"
|
|
390
|
+
\`\`\`
|
|
391
|
+
3. **Inspect a peer item directly**:
|
|
392
|
+
\`\`\`bash
|
|
393
|
+
dkk show ordering:OrderPlaced # shorthand (single-export service)
|
|
394
|
+
dkk show ordering:ordering.OrderPlaced # fully qualified
|
|
395
|
+
\`\`\`
|
|
396
|
+
4. **Find downstream consumers of a local item** before renaming/deprecating:
|
|
397
|
+
\`\`\`bash
|
|
398
|
+
dkk consumers ordering.OrderPlaced
|
|
399
|
+
\`\`\`
|
|
400
|
+
5. **Refresh git-source peers** when needed:
|
|
401
|
+
\`\`\`bash
|
|
402
|
+
dkk pull ordering # fetch (no-op if SHA matches the lockfile)
|
|
403
|
+
dkk pull ordering --refresh # force re-fetch
|
|
404
|
+
\`\`\`
|
|
405
|
+
|
|
406
|
+
**Reference resolution rules:**
|
|
407
|
+
- A **bare** ref (\`OrderPlaced\`, \`ordering.OrderPlaced\`) resolves only against the local repo's items. Never falls through to peers — collisions are silent data corruption.
|
|
408
|
+
- A **service-prefixed** ref (\`ordering:ordering.OrderPlaced\`) resolves only against \`model.peers.get(<service>)\`. If the service equals the local service name, it's treated as a local ref (self-prefix is harmless).
|
|
409
|
+
- An **unreachable peer** produces a warning by default. CI gates that must guarantee resolution should run \`dkk validate --federation strict\`.
|
|
410
|
+
|
|
338
411
|
## Validation
|
|
339
412
|
|
|
340
413
|
The validator checks:
|
|
341
414
|
|
|
342
|
-
- **Schema conformance** — Each YAML file is validated against its JSON Schema.
|
|
343
|
-
- **Cross-references** — All item-to-item, item-to-ADR, and ADR-to-item references resolve correctly.
|
|
415
|
+
- **Schema conformance** — Each YAML file is validated against its JSON Schema. \`.dkk/service.yml\` and \`.dkk/federation.yml\` are validated at load time.
|
|
416
|
+
- **Cross-references** — All item-to-item, item-to-ADR, and ADR-to-item references resolve correctly, including federated forms.
|
|
344
417
|
- **Context registration** — Every context directory in \`.dkk/domain/contexts/\` is registered in \`.dkk/domain/index.yml\`.
|
|
418
|
+
- **Federation strictness** (\`--federation strict\`): unreachable peers escalate from warnings to errors; refs to non-exported peer contexts always warn.
|
|
345
419
|
|
|
346
420
|
## Generated Documentation
|
|
347
421
|
|
|
@@ -368,7 +442,7 @@ Do not edit files under \`.dkk/docs/\` by hand; they are regenerated on each ren
|
|
|
368
442
|
* model on disk. Returns the Markdown string to append after the static
|
|
369
443
|
* instructions.
|
|
370
444
|
*/
|
|
371
|
-
function buildDomainSummary(root) {
|
|
445
|
+
export function buildDomainSummary(root) {
|
|
372
446
|
// If there's no .dkk/domain/ directory at all, short-circuit.
|
|
373
447
|
if (!existsSync(domainDir(root))) {
|
|
374
448
|
return ("\n## Current Domain Summary\n\n" +
|
|
@@ -408,6 +482,28 @@ function buildDomainSummary(root) {
|
|
|
408
482
|
`**${totalItems}** domain item(s), ` +
|
|
409
483
|
`**${model.actors.length}** actor(s), ` +
|
|
410
484
|
`**${model.adrs.size}** ADR(s)\n`);
|
|
485
|
+
// ── Service identity & peers (federation) ────────────────────────
|
|
486
|
+
if (model.service) {
|
|
487
|
+
lines.push(`### Service Identity\n`);
|
|
488
|
+
lines.push(`- **name:** \`${model.service.name}\``);
|
|
489
|
+
lines.push(`- **exports:** ${model.service.exports.map((e) => `\`${e}\``).join(", ") || "(none)"}`);
|
|
490
|
+
if (model.service.description) {
|
|
491
|
+
lines.push(`- **description:** ${model.service.description}`);
|
|
492
|
+
}
|
|
493
|
+
lines.push("");
|
|
494
|
+
}
|
|
495
|
+
if (model.peers && model.peers.size > 0) {
|
|
496
|
+
lines.push(`### Federated Peers (${model.peers.size})\n`);
|
|
497
|
+
for (const [peerName, peerModel] of model.peers) {
|
|
498
|
+
const peerExports = peerModel.service?.exports ?? [];
|
|
499
|
+
const peerCtxCount = peerModel.contexts.size;
|
|
500
|
+
const exportsStr = peerExports.length ? peerExports.map((e) => `\`${e}\``).join(", ") : "(none declared)";
|
|
501
|
+
lines.push(`- **${peerName}**: ${peerCtxCount} context(s), exports: ${exportsStr}`);
|
|
502
|
+
}
|
|
503
|
+
lines.push("");
|
|
504
|
+
lines.push("Reference any peer item as \`<service>:<context>.<Name>\` (e.g. \`ordering:ordering.OrderPlaced\`).");
|
|
505
|
+
lines.push("");
|
|
506
|
+
}
|
|
411
507
|
// ── Contexts detail ──────────────────────────────────────────────
|
|
412
508
|
if (model.contexts.size > 0) {
|
|
413
509
|
lines.push("### Contexts\n");
|
|
@@ -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,
|
|
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,MAAM,UAAU,YAAY;IAC1B,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2aR,CAAC;AACF,CAAC;AAED,wEAAwE;AAExE;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAa;IAC9C,8DAA8D;IAC9D,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;QACjC,OAAO,CACL,iCAAiC;YACjC,+DAA+D,CAChE,CAAC;IACJ,CAAC;IAED,IAAI,KAAkB,CAAC;IACvB,IAAI,CAAC;QACH,KAAK,GAAG,eAAe,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;IACpC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CACL,iCAAiC;YACjC,+DAA+D,CAChE,CAAC;IACJ,CAAC;IAED,+EAA+E;IAC/E,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACpF,OAAO,CACL,iCAAiC;YACjC,+DAA+D,CAChE,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;IAE5C,oEAAoE;IACpE,MAAM,MAAM,GAA6B;QACvC,KAAK,EAAE,CAAC;QACR,OAAO,EAAE,CAAC;QACV,MAAM,EAAE,CAAC;QACT,SAAS,EAAE,CAAC;QACZ,UAAU,EAAE,CAAC;QACb,QAAQ,EAAE,CAAC;KACZ,CAAC;IAEF,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;QAC1C,WAAW,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE;YACxB,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;QACjB,CAAC,CAAC,CAAC;IACL,CAAC;IAED,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IACpE,KAAK,CAAC,IAAI,CACR,KAAK,KAAK,CAAC,QAAQ,CAAC,IAAI,yBAAyB;QACjD,KAAK,UAAU,qBAAqB;QACpC,KAAK,KAAK,CAAC,MAAM,CAAC,MAAM,eAAe;QACvC,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI,aAAa,CAClC,CAAC;IAEF,oEAAoE;IACpE,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QAClB,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;QACrC,KAAK,CAAC,IAAI,CAAC,iBAAiB,KAAK,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC;QACpD,KAAK,CAAC,IAAI,CAAC,kBAAkB,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,QAAQ,EAAE,CAAC,CAAC;QACpG,IAAI,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;YAC9B,KAAK,CAAC,IAAI,CAAC,sBAAsB,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;QAChE,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IACD,IAAI,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;QACxC,KAAK,CAAC,IAAI,CAAC,wBAAwB,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,CAAC;QAC1D,KAAK,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;YAChD,MAAM,WAAW,GAAG,SAAS,CAAC,OAAO,EAAE,OAAO,IAAI,EAAE,CAAC;YACrD,MAAM,YAAY,GAAG,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC;YAC7C,MAAM,UAAU,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC;YAC1G,KAAK,CAAC,IAAI,CAAC,OAAO,QAAQ,OAAO,YAAY,yBAAyB,UAAU,EAAE,CAAC,CAAC;QACtF,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,qGAAqG,CAAC,CAAC;QAClH,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,oEAAoE;IACpE,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;QAC5B,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAC7B,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;YAC1C,MAAM,MAAM,GAA6B;gBACvC,KAAK,EAAE,CAAC;gBACR,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,CAAC;gBACT,SAAS,EAAE,CAAC;gBACZ,UAAU,EAAE,CAAC;gBACb,QAAQ,EAAE,CAAC;aACZ,CAAC;YACF,WAAW,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE;gBACxB,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;YACjB,CAAC,CAAC,CAAC;YACH,MAAM,KAAK,GAAa,EAAE,CAAC;YAC3B,IAAI,MAAM,CAAC,KAAK;gBAAE,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,KAAK,WAAW,CAAC,CAAC;YACzD,IAAI,MAAM,CAAC,OAAO;gBAAE,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,OAAO,aAAa,CAAC,CAAC;YAC/D,IAAI,MAAM,CAAC,SAAS;gBAAE,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,SAAS,eAAe,CAAC,CAAC;YACrE,IAAI,MAAM,CAAC,MAAM;gBAAE,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,kBAAkB,CAAC,CAAC;YAClE,IAAI,MAAM,CAAC,UAAU;gBAAE,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,UAAU,gBAAgB,CAAC,CAAC;YACxE,IAAI,MAAM,CAAC,QAAQ;gBAAE,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,QAAQ,mBAAmB,CAAC,CAAC;YACvE,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC9D,KAAK,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,IAAI,OAAO,GAAG,CAAC,WAAW,GAAG,QAAQ,EAAE,CAAC,CAAC;QACjE,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,qEAAqE;IACrE,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAC3B,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;YACjC,KAAK,CAAC,IAAI,CAAC,OAAO,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,IAAI,MAAM,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;QAC1E,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,qEAAqE;IACrE,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;QACxB,KAAK,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;QAClD,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;YACtC,KAAK,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,CAAC,KAAK,KAAK,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;QAC9D,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,qEAAqE;IACrE,MAAM,UAAU,GAA2C,EAAE,CAAC;IAC9D,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;QAC1C,KAAK,MAAM,GAAG,IAAI,GAAG,CAAC,UAAU,IAAI,EAAE,EAAE,CAAC;YACvC,UAAU,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC;IACD,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,KAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;QACtC,KAAK,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,UAAU,EAAE,CAAC;YACtC,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,EAAE,QAAQ,IAAI,EAAE,CAAC;YACzC,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,EAAE,MAAM,IAAI,EAAE,CAAC;YACrC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;YACtD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;YACtD,KAAK,CAAC,IAAI,CACR,OAAO,GAAG,IAAI,GAAG,CAAC,IAAI,gBAAgB,MAAM,cAAc,MAAM,GAAG,CACpE,CAAC;QACJ,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,uCAAuC;AACvC,MAAM,UAAU,aAAa,CAAC,OAAY;IACxC,OAAO;SACJ,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,yCAAyC,CAAC;SACtD,MAAM,CAAC,mBAAmB,EAAE,0BAA0B,CAAC;SACvD,MAAM,CAAC,eAAe,EAAE,2DAA2D,CAAC;SACpF,MAAM,CAAC,CAAC,IAA6C,EAAE,EAAE;QACxD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC;QACrC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YACrB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACtD,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `dkk consumers <id>` — reverse lookup across federated peers.
|
|
3
|
+
*
|
|
4
|
+
* Given a local item id (e.g. `ordering.OrderPlaced`), walk every
|
|
5
|
+
* loaded peer model and report references back to that item. This is
|
|
6
|
+
* the producer-side answer to "who breaks if I rename this?".
|
|
7
|
+
*
|
|
8
|
+
* The walk inspects the ref-bearing fields that the validator already
|
|
9
|
+
* understands: events.raised_by, commands.handled_by / actor,
|
|
10
|
+
* aggregates.handles / emits, policies.when / then, read_models.subscribes_to
|
|
11
|
+
* / used_by, ADR domain_refs / superseded_by, and flow step refs.
|
|
12
|
+
*
|
|
13
|
+
* Both fully-qualified peer refs (`<localService>:<ctx>.<Name>`) and
|
|
14
|
+
* the same-service bare form (when a peer happens to have a local
|
|
15
|
+
* service named the same as ours — rare) are matched.
|
|
16
|
+
*/
|
|
17
|
+
import type { Command as Cmd } from "commander";
|
|
18
|
+
import type { DomainModel } from "../../../shared/types/domain.js";
|
|
19
|
+
import "../loader.js";
|
|
20
|
+
interface ConsumerHit {
|
|
21
|
+
/** Peer service that references the queried item. */
|
|
22
|
+
service: string;
|
|
23
|
+
/** Reference path describing where in the peer model the match was found. */
|
|
24
|
+
source: string;
|
|
25
|
+
/** The relation kind (e.g. "when.events", "subscribes_to", "domain_refs"). */
|
|
26
|
+
relation: string;
|
|
27
|
+
/** The raw ref string as written in the peer's YAML. */
|
|
28
|
+
ref: string;
|
|
29
|
+
}
|
|
30
|
+
export declare function registerConsumers(program: Cmd): void;
|
|
31
|
+
/**
|
|
32
|
+
* Walk every loaded peer model and collect references back to the
|
|
33
|
+
* queried item. Matches both the fully-qualified peer form
|
|
34
|
+
* (`<localService>:<ctx>.<Name>`) and bare names — the latter handles
|
|
35
|
+
* the case where a peer references the same item via shorthand
|
|
36
|
+
* inside its own walk (uncommon, but possible).
|
|
37
|
+
*/
|
|
38
|
+
export declare function findConsumers(model: DomainModel, rawId: string, localService: string | undefined): ConsumerHit[];
|
|
39
|
+
export {};
|
|
40
|
+
//# sourceMappingURL=consumers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"consumers.d.ts","sourceRoot":"","sources":["../../../../src/features/federation/commands/consumers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,KAAK,EAAE,OAAO,IAAI,GAAG,EAAE,MAAM,WAAW,CAAC;AAGhD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAGnE,OAAO,cAAc,CAAC;AAEtB,UAAU,WAAW;IACnB,qDAAqD;IACrD,OAAO,EAAE,MAAM,CAAC;IAChB,6EAA6E;IAC7E,MAAM,EAAE,MAAM,CAAC;IACf,8EAA8E;IAC9E,QAAQ,EAAE,MAAM,CAAC;IACjB,wDAAwD;IACxD,GAAG,EAAE,MAAM,CAAC;CACb;AAQD,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,GAAG,GAAG,IAAI,CAkCpD;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,WAAW,EAClB,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,MAAM,GAAG,SAAS,GAC/B,WAAW,EAAE,CAmCf"}
|