@likec4/language-server 1.42.1 → 1.44.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 (303) hide show
  1. package/browser/package.json +1 -1
  2. package/browser-worker/package.json +1 -1
  3. package/dist/LikeC4LanguageServices.d.ts +12 -19
  4. package/dist/LikeC4LanguageServices.js +182 -0
  5. package/dist/Rpc.js +245 -0
  6. package/dist/ast.d.ts +10 -6
  7. package/dist/ast.js +253 -0
  8. package/dist/browser-worker.js +4 -0
  9. package/dist/browser.js +35 -0
  10. package/dist/bundled.js +42 -0
  11. package/dist/bundled.mjs +3830 -4172
  12. package/dist/documentation/documentation-provider.js +51 -0
  13. package/dist/documentation/index.js +1 -0
  14. package/dist/empty.js +2 -0
  15. package/dist/filesystem/ChokidarWatcher.js +97 -0
  16. package/dist/filesystem/FileSystemWatcher.js +14 -0
  17. package/dist/filesystem/LikeC4FileSystem.d.ts +1 -2
  18. package/dist/filesystem/LikeC4FileSystem.js +126 -0
  19. package/dist/filesystem/index.d.ts +26 -0
  20. package/dist/filesystem/index.js +29 -0
  21. package/dist/formatting/LikeC4Formatter.js +637 -0
  22. package/dist/formatting/utils.js +18 -0
  23. package/dist/generated/ast.d.ts +19 -3
  24. package/dist/generated/ast.js +2155 -0
  25. package/dist/generated/grammar.js +7 -0
  26. package/dist/generated/module.d.ts +6 -1
  27. package/dist/generated/module.js +27 -0
  28. package/dist/generated-lib/{icons.mjs → icons.js} +11 -7
  29. package/dist/index.d.ts +7 -0
  30. package/dist/index.js +53 -0
  31. package/dist/{likec4lib.mjs → likec4lib.js} +3 -3
  32. package/dist/logger.js +81 -0
  33. package/dist/lsp/CodeActionProvider.d.ts +14 -0
  34. package/dist/lsp/CodeActionProvider.js +33 -0
  35. package/dist/lsp/CodeLensProvider.js +44 -0
  36. package/dist/lsp/CompletionProvider.d.ts +3 -1
  37. package/dist/lsp/CompletionProvider.js +200 -0
  38. package/dist/lsp/DocumentHighlightProvider.js +10 -0
  39. package/dist/lsp/DocumentLinkProvider.js +58 -0
  40. package/dist/lsp/DocumentSymbolProvider.js +306 -0
  41. package/dist/lsp/HoverProvider.js +106 -0
  42. package/dist/lsp/RenameProvider.js +6 -0
  43. package/dist/lsp/SemanticTokenProvider.d.ts +5 -0
  44. package/dist/lsp/SemanticTokenProvider.js +257 -0
  45. package/dist/lsp/index.d.ts +1 -0
  46. package/dist/lsp/index.js +9 -0
  47. package/dist/mcp/MCPServerFactory.js +73 -0
  48. package/dist/mcp/NoopLikeC4MCPServer.js +17 -0
  49. package/dist/mcp/interfaces.js +5 -0
  50. package/dist/mcp/server/StdioLikeC4MCPServer.js +47 -0
  51. package/dist/mcp/server/StreamableLikeC4MCPServer.js +145 -0
  52. package/dist/mcp/server/WithMCPServer.js +56 -0
  53. package/dist/mcp/tools/_common.d.ts +8 -7
  54. package/dist/mcp/tools/_common.js +49 -0
  55. package/dist/mcp/tools/find-relationships.d.ts +7 -8
  56. package/dist/mcp/tools/find-relationships.js +150 -0
  57. package/dist/mcp/tools/list-projects.d.ts +3 -3
  58. package/dist/mcp/tools/list-projects.js +62 -0
  59. package/dist/mcp/tools/open-view.d.ts +6 -7
  60. package/dist/mcp/tools/open-view.js +52 -0
  61. package/dist/mcp/tools/read-deployment.d.ts +6 -7
  62. package/dist/mcp/tools/read-deployment.js +132 -0
  63. package/dist/mcp/tools/read-element.d.ts +6 -7
  64. package/dist/mcp/tools/read-element.js +194 -0
  65. package/dist/mcp/tools/read-project-summary.d.ts +5 -6
  66. package/dist/mcp/tools/read-project-summary.js +176 -0
  67. package/dist/mcp/tools/read-view.d.ts +6 -7
  68. package/dist/mcp/tools/read-view.js +203 -0
  69. package/dist/mcp/tools/search-element.d.ts +3 -3
  70. package/dist/mcp/tools/search-element.js +177 -0
  71. package/dist/mcp/utils.d.ts +2 -2
  72. package/dist/mcp/utils.js +48 -0
  73. package/dist/model/builder/MergedExtends.d.ts +2 -1
  74. package/dist/model/builder/MergedExtends.js +74 -0
  75. package/dist/model/builder/MergedSpecification.js +175 -0
  76. package/dist/model/builder/buildModel.js +176 -0
  77. package/dist/model/deployments-index.js +102 -0
  78. package/dist/model/fqn-index.js +250 -0
  79. package/dist/model/index.js +6 -0
  80. package/dist/model/model-builder.d.ts +13 -11
  81. package/dist/model/model-builder.js +234 -0
  82. package/dist/model/model-locator.d.ts +6 -5
  83. package/dist/model/model-locator.js +240 -0
  84. package/dist/model/model-parser-where.js +81 -0
  85. package/dist/model/model-parser.d.ts +318 -313
  86. package/dist/model/model-parser.js +119 -0
  87. package/dist/model/parser/Base.d.ts +3 -3
  88. package/dist/model/parser/Base.js +367 -0
  89. package/dist/model/parser/DeploymentModelParser.d.ts +3 -3
  90. package/dist/model/parser/DeploymentModelParser.js +176 -0
  91. package/dist/model/parser/DeploymentViewParser.d.ts +4 -4
  92. package/dist/model/parser/DeploymentViewParser.js +86 -0
  93. package/dist/model/parser/FqnRefParser.d.ts +3 -3
  94. package/dist/model/parser/FqnRefParser.js +382 -0
  95. package/dist/model/parser/GlobalsParser.d.ts +7 -7
  96. package/dist/model/parser/GlobalsParser.js +84 -0
  97. package/dist/model/parser/ImportsParser.d.ts +12 -13
  98. package/dist/model/parser/ImportsParser.js +24 -0
  99. package/dist/model/parser/ModelParser.d.ts +3 -3
  100. package/dist/model/parser/ModelParser.js +165 -0
  101. package/dist/model/parser/PredicatesParser.d.ts +3 -3
  102. package/dist/model/parser/PredicatesParser.js +45 -0
  103. package/dist/model/parser/SpecificationParser.d.ts +3 -3
  104. package/dist/model/parser/SpecificationParser.js +109 -0
  105. package/dist/model/parser/ValueConverter.js +12 -0
  106. package/dist/model/parser/ViewsParser.d.ts +4 -4
  107. package/dist/model/parser/ViewsParser.js +477 -0
  108. package/dist/model-change/ModelChanges.d.ts +6 -3
  109. package/dist/model-change/ModelChanges.js +102 -0
  110. package/dist/model-change/changeElementStyle.js +134 -0
  111. package/dist/model-change/changeViewLayout.d.ts +2 -2
  112. package/dist/model-change/changeViewLayout.js +28 -0
  113. package/dist/model-change/removeManualLayoutV1.d.ts +7 -0
  114. package/dist/model-change/removeManualLayoutV1.js +27 -0
  115. package/dist/module.d.ts +10 -5
  116. package/dist/module.js +143 -0
  117. package/dist/protocol.d.ts +1 -17
  118. package/dist/protocol.js +114 -0
  119. package/dist/references/index.js +3 -0
  120. package/dist/references/name-provider.js +37 -0
  121. package/dist/references/scope-computation.js +288 -0
  122. package/dist/references/scope-provider.d.ts +3 -3
  123. package/dist/references/scope-provider.js +242 -0
  124. package/dist/shared/NodeKindProvider.js +57 -0
  125. package/dist/shared/{WorkspaceSymbolProvider.mjs → WorkspaceSymbolProvider.js} +1 -1
  126. package/dist/shared/index.js +2 -0
  127. package/dist/test/index.js +1 -0
  128. package/dist/test/testServices.d.ts +16 -16
  129. package/dist/test/testServices.js +210 -0
  130. package/dist/utils/disposable.js +26 -0
  131. package/dist/utils/elementRef.d.ts +1 -1
  132. package/dist/utils/elementRef.js +27 -0
  133. package/dist/utils/fqnRef.js +63 -0
  134. package/dist/utils/index.js +35 -0
  135. package/dist/utils/printDocs.js +1 -0
  136. package/dist/utils/projectId.js +16 -0
  137. package/dist/utils/stringHash.js +5 -0
  138. package/dist/validation/DocumentValidator.js +17 -0
  139. package/dist/validation/_shared.js +26 -0
  140. package/dist/validation/deployment-checks.js +140 -0
  141. package/dist/validation/dynamic-view.js +67 -0
  142. package/dist/validation/element-ref.js +12 -0
  143. package/dist/validation/element.js +49 -0
  144. package/dist/validation/imports.js +46 -0
  145. package/dist/validation/index.d.ts +1 -1
  146. package/dist/validation/index.js +157 -0
  147. package/dist/validation/property-checks.js +108 -0
  148. package/dist/validation/relation.js +55 -0
  149. package/dist/validation/specification.js +190 -0
  150. package/dist/validation/view-predicates/fqn-expr-with.js +43 -0
  151. package/dist/validation/view-predicates/fqn-ref-expr.js +51 -0
  152. package/dist/validation/view-predicates/incoming.js +16 -0
  153. package/dist/validation/view-predicates/index.js +6 -0
  154. package/dist/validation/view-predicates/outgoing.js +20 -0
  155. package/dist/validation/view-predicates/relation-expr.js +46 -0
  156. package/dist/validation/view-predicates/relation-with.js +16 -0
  157. package/dist/validation/view.d.ts +1 -1
  158. package/dist/validation/view.js +42 -0
  159. package/dist/view-utils/assignNavigateTo.js +27 -0
  160. package/dist/view-utils/index.d.ts +1 -0
  161. package/dist/view-utils/index.js +2 -0
  162. package/dist/view-utils/manual-layout.d.ts +6 -0
  163. package/dist/view-utils/manual-layout.js +151 -0
  164. package/dist/views/ConfigurableLayouter.js +51 -0
  165. package/dist/views/LikeC4ManualLayouts.d.ts +28 -0
  166. package/dist/views/LikeC4ManualLayouts.js +132 -0
  167. package/dist/views/{likec4-views.d.ts → LikeC4Views.d.ts} +9 -8
  168. package/dist/views/LikeC4Views.js +200 -0
  169. package/dist/views/index.d.ts +4 -1
  170. package/dist/views/index.js +11 -0
  171. package/dist/workspace/AstNodeDescriptionProvider.js +15 -0
  172. package/dist/workspace/IndexManager.js +21 -0
  173. package/dist/workspace/LangiumDocuments.d.ts +1 -1
  174. package/dist/workspace/LangiumDocuments.js +58 -0
  175. package/dist/workspace/ProjectsManager.d.ts +8 -3
  176. package/dist/workspace/ProjectsManager.js +373 -0
  177. package/dist/workspace/WorkspaceManager.d.ts +3 -2
  178. package/dist/workspace/WorkspaceManager.js +93 -0
  179. package/dist/workspace/index.js +5 -0
  180. package/likec4lib/package.json +1 -1
  181. package/package.json +32 -31
  182. package/protocol/package.json +1 -1
  183. package/dist/LikeC4LanguageServices.mjs +0 -197
  184. package/dist/Rpc.mjs +0 -296
  185. package/dist/ast.mjs +0 -221
  186. package/dist/browser-worker.mjs +0 -2
  187. package/dist/browser.mjs +0 -32
  188. package/dist/documentation/documentation-provider.mjs +0 -48
  189. package/dist/documentation/index.mjs +0 -1
  190. package/dist/empty.mjs +0 -1
  191. package/dist/filesystem/ChokidarWatcher.mjs +0 -68
  192. package/dist/filesystem/FileSystemWatcher.mjs +0 -11
  193. package/dist/filesystem/LikeC4FileSystem.mjs +0 -64
  194. package/dist/filesystem/index.mjs +0 -19
  195. package/dist/formatting/LikeC4Formatter.mjs +0 -511
  196. package/dist/formatting/utils.mjs +0 -15
  197. package/dist/generated/ast.mjs +0 -2118
  198. package/dist/generated/grammar.mjs +0 -3
  199. package/dist/generated/module.mjs +0 -23
  200. package/dist/index.mjs +0 -50
  201. package/dist/logger.mjs +0 -82
  202. package/dist/lsp/CodeLensProvider.mjs +0 -42
  203. package/dist/lsp/CompletionProvider.mjs +0 -208
  204. package/dist/lsp/DocumentHighlightProvider.mjs +0 -10
  205. package/dist/lsp/DocumentLinkProvider.mjs +0 -53
  206. package/dist/lsp/DocumentSymbolProvider.mjs +0 -287
  207. package/dist/lsp/HoverProvider.mjs +0 -104
  208. package/dist/lsp/RenameProvider.mjs +0 -6
  209. package/dist/lsp/SemanticTokenProvider.mjs +0 -350
  210. package/dist/lsp/index.mjs +0 -7
  211. package/dist/mcp/MCPServerFactory.mjs +0 -70
  212. package/dist/mcp/NoopLikeC4MCPServer.mjs +0 -17
  213. package/dist/mcp/interfaces.mjs +0 -4
  214. package/dist/mcp/server/StdioLikeC4MCPServer.mjs +0 -46
  215. package/dist/mcp/server/StreamableLikeC4MCPServer.mjs +0 -153
  216. package/dist/mcp/server/WithMCPServer.mjs +0 -58
  217. package/dist/mcp/tools/_common.mjs +0 -42
  218. package/dist/mcp/tools/find-relationships.mjs +0 -151
  219. package/dist/mcp/tools/list-projects.mjs +0 -62
  220. package/dist/mcp/tools/open-view.mjs +0 -52
  221. package/dist/mcp/tools/read-deployment.mjs +0 -130
  222. package/dist/mcp/tools/read-element.mjs +0 -198
  223. package/dist/mcp/tools/read-project-summary.mjs +0 -178
  224. package/dist/mcp/tools/read-view.mjs +0 -205
  225. package/dist/mcp/tools/search-element.mjs +0 -171
  226. package/dist/mcp/utils.mjs +0 -47
  227. package/dist/model/builder/MergedExtends.mjs +0 -67
  228. package/dist/model/builder/MergedSpecification.mjs +0 -205
  229. package/dist/model/builder/assignTagColors.d.ts +0 -7
  230. package/dist/model/builder/assignTagColors.mjs +0 -51
  231. package/dist/model/builder/buildModel.mjs +0 -226
  232. package/dist/model/deployments-index.mjs +0 -100
  233. package/dist/model/fqn-index.mjs +0 -243
  234. package/dist/model/index.mjs +0 -6
  235. package/dist/model/model-builder.mjs +0 -285
  236. package/dist/model/model-locator.mjs +0 -239
  237. package/dist/model/model-parser-where.mjs +0 -81
  238. package/dist/model/model-parser.mjs +0 -127
  239. package/dist/model/parser/Base.mjs +0 -342
  240. package/dist/model/parser/DeploymentModelParser.mjs +0 -212
  241. package/dist/model/parser/DeploymentViewParser.mjs +0 -95
  242. package/dist/model/parser/FqnRefParser.mjs +0 -398
  243. package/dist/model/parser/GlobalsParser.mjs +0 -82
  244. package/dist/model/parser/ImportsParser.mjs +0 -28
  245. package/dist/model/parser/ModelParser.mjs +0 -190
  246. package/dist/model/parser/PredicatesParser.mjs +0 -45
  247. package/dist/model/parser/SpecificationParser.mjs +0 -120
  248. package/dist/model/parser/ValueConverter.mjs +0 -12
  249. package/dist/model/parser/ViewsParser.mjs +0 -490
  250. package/dist/model-change/ModelChanges.mjs +0 -89
  251. package/dist/model-change/changeElementStyle.mjs +0 -143
  252. package/dist/model-change/changeViewLayout.mjs +0 -32
  253. package/dist/model-change/saveManualLayout.d.ts +0 -11
  254. package/dist/model-change/saveManualLayout.mjs +0 -27
  255. package/dist/module.mjs +0 -180
  256. package/dist/protocol.mjs +0 -65
  257. package/dist/references/index.mjs +0 -3
  258. package/dist/references/name-provider.mjs +0 -39
  259. package/dist/references/scope-computation.mjs +0 -312
  260. package/dist/references/scope-provider.mjs +0 -239
  261. package/dist/shared/NodeKindProvider.mjs +0 -110
  262. package/dist/shared/index.mjs +0 -2
  263. package/dist/test/index.mjs +0 -1
  264. package/dist/test/testServices.mjs +0 -200
  265. package/dist/utils/disposable.mjs +0 -25
  266. package/dist/utils/elementRef.mjs +0 -20
  267. package/dist/utils/fqnRef.mjs +0 -57
  268. package/dist/utils/index.mjs +0 -33
  269. package/dist/utils/printDocs.mjs +0 -1
  270. package/dist/utils/projectId.mjs +0 -16
  271. package/dist/utils/stringHash.mjs +0 -5
  272. package/dist/validation/DocumentValidator.mjs +0 -16
  273. package/dist/validation/_shared.mjs +0 -25
  274. package/dist/validation/deployment-checks.mjs +0 -146
  275. package/dist/validation/dynamic-view.mjs +0 -67
  276. package/dist/validation/element-ref.mjs +0 -12
  277. package/dist/validation/element.mjs +0 -50
  278. package/dist/validation/imports.mjs +0 -25
  279. package/dist/validation/index.mjs +0 -180
  280. package/dist/validation/property-checks.mjs +0 -107
  281. package/dist/validation/relation.mjs +0 -53
  282. package/dist/validation/specification.mjs +0 -173
  283. package/dist/validation/view-predicates/fqn-expr-with.mjs +0 -43
  284. package/dist/validation/view-predicates/fqn-ref-expr.mjs +0 -53
  285. package/dist/validation/view-predicates/incoming.mjs +0 -16
  286. package/dist/validation/view-predicates/index.mjs +0 -6
  287. package/dist/validation/view-predicates/outgoing.mjs +0 -20
  288. package/dist/validation/view-predicates/relation-expr.mjs +0 -39
  289. package/dist/validation/view-predicates/relation-with.mjs +0 -16
  290. package/dist/validation/view.mjs +0 -25
  291. package/dist/view-utils/assignNavigateTo.mjs +0 -25
  292. package/dist/view-utils/index.mjs +0 -1
  293. package/dist/view-utils/manual-layout.mjs +0 -99
  294. package/dist/views/configurable-layouter.mjs +0 -51
  295. package/dist/views/index.mjs +0 -1
  296. package/dist/views/likec4-views.mjs +0 -166
  297. package/dist/workspace/AstNodeDescriptionProvider.mjs +0 -17
  298. package/dist/workspace/IndexManager.mjs +0 -17
  299. package/dist/workspace/LangiumDocuments.mjs +0 -53
  300. package/dist/workspace/ProjectsManager.mjs +0 -360
  301. package/dist/workspace/WorkspaceManager.mjs +0 -83
  302. package/dist/workspace/index.mjs +0 -5
  303. /package/dist/views/{configurable-layouter.d.ts → ConfigurableLayouter.d.ts} +0 -0
