@likec4/language-server 1.43.0 → 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 (299) 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 +5 -1
  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 +3542 -3896
  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.js +2155 -0
  24. package/dist/generated/{grammar.mjs → grammar.js} +6 -2
  25. package/dist/generated/module.d.ts +6 -1
  26. package/dist/generated/module.js +27 -0
  27. package/dist/generated-lib/{icons.mjs → icons.js} +11 -7
  28. package/dist/index.d.ts +7 -0
  29. package/dist/index.js +53 -0
  30. package/dist/{likec4lib.mjs → likec4lib.js} +3 -3
  31. package/dist/logger.js +81 -0
  32. package/dist/lsp/CodeActionProvider.d.ts +14 -0
  33. package/dist/lsp/CodeActionProvider.js +33 -0
  34. package/dist/lsp/CodeLensProvider.js +44 -0
  35. package/dist/lsp/CompletionProvider.d.ts +3 -1
  36. package/dist/lsp/CompletionProvider.js +200 -0
  37. package/dist/lsp/DocumentHighlightProvider.js +10 -0
  38. package/dist/lsp/DocumentLinkProvider.js +58 -0
  39. package/dist/lsp/DocumentSymbolProvider.js +306 -0
  40. package/dist/lsp/HoverProvider.js +106 -0
  41. package/dist/lsp/RenameProvider.js +6 -0
  42. package/dist/lsp/SemanticTokenProvider.js +257 -0
  43. package/dist/lsp/index.d.ts +1 -0
  44. package/dist/lsp/index.js +9 -0
  45. package/dist/mcp/MCPServerFactory.js +73 -0
  46. package/dist/mcp/NoopLikeC4MCPServer.js +17 -0
  47. package/dist/mcp/interfaces.js +5 -0
  48. package/dist/mcp/server/StdioLikeC4MCPServer.js +47 -0
  49. package/dist/mcp/server/StreamableLikeC4MCPServer.js +145 -0
  50. package/dist/mcp/server/WithMCPServer.js +56 -0
  51. package/dist/mcp/tools/_common.d.ts +8 -7
  52. package/dist/mcp/tools/_common.js +49 -0
  53. package/dist/mcp/tools/find-relationships.d.ts +7 -8
  54. package/dist/mcp/tools/find-relationships.js +150 -0
  55. package/dist/mcp/tools/list-projects.d.ts +3 -3
  56. package/dist/mcp/tools/list-projects.js +62 -0
  57. package/dist/mcp/tools/open-view.d.ts +6 -7
  58. package/dist/mcp/tools/open-view.js +52 -0
  59. package/dist/mcp/tools/read-deployment.d.ts +6 -7
  60. package/dist/mcp/tools/read-deployment.js +132 -0
  61. package/dist/mcp/tools/read-element.d.ts +6 -7
  62. package/dist/mcp/tools/read-element.js +194 -0
  63. package/dist/mcp/tools/read-project-summary.d.ts +5 -6
  64. package/dist/mcp/tools/read-project-summary.js +176 -0
  65. package/dist/mcp/tools/read-view.d.ts +6 -7
  66. package/dist/mcp/tools/read-view.js +203 -0
  67. package/dist/mcp/tools/search-element.d.ts +3 -3
  68. package/dist/mcp/tools/search-element.js +177 -0
  69. package/dist/mcp/utils.d.ts +2 -2
  70. package/dist/mcp/utils.js +48 -0
  71. package/dist/model/builder/MergedExtends.js +74 -0
  72. package/dist/model/builder/MergedSpecification.js +175 -0
  73. package/dist/model/builder/buildModel.js +176 -0
  74. package/dist/model/deployments-index.js +102 -0
  75. package/dist/model/fqn-index.js +250 -0
  76. package/dist/model/index.js +6 -0
  77. package/dist/model/model-builder.d.ts +13 -11
  78. package/dist/model/model-builder.js +234 -0
  79. package/dist/model/model-locator.d.ts +6 -5
  80. package/dist/model/model-locator.js +240 -0
  81. package/dist/model/model-parser-where.js +81 -0
  82. package/dist/model/model-parser.d.ts +309 -304
  83. package/dist/model/model-parser.js +119 -0
  84. package/dist/model/parser/Base.d.ts +2 -2
  85. package/dist/model/parser/Base.js +367 -0
  86. package/dist/model/parser/DeploymentModelParser.d.ts +2 -2
  87. package/dist/model/parser/DeploymentModelParser.js +176 -0
  88. package/dist/model/parser/DeploymentViewParser.d.ts +3 -3
  89. package/dist/model/parser/DeploymentViewParser.js +86 -0
  90. package/dist/model/parser/FqnRefParser.d.ts +2 -2
  91. package/dist/model/parser/FqnRefParser.js +382 -0
  92. package/dist/model/parser/GlobalsParser.d.ts +6 -6
  93. package/dist/model/parser/GlobalsParser.js +84 -0
  94. package/dist/model/parser/ImportsParser.d.ts +11 -12
  95. package/dist/model/parser/ImportsParser.js +24 -0
  96. package/dist/model/parser/ModelParser.d.ts +2 -2
  97. package/dist/model/parser/ModelParser.js +165 -0
  98. package/dist/model/parser/PredicatesParser.d.ts +2 -2
  99. package/dist/model/parser/PredicatesParser.js +45 -0
  100. package/dist/model/parser/SpecificationParser.d.ts +2 -2
  101. package/dist/model/parser/SpecificationParser.js +109 -0
  102. package/dist/model/parser/ValueConverter.js +12 -0
  103. package/dist/model/parser/ViewsParser.d.ts +3 -3
  104. package/dist/model/parser/ViewsParser.js +477 -0
  105. package/dist/model-change/ModelChanges.d.ts +6 -3
  106. package/dist/model-change/ModelChanges.js +102 -0
  107. package/dist/model-change/changeElementStyle.js +134 -0
  108. package/dist/model-change/changeViewLayout.d.ts +2 -2
  109. package/dist/model-change/changeViewLayout.js +28 -0
  110. package/dist/model-change/removeManualLayoutV1.d.ts +7 -0
  111. package/dist/model-change/removeManualLayoutV1.js +27 -0
  112. package/dist/module.d.ts +10 -5
  113. package/dist/module.js +143 -0
  114. package/dist/protocol.d.ts +1 -17
  115. package/dist/protocol.js +114 -0
  116. package/dist/references/index.js +3 -0
  117. package/dist/references/name-provider.js +37 -0
  118. package/dist/references/scope-computation.js +288 -0
  119. package/dist/references/scope-provider.d.ts +3 -3
  120. package/dist/references/scope-provider.js +242 -0
  121. package/dist/shared/NodeKindProvider.js +57 -0
  122. package/dist/shared/{WorkspaceSymbolProvider.mjs → WorkspaceSymbolProvider.js} +1 -1
  123. package/dist/shared/index.js +2 -0
  124. package/dist/test/index.js +1 -0
  125. package/dist/test/testServices.d.ts +16 -16
  126. package/dist/test/testServices.js +210 -0
  127. package/dist/utils/disposable.js +26 -0
  128. package/dist/utils/elementRef.d.ts +1 -1
  129. package/dist/utils/elementRef.js +27 -0
  130. package/dist/utils/fqnRef.js +63 -0
  131. package/dist/utils/index.js +35 -0
  132. package/dist/utils/printDocs.js +1 -0
  133. package/dist/utils/projectId.js +16 -0
  134. package/dist/utils/stringHash.js +5 -0
  135. package/dist/validation/DocumentValidator.js +17 -0
  136. package/dist/validation/_shared.js +26 -0
  137. package/dist/validation/deployment-checks.js +140 -0
  138. package/dist/validation/dynamic-view.js +67 -0
  139. package/dist/validation/element-ref.js +12 -0
  140. package/dist/validation/element.js +49 -0
  141. package/dist/validation/imports.js +46 -0
  142. package/dist/validation/index.d.ts +1 -1
  143. package/dist/validation/index.js +157 -0
  144. package/dist/validation/property-checks.js +108 -0
  145. package/dist/validation/relation.js +55 -0
  146. package/dist/validation/specification.js +190 -0
  147. package/dist/validation/view-predicates/fqn-expr-with.js +43 -0
  148. package/dist/validation/view-predicates/fqn-ref-expr.js +51 -0
  149. package/dist/validation/view-predicates/incoming.js +16 -0
  150. package/dist/validation/view-predicates/index.js +6 -0
  151. package/dist/validation/view-predicates/outgoing.js +20 -0
  152. package/dist/validation/view-predicates/relation-expr.js +46 -0
  153. package/dist/validation/view-predicates/relation-with.js +16 -0
  154. package/dist/validation/view.d.ts +1 -1
  155. package/dist/validation/view.js +42 -0
  156. package/dist/view-utils/assignNavigateTo.js +27 -0
  157. package/dist/view-utils/index.d.ts +1 -0
  158. package/dist/view-utils/index.js +2 -0
  159. package/dist/view-utils/manual-layout.d.ts +6 -0
  160. package/dist/view-utils/manual-layout.js +151 -0
  161. package/dist/views/ConfigurableLayouter.js +51 -0
  162. package/dist/views/LikeC4ManualLayouts.d.ts +28 -0
  163. package/dist/views/LikeC4ManualLayouts.js +132 -0
  164. package/dist/views/{likec4-views.d.ts → LikeC4Views.d.ts} +9 -8
  165. package/dist/views/LikeC4Views.js +200 -0
  166. package/dist/views/index.d.ts +4 -1
  167. package/dist/views/index.js +11 -0
  168. package/dist/workspace/AstNodeDescriptionProvider.js +15 -0
  169. package/dist/workspace/IndexManager.js +21 -0
  170. package/dist/workspace/LangiumDocuments.d.ts +1 -1
  171. package/dist/workspace/LangiumDocuments.js +58 -0
  172. package/dist/workspace/ProjectsManager.d.ts +8 -3
  173. package/dist/workspace/ProjectsManager.js +373 -0
  174. package/dist/workspace/WorkspaceManager.d.ts +3 -2
  175. package/dist/workspace/WorkspaceManager.js +93 -0
  176. package/dist/workspace/index.js +5 -0
  177. package/likec4lib/package.json +1 -1
  178. package/package.json +25 -24
  179. package/protocol/package.json +1 -1
  180. package/dist/LikeC4LanguageServices.mjs +0 -197
  181. package/dist/Rpc.mjs +0 -296
  182. package/dist/ast.mjs +0 -221
  183. package/dist/browser-worker.mjs +0 -2
  184. package/dist/browser.mjs +0 -32
  185. package/dist/documentation/documentation-provider.mjs +0 -48
  186. package/dist/documentation/index.mjs +0 -1
  187. package/dist/empty.mjs +0 -1
  188. package/dist/filesystem/ChokidarWatcher.mjs +0 -68
  189. package/dist/filesystem/FileSystemWatcher.mjs +0 -11
  190. package/dist/filesystem/LikeC4FileSystem.mjs +0 -64
  191. package/dist/filesystem/index.mjs +0 -19
  192. package/dist/formatting/LikeC4Formatter.mjs +0 -511
  193. package/dist/formatting/utils.mjs +0 -15
  194. package/dist/generated/ast.mjs +0 -2150
  195. package/dist/generated/module.mjs +0 -23
  196. package/dist/index.mjs +0 -50
  197. package/dist/logger.mjs +0 -82
  198. package/dist/lsp/CodeLensProvider.mjs +0 -42
  199. package/dist/lsp/CompletionProvider.mjs +0 -208
  200. package/dist/lsp/DocumentHighlightProvider.mjs +0 -10
  201. package/dist/lsp/DocumentLinkProvider.mjs +0 -53
  202. package/dist/lsp/DocumentSymbolProvider.mjs +0 -287
  203. package/dist/lsp/HoverProvider.mjs +0 -104
  204. package/dist/lsp/RenameProvider.mjs +0 -6
  205. package/dist/lsp/SemanticTokenProvider.mjs +0 -276
  206. package/dist/lsp/index.mjs +0 -7
  207. package/dist/mcp/MCPServerFactory.mjs +0 -70
  208. package/dist/mcp/NoopLikeC4MCPServer.mjs +0 -17
  209. package/dist/mcp/interfaces.mjs +0 -4
  210. package/dist/mcp/server/StdioLikeC4MCPServer.mjs +0 -46
  211. package/dist/mcp/server/StreamableLikeC4MCPServer.mjs +0 -153
  212. package/dist/mcp/server/WithMCPServer.mjs +0 -58
  213. package/dist/mcp/tools/_common.mjs +0 -42
  214. package/dist/mcp/tools/find-relationships.mjs +0 -151
  215. package/dist/mcp/tools/list-projects.mjs +0 -62
  216. package/dist/mcp/tools/open-view.mjs +0 -52
  217. package/dist/mcp/tools/read-deployment.mjs +0 -130
  218. package/dist/mcp/tools/read-element.mjs +0 -198
  219. package/dist/mcp/tools/read-project-summary.mjs +0 -178
  220. package/dist/mcp/tools/read-view.mjs +0 -205
  221. package/dist/mcp/tools/search-element.mjs +0 -171
  222. package/dist/mcp/utils.mjs +0 -47
  223. package/dist/model/builder/MergedExtends.mjs +0 -76
  224. package/dist/model/builder/MergedSpecification.mjs +0 -205
  225. package/dist/model/builder/assignTagColors.d.ts +0 -7
  226. package/dist/model/builder/assignTagColors.mjs +0 -51
  227. package/dist/model/builder/buildModel.mjs +0 -226
  228. package/dist/model/deployments-index.mjs +0 -100
  229. package/dist/model/fqn-index.mjs +0 -243
  230. package/dist/model/index.mjs +0 -6
  231. package/dist/model/model-builder.mjs +0 -285
  232. package/dist/model/model-locator.mjs +0 -239
  233. package/dist/model/model-parser-where.mjs +0 -81
  234. package/dist/model/model-parser.mjs +0 -127
  235. package/dist/model/parser/Base.mjs +0 -376
  236. package/dist/model/parser/DeploymentModelParser.mjs +0 -212
  237. package/dist/model/parser/DeploymentViewParser.mjs +0 -95
  238. package/dist/model/parser/FqnRefParser.mjs +0 -398
  239. package/dist/model/parser/GlobalsParser.mjs +0 -82
  240. package/dist/model/parser/ImportsParser.mjs +0 -28
  241. package/dist/model/parser/ModelParser.mjs +0 -190
  242. package/dist/model/parser/PredicatesParser.mjs +0 -45
  243. package/dist/model/parser/SpecificationParser.mjs +0 -120
  244. package/dist/model/parser/ValueConverter.mjs +0 -12
  245. package/dist/model/parser/ViewsParser.mjs +0 -490
  246. package/dist/model-change/ModelChanges.mjs +0 -89
  247. package/dist/model-change/changeElementStyle.mjs +0 -143
  248. package/dist/model-change/changeViewLayout.mjs +0 -32
  249. package/dist/model-change/saveManualLayout.d.ts +0 -11
  250. package/dist/model-change/saveManualLayout.mjs +0 -27
  251. package/dist/module.mjs +0 -180
  252. package/dist/protocol.mjs +0 -65
  253. package/dist/references/index.mjs +0 -3
  254. package/dist/references/name-provider.mjs +0 -39
  255. package/dist/references/scope-computation.mjs +0 -312
  256. package/dist/references/scope-provider.mjs +0 -239
  257. package/dist/shared/NodeKindProvider.mjs +0 -110
  258. package/dist/shared/index.mjs +0 -2
  259. package/dist/test/index.mjs +0 -1
  260. package/dist/test/testServices.mjs +0 -200
  261. package/dist/utils/disposable.mjs +0 -25
  262. package/dist/utils/elementRef.mjs +0 -20
  263. package/dist/utils/fqnRef.mjs +0 -57
  264. package/dist/utils/index.mjs +0 -33
  265. package/dist/utils/printDocs.mjs +0 -1
  266. package/dist/utils/projectId.mjs +0 -16
  267. package/dist/utils/stringHash.mjs +0 -5
  268. package/dist/validation/DocumentValidator.mjs +0 -16
  269. package/dist/validation/_shared.mjs +0 -25
  270. package/dist/validation/deployment-checks.mjs +0 -146
  271. package/dist/validation/dynamic-view.mjs +0 -67
  272. package/dist/validation/element-ref.mjs +0 -12
  273. package/dist/validation/element.mjs +0 -50
  274. package/dist/validation/imports.mjs +0 -25
  275. package/dist/validation/index.mjs +0 -180
  276. package/dist/validation/property-checks.mjs +0 -107
  277. package/dist/validation/relation.mjs +0 -53
  278. package/dist/validation/specification.mjs +0 -173
  279. package/dist/validation/view-predicates/fqn-expr-with.mjs +0 -43
  280. package/dist/validation/view-predicates/fqn-ref-expr.mjs +0 -53
  281. package/dist/validation/view-predicates/incoming.mjs +0 -16
  282. package/dist/validation/view-predicates/index.mjs +0 -6
  283. package/dist/validation/view-predicates/outgoing.mjs +0 -20
  284. package/dist/validation/view-predicates/relation-expr.mjs +0 -39
  285. package/dist/validation/view-predicates/relation-with.mjs +0 -16
  286. package/dist/validation/view.mjs +0 -25
  287. package/dist/view-utils/assignNavigateTo.mjs +0 -25
  288. package/dist/view-utils/index.mjs +0 -1
  289. package/dist/view-utils/manual-layout.mjs +0 -99
  290. package/dist/views/configurable-layouter.mjs +0 -51
  291. package/dist/views/index.mjs +0 -1
  292. package/dist/views/likec4-views.mjs +0 -166
  293. package/dist/workspace/AstNodeDescriptionProvider.mjs +0 -17
  294. package/dist/workspace/IndexManager.mjs +0 -17
  295. package/dist/workspace/LangiumDocuments.mjs +0 -53
  296. package/dist/workspace/ProjectsManager.mjs +0 -360
  297. package/dist/workspace/WorkspaceManager.mjs +0 -83
  298. package/dist/workspace/index.mjs +0 -5
  299. /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
- });