@likec4/language-server 1.47.0 → 1.48.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 (316) hide show
  1. package/LICENSE +1 -1
  2. package/browser/package.json +2 -2
  3. package/browser-worker/package.json +2 -2
  4. package/bundled/package.json +4 -0
  5. package/dist/LikeC4LanguageServices.d.mts +4 -0
  6. package/dist/LikeC4LanguageServices.mjs +3 -0
  7. package/dist/_chunks/ConfigurableLayouter.mjs +1956 -0
  8. package/dist/_chunks/LikeC4LanguageServices.d.mts +1978 -0
  9. package/dist/_chunks/LikeC4LanguageServices.mjs +725 -0
  10. package/dist/_chunks/ast.d.mts +1444 -0
  11. package/dist/_chunks/ast.mjs +2375 -0
  12. package/dist/_chunks/ast2.mjs +176 -0
  13. package/dist/_chunks/common-exports.mjs +0 -0
  14. package/dist/_chunks/filesystem.mjs +58 -0
  15. package/dist/_chunks/grammar.mjs +8 -0
  16. package/dist/_chunks/icons.mjs +5211 -0
  17. package/dist/_chunks/libs/@hono/node-server.mjs +436 -0
  18. package/dist/_chunks/libs/@msgpack/msgpack.mjs +805 -0
  19. package/dist/_chunks/libs/eventemitter3.mjs +243 -0
  20. package/dist/_chunks/libs/fast-equals.mjs +446 -0
  21. package/dist/_chunks/libs/hono.mjs +1829 -0
  22. package/dist/_chunks/libs/p-queue.mjs +449 -0
  23. package/dist/_chunks/libs/parse-ms.mjs +36 -0
  24. package/dist/_chunks/libs/picomatch.mjs +1673 -0
  25. package/dist/_chunks/libs/pretty-ms.mjs +80 -0
  26. package/dist/_chunks/libs/remeda.mjs +482 -0
  27. package/dist/_chunks/libs/strip-indent.mjs +15 -0
  28. package/dist/_chunks/libs/ufo.mjs +166 -0
  29. package/dist/_chunks/likec4lib.mjs +9 -0
  30. package/dist/_chunks/mcp.mjs +33 -0
  31. package/dist/_chunks/module.mjs +28 -0
  32. package/dist/_chunks/module2.mjs +6576 -0
  33. package/dist/_chunks/protocol.d.mts +311 -0
  34. package/dist/_chunks/protocol.mjs +78 -0
  35. package/dist/_chunks/rolldown-runtime.mjs +42 -0
  36. package/dist/ast.d.mts +4 -0
  37. package/dist/ast.mjs +4 -0
  38. package/dist/browser-worker.d.mts +1 -0
  39. package/dist/browser-worker.mjs +6 -0
  40. package/dist/browser.d.mts +11 -0
  41. package/dist/browser.mjs +27 -0
  42. package/dist/bundled.d.mts +28 -0
  43. package/dist/bundled.mjs +51 -4853
  44. package/dist/common-exports.d.mts +4 -0
  45. package/dist/common-exports.mjs +5 -0
  46. package/dist/filesystem/index.d.mts +4 -0
  47. package/dist/filesystem/index.mjs +3 -0
  48. package/dist/generated/ast.d.mts +2 -0
  49. package/dist/generated/ast.mjs +3 -0
  50. package/dist/generated/grammar.d.mts +6 -0
  51. package/dist/generated/grammar.mjs +3 -0
  52. package/dist/generated/module.d.mts +14 -0
  53. package/dist/generated/module.mjs +3 -0
  54. package/dist/generated-lib/icons.d.mts +4 -0
  55. package/dist/generated-lib/icons.mjs +3 -0
  56. package/dist/index.d.mts +4 -0
  57. package/dist/index.mjs +48 -0
  58. package/dist/likec4lib.d.mts +9 -0
  59. package/dist/likec4lib.mjs +4 -0
  60. package/dist/mcp/index.d.mts +4 -0
  61. package/dist/mcp/index.mjs +3 -0
  62. package/dist/module.d.mts +4 -0
  63. package/dist/module.mjs +3 -0
  64. package/dist/protocol.d.mts +2 -0
  65. package/dist/protocol.mjs +3 -0
  66. package/likec4lib/package.json +2 -2
  67. package/package.json +106 -63
  68. package/protocol/package.json +2 -2
  69. package/dist/LikeC4LanguageServices.d.ts +0 -115
  70. package/dist/LikeC4LanguageServices.js +0 -164
  71. package/dist/Rpc.d.ts +0 -9
  72. package/dist/Rpc.js +0 -276
  73. package/dist/ast.d.ts +0 -226
  74. package/dist/ast.js +0 -264
  75. package/dist/browser-worker.d.ts +0 -1
  76. package/dist/browser-worker.js +0 -4
  77. package/dist/browser.d.ts +0 -10
  78. package/dist/browser.js +0 -34
  79. package/dist/bundled.d.ts +0 -8
  80. package/dist/bundled.js +0 -44
  81. package/dist/documentation/documentation-provider.d.ts +0 -8
  82. package/dist/documentation/documentation-provider.js +0 -51
  83. package/dist/documentation/index.d.ts +0 -1
  84. package/dist/documentation/index.js +0 -1
  85. package/dist/empty.d.ts +0 -2
  86. package/dist/empty.js +0 -2
  87. package/dist/filesystem/ChokidarWatcher.d.ts +0 -19
  88. package/dist/filesystem/ChokidarWatcher.js +0 -133
  89. package/dist/filesystem/FileSystemWatcher.d.ts +0 -19
  90. package/dist/filesystem/FileSystemWatcher.js +0 -14
  91. package/dist/filesystem/LikeC4FileSystem.d.ts +0 -3
  92. package/dist/filesystem/LikeC4FileSystem.js +0 -140
  93. package/dist/filesystem/index.d.ts +0 -55
  94. package/dist/filesystem/index.js +0 -29
  95. package/dist/formatting/LikeC4Formatter.d.ts +0 -59
  96. package/dist/formatting/LikeC4Formatter.js +0 -637
  97. package/dist/formatting/utils.d.ts +0 -6
  98. package/dist/formatting/utils.js +0 -18
  99. package/dist/generated/ast.d.ts +0 -1411
  100. package/dist/generated/ast.js +0 -2207
  101. package/dist/generated/grammar.d.ts +0 -6
  102. package/dist/generated/grammar.js +0 -7
  103. package/dist/generated/module.d.ts +0 -14
  104. package/dist/generated/module.js +0 -27
  105. package/dist/generated-lib/icons.d.ts +0 -1
  106. package/dist/generated-lib/icons.js +0 -18
  107. package/dist/index.d.ts +0 -37
  108. package/dist/index.js +0 -54
  109. package/dist/likec4lib.d.ts +0 -6
  110. package/dist/likec4lib.js +0 -7
  111. package/dist/logger.d.ts +0 -17
  112. package/dist/logger.js +0 -81
  113. package/dist/lsp/CodeActionProvider.d.ts +0 -14
  114. package/dist/lsp/CodeActionProvider.js +0 -33
  115. package/dist/lsp/CodeLensProvider.d.ts +0 -9
  116. package/dist/lsp/CodeLensProvider.js +0 -44
  117. package/dist/lsp/CompletionProvider.d.ts +0 -13
  118. package/dist/lsp/CompletionProvider.js +0 -238
  119. package/dist/lsp/DocumentHighlightProvider.d.ts +0 -9
  120. package/dist/lsp/DocumentHighlightProvider.js +0 -10
  121. package/dist/lsp/DocumentLinkProvider.d.ts +0 -11
  122. package/dist/lsp/DocumentLinkProvider.js +0 -58
  123. package/dist/lsp/DocumentSymbolProvider.d.ts +0 -33
  124. package/dist/lsp/DocumentSymbolProvider.js +0 -317
  125. package/dist/lsp/HoverProvider.d.ts +0 -10
  126. package/dist/lsp/HoverProvider.js +0 -106
  127. package/dist/lsp/RenameProvider.d.ts +0 -5
  128. package/dist/lsp/RenameProvider.js +0 -6
  129. package/dist/lsp/SemanticTokenProvider.d.ts +0 -19
  130. package/dist/lsp/SemanticTokenProvider.js +0 -305
  131. package/dist/lsp/index.d.ts +0 -8
  132. package/dist/lsp/index.js +0 -9
  133. package/dist/mcp/MCPServerFactory.d.ts +0 -8
  134. package/dist/mcp/MCPServerFactory.js +0 -73
  135. package/dist/mcp/NoopLikeC4MCPServer.d.ts +0 -9
  136. package/dist/mcp/NoopLikeC4MCPServer.js +0 -17
  137. package/dist/mcp/interfaces.d.ts +0 -13
  138. package/dist/mcp/interfaces.js +0 -4
  139. package/dist/mcp/server/StdioLikeC4MCPServer.d.ts +0 -16
  140. package/dist/mcp/server/StdioLikeC4MCPServer.js +0 -51
  141. package/dist/mcp/server/StreamableLikeC4MCPServer.d.ts +0 -16
  142. package/dist/mcp/server/StreamableLikeC4MCPServer.js +0 -121
  143. package/dist/mcp/server/WithMCPServer.d.ts +0 -4
  144. package/dist/mcp/server/WithMCPServer.js +0 -54
  145. package/dist/mcp/tools/_common.d.ts +0 -88
  146. package/dist/mcp/tools/_common.js +0 -49
  147. package/dist/mcp/tools/find-relationships.d.ts +0 -202
  148. package/dist/mcp/tools/find-relationships.js +0 -150
  149. package/dist/mcp/tools/list-projects.d.ts +0 -194
  150. package/dist/mcp/tools/list-projects.js +0 -62
  151. package/dist/mcp/tools/open-view.d.ts +0 -200
  152. package/dist/mcp/tools/open-view.js +0 -52
  153. package/dist/mcp/tools/read-deployment.d.ts +0 -200
  154. package/dist/mcp/tools/read-deployment.js +0 -150
  155. package/dist/mcp/tools/read-element.d.ts +0 -200
  156. package/dist/mcp/tools/read-element.js +0 -218
  157. package/dist/mcp/tools/read-project-summary.d.ts +0 -198
  158. package/dist/mcp/tools/read-project-summary.js +0 -176
  159. package/dist/mcp/tools/read-view.d.ts +0 -200
  160. package/dist/mcp/tools/read-view.js +0 -203
  161. package/dist/mcp/tools/search-element.d.ts +0 -198
  162. package/dist/mcp/tools/search-element.js +0 -177
  163. package/dist/mcp/utils.d.ts +0 -18
  164. package/dist/mcp/utils.js +0 -48
  165. package/dist/model/builder/MergedExtends.d.ts +0 -13
  166. package/dist/model/builder/MergedExtends.js +0 -74
  167. package/dist/model/builder/MergedSpecification.d.ts +0 -32
  168. package/dist/model/builder/MergedSpecification.js +0 -175
  169. package/dist/model/builder/buildModel.d.ts +0 -16
  170. package/dist/model/builder/buildModel.js +0 -245
  171. package/dist/model/deployments-index.d.ts +0 -10
  172. package/dist/model/deployments-index.js +0 -102
  173. package/dist/model/fqn-index.d.ts +0 -61
  174. package/dist/model/fqn-index.js +0 -253
  175. package/dist/model/index.d.ts +0 -6
  176. package/dist/model/index.js +0 -6
  177. package/dist/model/model-builder.d.ts +0 -54
  178. package/dist/model/model-builder.js +0 -233
  179. package/dist/model/model-locator.d.ts +0 -39
  180. package/dist/model/model-locator.js +0 -240
  181. package/dist/model/model-parser-where.d.ts +0 -4
  182. package/dist/model/model-parser-where.js +0 -81
  183. package/dist/model/model-parser.d.ts +0 -645
  184. package/dist/model/model-parser.js +0 -133
  185. package/dist/model/parser/Base.d.ts +0 -69
  186. package/dist/model/parser/Base.js +0 -382
  187. package/dist/model/parser/DeploymentModelParser.d.ts +0 -71
  188. package/dist/model/parser/DeploymentModelParser.js +0 -176
  189. package/dist/model/parser/DeploymentViewParser.d.ts +0 -75
  190. package/dist/model/parser/DeploymentViewParser.js +0 -86
  191. package/dist/model/parser/FqnRefParser.d.ts +0 -66
  192. package/dist/model/parser/FqnRefParser.js +0 -382
  193. package/dist/model/parser/GlobalsParser.d.ts +0 -109
  194. package/dist/model/parser/GlobalsParser.js +0 -84
  195. package/dist/model/parser/ImportsParser.d.ts +0 -46
  196. package/dist/model/parser/ImportsParser.js +0 -24
  197. package/dist/model/parser/ModelParser.d.ts +0 -71
  198. package/dist/model/parser/ModelParser.js +0 -209
  199. package/dist/model/parser/PredicatesParser.d.ts +0 -75
  200. package/dist/model/parser/PredicatesParser.js +0 -45
  201. package/dist/model/parser/SpecificationParser.d.ts +0 -53
  202. package/dist/model/parser/SpecificationParser.js +0 -113
  203. package/dist/model/parser/ValueConverter.d.ts +0 -4
  204. package/dist/model/parser/ValueConverter.js +0 -12
  205. package/dist/model/parser/ViewsParser.d.ts +0 -112
  206. package/dist/model/parser/ViewsParser.js +0 -492
  207. package/dist/model-change/ModelChanges.d.ts +0 -18
  208. package/dist/model-change/ModelChanges.js +0 -129
  209. package/dist/model-change/changeElementStyle.d.ts +0 -16
  210. package/dist/model-change/changeElementStyle.js +0 -134
  211. package/dist/model-change/changeViewLayout.d.ts +0 -12
  212. package/dist/model-change/changeViewLayout.js +0 -28
  213. package/dist/model-change/removeManualLayoutV1.d.ts +0 -7
  214. package/dist/model-change/removeManualLayoutV1.js +0 -27
  215. package/dist/module.d.ts +0 -92
  216. package/dist/module.js +0 -143
  217. package/dist/protocol.d.ts +0 -289
  218. package/dist/protocol.js +0 -123
  219. package/dist/references/index.d.ts +0 -3
  220. package/dist/references/index.js +0 -3
  221. package/dist/references/name-provider.d.ts +0 -9
  222. package/dist/references/name-provider.js +0 -37
  223. package/dist/references/scope-computation.d.ts +0 -20
  224. package/dist/references/scope-computation.js +0 -288
  225. package/dist/references/scope-provider.d.ts +0 -40
  226. package/dist/references/scope-provider.js +0 -239
  227. package/dist/shared/NodeKindProvider.d.ts +0 -15
  228. package/dist/shared/NodeKindProvider.js +0 -57
  229. package/dist/shared/WorkspaceSymbolProvider.d.ts +0 -3
  230. package/dist/shared/WorkspaceSymbolProvider.js +0 -3
  231. package/dist/shared/index.d.ts +0 -2
  232. package/dist/shared/index.js +0 -2
  233. package/dist/test/index.d.ts +0 -1
  234. package/dist/test/index.js +0 -1
  235. package/dist/test/testServices.d.ts +0 -64
  236. package/dist/test/testServices.js +0 -210
  237. package/dist/utils/disposable.d.ts +0 -8
  238. package/dist/utils/disposable.js +0 -26
  239. package/dist/utils/elementRef.d.ts +0 -11
  240. package/dist/utils/elementRef.js +0 -33
  241. package/dist/utils/fqnRef.d.ts +0 -11
  242. package/dist/utils/fqnRef.js +0 -63
  243. package/dist/utils/index.d.ts +0 -11
  244. package/dist/utils/index.js +0 -35
  245. package/dist/utils/printDocs.d.ts +0 -2
  246. package/dist/utils/printDocs.js +0 -1
  247. package/dist/utils/projectId.d.ts +0 -4
  248. package/dist/utils/projectId.js +0 -16
  249. package/dist/utils/stringHash.d.ts +0 -1
  250. package/dist/utils/stringHash.js +0 -5
  251. package/dist/validation/DocumentValidator.d.ts +0 -11
  252. package/dist/validation/DocumentValidator.js +0 -17
  253. package/dist/validation/_shared.d.ts +0 -3
  254. package/dist/validation/_shared.js +0 -26
  255. package/dist/validation/deployment-checks.d.ts +0 -7
  256. package/dist/validation/deployment-checks.js +0 -140
  257. package/dist/validation/dynamic-view.d.ts +0 -6
  258. package/dist/validation/dynamic-view.js +0 -67
  259. package/dist/validation/element-ref.d.ts +0 -4
  260. package/dist/validation/element-ref.js +0 -12
  261. package/dist/validation/element.d.ts +0 -4
  262. package/dist/validation/element.js +0 -49
  263. package/dist/validation/imports.d.ts +0 -4
  264. package/dist/validation/imports.js +0 -46
  265. package/dist/validation/index.d.ts +0 -15
  266. package/dist/validation/index.js +0 -167
  267. package/dist/validation/property-checks.d.ts +0 -7
  268. package/dist/validation/property-checks.js +0 -108
  269. package/dist/validation/relation.d.ts +0 -6
  270. package/dist/validation/relation.js +0 -141
  271. package/dist/validation/specification.d.ts +0 -12
  272. package/dist/validation/specification.js +0 -190
  273. package/dist/validation/view-checks.d.ts +0 -4
  274. package/dist/validation/view-checks.js +0 -46
  275. package/dist/validation/view-predicates/fqn-expr-with.d.ts +0 -4
  276. package/dist/validation/view-predicates/fqn-expr-with.js +0 -43
  277. package/dist/validation/view-predicates/fqn-ref-expr.d.ts +0 -4
  278. package/dist/validation/view-predicates/fqn-ref-expr.js +0 -51
  279. package/dist/validation/view-predicates/incoming.d.ts +0 -4
  280. package/dist/validation/view-predicates/incoming.js +0 -16
  281. package/dist/validation/view-predicates/index.d.ts +0 -6
  282. package/dist/validation/view-predicates/index.js +0 -6
  283. package/dist/validation/view-predicates/outgoing.d.ts +0 -4
  284. package/dist/validation/view-predicates/outgoing.js +0 -20
  285. package/dist/validation/view-predicates/relation-expr.d.ts +0 -4
  286. package/dist/validation/view-predicates/relation-expr.js +0 -46
  287. package/dist/validation/view-predicates/relation-with.d.ts +0 -4
  288. package/dist/validation/view-predicates/relation-with.js +0 -16
  289. package/dist/validation/view.d.ts +0 -4
  290. package/dist/validation/view.js +0 -42
  291. package/dist/view-utils/assignNavigateTo.d.ts +0 -2
  292. package/dist/view-utils/assignNavigateTo.js +0 -27
  293. package/dist/view-utils/index.d.ts +0 -2
  294. package/dist/view-utils/index.js +0 -2
  295. package/dist/view-utils/manual-layout.d.ts +0 -13
  296. package/dist/view-utils/manual-layout.js +0 -149
  297. package/dist/views/ConfigurableLayouter.d.ts +0 -7
  298. package/dist/views/ConfigurableLayouter.js +0 -51
  299. package/dist/views/LikeC4ManualLayouts.d.ts +0 -42
  300. package/dist/views/LikeC4ManualLayouts.js +0 -209
  301. package/dist/views/LikeC4Views.d.ts +0 -89
  302. package/dist/views/LikeC4Views.js +0 -216
  303. package/dist/views/index.d.ts +0 -4
  304. package/dist/views/index.js +0 -11
  305. package/dist/workspace/AstNodeDescriptionProvider.d.ts +0 -7
  306. package/dist/workspace/AstNodeDescriptionProvider.js +0 -18
  307. package/dist/workspace/IndexManager.d.ts +0 -10
  308. package/dist/workspace/IndexManager.js +0 -26
  309. package/dist/workspace/LangiumDocuments.d.ts +0 -29
  310. package/dist/workspace/LangiumDocuments.js +0 -104
  311. package/dist/workspace/ProjectsManager.d.ts +0 -134
  312. package/dist/workspace/ProjectsManager.js +0 -610
  313. package/dist/workspace/WorkspaceManager.d.ts +0 -31
  314. package/dist/workspace/WorkspaceManager.js +0 -132
  315. package/dist/workspace/index.d.ts +0 -5
  316. package/dist/workspace/index.js +0 -5