@@ -1,198 +0,0 @@
1
- import { invariant } from "@likec4/core";
2
- import z from "zod";
3
- import { likec4Tool } from "../utils.mjs";
4
- import { includedInViews, includedInViewsSchema, locationSchema, mkLocate, projectIdSchema } from "./_common.mjs";
5
- export const readElement = likec4Tool({
6
- name: "read-element",
7
- description: `
8
- Read detailed information about a LikeC4 element.
9
-
10
- Request:
11
- - id: string \u2014 element id (FQN)
12
- - project: string (optional) \u2014 project id. Defaults to "default" if omitted.
13
-
14
- Response (JSON object):
15
- - id: string \u2014 element id (FQN)
16
- - name: string \u2014 element name
17
- - kind: string \u2014 element kind
18
- - title: string \u2014 human-readable title
19
- - description: string|null \u2014 optional description
20
- - technology: string|null \u2014 optional technology
21
- - tags: string[] \u2014 assigned tags
22
- - project: string \u2014 project id this element belongs to
23
- - metadata: Record<string, string> \u2014 element metadata
24
- - shape: string \u2014 rendered shape
25
- - color: string \u2014 rendered color
26
- - children: string[] \u2014 ids (FQNs) of direct child elements
27
- - defaultView: string|null \u2014 default view name if set
28
- - includedInViews: View[] \u2014 views that include this element
29
- - relationships: object \u2014 relationships of this element (direct and indirect)
30
- - incoming: Array<{ source: { id: string, title: string, kind: string }, kind: string|null, target: string, title: string|null, description: string|null, technology: string|null, tags: string[] }>
31
- - outgoing: Array<{ source: string, target: { id: string, title: string, kind: string }, kind: string|null, title: string|null, description: string|null, technology: string|null, tags: string[] }>
32
- - deployedInstances: string[] \u2014 deployed instance ids (Deployment FQNs)
33
- - sourceLocation: { path: string, range: { start: { line: number, character: number }, end: { line: number, character: number } } } | null \u2014 source location if available
34
-
35
- View (object) fields:
36
- - id: string \u2014 view identifier
37
- - title: string \u2014 view title
38
- - type: "element" | "deployment" | "dynamic"
39
-
40
- Notes:
41
- - Read-only, idempotent, no side effects.
42
- - Safe to call repeatedly.
43
-
44
- Example response:
45
- {
46
- "id": "shop.frontend",
47
- "name": "frontend",
48
- "kind": "container",
49
- "title": "Frontend",
50
- "description": "User-facing web app",
51
- "technology": "React",
52
- "tags": ["public"],
53
- "project": "default",
54
- "metadata": { "owner": "web" },
55
- "shape": "rounded-rectangle",
56
- "color": "#2F80ED",
57
- "children": ["shop.frontend.auth"],
58
- "defaultView": "frontend-overview",
59
- "includedInViews": [
60
- {
61
- "id": "frontend-overview",
62
- "title": "Frontend Overview",
63
- "type": "element"
64
- }
65
- ],
66
- "relationships": {
67
- "incoming": [
68
- {
69
- "source": { "id": "shop.api", "title": "API", "kind": "container" },
70
- "kind": "uses",
71
- "target": "shop.frontend",
72
- "title": "Calls",
73
- "description": null,
74
- "technology": "HTTPS",
75
- "tags": []
76
- }
77
- ],
78
- "outgoing": []
79
- },
80
- "deployedInstances": ["k8s.cluster.frontend"],
81
- "sourceLocation": {
82
- "path": "/abs/path/project/model.c4",
83
- "range": { "start": { "line": 10, "character": 0 }, "end": { "line": 25, "character": 0 } }
84
- }
85
- }
86
- `,
87
- annotations: {
88
- readOnlyHint: true,
89
- idempotentHint: true,
90
- title: "Read element"
91
- },
92
- inputSchema: {
93
- id: z.string().describe("Element id (FQN)"),
94
- project: projectIdSchema
95
- },
96
- outputSchema: {
97
- id: z.string().describe("Element id (FQN)"),
98
- kind: z.string().describe("Element kind"),
99
- name: z.string().describe("Element name"),
100
- title: z.string(),
101
- description: z.string().nullable(),
102
- technology: z.string().nullable(),
103
- tags: z.array(z.string()),
104
- project: z.string(),
105
- metadata: z.record(z.string()),
106
- shape: z.string(),
107
- color: z.string(),
108
- children: z.array(z.string()).describe("Children of this element (Array of FQNs)"),
109
- defaultView: z.string().nullable().describe("Name of the default view of this element"),
110
- includedInViews: includedInViewsSchema.describe("Views that include this element"),
111
- relationships: z.object({
112
- incoming: z.array(z.object({
113
- source: z.object({
114
- id: z.string(),
115
- title: z.string(),
116
- kind: z.string()
117
- }).describe("Source element of this relationship"),
118
- kind: z.string().nullable().describe("Relationship kind"),
119
- target: z.string().describe(
120
- "Target element id (FQN), either this element or nested element, if relationship is indirect"
121
- ),
122
- title: z.string().nullable().describe("Relationship title"),
123
- description: z.string().nullable().describe("Relationship description"),
124
- technology: z.string().nullable().describe("Relationship technology"),
125
- tags: z.array(z.string()).describe("Relationship tags")
126
- })).describe("Incoming relationships of this element (direct and indirect, incoming to nested elements)"),
127
- outgoing: z.array(z.object({
128
- source: z.string().describe(
129
- "Source element id (FQN), either this element or nested element, if relationship is indirect"
130
- ),
131
- target: z.object({
132
- id: z.string(),
133
- title: z.string(),
134
- kind: z.string()
135
- }).describe("Target element of this relationship"),
136
- kind: z.string().nullable().describe("Relationship kind"),
137
- title: z.string().nullable().describe("Relationship title"),
138
- description: z.string().nullable().describe("Relationship description"),
139
- technology: z.string().nullable().describe("Relationship technology"),
140
- tags: z.array(z.string()).describe("Relationship tags")
141
- })).describe("Outgoing relationships of this element (direct and indirect, outgoing from nested elements)")
142
- }).describe("Relationships of this element"),
143
- deployedInstances: z.array(z.string()).describe("Deployed instances of this element (Array of Deployment FQNs)"),
144
- sourceLocation: locationSchema
145
- }
146
- }, async (languageServices, args) => {
147
- const projectId = languageServices.projectsManager.ensureProjectId(args.project);
148
- const model = await languageServices.computedModel(projectId);
149
- const element = model.findElement(args.id);
150
- invariant(element, `Element "${args.id}" not found in project "${projectId}"`);
151
- const locate = mkLocate(languageServices, projectId);
152
- return {
153
- id: element.id,
154
- name: element.name,
155
- kind: element.kind,
156
- title: element.title,
157
- description: element.description.text,
158
- technology: element.technology,
159
- tags: [...element.tags],
160
- project: projectId,
161
- metadata: element.getMetadata(),
162
- shape: element.shape,
163
- color: element.color,
164
- children: [...element.children()].map((c) => c.id),
165
- defaultView: element.defaultView?.id || null,
166
- includedInViews: includedInViews(element.views()),
167
- relationships: {
168
- incoming: [...element.incoming()].map((r) => ({
169
- source: {
170
- id: r.source.id,
171
- title: r.source.title,
172
- kind: r.source.kind
173
- },
174
- kind: r.kind,
175
- target: r.target.id,
176
- title: r.title,
177
- description: r.description.text,
178
- technology: r.technology,
179
- tags: [...r.tags]
180
- })),
181
- outgoing: [...element.outgoing()].map((r) => ({
182
- source: r.source.id,
183
- target: {
184
- id: r.target.id,
185
- title: r.target.title,
186
- kind: r.target.kind
187
- },
188
- kind: r.kind,
189
- title: r.title,
190
- description: r.description.text,
191
- technology: r.technology,
192
- tags: [...r.tags]
193
- }))
194
- },
195
- deployedInstances: [...element.deployments()].map((i) => i.id),
196
- sourceLocation: locate({ element: element.id })
197
- };
198
- });
@@ -1,178 +0,0 @@
1
- import { keys } from "remeda";
2
- import z from "zod";
3
- import { likec4Tool } from "../utils.mjs";
4
- import { projectIdSchema } from "./_common.mjs";
5
- export const readProjectSummary = likec4Tool({
6
- name: "read-project-summary",
7
- annotations: {
8
- readOnlyHint: true,
9
- idempotentHint: true,
10
- title: "Read project summary"
11
- },
12
- description: `
13
- Request:
14
- - project: string (optional) \u2014 project id. Defaults to "default" if omitted.
15
-
16
- Response (JSON object):
17
- - title: string \u2014 human-readable project title
18
- - folder: string \u2014 absolute path to the project root
19
- - sources: string[] \u2014 absolute file paths of model documents
20
- - specification: object
21
- - elementKinds: string[] \u2014 all element kinds
22
- - relationshipKinds: string[] \u2014 all relationship kinds
23
- - deploymentKinds: string[] \u2014 all deployment kinds
24
- - tags: string[] \u2014 all tags
25
- - metadataKeys: string[] \u2014 used metadata keys
26
- - elements: Element[] \u2014 list of elements
27
- - deployments: Deployment[] \u2014 list of deployment entities
28
- - views: View[] \u2014 list of views defined in the model
29
-
30
- Element (object) fields:
31
- - id: string \u2014 element id (FQN)
32
- - kind: string \u2014 element kind
33
- - title: string \u2014 element title
34
- - tags: string[] \u2014 element tags
35
-
36
- Deployment (object) fields:
37
- - type = "deployment-node": { id: string, kind: string, title: string, tags: string[] }
38
- - type = "deployed-instance": { id: string, title: string, tags: string[], referencedElementId: string }
39
-
40
- View (object) fields:
41
- - id: string \u2014 view identifier
42
- - title: string \u2014 view title
43
- - type: "element" | "deployment" | "dynamic"
44
-
45
- Notes:
46
- - Read-only, idempotent, no side effects.
47
- - Safe to call repeatedly.
48
-
49
- Example response:
50
- {
51
- "title": "Cloud Boutique",
52
- "folder": "/abs/path/to/workspace/examples/cloud-system",
53
- "sources": [
54
- "/abs/path/to/workspace/examples/cloud-system/model.c4"
55
- ],
56
- "specification": {
57
- "elementKinds": ["system", "container", "component"],
58
- "relationshipKinds": ["uses", "depends-on"],
59
- "deploymentKinds": ["node", "cluster"],
60
- "tags": ["public", "internal"],
61
- "metadataKeys": ["owner", "tier"]
62
- },
63
- "elements": [
64
- {
65
- "id": "shop.frontend",
66
- "kind": "component",
67
- "title": "Frontend",
68
- "tags": ["public"]
69
- }
70
- ],
71
- "deployments": [
72
- {
73
- "type": "deployment-node",
74
- "id": "k8s.shop.frontend",
75
- "kind": "cluster",
76
- "title": "Frontend",
77
- "tags": []
78
- }
79
- ],
80
- "views": [
81
- {
82
- "name": "system-overview",
83
- "title": "System Overview",
84
- "type": "element"
85
- }
86
- ]
87
- }
88
- `,
89
- inputSchema: {
90
- project: projectIdSchema
91
- },
92
- outputSchema: {
93
- title: z.string(),
94
- folder: z.string(),
95
- sources: z.array(z.string()),
96
- specification: z.object({
97
- elementKinds: z.array(z.string()),
98
- relationshipKinds: z.array(z.string()),
99
- deploymentKinds: z.array(z.string()),
100
- tags: z.array(z.string()),
101
- metadataKeys: z.array(z.string())
102
- }),
103
- elements: z.array(z.object({
104
- id: z.string(),
105
- kind: z.string(),
106
- title: z.string(),
107
- tags: z.array(z.string())
108
- })).describe("List of elements in the project"),
109
- deployments: z.array(
110
- z.discriminatedUnion("type", [
111
- z.object({
112
- type: z.literal("deployment-node"),
113
- id: z.string().describe("Node ID"),
114
- kind: z.string().describe("Deployment node kind"),
115
- title: z.string().describe("Node title"),
116
- tags: z.array(z.string())
117
- }),
118
- z.object({
119
- type: z.literal("deployed-instance"),
120
- id: z.string().describe("Node ID"),
121
- title: z.string().describe("Node title"),
122
- tags: z.array(z.string()),
123
- referencedElementId: z.string().describe("Element ID (FQN)")
124
- })
125
- ])
126
- ).describe("List of deployment nodes and deployed instances in the project"),
127
- views: z.array(z.object({
128
- id: z.string(),
129
- title: z.string(),
130
- type: z.enum(["element", "deployment", "dynamic"])
131
- }))
132
- }
133
- }, async (languageServices, args) => {
134
- const projectId = languageServices.projectsManager.ensureProjectId(args.project);
135
- const project = languageServices.project(projectId);
136
- const model = await languageServices.computedModel(projectId);
137
- return {
138
- title: project.title,
139
- folder: project.folder.fsPath,
140
- specification: {
141
- elementKinds: keys(model.specification.elements),
142
- relationshipKinds: keys(model.specification.relationships),
143
- deploymentKinds: keys(model.specification.deployments),
144
- tags: [...model.tags],
145
- metadataKeys: model.specification.metadataKeys ?? []
146
- },
147
- elements: [...model.elements()].filter((e) => !e.imported).map((e) => ({
148
- id: e.id,
149
- kind: e.kind,
150
- title: e.title,
151
- tags: [...e.tags]
152
- })),
153
- deployments: [...model.deployment.elements()].map((d) => {
154
- if (d.isInstance()) {
155
- return {
156
- type: "deployed-instance",
157
- id: d.id,
158
- title: d.title,
159
- tags: [...d.tags],
160
- referencedElementId: d.element.id
161
- };
162
- }
163
- return {
164
- type: "deployment-node",
165
- id: d.id,
166
- kind: d.kind,
167
- title: d.title,
168
- tags: [...d.tags]
169
- };
170
- }),
171
- views: [...model.views()].map((v) => ({
172
- id: v.id,
173
- title: v.titleOrId,
174
- type: v.$view._type
175
- })),
176
- sources: project.documents?.map((d) => d.fsPath) ?? []
177
- };
178
- });
@@ -1,205 +0,0 @@
1
- import z from "zod";
2
- import { likec4Tool } from "../utils.mjs";
3
- import { locationSchema, mkLocate, projectIdSchema } from "./_common.mjs";
4
- const modelRef = (node) => {
5
- if (node.hasElement()) {
6
- return node.element.id;
7
- }
8
- if (node.hasDeployment()) {
9
- return node.deployment.id;
10
- }
11
- return null;
12
- };
13
- const nodeSchema = z.discriminatedUnion("type", [
14
- z.object({
15
- type: z.literal("element"),
16
- id: z.string().describe("Node ID"),
17
- elementId: z.string().describe("Element ID (FQN)"),
18
- kind: z.string().describe("Element kind"),
19
- title: z.string().describe("Node title"),
20
- description: z.string().nullable(),
21
- technology: z.string().nullable(),
22
- children: z.array(z.string()).describe("Children nodes, array of node IDs"),
23
- shape: z.string().describe("Rendered shape"),
24
- color: z.string().describe("Rendered color"),
25
- tags: z.array(z.string())
26
- }),
27
- z.object({
28
- type: z.literal("deployment-node"),
29
- id: z.string().describe("Node ID"),
30
- deploymentId: z.string().describe("Deployment entity ID (FQN)"),
31
- kind: z.string().describe("Deployment kind"),
32
- title: z.string().describe("Node title"),
33
- description: z.string().nullable(),
34
- technology: z.string().nullable(),
35
- children: z.array(z.string()).describe("Children nodes, array of node IDs"),
36
- shape: z.string().describe("Rendered shape"),
37
- color: z.string().describe("Rendered color"),
38
- tags: z.array(z.string())
39
- }),
40
- z.object({
41
- type: z.literal("deployed-instance"),
42
- id: z.string().describe("Node ID"),
43
- deploymentId: z.string().describe("Deployment entity ID (FQN)"),
44
- title: z.string().describe("Node title"),
45
- description: z.string().nullable(),
46
- technology: z.string().nullable(),
47
- referencedElement: z.object({
48
- id: z.string().describe("Element ID (FQN)"),
49
- kind: z.string().describe("Element kind"),
50
- title: z.string().describe("Element title")
51
- }),
52
- shape: z.string().describe("Rendered shape"),
53
- color: z.string().describe("Rendered color"),
54
- tags: z.array(z.string())
55
- })
56
- ]);
57
- export const readView = likec4Tool({
58
- name: "read-view",
59
- description: `
60
- Read detailed information about a LikeC4 view.
61
-
62
- Request:
63
- - viewId: string \u2014 view id (name)
64
- - project: string (optional) \u2014 project id. Defaults to "default" if omitted.
65
-
66
- Response (JSON object):
67
- - id: string \u2014 view id
68
- - type: "element" | "deployment" | "dynamic" \u2014 view type
69
- - title: string \u2014 view title (falls back to id if not set)
70
- - description: string|null \u2014 optional description
71
- - tags: string[] \u2014 view tags
72
- - project: string \u2014 project id this view belongs to
73
- - nodes: Node[] \u2014 nodes included in the view
74
- - edges: Edge[] \u2014 relationships between nodes
75
- - sourceLocation: { path: string, range: { start: { line: number, character: number }, end: { line: number, character: number } } } | null \u2014 source location if available
76
-
77
- Node (discriminated union by "type"):
78
- - type = "element": { id: string, elementId: string, kind: string, title: string, description: string|null, technology: string|null, children: string[], shape: string, color: string, tags: string[] }
79
- - type = "deployment-node": { id: string, deploymentId: string, kind: string, title: string, description: string|null, technology: string|null, children: string[], shape: string, color: string, tags: string[] }
80
- - type = "deployed-instance": { id: string, deploymentId: string, title: string, description: string|null, technology: string|null, referencedElement: { id: string, kind: string, title: string }, shape: string, color: string, tags: string[] }
81
-
82
- Edge object:
83
- - { source: string, target: string, label: string|null, description: string|null, technology: string|null, tags: string[] }
84
-
85
- Notes:
86
- - Read-only, idempotent, no side effects.
87
-
88
- Example response:
89
- {
90
- "id": "system-overview",
91
- "type": "element",
92
- "title": "System Overview",
93
- "description": null,
94
- "tags": [],
95
- "project": "default",
96
- "nodes": [
97
- { "type": "logical", "id": "n1", "elementId": "shop.frontend", "kind": "container", "title": "Frontend", "description": null, "technology": "React", "children": [], "shape": "rounded-rectangle", "color": "#2F80ED", "tags": [] }
98
- ],
99
- "edges": [
100
- { "source": "n1", "target": "n2", "label": "calls", "description": null, "technology": "HTTPS", "tags": [] }
101
- ],
102
- "sourceLocation": {
103
- "path": "/abs/path/project/model.c4",
104
- "range": { "start": { "line": 10, "character": 0 }, "end": { "line": 30, "character": 0 } }
105
- }
106
- }
107
- `,
108
- annotations: {
109
- readOnlyHint: true,
110
- idempotentHint: true,
111
- title: "Read view"
112
- },
113
- inputSchema: {
114
- viewId: z.string().describe("View id (name)"),
115
- project: projectIdSchema
116
- },
117
- outputSchema: {
118
- id: z.string(),
119
- type: z.enum(["element", "deployment", "dynamic"]).describe("View type"),
120
- title: z.string(),
121
- description: z.string().nullable(),
122
- tags: z.array(z.string()),
123
- project: z.string(),
124
- nodes: z.array(nodeSchema),
125
- edges: z.array(
126
- z.object({
127
- source: z.string().describe("Source node"),
128
- target: z.string().describe("Target node"),
129
- label: z.string().nullable(),
130
- description: z.string().nullable(),
131
- technology: z.string().nullable(),
132
- tags: z.array(z.string())
133
- })
134
- ).describe("Edge represents relationship between nodes"),
135
- sourceLocation: locationSchema
136
- }
137
- }, async (languageServices, args) => {
138
- const projectId = languageServices.projectsManager.ensureProjectId(args.project);
139
- const project = languageServices.project(projectId);
140
- const model = await languageServices.computedModel(projectId);
141
- const view = model.findView(args.viewId);
142
- if (!view) {
143
- throw new Error(`View with ID '${args.viewId}' not found in project ${project.id}`);
144
- }
145
- const locate = mkLocate(languageServices, project.id);
146
- return {
147
- id: view.id,
148
- type: view.$view._type,
149
- title: view.title ?? view.id,
150
- description: view.description.text,
151
- tags: [...view.tags],
152
- project: project.id,
153
- nodes: [...view.nodes()].flatMap((node) => {
154
- const base = {
155
- id: node.id,
156
- title: node.title,
157
- description: node.description.text,
158
- technology: node.technology,
159
- shape: node.shape,
160
- color: node.color,
161
- tags: [...node.tags]
162
- };
163
- if (node.hasDeployedInstance()) {
164
- return {
165
- ...base,
166
- type: "deployed-instance",
167
- deploymentId: node.deployment.id,
168
- referencedElement: {
169
- id: node.deployment.element.id,
170
- kind: node.deployment.element.kind,
171
- title: node.deployment.element.title
172
- }
173
- };
174
- }
175
- if (node.hasDeployment()) {
176
- return {
177
- ...base,
178
- type: "deployment-node",
179
- kind: node.deployment.kind,
180
- deploymentId: node.deployment.id,
181
- children: [...node.children()].map((c) => c.id)
182
- };
183
- }
184
- if (node.hasElement()) {
185
- return {
186
- ...base,
187
- type: "element",
188
- elementId: node.element.id,
189
- kind: node.element.kind,
190
- children: [...node.children()].flatMap((c) => modelRef(c) ?? [])
191
- };
192
- }
193
- return [];
194
- }),
195
- edges: [...view.edges()].map((r) => ({
196
- source: r.source.id,
197
- target: r.target.id,
198
- label: r.label,
199
- description: r.description.text,
200
- technology: r.technology,
201
- tags: [...r.tags]
202
- })),
203
- sourceLocation: locate({ view: view.id })
204
- };
205
- });