@tienne/gestalt 0.88.0 → 0.90.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (226) hide show
  1. package/CLAUDE.md +7 -2
  2. package/README.ko.md +2 -1
  3. package/README.md +3 -1
  4. package/dist/package.json +7 -4
  5. package/dist/plugin/skills/_shared/proactive-routing.md +29 -12
  6. package/dist/plugin/skills/architecture/SKILL.md +944 -0
  7. package/dist/plugin/skills/brief/SKILL.md +2 -1
  8. package/dist/plugin/skills/dispatch/SKILL.md +2 -0
  9. package/dist/plugin/skills/explain/SKILL.md +4 -2
  10. package/dist/plugin/skills/jira-create/SKILL.md +2 -0
  11. package/dist/plugin/skills/pr/SKILL.md +2 -0
  12. package/dist/plugin/skills/presentation/SKILL.md +2 -0
  13. package/dist/plugin/skills/review/SKILL.md +1 -0
  14. package/dist/plugin/skills/review-loop/SKILL.md +3 -1
  15. package/dist/plugin/skills/review-reply/SKILL.md +2 -0
  16. package/dist/plugin/skills/ship/SKILL.md +2 -2
  17. package/dist/plugin/skills/slack-send/SKILL.md +2 -0
  18. package/dist/schemas/architecture-ir.schema.json +596 -0
  19. package/dist/src/architecture/canvas-geometry.d.ts +40 -0
  20. package/dist/src/architecture/canvas-geometry.d.ts.map +1 -0
  21. package/dist/src/architecture/canvas-geometry.js +212 -0
  22. package/dist/src/architecture/canvas-geometry.js.map +1 -0
  23. package/dist/src/architecture/codeowners.d.ts +16 -0
  24. package/dist/src/architecture/codeowners.d.ts.map +1 -0
  25. package/dist/src/architecture/codeowners.js +58 -0
  26. package/dist/src/architecture/codeowners.js.map +1 -0
  27. package/dist/src/architecture/compare-layout.d.ts +27 -0
  28. package/dist/src/architecture/compare-layout.d.ts.map +1 -0
  29. package/dist/src/architecture/compare-layout.js +72 -0
  30. package/dist/src/architecture/compare-layout.js.map +1 -0
  31. package/dist/src/architecture/dataflow-layout.d.ts +29 -0
  32. package/dist/src/architecture/dataflow-layout.d.ts.map +1 -0
  33. package/dist/src/architecture/dataflow-layout.js +229 -0
  34. package/dist/src/architecture/dataflow-layout.js.map +1 -0
  35. package/dist/src/architecture/doc-fresh.d.ts +31 -0
  36. package/dist/src/architecture/doc-fresh.d.ts.map +1 -0
  37. package/dist/src/architecture/doc-fresh.js +84 -0
  38. package/dist/src/architecture/doc-fresh.js.map +1 -0
  39. package/dist/src/architecture/doc-link.d.ts +84 -0
  40. package/dist/src/architecture/doc-link.d.ts.map +1 -0
  41. package/dist/src/architecture/doc-link.js +396 -0
  42. package/dist/src/architecture/doc-link.js.map +1 -0
  43. package/dist/src/architecture/doc-routes.d.ts +39 -0
  44. package/dist/src/architecture/doc-routes.d.ts.map +1 -0
  45. package/dist/src/architecture/doc-routes.js +123 -0
  46. package/dist/src/architecture/doc-routes.js.map +1 -0
  47. package/dist/src/architecture/doc-scan.d.ts +107 -0
  48. package/dist/src/architecture/doc-scan.d.ts.map +1 -0
  49. package/dist/src/architecture/doc-scan.js +617 -0
  50. package/dist/src/architecture/doc-scan.js.map +1 -0
  51. package/dist/src/architecture/doc-stale.d.ts +32 -0
  52. package/dist/src/architecture/doc-stale.d.ts.map +1 -0
  53. package/dist/src/architecture/doc-stale.js +60 -0
  54. package/dist/src/architecture/doc-stale.js.map +1 -0
  55. package/dist/src/architecture/drilldown.d.ts +51 -0
  56. package/dist/src/architecture/drilldown.d.ts.map +1 -0
  57. package/dist/src/architecture/drilldown.js +1160 -0
  58. package/dist/src/architecture/drilldown.js.map +1 -0
  59. package/dist/src/architecture/endpoint-match.d.ts +43 -0
  60. package/dist/src/architecture/endpoint-match.d.ts.map +1 -0
  61. package/dist/src/architecture/endpoint-match.js +133 -0
  62. package/dist/src/architecture/endpoint-match.js.map +1 -0
  63. package/dist/src/architecture/flow-layout.d.ts +79 -0
  64. package/dist/src/architecture/flow-layout.d.ts.map +1 -0
  65. package/dist/src/architecture/flow-layout.js +519 -0
  66. package/dist/src/architecture/flow-layout.js.map +1 -0
  67. package/dist/src/architecture/focus.d.ts +14 -0
  68. package/dist/src/architecture/focus.d.ts.map +1 -0
  69. package/dist/src/architecture/focus.js +107 -0
  70. package/dist/src/architecture/focus.js.map +1 -0
  71. package/dist/src/architecture/global-context.d.ts +23 -0
  72. package/dist/src/architecture/global-context.d.ts.map +1 -0
  73. package/dist/src/architecture/global-context.js +67 -0
  74. package/dist/src/architecture/global-context.js.map +1 -0
  75. package/dist/src/architecture/html-client.d.ts +35 -0
  76. package/dist/src/architecture/html-client.d.ts.map +1 -0
  77. package/dist/src/architecture/html-client.js +1852 -0
  78. package/dist/src/architecture/html-client.js.map +1 -0
  79. package/dist/src/architecture/html-renderer.d.ts +22 -0
  80. package/dist/src/architecture/html-renderer.d.ts.map +1 -0
  81. package/dist/src/architecture/html-renderer.js +1290 -0
  82. package/dist/src/architecture/html-renderer.js.map +1 -0
  83. package/dist/src/architecture/html-theme.d.ts +25 -0
  84. package/dist/src/architecture/html-theme.d.ts.map +1 -0
  85. package/dist/src/architecture/html-theme.js +681 -0
  86. package/dist/src/architecture/html-theme.js.map +1 -0
  87. package/dist/src/architecture/index.d.ts +9 -0
  88. package/dist/src/architecture/index.d.ts.map +1 -0
  89. package/dist/src/architecture/index.js +9 -0
  90. package/dist/src/architecture/index.js.map +1 -0
  91. package/dist/src/architecture/ir-schema.d.ts +1832 -0
  92. package/dist/src/architecture/ir-schema.d.ts.map +1 -0
  93. package/dist/src/architecture/ir-schema.js +343 -0
  94. package/dist/src/architecture/ir-schema.js.map +1 -0
  95. package/dist/src/architecture/kind-text.d.ts +21 -0
  96. package/dist/src/architecture/kind-text.d.ts.map +1 -0
  97. package/dist/src/architecture/kind-text.js +42 -0
  98. package/dist/src/architecture/kind-text.js.map +1 -0
  99. package/dist/src/architecture/layout.d.ts +227 -0
  100. package/dist/src/architecture/layout.d.ts.map +1 -0
  101. package/dist/src/architecture/layout.js +627 -0
  102. package/dist/src/architecture/layout.js.map +1 -0
  103. package/dist/src/architecture/mcp-tool-match.d.ts +49 -0
  104. package/dist/src/architecture/mcp-tool-match.d.ts.map +1 -0
  105. package/dist/src/architecture/mcp-tool-match.js +53 -0
  106. package/dist/src/architecture/mcp-tool-match.js.map +1 -0
  107. package/dist/src/architecture/merge.d.ts +54 -0
  108. package/dist/src/architecture/merge.d.ts.map +1 -0
  109. package/dist/src/architecture/merge.js +681 -0
  110. package/dist/src/architecture/merge.js.map +1 -0
  111. package/dist/src/architecture/micro-app.d.ts +20 -0
  112. package/dist/src/architecture/micro-app.d.ts.map +1 -0
  113. package/dist/src/architecture/micro-app.js +41 -0
  114. package/dist/src/architecture/micro-app.js.map +1 -0
  115. package/dist/src/architecture/name-ref-match.d.ts +43 -0
  116. package/dist/src/architecture/name-ref-match.d.ts.map +1 -0
  117. package/dist/src/architecture/name-ref-match.js +127 -0
  118. package/dist/src/architecture/name-ref-match.js.map +1 -0
  119. package/dist/src/architecture/packs/data.d.ts +109 -0
  120. package/dist/src/architecture/packs/data.d.ts.map +1 -0
  121. package/dist/src/architecture/packs/data.js +64 -0
  122. package/dist/src/architecture/packs/data.js.map +1 -0
  123. package/dist/src/architecture/packs/generic.d.ts +47 -0
  124. package/dist/src/architecture/packs/generic.d.ts.map +1 -0
  125. package/dist/src/architecture/packs/generic.js +35 -0
  126. package/dist/src/architecture/packs/generic.js.map +1 -0
  127. package/dist/src/architecture/packs/harness.d.ts +96 -0
  128. package/dist/src/architecture/packs/harness.d.ts.map +1 -0
  129. package/dist/src/architecture/packs/harness.js +66 -0
  130. package/dist/src/architecture/packs/harness.js.map +1 -0
  131. package/dist/src/architecture/packs/index.d.ts +840 -0
  132. package/dist/src/architecture/packs/index.d.ts.map +1 -0
  133. package/dist/src/architecture/packs/index.js +87 -0
  134. package/dist/src/architecture/packs/index.js.map +1 -0
  135. package/dist/src/architecture/packs/infra.d.ts +91 -0
  136. package/dist/src/architecture/packs/infra.d.ts.map +1 -0
  137. package/dist/src/architecture/packs/infra.js +57 -0
  138. package/dist/src/architecture/packs/infra.js.map +1 -0
  139. package/dist/src/architecture/packs/knowledge.d.ts +72 -0
  140. package/dist/src/architecture/packs/knowledge.d.ts.map +1 -0
  141. package/dist/src/architecture/packs/knowledge.js +58 -0
  142. package/dist/src/architecture/packs/knowledge.js.map +1 -0
  143. package/dist/src/architecture/packs/process.d.ts +87 -0
  144. package/dist/src/architecture/packs/process.d.ts.map +1 -0
  145. package/dist/src/architecture/packs/process.js +52 -0
  146. package/dist/src/architecture/packs/process.js.map +1 -0
  147. package/dist/src/architecture/packs/render-classes.d.ts +11 -0
  148. package/dist/src/architecture/packs/render-classes.d.ts.map +1 -0
  149. package/dist/src/architecture/packs/render-classes.js +92 -0
  150. package/dist/src/architecture/packs/render-classes.js.map +1 -0
  151. package/dist/src/architecture/packs/types.d.ts +66 -0
  152. package/dist/src/architecture/packs/types.d.ts.map +1 -0
  153. package/dist/src/architecture/packs/types.js +18 -0
  154. package/dist/src/architecture/packs/types.js.map +1 -0
  155. package/dist/src/architecture/packs/web-product.d.ts +348 -0
  156. package/dist/src/architecture/packs/web-product.d.ts.map +1 -0
  157. package/dist/src/architecture/packs/web-product.js +226 -0
  158. package/dist/src/architecture/packs/web-product.js.map +1 -0
  159. package/dist/src/architecture/sequence-layout.d.ts +50 -0
  160. package/dist/src/architecture/sequence-layout.d.ts.map +1 -0
  161. package/dist/src/architecture/sequence-layout.js +140 -0
  162. package/dist/src/architecture/sequence-layout.js.map +1 -0
  163. package/dist/src/architecture/service-facts.d.ts +30 -0
  164. package/dist/src/architecture/service-facts.d.ts.map +1 -0
  165. package/dist/src/architecture/service-facts.js +88 -0
  166. package/dist/src/architecture/service-facts.js.map +1 -0
  167. package/dist/src/architecture/store.d.ts +50 -0
  168. package/dist/src/architecture/store.d.ts.map +1 -0
  169. package/dist/src/architecture/store.js +320 -0
  170. package/dist/src/architecture/store.js.map +1 -0
  171. package/dist/src/architecture/types.d.ts +400 -0
  172. package/dist/src/architecture/types.d.ts.map +1 -0
  173. package/dist/src/architecture/types.js +75 -0
  174. package/dist/src/architecture/types.js.map +1 -0
  175. package/dist/src/architecture/validator.d.ts +65 -0
  176. package/dist/src/architecture/validator.d.ts.map +1 -0
  177. package/dist/src/architecture/validator.js +1249 -0
  178. package/dist/src/architecture/validator.js.map +1 -0
  179. package/dist/src/core/errors.d.ts +4 -0
  180. package/dist/src/core/errors.d.ts.map +1 -1
  181. package/dist/src/core/errors.js +8 -0
  182. package/dist/src/core/errors.js.map +1 -1
  183. package/dist/src/core/types.d.ts +4 -0
  184. package/dist/src/core/types.d.ts.map +1 -1
  185. package/dist/src/mcp/schemas.d.ts +317 -0
  186. package/dist/src/mcp/schemas.d.ts.map +1 -1
  187. package/dist/src/mcp/schemas.js +151 -0
  188. package/dist/src/mcp/schemas.js.map +1 -1
  189. package/dist/src/mcp/server.d.ts.map +1 -1
  190. package/dist/src/mcp/server.js +7 -1
  191. package/dist/src/mcp/server.js.map +1 -1
  192. package/dist/src/mcp/tools/architecture-passthrough.d.ts +9 -0
  193. package/dist/src/mcp/tools/architecture-passthrough.d.ts.map +1 -0
  194. package/dist/src/mcp/tools/architecture-passthrough.js +587 -0
  195. package/dist/src/mcp/tools/architecture-passthrough.js.map +1 -0
  196. package/dist/src/skills/parser.d.ts.map +1 -1
  197. package/dist/src/skills/parser.js +1 -0
  198. package/dist/src/skills/parser.js.map +1 -1
  199. package/dist/src/skills/types.d.ts +4 -0
  200. package/dist/src/skills/types.d.ts.map +1 -1
  201. package/dist/src/utils/claude-projects.d.ts +19 -0
  202. package/dist/src/utils/claude-projects.d.ts.map +1 -0
  203. package/dist/src/utils/claude-projects.js +157 -0
  204. package/dist/src/utils/claude-projects.js.map +1 -0
  205. package/dist/src/utils/read-only-tools.d.ts +19 -0
  206. package/dist/src/utils/read-only-tools.d.ts.map +1 -0
  207. package/dist/src/utils/read-only-tools.js +132 -0
  208. package/dist/src/utils/read-only-tools.js.map +1 -0
  209. package/package.json +7 -4
  210. package/plugin/.codex-plugin/plugin.json +1 -1
  211. package/plugin/.mcp.json +1 -1
  212. package/plugin/mcp.json +1 -1
  213. package/plugin/skills/_shared/proactive-routing.md +29 -12
  214. package/plugin/skills/architecture/SKILL.md +944 -0
  215. package/plugin/skills/brief/SKILL.md +2 -1
  216. package/plugin/skills/dispatch/SKILL.md +2 -0
  217. package/plugin/skills/explain/SKILL.md +4 -2
  218. package/plugin/skills/jira-create/SKILL.md +2 -0
  219. package/plugin/skills/pr/SKILL.md +2 -0
  220. package/plugin/skills/presentation/SKILL.md +2 -0
  221. package/plugin/skills/review/SKILL.md +1 -0
  222. package/plugin/skills/review-loop/SKILL.md +3 -1
  223. package/plugin/skills/review-reply/SKILL.md +2 -0
  224. package/plugin/skills/ship/SKILL.md +2 -2
  225. package/plugin/skills/slack-send/SKILL.md +2 -0
  226. package/schemas/architecture-ir.schema.json +596 -0