@@ -1,203 +0,0 @@
1
- import * as z from 'zod/v3';
2
- import { likec4Tool } from '../utils';
3
- import { locationSchema, mkLocate, projectIdSchema } from './_common';
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 — view id (name)
64
- - project: string (optional) — project id. Defaults to "default" if omitted.
65
-
66
- Response (JSON object):
67
- - id: string — view id
68
- - type: "element" | "deployment" | "dynamic" — view type
69
- - title: string — view title (falls back to id if not set)
70
- - description: string|null — optional description
71
- - tags: string[] — view tags
72
- - project: string — project id this view belongs to
73
- - nodes: Node[] — nodes included in the view
74
- - edges: Edge[] — relationships between nodes
75
- - sourceLocation: { path: string, range: { start: { line: number, character: number }, end: { line: number, character: number } } } | null — 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(z.object({
126
- source: z.string().describe('Source node'),
127
- target: z.string().describe('Target node'),
128
- label: z.string().nullable(),
129
- description: z.string().nullable(),
130
- technology: z.string().nullable(),
131
- tags: z.array(z.string()),
132
- })).describe('Edge represents relationship between nodes'),
133
- sourceLocation: locationSchema,
134
- },
135
- }, async (languageServices, args) => {
136
- const projectId = languageServices.projectsManager.ensureProjectId(args.project);
137
- const project = languageServices.project(projectId);
138
- const model = await languageServices.computedModel(projectId);
139
- const view = model.findView(args.viewId);
140
- if (!view) {
141
- throw new Error(`View with ID '${args.viewId}' not found in project ${project.id}`);
142
- }
143
- const locate = mkLocate(languageServices, project.id);
144
- return {
145
- id: view.id,
146
- type: view.$view._type,
147
- title: view.title ?? view.id,
148
- description: view.description.text,
149
- tags: [...view.tags],
150
- project: project.id,
151
- nodes: [...view.nodes()].flatMap((node) => {
152
- const base = {
153
- id: node.id,
154
- title: node.title,
155
- description: node.description.text,
156
- technology: node.technology,
157
- shape: node.shape,
158
- color: node.color,
159
- tags: [...node.tags],
160
- };
161
- if (node.hasDeployedInstance()) {
162
- return {
163
- ...base,
164
- type: 'deployed-instance',
165
- deploymentId: node.deployment.id,
166
- referencedElement: {
167
- id: node.deployment.element.id,
168
- kind: node.deployment.element.kind,
169
- title: node.deployment.element.title,
170
- },
171
- };
172
- }
173
- if (node.hasDeployment()) {
174
- return {
175
- ...base,
176
- type: 'deployment-node',
177
- kind: node.deployment.kind,
178
- deploymentId: node.deployment.id,
179
- children: [...node.children()].map(c => c.id),
180
- };
181
- }
182
- if (node.hasElement()) {
183
- return {
184
- ...base,
185
- type: 'element',
186
- elementId: node.element.id,
187
- kind: node.element.kind,
188
- children: [...node.children()].flatMap(c => modelRef(c) ?? []),
189
- };
190
- }
191
- return [];
192
- }),
193
- edges: [...view.edges()].map(r => ({
194
- source: r.source.id,
195
- target: r.target.id,
196
- label: r.label,
197
- description: r.description.text,
198
- technology: r.technology,
199
- tags: [...r.tags],
200
- })),
201
- sourceLocation: locate({ view: view.id }),
202
- };
203
- });
@@ -1,198 +0,0 @@
1
- import * as z from 'zod/v3';
2
- export declare const searchElement: (languageServices: import("../..").LikeC4LanguageServices) => [string, {
3
- inputSchema?: {
4
- search: z.ZodString;
5
- };
6
- }, (args: import("@modelcontextprotocol/sdk/server/zod-compat.js").ShapeOutput<{
7
- search: z.ZodString;
8
- }>, extra: import("@modelcontextprotocol/sdk/shared/protocol.js").RequestHandlerExtra<import("@modelcontextprotocol/sdk/types.js").ServerRequest, import("@modelcontextprotocol/sdk/types.js").ServerNotification>) => {
9
- [x: string]: unknown;
10
- content: ({
11
- type: "text";
12
- text: string;
13
- annotations?: {
14
- audience?: ("user" | "assistant")[] | undefined;
15
- priority?: number | undefined;
16
- lastModified?: string | undefined;
17
- } | undefined;
18
- _meta?: {
19
- [x: string]: unknown;
20
- } | undefined;
21
- } | {
22
- type: "image";
23
- data: string;
24
- mimeType: string;
25
- annotations?: {
26
- audience?: ("user" | "assistant")[] | undefined;
27
- priority?: number | undefined;
28
- lastModified?: string | undefined;
29
- } | undefined;
30
- _meta?: {
31
- [x: string]: unknown;
32
- } | undefined;
33
- } | {
34
- type: "audio";
35
- data: string;
36
- mimeType: string;
37
- annotations?: {
38
- audience?: ("user" | "assistant")[] | undefined;
39
- priority?: number | undefined;
40
- lastModified?: string | undefined;
41
- } | undefined;
42
- _meta?: {
43
- [x: string]: unknown;
44
- } | undefined;
45
- } | {
46
- uri: string;
47
- name: string;
48
- type: "resource_link";
49
- description?: string | undefined;
50
- mimeType?: string | undefined;
51
- annotations?: {
52
- audience?: ("user" | "assistant")[] | undefined;
53
- priority?: number | undefined;
54
- lastModified?: string | undefined;
55
- } | undefined;
56
- _meta?: {
57
- [x: string]: unknown;
58
- } | undefined;
59
- icons?: {
60
- src: string;
61
- mimeType?: string | undefined;
62
- sizes?: string[] | undefined;
63
- theme?: "light" | "dark" | undefined;
64
- }[] | undefined;
65
- title?: string | undefined;
66
- } | {
67
- type: "resource";
68
- resource: {
69
- uri: string;
70
- text: string;
71
- mimeType?: string | undefined;
72
- _meta?: {
73
- [x: string]: unknown;
74
- } | undefined;
75
- } | {
76
- uri: string;
77
- blob: string;
78
- mimeType?: string | undefined;
79
- _meta?: {
80
- [x: string]: unknown;
81
- } | undefined;
82
- };
83
- annotations?: {
84
- audience?: ("user" | "assistant")[] | undefined;
85
- priority?: number | undefined;
86
- lastModified?: string | undefined;
87
- } | undefined;
88
- _meta?: {
89
- [x: string]: unknown;
90
- } | undefined;
91
- })[];
92
- _meta?: {
93
- [x: string]: unknown;
94
- progressToken?: string | number | undefined;
95
- "io.modelcontextprotocol/related-task"?: {
96
- taskId: string;
97
- } | undefined;
98
- } | undefined;
99
- structuredContent?: {
100
- [x: string]: unknown;
101
- } | undefined;
102
- isError?: boolean | undefined;
103
- } | Promise<{
104
- [x: string]: unknown;
105
- content: ({
106
- type: "text";
107
- text: string;
108
- annotations?: {
109
- audience?: ("user" | "assistant")[] | undefined;
110
- priority?: number | undefined;
111
- lastModified?: string | undefined;
112
- } | undefined;
113
- _meta?: {
114
- [x: string]: unknown;
115
- } | undefined;
116
- } | {
117
- type: "image";
118
- data: string;
119
- mimeType: string;
120
- annotations?: {
121
- audience?: ("user" | "assistant")[] | undefined;
122
- priority?: number | undefined;
123
- lastModified?: string | undefined;
124
- } | undefined;
125
- _meta?: {
126
- [x: string]: unknown;
127
- } | undefined;
128
- } | {
129
- type: "audio";
130
- data: string;
131
- mimeType: string;
132
- annotations?: {
133
- audience?: ("user" | "assistant")[] | undefined;
134
- priority?: number | undefined;
135
- lastModified?: string | undefined;
136
- } | undefined;
137
- _meta?: {
138
- [x: string]: unknown;
139
- } | undefined;
140
- } | {
141
- uri: string;
142
- name: string;
143
- type: "resource_link";
144
- description?: string | undefined;
145
- mimeType?: string | undefined;
146
- annotations?: {
147
- audience?: ("user" | "assistant")[] | undefined;
148
- priority?: number | undefined;
149
- lastModified?: string | undefined;
150
- } | undefined;
151
- _meta?: {
152
- [x: string]: unknown;
153
- } | undefined;
154
- icons?: {
155
- src: string;
156
- mimeType?: string | undefined;
157
- sizes?: string[] | undefined;
158
- theme?: "light" | "dark" | undefined;
159
- }[] | undefined;
160
- title?: string | undefined;
161
- } | {
162
- type: "resource";
163
- resource: {
164
- uri: string;
165
- text: string;
166
- mimeType?: string | undefined;
167
- _meta?: {
168
- [x: string]: unknown;
169
- } | undefined;
170
- } | {
171
- uri: string;
172
- blob: string;
173
- mimeType?: string | undefined;
174
- _meta?: {
175
- [x: string]: unknown;
176
- } | undefined;
177
- };
178
- annotations?: {
179
- audience?: ("user" | "assistant")[] | undefined;
180
- priority?: number | undefined;
181
- lastModified?: string | undefined;
182
- } | undefined;
183
- _meta?: {
184
- [x: string]: unknown;
185
- } | undefined;
186
- })[];
187
- _meta?: {
188
- [x: string]: unknown;
189
- progressToken?: string | number | undefined;
190
- "io.modelcontextprotocol/related-task"?: {
191
- taskId: string;
192
- } | undefined;
193
- } | undefined;
194
- structuredContent?: {
195
- [x: string]: unknown;
196
- } | undefined;
197
- isError?: boolean | undefined;
198
- }>];
@@ -1,177 +0,0 @@
1
- import { ifilter } from '@likec4/core/utils';
2
- import * as z from 'zod/v3';
3
- import { likec4Tool, logger } from '../utils';
4
- import { includedInViews, includedInViewsSchema } from './_common';
5
- const searchResultSchema = z.array(z.discriminatedUnion('type', [
6
- z.object({
7
- type: z.literal('element'),
8
- project: z.string().describe('Project ID'),
9
- id: z.string().describe('Element ID (FQN)'),
10
- name: z.string().describe('Element name'),
11
- kind: z.string(),
12
- title: z.string(),
13
- technology: z.string().nullable(),
14
- shape: z.string(),
15
- includedInViews: includedInViewsSchema,
16
- metadata: z.record(z.union([z.string(), z.array(z.string())])),
17
- tags: z.array(z.string()),
18
- }),
19
- z.object({
20
- type: z.literal('deployment-node'),
21
- project: z.string().describe('Project ID'),
22
- id: z.string().describe('Deployment ID (FQN)'),
23
- name: z.string().describe('Deployment name'),
24
- kind: z.string(),
25
- title: z.string(),
26
- technology: z.string().nullable(),
27
- shape: z.string(),
28
- includedInViews: includedInViewsSchema,
29
- metadata: z.record(z.union([z.string(), z.array(z.string())])),
30
- tags: z.array(z.string()),
31
- }),
32
- ]));
33
- export const searchElement = likec4Tool({
34
- name: 'search-element',
35
- annotations: {
36
- readOnlyHint: true,
37
- idempotentHint: true,
38
- title: 'Search elements',
39
- },
40
- description: `
41
- Search LikeC4 elements and deployment nodes across all projects.
42
-
43
- Query syntax (case-insensitive):
44
- - kind:<value> filters by kind
45
- - shape:<value> filters by shape
46
- - meta:<key> filters by having metadata with the given key
47
- - #<value> matches assigned tags
48
- - <value> matches id (FQN) or title
49
-
50
- Request:
51
- - search: string — at least 2 characters
52
-
53
- Response (JSON object):
54
- - total: number - total number of results
55
- - found: Result[] - returns top 20 results
56
-
57
- Result (discriminated union by "type"):
58
- - type = "element": { id: string, name: string, kind: string, title: string, technology: string|null, shape: string, project: string, includedInViews: View[], tags: string[], metadata: Record<string, string> }
59
- - type = "deployment-node": { id: string, name: string, kind: string, title: string, technology: string|null, shape: string, project: string, includedInViews: View[], tags: string[], metadata: Record<string, string> }
60
-
61
- View (object) fields:
62
- - id: string — view identifier
63
- - title: string — view title
64
- - type: "element" | "deployment" | "dynamic"
65
-
66
- Notes:
67
- - Read-only, idempotent.
68
- - Use results as input to other tools (e.g., read-element, read-view).
69
-
70
- Example response:
71
- {
72
- "total": 1,
73
- "found": [
74
- {
75
- "type": "logical",
76
- "project": "default",
77
- "id": "shop.frontend",
78
- "name": "frontend",
79
- "kind": "container",
80
- "title": "Frontend",
81
- "technology": "React",
82
- "shape": "rectangle",
83
- "includedInViews": [
84
- {
85
- "id": "system-overview",
86
- "title": "System Overview",
87
- "type": "element"
88
- }
89
- ],
90
- "tags": ["public"],
91
- "metadata": {}
92
- }
93
- ]
94
- }
95
- `,
96
- inputSchema: {
97
- search: z.string().min(2, 'Search must be at least 2 characters long'),
98
- },
99
- outputSchema: {
100
- total: z.number(),
101
- found: searchResultSchema,
102
- },
103
- }, async (languageServices, args) => {
104
- const projects = languageServices.projects();
105
- const found = [];
106
- let search = args.search.toLowerCase();
107
- let predicate;
108
- if (search.startsWith('kind:')) {
109
- search = search.slice(5);
110
- logger.debug('search by kind: {search}', { search });
111
- predicate = (el) => el.kind.toLowerCase() === search;
112
- }
113
- else if (search.startsWith('shape:')) {
114
- search = search.slice(6);
115
- logger.debug('search by shape: {search}', { search });
116
- predicate = (el) => el.shape.toLowerCase() === search;
117
- }
118
- else if (search.startsWith('meta:')) {
119
- search = search.slice(5);
120
- logger.debug('search by metadata: {search}', { search });
121
- predicate = (el) => !!el.getMetadata(search);
122
- }
123
- else if (search.startsWith('#')) {
124
- search = search.slice(1);
125
- logger.debug('search by tag: {search}', { search });
126
- predicate = (el) => el.tags.some(tag => tag.toLowerCase().includes(search));
127
- }
128
- else {
129
- logger.debug('search by id/title: {search}', { search });
130
- predicate = (el) => el.id.toLowerCase().includes(search)
131
- || el.title.toLowerCase().includes(search);
132
- }
133
- for (const project of projects) {
134
- try {
135
- const model = await languageServices.computedModel(project.id);
136
- // filter elements
137
- for (const el of ifilter(model.elements(), e => !e.imported && predicate(e))) {
138
- found.push({
139
- type: 'element',
140
- project: project.id,
141
- id: el.id,
142
- name: el.name,
143
- kind: el.kind,
144
- title: el.title,
145
- technology: el.technology,
146
- shape: el.shape,
147
- tags: [...el.tags],
148
- metadata: el.getMetadata(),
149
- includedInViews: includedInViews(el.views()),
150
- });
151
- }
152
- // filter deployment nodes
153
- for (const el of ifilter(model.deployment.nodes(), predicate)) {
154
- found.push({
155
- type: 'deployment-node',
156
- project: project.id,
157
- id: el.id,
158
- name: el.name,
159
- kind: el.kind,
160
- title: el.title,
161
- technology: el.technology,
162
- shape: el.shape,
163
- tags: [...el.tags],
164
- metadata: el.getMetadata(),
165
- includedInViews: includedInViews(el.views()),
166
- });
167
- }
168
- }
169
- catch (error) {
170
- logger.error(`Error searching in project ${project.id}:`, { error });
171
- }
172
- }
173
- return {
174
- total: found.length,
175
- found: found.slice(0, 20),
176
- };
177
- });
@@ -1,18 +0,0 @@
1
- import type { RequestHandlerExtra } from '@modelcontextprotocol/sdk/shared/protocol.js';
2
- import type { ServerNotification, ServerRequest, ToolAnnotations } from '@modelcontextprotocol/sdk/types.js';
3
- import type { z, ZodRawShape, ZodTypeAny } from 'zod/v3';
4
- import type { ToolCallback } from '@modelcontextprotocol/sdk/server/mcp.js';
5
- import type { LikeC4LanguageServices } from '../LikeC4LanguageServices';
6
- export declare const logger: import("@logtape/logtape").Logger;
7
- type ToolResult<Out extends undefined | ZodRawShape = undefined> = Out extends ZodRawShape ? z.objectOutputType<Out, ZodTypeAny> : string;
8
- type LikeC4ToolCallback<Args extends undefined | ZodRawShape, Out extends undefined | ZodRawShape> = Args extends ZodRawShape ? (languageServices: LikeC4LanguageServices, args: z.objectOutputType<Args, ZodTypeAny>, extra: RequestHandlerExtra<ServerRequest, ServerNotification>) => Promise<ToolResult<Out>> : (languageServices: LikeC4LanguageServices, extra: RequestHandlerExtra<ServerRequest, ServerNotification>) => Promise<ToolResult<Out>>;
9
- export declare function likec4Tool<InputArgs extends ZodRawShape, OutputArgs extends ZodRawShape, Cb extends LikeC4ToolCallback<InputArgs, OutputArgs>>(config: {
10
- name: string;
11
- description?: string;
12
- inputSchema?: InputArgs;
13
- outputSchema?: OutputArgs;
14
- annotations?: ToolAnnotations;
15
- }, cb: Cb): (languageServices: LikeC4LanguageServices) => [string, {
16
- inputSchema?: InputArgs;
17
- }, ToolCallback<InputArgs>];
18
- export {};
package/dist/mcp/utils.js DELETED
@@ -1,48 +0,0 @@
1
- import { loggable } from '@likec4/log';
2
- import { logger as mainLogger } from '../logger';
3
- export const logger = mainLogger.getChild('mcp');
4
- export function likec4Tool(config, cb) {
5
- const { name, description, ...rest } = config;
6
- return (languageServices) => [
7
- name,
8
- {
9
- description: description?.trim() ?? '',
10
- ...rest,
11
- },
12
- mkcallTool(name, languageServices, cb),
13
- ];
14
- }
15
- function mkcallTool(name, languageServices, cb) {
16
- const tool = cb.bind(null, languageServices);
17
- return (async function callTool(args, extra) {
18
- logger.debug('Calling tool {name}, args: {args}', { name, args });
19
- try {
20
- const result = await tool.call(null, args, extra);
21
- if (typeof result === 'string') {
22
- return {
23
- content: [{
24
- type: 'text',
25
- text: result,
26
- }],
27
- };
28
- }
29
- return {
30
- content: [{
31
- type: 'text',
32
- text: JSON.stringify(result),
33
- }],
34
- structuredContent: result,
35
- };
36
- }
37
- catch (err) {
38
- logger.error(`Tool ${name} failed`, { err });
39
- return {
40
- content: [{
41
- type: 'text',
42
- text: loggable(err),
43
- }],
44
- isError: true,
45
- };
46
- }
47
- });
48
- }
@@ -1,13 +0,0 @@
1
- import type * as c4 from '@likec4/core';
2
- import type { ParsedAstExtend } from '../../ast';
3
- export declare class MergedExtends {
4
- private mergedData;
5
- private mergeMetadata;
6
- merge(parsedExtends: ParsedAstExtend[]): void;
7
- applyExtended<E extends {
8
- id: string;
9
- tags?: readonly string[] | null;
10
- links?: readonly c4.Link[] | null;
11
- metadata?: Record<string, string | string[]>;
12
- }>(el: E): E;
13
- }