@likec4/language-server 1.43.0 → 1.45.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 (301) hide show
  1. package/browser/package.json +1 -1
  2. package/browser-worker/package.json +1 -1
  3. package/dist/LikeC4LanguageServices.d.ts +13 -34
  4. package/dist/LikeC4LanguageServices.js +152 -0
  5. package/dist/Rpc.js +257 -0
  6. package/dist/ast.d.ts +5 -1
  7. package/dist/ast.js +257 -0
  8. package/dist/browser-worker.js +4 -0
  9. package/dist/browser.js +35 -0
  10. package/dist/bundled.js +44 -0
  11. package/dist/bundled.mjs +3568 -3900
  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.d.ts +2 -0
  16. package/dist/filesystem/ChokidarWatcher.js +108 -0
  17. package/dist/filesystem/FileSystemWatcher.js +14 -0
  18. package/dist/filesystem/LikeC4FileSystem.d.ts +1 -2
  19. package/dist/filesystem/LikeC4FileSystem.js +126 -0
  20. package/dist/filesystem/index.d.ts +26 -0
  21. package/dist/filesystem/index.js +29 -0
  22. package/dist/formatting/LikeC4Formatter.js +637 -0
  23. package/dist/formatting/utils.js +18 -0
  24. package/dist/generated/ast.js +2155 -0
  25. package/dist/generated/{grammar.mjs → grammar.js} +6 -2
  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 +10 -1
  30. package/dist/index.js +55 -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.js +257 -0
  44. package/dist/lsp/index.d.ts +1 -0
  45. package/dist/lsp/index.js +9 -0
  46. package/dist/mcp/MCPServerFactory.js +73 -0
  47. package/dist/mcp/NoopLikeC4MCPServer.js +17 -0
  48. package/dist/mcp/interfaces.js +5 -0
  49. package/dist/mcp/server/StdioLikeC4MCPServer.js +51 -0
  50. package/dist/mcp/server/StreamableLikeC4MCPServer.js +145 -0
  51. package/dist/mcp/server/WithMCPServer.js +56 -0
  52. package/dist/mcp/tools/_common.d.ts +8 -7
  53. package/dist/mcp/tools/_common.js +49 -0
  54. package/dist/mcp/tools/find-relationships.d.ts +7 -8
  55. package/dist/mcp/tools/find-relationships.js +150 -0
  56. package/dist/mcp/tools/list-projects.d.ts +3 -3
  57. package/dist/mcp/tools/list-projects.js +62 -0
  58. package/dist/mcp/tools/open-view.d.ts +6 -7
  59. package/dist/mcp/tools/open-view.js +52 -0
  60. package/dist/mcp/tools/read-deployment.d.ts +6 -7
  61. package/dist/mcp/tools/read-deployment.js +132 -0
  62. package/dist/mcp/tools/read-element.d.ts +6 -7
  63. package/dist/mcp/tools/read-element.js +194 -0
  64. package/dist/mcp/tools/read-project-summary.d.ts +5 -6
  65. package/dist/mcp/tools/read-project-summary.js +176 -0
  66. package/dist/mcp/tools/read-view.d.ts +6 -7
  67. package/dist/mcp/tools/read-view.js +203 -0
  68. package/dist/mcp/tools/search-element.d.ts +3 -3
  69. package/dist/mcp/tools/search-element.js +177 -0
  70. package/dist/mcp/utils.d.ts +2 -2
  71. package/dist/mcp/utils.js +48 -0
  72. package/dist/model/builder/MergedExtends.js +74 -0
  73. package/dist/model/builder/MergedSpecification.js +175 -0
  74. package/dist/model/builder/buildModel.js +176 -0
  75. package/dist/model/deployments-index.js +102 -0
  76. package/dist/model/fqn-index.d.ts +1 -2
  77. package/dist/model/fqn-index.js +247 -0
  78. package/dist/model/index.js +6 -0
  79. package/dist/model/model-builder.d.ts +13 -11
  80. package/dist/model/model-builder.js +232 -0
  81. package/dist/model/model-locator.d.ts +6 -5
  82. package/dist/model/model-locator.js +240 -0
  83. package/dist/model/model-parser-where.js +81 -0
  84. package/dist/model/model-parser.d.ts +309 -304
  85. package/dist/model/model-parser.js +126 -0
  86. package/dist/model/parser/Base.d.ts +2 -2
  87. package/dist/model/parser/Base.js +367 -0
  88. package/dist/model/parser/DeploymentModelParser.d.ts +2 -2
  89. package/dist/model/parser/DeploymentModelParser.js +176 -0
  90. package/dist/model/parser/DeploymentViewParser.d.ts +3 -3
  91. package/dist/model/parser/DeploymentViewParser.js +86 -0
  92. package/dist/model/parser/FqnRefParser.d.ts +2 -2
  93. package/dist/model/parser/FqnRefParser.js +382 -0
  94. package/dist/model/parser/GlobalsParser.d.ts +6 -6
  95. package/dist/model/parser/GlobalsParser.js +84 -0
  96. package/dist/model/parser/ImportsParser.d.ts +11 -12
  97. package/dist/model/parser/ImportsParser.js +24 -0
  98. package/dist/model/parser/ModelParser.d.ts +2 -2
  99. package/dist/model/parser/ModelParser.js +165 -0
  100. package/dist/model/parser/PredicatesParser.d.ts +2 -2
  101. package/dist/model/parser/PredicatesParser.js +45 -0
  102. package/dist/model/parser/SpecificationParser.d.ts +2 -2
  103. package/dist/model/parser/SpecificationParser.js +113 -0
  104. package/dist/model/parser/ValueConverter.js +12 -0
  105. package/dist/model/parser/ViewsParser.d.ts +3 -3
  106. package/dist/model/parser/ViewsParser.js +479 -0
  107. package/dist/model-change/ModelChanges.d.ts +8 -5
  108. package/dist/model-change/ModelChanges.js +129 -0
  109. package/dist/model-change/changeElementStyle.js +134 -0
  110. package/dist/model-change/changeViewLayout.d.ts +2 -2
  111. package/dist/model-change/changeViewLayout.js +28 -0
  112. package/dist/model-change/removeManualLayoutV1.d.ts +7 -0
  113. package/dist/model-change/removeManualLayoutV1.js +27 -0
  114. package/dist/module.d.ts +10 -5
  115. package/dist/module.js +143 -0
  116. package/dist/protocol.d.ts +34 -27
  117. package/dist/protocol.js +123 -0
  118. package/dist/references/index.js +3 -0
  119. package/dist/references/name-provider.js +37 -0
  120. package/dist/references/scope-computation.js +288 -0
  121. package/dist/references/scope-provider.d.ts +3 -3
  122. package/dist/references/scope-provider.js +242 -0
  123. package/dist/shared/NodeKindProvider.js +57 -0
  124. package/dist/shared/{WorkspaceSymbolProvider.mjs → WorkspaceSymbolProvider.js} +1 -1
  125. package/dist/shared/index.js +2 -0
  126. package/dist/test/index.js +1 -0
  127. package/dist/test/testServices.d.ts +16 -16
  128. package/dist/test/testServices.js +210 -0
  129. package/dist/utils/disposable.js +26 -0
  130. package/dist/utils/elementRef.d.ts +1 -1
  131. package/dist/utils/elementRef.js +27 -0
  132. package/dist/utils/fqnRef.js +63 -0
  133. package/dist/utils/index.js +35 -0
  134. package/dist/utils/printDocs.js +1 -0
  135. package/dist/utils/projectId.js +16 -0
  136. package/dist/utils/stringHash.js +5 -0
  137. package/dist/validation/DocumentValidator.js +17 -0
  138. package/dist/validation/_shared.js +26 -0
  139. package/dist/validation/deployment-checks.js +140 -0
  140. package/dist/validation/dynamic-view.js +67 -0
  141. package/dist/validation/element-ref.js +12 -0
  142. package/dist/validation/element.js +49 -0
  143. package/dist/validation/imports.js +46 -0
  144. package/dist/validation/index.d.ts +1 -1
  145. package/dist/validation/index.js +157 -0
  146. package/dist/validation/property-checks.js +108 -0
  147. package/dist/validation/relation.js +55 -0
  148. package/dist/validation/specification.js +190 -0
  149. package/dist/validation/view-predicates/fqn-expr-with.js +43 -0
  150. package/dist/validation/view-predicates/fqn-ref-expr.js +51 -0
  151. package/dist/validation/view-predicates/incoming.js +16 -0
  152. package/dist/validation/view-predicates/index.js +6 -0
  153. package/dist/validation/view-predicates/outgoing.js +20 -0
  154. package/dist/validation/view-predicates/relation-expr.js +46 -0
  155. package/dist/validation/view-predicates/relation-with.js +16 -0
  156. package/dist/validation/view.d.ts +1 -1
  157. package/dist/validation/view.js +42 -0
  158. package/dist/view-utils/assignNavigateTo.js +27 -0
  159. package/dist/view-utils/index.d.ts +1 -0
  160. package/dist/view-utils/index.js +2 -0
  161. package/dist/view-utils/manual-layout.d.ts +6 -0
  162. package/dist/view-utils/manual-layout.js +149 -0
  163. package/dist/views/ConfigurableLayouter.js +51 -0
  164. package/dist/views/LikeC4ManualLayouts.d.ts +42 -0
  165. package/dist/views/LikeC4ManualLayouts.js +209 -0
  166. package/dist/views/{likec4-views.d.ts → LikeC4Views.d.ts} +32 -10
  167. package/dist/views/LikeC4Views.js +216 -0
  168. package/dist/views/index.d.ts +4 -1
  169. package/dist/views/index.js +11 -0
  170. package/dist/workspace/AstNodeDescriptionProvider.js +18 -0
  171. package/dist/workspace/IndexManager.js +21 -0
  172. package/dist/workspace/LangiumDocuments.d.ts +4 -3
  173. package/dist/workspace/LangiumDocuments.js +72 -0
  174. package/dist/workspace/ProjectsManager.d.ts +25 -16
  175. package/dist/workspace/ProjectsManager.js +469 -0
  176. package/dist/workspace/WorkspaceManager.d.ts +3 -2
  177. package/dist/workspace/WorkspaceManager.js +98 -0
  178. package/dist/workspace/index.js +5 -0
  179. package/likec4lib/package.json +1 -1
  180. package/package.json +30 -28
  181. package/protocol/package.json +1 -1
  182. package/dist/LikeC4LanguageServices.mjs +0 -197
  183. package/dist/Rpc.mjs +0 -296
  184. package/dist/ast.mjs +0 -221
  185. package/dist/browser-worker.mjs +0 -2
  186. package/dist/browser.mjs +0 -32
  187. package/dist/documentation/documentation-provider.mjs +0 -48
  188. package/dist/documentation/index.mjs +0 -1
  189. package/dist/empty.mjs +0 -1
  190. package/dist/filesystem/ChokidarWatcher.mjs +0 -68
  191. package/dist/filesystem/FileSystemWatcher.mjs +0 -11
  192. package/dist/filesystem/LikeC4FileSystem.mjs +0 -64
  193. package/dist/filesystem/index.mjs +0 -19
  194. package/dist/formatting/LikeC4Formatter.mjs +0 -511
  195. package/dist/formatting/utils.mjs +0 -15
  196. package/dist/generated/ast.mjs +0 -2150
  197. package/dist/generated/module.mjs +0 -23
  198. package/dist/index.mjs +0 -50
  199. package/dist/logger.mjs +0 -82
  200. package/dist/lsp/CodeLensProvider.mjs +0 -42
  201. package/dist/lsp/CompletionProvider.mjs +0 -208
  202. package/dist/lsp/DocumentHighlightProvider.mjs +0 -10
  203. package/dist/lsp/DocumentLinkProvider.mjs +0 -53
  204. package/dist/lsp/DocumentSymbolProvider.mjs +0 -287
  205. package/dist/lsp/HoverProvider.mjs +0 -104
  206. package/dist/lsp/RenameProvider.mjs +0 -6
  207. package/dist/lsp/SemanticTokenProvider.mjs +0 -276
  208. package/dist/lsp/index.mjs +0 -7
  209. package/dist/mcp/MCPServerFactory.mjs +0 -70
  210. package/dist/mcp/NoopLikeC4MCPServer.mjs +0 -17
  211. package/dist/mcp/interfaces.mjs +0 -4
  212. package/dist/mcp/server/StdioLikeC4MCPServer.mjs +0 -46
  213. package/dist/mcp/server/StreamableLikeC4MCPServer.mjs +0 -153
  214. package/dist/mcp/server/WithMCPServer.mjs +0 -58
  215. package/dist/mcp/tools/_common.mjs +0 -42
  216. package/dist/mcp/tools/find-relationships.mjs +0 -151
  217. package/dist/mcp/tools/list-projects.mjs +0 -62
  218. package/dist/mcp/tools/open-view.mjs +0 -52
  219. package/dist/mcp/tools/read-deployment.mjs +0 -130
  220. package/dist/mcp/tools/read-element.mjs +0 -198
  221. package/dist/mcp/tools/read-project-summary.mjs +0 -178
  222. package/dist/mcp/tools/read-view.mjs +0 -205
  223. package/dist/mcp/tools/search-element.mjs +0 -171
  224. package/dist/mcp/utils.mjs +0 -47
  225. package/dist/model/builder/MergedExtends.mjs +0 -76
  226. package/dist/model/builder/MergedSpecification.mjs +0 -205
  227. package/dist/model/builder/assignTagColors.d.ts +0 -7
  228. package/dist/model/builder/assignTagColors.mjs +0 -51
  229. package/dist/model/builder/buildModel.mjs +0 -226
  230. package/dist/model/deployments-index.mjs +0 -100
  231. package/dist/model/fqn-index.mjs +0 -243
  232. package/dist/model/index.mjs +0 -6
  233. package/dist/model/model-builder.mjs +0 -285
  234. package/dist/model/model-locator.mjs +0 -239
  235. package/dist/model/model-parser-where.mjs +0 -81
  236. package/dist/model/model-parser.mjs +0 -127
  237. package/dist/model/parser/Base.mjs +0 -376
  238. package/dist/model/parser/DeploymentModelParser.mjs +0 -212
  239. package/dist/model/parser/DeploymentViewParser.mjs +0 -95
  240. package/dist/model/parser/FqnRefParser.mjs +0 -398
  241. package/dist/model/parser/GlobalsParser.mjs +0 -82
  242. package/dist/model/parser/ImportsParser.mjs +0 -28
  243. package/dist/model/parser/ModelParser.mjs +0 -190
  244. package/dist/model/parser/PredicatesParser.mjs +0 -45
  245. package/dist/model/parser/SpecificationParser.mjs +0 -120
  246. package/dist/model/parser/ValueConverter.mjs +0 -12
  247. package/dist/model/parser/ViewsParser.mjs +0 -490
  248. package/dist/model-change/ModelChanges.mjs +0 -89
  249. package/dist/model-change/changeElementStyle.mjs +0 -143
  250. package/dist/model-change/changeViewLayout.mjs +0 -32
  251. package/dist/model-change/saveManualLayout.d.ts +0 -11
  252. package/dist/model-change/saveManualLayout.mjs +0 -27
  253. package/dist/module.mjs +0 -180
  254. package/dist/protocol.mjs +0 -65
  255. package/dist/references/index.mjs +0 -3
  256. package/dist/references/name-provider.mjs +0 -39
  257. package/dist/references/scope-computation.mjs +0 -312
  258. package/dist/references/scope-provider.mjs +0 -239
  259. package/dist/shared/NodeKindProvider.mjs +0 -110
  260. package/dist/shared/index.mjs +0 -2
  261. package/dist/test/index.mjs +0 -1
  262. package/dist/test/testServices.mjs +0 -200
  263. package/dist/utils/disposable.mjs +0 -25
  264. package/dist/utils/elementRef.mjs +0 -20
  265. package/dist/utils/fqnRef.mjs +0 -57
  266. package/dist/utils/index.mjs +0 -33
  267. package/dist/utils/printDocs.mjs +0 -1
  268. package/dist/utils/projectId.mjs +0 -16
  269. package/dist/utils/stringHash.mjs +0 -5
  270. package/dist/validation/DocumentValidator.mjs +0 -16
  271. package/dist/validation/_shared.mjs +0 -25
  272. package/dist/validation/deployment-checks.mjs +0 -146
  273. package/dist/validation/dynamic-view.mjs +0 -67
  274. package/dist/validation/element-ref.mjs +0 -12
  275. package/dist/validation/element.mjs +0 -50
  276. package/dist/validation/imports.mjs +0 -25
  277. package/dist/validation/index.mjs +0 -180
  278. package/dist/validation/property-checks.mjs +0 -107
  279. package/dist/validation/relation.mjs +0 -53
  280. package/dist/validation/specification.mjs +0 -173
  281. package/dist/validation/view-predicates/fqn-expr-with.mjs +0 -43
  282. package/dist/validation/view-predicates/fqn-ref-expr.mjs +0 -53
  283. package/dist/validation/view-predicates/incoming.mjs +0 -16
  284. package/dist/validation/view-predicates/index.mjs +0 -6
  285. package/dist/validation/view-predicates/outgoing.mjs +0 -20
  286. package/dist/validation/view-predicates/relation-expr.mjs +0 -39
  287. package/dist/validation/view-predicates/relation-with.mjs +0 -16
  288. package/dist/validation/view.mjs +0 -25
  289. package/dist/view-utils/assignNavigateTo.mjs +0 -25
  290. package/dist/view-utils/index.mjs +0 -1
  291. package/dist/view-utils/manual-layout.mjs +0 -99
  292. package/dist/views/configurable-layouter.mjs +0 -51
  293. package/dist/views/index.mjs +0 -1
  294. package/dist/views/likec4-views.mjs +0 -166
  295. package/dist/workspace/AstNodeDescriptionProvider.mjs +0 -17
  296. package/dist/workspace/IndexManager.mjs +0 -17
  297. package/dist/workspace/LangiumDocuments.mjs +0 -53
  298. package/dist/workspace/ProjectsManager.mjs +0 -360
  299. package/dist/workspace/WorkspaceManager.mjs +0 -83
  300. package/dist/workspace/index.mjs +0 -5
  301. /package/dist/views/{configurable-layouter.d.ts → ConfigurableLayouter.d.ts} +0 -0