@@ -0,0 +1,32 @@
1
+ import type { ArchitectureIr } from './types.js';
2
+ import type { ScannedDoc } from './doc-scan.js';
3
+ export interface ChangedFile {
4
+ /** 기술 IR의 repo id나 레포 이름, 또는 문서가 적은 레포 이름 */
5
+ repo: string;
6
+ path: string;
7
+ }
8
+ export interface StaleReason {
9
+ /** code-ref는 문서가 직접 가리킨 파일, node는 문서가 설명하는 기술 노드의 근거 파일이 바뀌었다 */
10
+ kind: 'code-ref' | 'node';
11
+ file: string;
12
+ node?: string;
13
+ line?: number;
14
+ }
15
+ export interface StaleDoc {
16
+ /** `<repoId>/<path>` */
17
+ doc: string;
18
+ title?: string;
19
+ reasons: StaleReason[];
20
+ }
21
+ export interface StaleDocsOptions {
22
+ /** 문서가 적은 레포 이름 → 기술 IR의 repo id */
23
+ repoAliases?: Record<string, string>;
24
+ /** link_docs가 쓴 knowledge-link IR. 없으면 문서가 직접 가리킨 파일만 본다 */
25
+ linkIr?: ArchitectureIr;
26
+ }
27
+ /**
28
+ * 바뀐 파일 목록으로 손봐야 할 문서를 고른다. 문서가 직접 가리킨 파일이 바뀌었거나,
29
+ * 문서가 설명한다고 이어진 기술 노드의 근거 파일이 바뀐 문서다
30
+ */
31
+ export declare function findStaleDocs(scanned: readonly ScannedDoc[], changed: readonly ChangedFile[], options?: StaleDocsOptions): StaleDoc[];
32
+ //# sourceMappingURL=doc-stale.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doc-stale.d.ts","sourceRoot":"","sources":["../../../src/architecture/doc-stale.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAGhD,MAAM,WAAW,WAAW;IAC1B,6CAA6C;IAC7C,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,WAAW;IAC1B,iEAAiE;IACjE,IAAI,EAAE,UAAU,GAAG,MAAM,CAAC;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,QAAQ;IACvB,wBAAwB;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,WAAW,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,gBAAgB;IAC/B,oCAAoC;IACpC,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,4DAA4D;IAC5D,MAAM,CAAC,EAAE,cAAc,CAAC;CACzB;AAMD;;;GAGG;AACH,wBAAgB,aAAa,CAC3B,OAAO,EAAE,SAAS,UAAU,EAAE,EAC9B,OAAO,EAAE,SAAS,WAAW,EAAE,EAC/B,OAAO,GAAE,gBAAqB,GAC7B,QAAQ,EAAE,CAqDZ"}
@@ -0,0 +1,60 @@
1
+ import { splitCodeLocation } from './doc-link.js';
2
+ /** 근거가 폴더를 가리켰으면 그 아래 파일이 바뀐 것도 문서에 닿는다 */
3
+ const covers = (ref, changed) => ref === changed || changed.startsWith(ref.endsWith('/') ? ref : `${ref}/`);
4
+ /**
5
+ * 바뀐 파일 목록으로 손봐야 할 문서를 고른다. 문서가 직접 가리킨 파일이 바뀌었거나,
6
+ * 문서가 설명한다고 이어진 기술 노드의 근거 파일이 바뀐 문서다
7
+ */
8
+ export function findStaleDocs(scanned, changed, options = {}) {
9
+ const ir = options.linkIr;
10
+ const aliases = options.repoAliases ?? {};
11
+ // 레포 이름과 id를 모두 id 하나로 모아 같은 레포를 다르게 불러도 맞게 한다
12
+ const canon = (name) => aliases[name] ?? ir?.repos.find((r) => r.name === name || r.id === name)?.id ?? name;
13
+ const changes = changed.map((c) => ({ repo: canon(c.repo), path: c.path.replace(/^\.?\//, '') }));
14
+ const hit = (repo, path) => changes.find((c) => c.repo === canon(repo) && covers(path, c.path))?.path;
15
+ const out = new Map();
16
+ const add = (key, title, reason) => {
17
+ const cur = out.get(key) ?? {
18
+ doc: key,
19
+ ...(title !== undefined ? { title } : {}),
20
+ reasons: [],
21
+ };
22
+ const dup = cur.reasons.some((r) => r.kind === reason.kind && r.file === reason.file && r.node === reason.node);
23
+ if (!dup)
24
+ cur.reasons.push(reason);
25
+ out.set(key, cur);
26
+ };
27
+ for (const d of scanned) {
28
+ for (const ref of d.codeRefs) {
29
+ const file = hit(ref.repo, ref.path);
30
+ if (file !== undefined)
31
+ add(`${d.repoId}/${d.path}`, d.title, { kind: 'code-ref', file, line: ref.line });
32
+ }
33
+ }
34
+ if (ir !== undefined) {
35
+ const changedByNode = new Map();
36
+ for (const n of ir.nodes) {
37
+ for (const e of n.evidence) {
38
+ if (e.type !== 'code')
39
+ continue;
40
+ const loc = splitCodeLocation(e.location);
41
+ const file = loc && hit(loc.repo, loc.path);
42
+ if (file !== undefined && !changedByNode.has(n.id))
43
+ changedByNode.set(n.id, file);
44
+ }
45
+ }
46
+ const byId = new Map(ir.nodes.map((n) => [n.id, n]));
47
+ for (const e of ir.edges) {
48
+ if (e.kind !== 'describes')
49
+ continue;
50
+ const file = changedByNode.get(e.to);
51
+ const src = byId.get(e.from);
52
+ if (file === undefined || src?.repo === undefined || src.doc === undefined)
53
+ continue;
54
+ const key = `${src.repo}/${src.doc.path.replace(/#.*$/, '')}`;
55
+ add(key, src.displayName, { kind: 'node', file, node: e.to });
56
+ }
57
+ }
58
+ return [...out.values()].sort((a, b) => (a.doc < b.doc ? -1 : 1));
59
+ }
60
+ //# sourceMappingURL=doc-stale.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doc-stale.js","sourceRoot":"","sources":["../../../src/architecture/doc-stale.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ import { type LayoutResult } from './layout.js';
2
+ import { type FlowLevel } from './flow-layout.js';
3
+ import type { EdgeKind, LineStyle } from './types.js';
4
+ import type { ValidatedIr } from './validator.js';
5
+ export type DrillLevelKind = 'root' | 'service' | 'app' | 'server' | 'feature' | 'group';
6
+ /**
7
+ * 레벨에 그리는 선. 세부 엣지를 그대로 옮긴 것이면 count가 1이고 kind가 원래 엣지 kind다.
8
+ * contains는 서비스 카드에서 그 안 기능 영역으로 가는 포함 선이고 IR 엣지가 아니라 parent에서 나온다
9
+ */
10
+ export interface DrillEdge {
11
+ id: string;
12
+ from: string;
13
+ to: string;
14
+ kind: EdgeKind | 'bundle' | 'contains';
15
+ count: number;
16
+ memberEdgeIds: string[];
17
+ lineStyle: LineStyle;
18
+ /** 묶음 안에 코드 근거와 문서나 사용자 근거가 섞였을 때만 붙는다. memberEdgeIds 중 점선인 고리 수다 */
19
+ inferred?: number;
20
+ }
21
+ export interface DrillLevel {
22
+ /** `root`, `service:<id>`, `app:<id>`, `server:<id>`, `feature:<id>`, `group:<id>` */
23
+ id: string;
24
+ kind: DrillLevelKind;
25
+ focusId?: string;
26
+ title: string;
27
+ /** root부터 이 레벨까지의 레벨 id. 빵부스러기가 이 순서로 그린다 */
28
+ trail: string[];
29
+ nodeIds: string[];
30
+ edges: DrillEdge[];
31
+ layout: LayoutResult;
32
+ }
33
+ export interface Drilldown {
34
+ /** root가 맨 앞이고 나머지는 id 순이다 */
35
+ levels: DrillLevel[];
36
+ /** 노드 id → 그 노드를 눌러 들어갈 레벨 id */
37
+ enter: Record<string, string>;
38
+ /** 도메인 흐름 레벨. 노드 그래프가 아니라 행위자 줄 격자라 levels와 따로 싣는다 */
39
+ flows: FlowLevel[];
40
+ }
41
+ export declare const ROOT_LEVEL_ID = "root";
42
+ /** service 노드가 하나라도 그려지면 드릴다운으로 그린다 */
43
+ export declare function shouldDrillDown(validated: ValidatedIr): boolean;
44
+ /**
45
+ * 검증된 IR에서 드릴다운 레벨과 묶음 엣지를 계산하고 레벨마다 elkjs 좌표를 미리 낸다.
46
+ * 정렬은 전부 id 기준이라 같은 입력이면 같은 결과가 나온다.
47
+ */
48
+ /** 서비스 id → 그린 흐름 수. 카드 배지 폭과 글자가 같은 수를 써야 한다 */
49
+ export declare function flowCountByService(flows: readonly FlowLevel[]): Record<string, number>;
50
+ export declare function computeDrilldown(validated: ValidatedIr): Promise<Drilldown>;
51
+ //# sourceMappingURL=drilldown.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"drilldown.d.ts","sourceRoot":"","sources":["../../../src/architecture/drilldown.ts"],"names":[],"mappings":"AAAA,OAAO,EAiBL,KAAK,YAAY,EAClB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAqB,KAAK,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAIrE,OAAO,KAAK,EAAsC,QAAQ,EAAE,SAAS,EAAY,MAAM,YAAY,CAAC;AAEpG,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAElD,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,SAAS,GAAG,KAAK,GAAG,QAAQ,GAAG,SAAS,GAAG,OAAO,CAAC;AAEzF;;;GAGG;AACH,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,UAAU,CAAC;IACvC,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,SAAS,EAAE,SAAS,CAAC;IACrB,qEAAqE;IACrE,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,UAAU;IACzB,sFAAsF;IACtF,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,cAAc,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,6CAA6C;IAC7C,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,MAAM,EAAE,YAAY,CAAC;CACtB;AAED,MAAM,WAAW,SAAS;IACxB,8BAA8B;IAC9B,MAAM,EAAE,UAAU,EAAE,CAAC;IACrB,iCAAiC;IACjC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,sDAAsD;IACtD,KAAK,EAAE,SAAS,EAAE,CAAC;CACpB;AAED,eAAO,MAAM,aAAa,SAAS,CAAC;AA6kCpC,uCAAuC;AACvC,wBAAgB,eAAe,CAAC,SAAS,EAAE,WAAW,GAAG,OAAO,CAgB/D;AAED;;;GAGG;AACH,iDAAiD;AACjD,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,SAAS,SAAS,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAItF;AAED,wBAAsB,gBAAgB,CAAC,SAAS,EAAE,WAAW,GAAG,OAAO,CAAC,SAAS,CAAC,CAuJjF"}