@@ -1,130 +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 readDeployment = likec4Tool({
6
- name: "read-deployment",
7
- description: `
8
- Read details about a deployment node or a deployed instance in a LikeC4 project.
9
-
10
- What it does:
11
- - Returns metadata about a deployment entity (node or instance), including kind, tags, color/shape, children, which views include it, and its source location.
12
-
13
- Inputs:
14
- - id: string \u2014 Deployment id (FQN)
15
- - project: string (optional, defaults to "default") \u2014 Project id
16
-
17
- Output fields:
18
- - type: "deployment-node" | "deployed-instance"
19
- - id: string \u2014 Deployment id (FQN)
20
- - kind: string \u2014 Deployment node kind, or element kind for deployed instances
21
- - name: string \u2014 Name of the deployment entity
22
- - title: string \u2014 Title of the deployment entity
23
- - description: string|null \u2014 Description text
24
- - technology: string|null \u2014 Technology info, if any
25
- - tags: string[] \u2014 Tags assigned to this entity
26
- - project: string \u2014 Project id
27
- - metadata: Record<string, string>
28
- - shape: string \u2014 Rendered shape
29
- - color: string \u2014 Rendered color
30
- - children: string[] \u2014 Child deployment ids (empty for instances)
31
- - includedInViews: View[] \u2014 Views that include this entity
32
- - instanceof: { id: string, title: string, kind: string } | null \u2014 If type is "deployed-instance", the referenced element
33
- - sourceLocation: { path: string, range: { start: { line: number, character: number }, end: { line: number, character: number } } } | null
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; does not mutate the model.
42
-
43
- Example request:
44
- { "id": "k8s.cluster.frontend", "project": "default" }
45
-
46
- Example response (deployed instance):
47
- {
48
- "type": "deployed-instance",
49
- "id": "k8s.cluster.frontend",
50
- "kind": "k8s.pod",
51
- "name": "frontend",
52
- "title": "Frontend Pod",
53
- "description": null,
54
- "technology": "Kubernetes",
55
- "tags": ["prod"],
56
- "project": "default",
57
- "metadata": {},
58
- "shape": "rectangle",
59
- "color": "#2F80ED",
60
- "children": [],
61
- "includedInViews": [
62
- { "id": "runtime-overview", "title": "Runtime Overview", "type": "deployment" }
63
- ],
64
- "instanceof": { "id": "shop.frontend", "title": "Frontend", "kind": "component" },
65
- "sourceLocation": {
66
- "path": "/abs/path/project/model.c4",
67
- "range": { "start": { "line": 10, "character": 0 }, "end": { "line": 25, "character": 0 } }
68
- }
69
- }
70
- `,
71
- annotations: {
72
- readOnlyHint: true,
73
- idempotentHint: true,
74
- title: "Read deployment entity"
75
- },
76
- inputSchema: {
77
- id: z.string().describe("Deployment id (FQN)"),
78
- project: projectIdSchema
79
- },
80
- outputSchema: {
81
- type: z.enum(["deployment-node", "deployed-instance"]),
82
- id: z.string().describe("Deployment id (FQN)"),
83
- kind: z.string().describe("Deployment node kind, or element kind for deployed instances"),
84
- name: z.string(),
85
- title: z.string(),
86
- description: z.string().nullable(),
87
- technology: z.string().nullable(),
88
- tags: z.array(z.string()),
89
- project: z.string(),
90
- metadata: z.record(z.union([z.string(), z.array(z.string())])),
91
- shape: z.string(),
92
- color: z.string(),
93
- children: z.array(z.string()).describe("Children of this deployment node (Array of Deployment ids)"),
94
- includedInViews: includedInViewsSchema.describe("Views that include this deployment node"),
95
- instanceof: z.object({
96
- id: z.string().describe("Element ID (FQN)"),
97
- title: z.string(),
98
- kind: z.string()
99
- }).nullable().describe('If type is "deployed-instance", the referenced element'),
100
- sourceLocation: locationSchema
101
- }
102
- }, async (languageServices, args) => {
103
- const projectId = languageServices.projectsManager.ensureProjectId(args.project);
104
- const model = await languageServices.computedModel(projectId);
105
- const element = model.deployment.findElement(args.id);
106
- invariant(element, `Deployment entity "${args.id}" not found in project "${projectId}"`);
107
- const locate = mkLocate(languageServices, projectId);
108
- return {
109
- type: element.isInstance() ? "deployed-instance" : "deployment-node",
110
- id: element.id,
111
- name: element.name,
112
- kind: element.kind,
113
- title: element.title,
114
- description: element.description.text,
115
- technology: element.technology,
116
- tags: [...element.tags],
117
- project: projectId,
118
- metadata: element.getMetadata(),
119
- shape: element.shape,
120
- color: element.color,
121
- children: element.isInstance() ? [] : [...element.children()].map((c) => c.id),
122
- includedInViews: includedInViews(element.views()),
123
- instanceof: element.isInstance() ? {
124
- id: element.element.id,
125
- title: element.element.title,
126
- kind: element.element.kind
127
- } : null,
128
- sourceLocation: locate({ deployment: element.id })
129
- };
130
- });
@@ -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.union([z.string(), z.array(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
- });