@likec4/language-server 1.47.0 → 1.49.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 (297) hide show
  1. package/browser/package.json +2 -2
  2. package/browser-worker/package.json +2 -2
  3. package/bundled/package.json +4 -0
  4. package/dist/THIRD-PARTY-LICENSES.md +178 -0
  5. package/dist/_chunks/ConfigurableLayouter.mjs +1 -0
  6. package/dist/_chunks/LikeC4FileSystem.mjs +3 -0
  7. package/dist/_chunks/LikeC4Views.mjs +34 -0
  8. package/dist/_chunks/ProjectsManager.mjs +1 -0
  9. package/dist/_chunks/WithMCPServer.mjs +481 -0
  10. package/dist/_chunks/icons.mjs +2 -0
  11. package/dist/_chunks/index.d.mts +3107 -0
  12. package/dist/_chunks/libs/@msgpack/msgpack.mjs +1 -0
  13. package/dist/_chunks/libs/eventemitter3.mjs +1 -0
  14. package/dist/_chunks/libs/fast-equals.mjs +1 -0
  15. package/dist/_chunks/libs/p-queue.mjs +1 -0
  16. package/dist/_chunks/libs/parse-ms.mjs +1 -0
  17. package/dist/_chunks/libs/picomatch.mjs +1 -0
  18. package/dist/_chunks/libs/pretty-ms.mjs +1 -0
  19. package/dist/_chunks/libs/remeda.mjs +1 -0
  20. package/dist/_chunks/libs/strip-indent.mjs +1 -0
  21. package/dist/_chunks/libs/ufo.mjs +1 -0
  22. package/dist/_chunks/logger.mjs +1 -0
  23. package/dist/_chunks/rolldown-runtime.mjs +1 -0
  24. package/dist/_chunks/utils.mjs +1 -0
  25. package/dist/browser/index.d.mts +10 -0
  26. package/dist/browser/index.mjs +1 -0
  27. package/dist/browser/worker.d.mts +1 -0
  28. package/dist/browser/worker.mjs +1 -0
  29. package/dist/bundled.d.mts +27 -0
  30. package/dist/bundled.mjs +1 -4853
  31. package/dist/filesystem/index.d.mts +2 -0
  32. package/dist/filesystem/index.mjs +1 -0
  33. package/dist/index.d.mts +39 -0
  34. package/dist/index.mjs +1 -0
  35. package/dist/likec4lib.d.mts +16 -0
  36. package/dist/likec4lib.mjs +1 -0
  37. package/dist/mcp/index.d.mts +2 -0
  38. package/dist/mcp/index.mjs +1 -0
  39. package/dist/module.d.mts +126 -0
  40. package/dist/module.mjs +1 -0
  41. package/dist/protocol.d.mts +315 -0
  42. package/dist/protocol.mjs +1 -0
  43. package/filesystem/package.json +4 -0
  44. package/likec4lib/package.json +2 -2
  45. package/mcp/package.json +4 -0
  46. package/module/package.json +4 -0
  47. package/package.json +128 -62
  48. package/protocol/package.json +2 -2
  49. package/LICENSE +0 -21
  50. package/dist/LikeC4LanguageServices.d.ts +0 -115
  51. package/dist/LikeC4LanguageServices.js +0 -164
  52. package/dist/Rpc.d.ts +0 -9
  53. package/dist/Rpc.js +0 -276
  54. package/dist/ast.d.ts +0 -226
  55. package/dist/ast.js +0 -264
  56. package/dist/browser-worker.d.ts +0 -1
  57. package/dist/browser-worker.js +0 -4
  58. package/dist/browser.d.ts +0 -10
  59. package/dist/browser.js +0 -34
  60. package/dist/bundled.d.ts +0 -8
  61. package/dist/bundled.js +0 -44
  62. package/dist/documentation/documentation-provider.d.ts +0 -8
  63. package/dist/documentation/documentation-provider.js +0 -51
  64. package/dist/documentation/index.d.ts +0 -1
  65. package/dist/documentation/index.js +0 -1
  66. package/dist/empty.d.ts +0 -2
  67. package/dist/empty.js +0 -2
  68. package/dist/filesystem/ChokidarWatcher.d.ts +0 -19
  69. package/dist/filesystem/ChokidarWatcher.js +0 -133
  70. package/dist/filesystem/FileSystemWatcher.d.ts +0 -19
  71. package/dist/filesystem/FileSystemWatcher.js +0 -14
  72. package/dist/filesystem/LikeC4FileSystem.d.ts +0 -3
  73. package/dist/filesystem/LikeC4FileSystem.js +0 -140
  74. package/dist/filesystem/index.d.ts +0 -55
  75. package/dist/filesystem/index.js +0 -29
  76. package/dist/formatting/LikeC4Formatter.d.ts +0 -59
  77. package/dist/formatting/LikeC4Formatter.js +0 -637
  78. package/dist/formatting/utils.d.ts +0 -6
  79. package/dist/formatting/utils.js +0 -18
  80. package/dist/generated/ast.d.ts +0 -1411
  81. package/dist/generated/ast.js +0 -2207
  82. package/dist/generated/grammar.d.ts +0 -6
  83. package/dist/generated/grammar.js +0 -7
  84. package/dist/generated/module.d.ts +0 -14
  85. package/dist/generated/module.js +0 -27
  86. package/dist/generated-lib/icons.d.ts +0 -1
  87. package/dist/generated-lib/icons.js +0 -18
  88. package/dist/index.d.ts +0 -37
  89. package/dist/index.js +0 -54
  90. package/dist/likec4lib.d.ts +0 -6
  91. package/dist/likec4lib.js +0 -7
  92. package/dist/logger.d.ts +0 -17
  93. package/dist/logger.js +0 -81
  94. package/dist/lsp/CodeActionProvider.d.ts +0 -14
  95. package/dist/lsp/CodeActionProvider.js +0 -33
  96. package/dist/lsp/CodeLensProvider.d.ts +0 -9
  97. package/dist/lsp/CodeLensProvider.js +0 -44
  98. package/dist/lsp/CompletionProvider.d.ts +0 -13
  99. package/dist/lsp/CompletionProvider.js +0 -238
  100. package/dist/lsp/DocumentHighlightProvider.d.ts +0 -9
  101. package/dist/lsp/DocumentHighlightProvider.js +0 -10
  102. package/dist/lsp/DocumentLinkProvider.d.ts +0 -11
  103. package/dist/lsp/DocumentLinkProvider.js +0 -58
  104. package/dist/lsp/DocumentSymbolProvider.d.ts +0 -33
  105. package/dist/lsp/DocumentSymbolProvider.js +0 -317
  106. package/dist/lsp/HoverProvider.d.ts +0 -10
  107. package/dist/lsp/HoverProvider.js +0 -106
  108. package/dist/lsp/RenameProvider.d.ts +0 -5
  109. package/dist/lsp/RenameProvider.js +0 -6
  110. package/dist/lsp/SemanticTokenProvider.d.ts +0 -19
  111. package/dist/lsp/SemanticTokenProvider.js +0 -305
  112. package/dist/lsp/index.d.ts +0 -8
  113. package/dist/lsp/index.js +0 -9
  114. package/dist/mcp/MCPServerFactory.d.ts +0 -8
  115. package/dist/mcp/MCPServerFactory.js +0 -73
  116. package/dist/mcp/NoopLikeC4MCPServer.d.ts +0 -9
  117. package/dist/mcp/NoopLikeC4MCPServer.js +0 -17
  118. package/dist/mcp/interfaces.d.ts +0 -13
  119. package/dist/mcp/interfaces.js +0 -4
  120. package/dist/mcp/server/StdioLikeC4MCPServer.d.ts +0 -16
  121. package/dist/mcp/server/StdioLikeC4MCPServer.js +0 -51
  122. package/dist/mcp/server/StreamableLikeC4MCPServer.d.ts +0 -16
  123. package/dist/mcp/server/StreamableLikeC4MCPServer.js +0 -121
  124. package/dist/mcp/server/WithMCPServer.d.ts +0 -4
  125. package/dist/mcp/server/WithMCPServer.js +0 -54
  126. package/dist/mcp/tools/_common.d.ts +0 -88
  127. package/dist/mcp/tools/_common.js +0 -49
  128. package/dist/mcp/tools/find-relationships.d.ts +0 -202
  129. package/dist/mcp/tools/find-relationships.js +0 -150
  130. package/dist/mcp/tools/list-projects.d.ts +0 -194
  131. package/dist/mcp/tools/list-projects.js +0 -62
  132. package/dist/mcp/tools/open-view.d.ts +0 -200
  133. package/dist/mcp/tools/open-view.js +0 -52
  134. package/dist/mcp/tools/read-deployment.d.ts +0 -200
  135. package/dist/mcp/tools/read-deployment.js +0 -150
  136. package/dist/mcp/tools/read-element.d.ts +0 -200
  137. package/dist/mcp/tools/read-element.js +0 -218
  138. package/dist/mcp/tools/read-project-summary.d.ts +0 -198
  139. package/dist/mcp/tools/read-project-summary.js +0 -176
  140. package/dist/mcp/tools/read-view.d.ts +0 -200
  141. package/dist/mcp/tools/read-view.js +0 -203
  142. package/dist/mcp/tools/search-element.d.ts +0 -198
  143. package/dist/mcp/tools/search-element.js +0 -177
  144. package/dist/mcp/utils.d.ts +0 -18
  145. package/dist/mcp/utils.js +0 -48
  146. package/dist/model/builder/MergedExtends.d.ts +0 -13
  147. package/dist/model/builder/MergedExtends.js +0 -74
  148. package/dist/model/builder/MergedSpecification.d.ts +0 -32
  149. package/dist/model/builder/MergedSpecification.js +0 -175
  150. package/dist/model/builder/buildModel.d.ts +0 -16
  151. package/dist/model/builder/buildModel.js +0 -245
  152. package/dist/model/deployments-index.d.ts +0 -10
  153. package/dist/model/deployments-index.js +0 -102
  154. package/dist/model/fqn-index.d.ts +0 -61
  155. package/dist/model/fqn-index.js +0 -253
  156. package/dist/model/index.d.ts +0 -6
  157. package/dist/model/index.js +0 -6
  158. package/dist/model/model-builder.d.ts +0 -54
  159. package/dist/model/model-builder.js +0 -233
  160. package/dist/model/model-locator.d.ts +0 -39
  161. package/dist/model/model-locator.js +0 -240
  162. package/dist/model/model-parser-where.d.ts +0 -4
  163. package/dist/model/model-parser-where.js +0 -81
  164. package/dist/model/model-parser.d.ts +0 -645
  165. package/dist/model/model-parser.js +0 -133
  166. package/dist/model/parser/Base.d.ts +0 -69
  167. package/dist/model/parser/Base.js +0 -382
  168. package/dist/model/parser/DeploymentModelParser.d.ts +0 -71
  169. package/dist/model/parser/DeploymentModelParser.js +0 -176
  170. package/dist/model/parser/DeploymentViewParser.d.ts +0 -75
  171. package/dist/model/parser/DeploymentViewParser.js +0 -86
  172. package/dist/model/parser/FqnRefParser.d.ts +0 -66
  173. package/dist/model/parser/FqnRefParser.js +0 -382
  174. package/dist/model/parser/GlobalsParser.d.ts +0 -109
  175. package/dist/model/parser/GlobalsParser.js +0 -84
  176. package/dist/model/parser/ImportsParser.d.ts +0 -46
  177. package/dist/model/parser/ImportsParser.js +0 -24
  178. package/dist/model/parser/ModelParser.d.ts +0 -71
  179. package/dist/model/parser/ModelParser.js +0 -209
  180. package/dist/model/parser/PredicatesParser.d.ts +0 -75
  181. package/dist/model/parser/PredicatesParser.js +0 -45
  182. package/dist/model/parser/SpecificationParser.d.ts +0 -53
  183. package/dist/model/parser/SpecificationParser.js +0 -113
  184. package/dist/model/parser/ValueConverter.d.ts +0 -4
  185. package/dist/model/parser/ValueConverter.js +0 -12
  186. package/dist/model/parser/ViewsParser.d.ts +0 -112
  187. package/dist/model/parser/ViewsParser.js +0 -492
  188. package/dist/model-change/ModelChanges.d.ts +0 -18
  189. package/dist/model-change/ModelChanges.js +0 -129
  190. package/dist/model-change/changeElementStyle.d.ts +0 -16
  191. package/dist/model-change/changeElementStyle.js +0 -134
  192. package/dist/model-change/changeViewLayout.d.ts +0 -12
  193. package/dist/model-change/changeViewLayout.js +0 -28
  194. package/dist/model-change/removeManualLayoutV1.d.ts +0 -7
  195. package/dist/model-change/removeManualLayoutV1.js +0 -27
  196. package/dist/module.d.ts +0 -92
  197. package/dist/module.js +0 -143
  198. package/dist/protocol.d.ts +0 -289
  199. package/dist/protocol.js +0 -123
  200. package/dist/references/index.d.ts +0 -3
  201. package/dist/references/index.js +0 -3
  202. package/dist/references/name-provider.d.ts +0 -9
  203. package/dist/references/name-provider.js +0 -37
  204. package/dist/references/scope-computation.d.ts +0 -20
  205. package/dist/references/scope-computation.js +0 -288
  206. package/dist/references/scope-provider.d.ts +0 -40
  207. package/dist/references/scope-provider.js +0 -239
  208. package/dist/shared/NodeKindProvider.d.ts +0 -15
  209. package/dist/shared/NodeKindProvider.js +0 -57
  210. package/dist/shared/WorkspaceSymbolProvider.d.ts +0 -3
  211. package/dist/shared/WorkspaceSymbolProvider.js +0 -3
  212. package/dist/shared/index.d.ts +0 -2
  213. package/dist/shared/index.js +0 -2
  214. package/dist/test/index.d.ts +0 -1
  215. package/dist/test/index.js +0 -1
  216. package/dist/test/testServices.d.ts +0 -64
  217. package/dist/test/testServices.js +0 -210
  218. package/dist/utils/disposable.d.ts +0 -8
  219. package/dist/utils/disposable.js +0 -26
  220. package/dist/utils/elementRef.d.ts +0 -11
  221. package/dist/utils/elementRef.js +0 -33
  222. package/dist/utils/fqnRef.d.ts +0 -11
  223. package/dist/utils/fqnRef.js +0 -63
  224. package/dist/utils/index.d.ts +0 -11
  225. package/dist/utils/index.js +0 -35
  226. package/dist/utils/printDocs.d.ts +0 -2
  227. package/dist/utils/printDocs.js +0 -1
  228. package/dist/utils/projectId.d.ts +0 -4
  229. package/dist/utils/projectId.js +0 -16
  230. package/dist/utils/stringHash.d.ts +0 -1
  231. package/dist/utils/stringHash.js +0 -5
  232. package/dist/validation/DocumentValidator.d.ts +0 -11
  233. package/dist/validation/DocumentValidator.js +0 -17
  234. package/dist/validation/_shared.d.ts +0 -3
  235. package/dist/validation/_shared.js +0 -26
  236. package/dist/validation/deployment-checks.d.ts +0 -7
  237. package/dist/validation/deployment-checks.js +0 -140
  238. package/dist/validation/dynamic-view.d.ts +0 -6
  239. package/dist/validation/dynamic-view.js +0 -67
  240. package/dist/validation/element-ref.d.ts +0 -4
  241. package/dist/validation/element-ref.js +0 -12
  242. package/dist/validation/element.d.ts +0 -4
  243. package/dist/validation/element.js +0 -49
  244. package/dist/validation/imports.d.ts +0 -4
  245. package/dist/validation/imports.js +0 -46
  246. package/dist/validation/index.d.ts +0 -15
  247. package/dist/validation/index.js +0 -167
  248. package/dist/validation/property-checks.d.ts +0 -7
  249. package/dist/validation/property-checks.js +0 -108
  250. package/dist/validation/relation.d.ts +0 -6
  251. package/dist/validation/relation.js +0 -141
  252. package/dist/validation/specification.d.ts +0 -12
  253. package/dist/validation/specification.js +0 -190
  254. package/dist/validation/view-checks.d.ts +0 -4
  255. package/dist/validation/view-checks.js +0 -46
  256. package/dist/validation/view-predicates/fqn-expr-with.d.ts +0 -4
  257. package/dist/validation/view-predicates/fqn-expr-with.js +0 -43
  258. package/dist/validation/view-predicates/fqn-ref-expr.d.ts +0 -4
  259. package/dist/validation/view-predicates/fqn-ref-expr.js +0 -51
  260. package/dist/validation/view-predicates/incoming.d.ts +0 -4
  261. package/dist/validation/view-predicates/incoming.js +0 -16
  262. package/dist/validation/view-predicates/index.d.ts +0 -6
  263. package/dist/validation/view-predicates/index.js +0 -6
  264. package/dist/validation/view-predicates/outgoing.d.ts +0 -4
  265. package/dist/validation/view-predicates/outgoing.js +0 -20
  266. package/dist/validation/view-predicates/relation-expr.d.ts +0 -4
  267. package/dist/validation/view-predicates/relation-expr.js +0 -46
  268. package/dist/validation/view-predicates/relation-with.d.ts +0 -4
  269. package/dist/validation/view-predicates/relation-with.js +0 -16
  270. package/dist/validation/view.d.ts +0 -4
  271. package/dist/validation/view.js +0 -42
  272. package/dist/view-utils/assignNavigateTo.d.ts +0 -2
  273. package/dist/view-utils/assignNavigateTo.js +0 -27
  274. package/dist/view-utils/index.d.ts +0 -2
  275. package/dist/view-utils/index.js +0 -2
  276. package/dist/view-utils/manual-layout.d.ts +0 -13
  277. package/dist/view-utils/manual-layout.js +0 -149
  278. package/dist/views/ConfigurableLayouter.d.ts +0 -7
  279. package/dist/views/ConfigurableLayouter.js +0 -51
  280. package/dist/views/LikeC4ManualLayouts.d.ts +0 -42
  281. package/dist/views/LikeC4ManualLayouts.js +0 -209
  282. package/dist/views/LikeC4Views.d.ts +0 -89
  283. package/dist/views/LikeC4Views.js +0 -216
  284. package/dist/views/index.d.ts +0 -4
  285. package/dist/views/index.js +0 -11
  286. package/dist/workspace/AstNodeDescriptionProvider.d.ts +0 -7
  287. package/dist/workspace/AstNodeDescriptionProvider.js +0 -18
  288. package/dist/workspace/IndexManager.d.ts +0 -10
  289. package/dist/workspace/IndexManager.js +0 -26
  290. package/dist/workspace/LangiumDocuments.d.ts +0 -29
  291. package/dist/workspace/LangiumDocuments.js +0 -104
  292. package/dist/workspace/ProjectsManager.d.ts +0 -134
  293. package/dist/workspace/ProjectsManager.js +0 -610
  294. package/dist/workspace/WorkspaceManager.d.ts +0 -31
  295. package/dist/workspace/WorkspaceManager.js +0 -132
  296. package/dist/workspace/index.d.ts +0 -5
  297. package/dist/workspace/index.js +0 -5
@@ -1,54 +0,0 @@
1
- import { loggable } from '@likec4/log';
2
- import { logger } from '../utils';
3
- import { StdioLikeC4MCPServer } from './StdioLikeC4MCPServer';
4
- import { StreamableLikeC4MCPServer } from './StreamableLikeC4MCPServer';
5
- const streamableLikeC4MCPServer = (services, defaultPort = 33335) => {
6
- logger.debug('Creating StreamableLikeC4MCPServer');
7
- const server = new StreamableLikeC4MCPServer(services, defaultPort);
8
- const langId = services.LanguageMetaData.languageId;
9
- const connection = services.shared.lsp.Connection;
10
- services.shared.workspace.ConfigurationProvider.onConfigurationSectionUpdate((update) => {
11
- if (update.section !== langId) {
12
- logger.warn('Unexpected configuration update: {update}', { update });
13
- return;
14
- }
15
- const { enabled = false, port = defaultPort, } = update.configuration.mcp;
16
- if (!enabled) {
17
- void server.stop();
18
- return;
19
- }
20
- void Promise.resolve()
21
- .then(() => server.start(port))
22
- .then(() => {
23
- connection?.telemetry?.logEvent({
24
- eventName: 'mcp-server-started',
25
- mcpPort: port,
26
- });
27
- })
28
- .catch(err => {
29
- const message = loggable(err);
30
- connection?.telemetry?.logEvent({
31
- eventName: 'mcp-server-start-failed',
32
- mcpPort: port,
33
- message,
34
- });
35
- logger.warn(`Failed to start LikeC4 MCP Server: \n${message}`);
36
- if (connection) {
37
- connection.window.showErrorMessage(`LikeC4: Failed to start MCP Server\n\n${message}`);
38
- }
39
- });
40
- });
41
- return server;
42
- };
43
- const stdioLikeC4MCPServer = (services) => {
44
- return new StdioLikeC4MCPServer(services);
45
- };
46
- export const WithMCPServer = (type = 'sse') => ({
47
- mcpServer: (services) => {
48
- if (type === 'stdio') {
49
- return stdioLikeC4MCPServer(services);
50
- }
51
- const port = typeof type === 'object' ? type.port : 33335;
52
- return streamableLikeC4MCPServer(services, port);
53
- },
54
- });
@@ -1,88 +0,0 @@
1
- import type { LikeC4ViewModel } from '@likec4/core/model';
2
- import type { ProjectId } from '@likec4/core/types';
3
- import * as z from 'zod/v3';
4
- import type { LikeC4LanguageServices } from '../../LikeC4LanguageServices';
5
- import type { Locate } from '../../protocol';
6
- export declare const locationSchema: z.ZodNullable<z.ZodObject<{
7
- path: z.ZodString;
8
- range: z.ZodObject<{
9
- start: z.ZodObject<{
10
- line: z.ZodNumber;
11
- character: z.ZodNumber;
12
- }, "strip", z.ZodTypeAny, {
13
- line: number;
14
- character: number;
15
- }, {
16
- line: number;
17
- character: number;
18
- }>;
19
- end: z.ZodObject<{
20
- line: z.ZodNumber;
21
- character: z.ZodNumber;
22
- }, "strip", z.ZodTypeAny, {
23
- line: number;
24
- character: number;
25
- }, {
26
- line: number;
27
- character: number;
28
- }>;
29
- }, "strip", z.ZodTypeAny, {
30
- start: {
31
- line: number;
32
- character: number;
33
- };
34
- end: {
35
- line: number;
36
- character: number;
37
- };
38
- }, {
39
- start: {
40
- line: number;
41
- character: number;
42
- };
43
- end: {
44
- line: number;
45
- character: number;
46
- };
47
- }>;
48
- }, "strip", z.ZodTypeAny, {
49
- path: string;
50
- range: {
51
- start: {
52
- line: number;
53
- character: number;
54
- };
55
- end: {
56
- line: number;
57
- character: number;
58
- };
59
- };
60
- }, {
61
- path: string;
62
- range: {
63
- start: {
64
- line: number;
65
- character: number;
66
- };
67
- end: {
68
- line: number;
69
- character: number;
70
- };
71
- };
72
- }>>;
73
- export declare const projectIdSchema: z.ZodDefault<z.ZodOptional<z.ZodEffects<z.ZodString, ProjectId, string>>>;
74
- export declare const includedInViewsSchema: z.ZodArray<z.ZodObject<{
75
- id: z.ZodString;
76
- title: z.ZodString;
77
- type: z.ZodEnum<["element", "deployment", "dynamic"]>;
78
- }, "strip", z.ZodTypeAny, {
79
- type: "element" | "deployment" | "dynamic";
80
- id: string;
81
- title: string;
82
- }, {
83
- type: "element" | "deployment" | "dynamic";
84
- id: string;
85
- title: string;
86
- }>, "many">;
87
- export declare const includedInViews: (views: Iterable<LikeC4ViewModel>) => z.infer<typeof includedInViewsSchema>;
88
- export declare const mkLocate: (languageServices: LikeC4LanguageServices, projectId: string) => (params: Locate.Params) => z.infer<typeof locationSchema>;
@@ -1,49 +0,0 @@
1
- import { URI } from 'vscode-uri';
2
- import * as z from 'zod/v3';
3
- import { ProjectsManager } from '../../workspace';
4
- import { logger } from '../utils';
5
- export const locationSchema = z.object({
6
- path: z.string().describe('Path to the file'),
7
- range: z.object({
8
- start: z.object({
9
- line: z.number(),
10
- character: z.number(),
11
- }),
12
- end: z.object({
13
- line: z.number(),
14
- character: z.number(),
15
- }),
16
- }).describe('Range in the file'),
17
- }).nullable();
18
- export const projectIdSchema = z.string()
19
- .refine((_v) => true)
20
- .optional()
21
- .default(ProjectsManager.DefaultProjectId)
22
- .describe('Project id (optional, will use "default" if not specified)');
23
- export const includedInViewsSchema = z.array(z.object({
24
- id: z.string().describe('View id'),
25
- title: z.string().describe('View title'),
26
- type: z.enum(['element', 'deployment', 'dynamic']).describe('View type'),
27
- }));
28
- export const includedInViews = (views) => {
29
- return [...views].map(v => ({
30
- id: v.id,
31
- title: v.titleOrId,
32
- type: v.$view._type,
33
- }));
34
- };
35
- export const mkLocate = (languageServices, projectId) => (params) => {
36
- try {
37
- const loc = languageServices.locate({ projectId, ...params });
38
- return loc
39
- ? {
40
- path: URI.parse(loc.uri).fsPath,
41
- range: loc.range,
42
- }
43
- : null;
44
- }
45
- catch (e) {
46
- logger.debug(`Failed to locate {params}`, { error: e, params });
47
- return null;
48
- }
49
- };
@@ -1,202 +0,0 @@
1
- import * as z from 'zod/v3';
2
- export declare const findRelationships: (languageServices: import("../..").LikeC4LanguageServices) => [string, {
3
- inputSchema?: {
4
- element1: z.ZodString;
5
- element2: z.ZodString;
6
- project: z.ZodDefault<z.ZodOptional<z.ZodEffects<z.ZodString, import("@likec4/core").ProjectId, string>>>;
7
- };
8
- }, (args: import("@modelcontextprotocol/sdk/server/zod-compat.js").ShapeOutput<{
9
- element1: z.ZodString;
10
- element2: z.ZodString;
11
- project: z.ZodDefault<z.ZodOptional<z.ZodEffects<z.ZodString, import("@likec4/core").ProjectId, string>>>;
12
- }>, extra: import("@modelcontextprotocol/sdk/shared/protocol.js").RequestHandlerExtra<import("@modelcontextprotocol/sdk/types.js").ServerRequest, import("@modelcontextprotocol/sdk/types.js").ServerNotification>) => {
13
- [x: string]: unknown;
14
- content: ({
15
- type: "text";
16
- text: string;
17
- annotations?: {
18
- audience?: ("user" | "assistant")[] | undefined;
19
- priority?: number | undefined;
20
- lastModified?: string | undefined;
21
- } | undefined;
22
- _meta?: {
23
- [x: string]: unknown;
24
- } | undefined;
25
- } | {
26
- type: "image";
27
- data: string;
28
- mimeType: string;
29
- annotations?: {
30
- audience?: ("user" | "assistant")[] | undefined;
31
- priority?: number | undefined;
32
- lastModified?: string | undefined;
33
- } | undefined;
34
- _meta?: {
35
- [x: string]: unknown;
36
- } | undefined;
37
- } | {
38
- type: "audio";
39
- data: string;
40
- mimeType: string;
41
- annotations?: {
42
- audience?: ("user" | "assistant")[] | undefined;
43
- priority?: number | undefined;
44
- lastModified?: string | undefined;
45
- } | undefined;
46
- _meta?: {
47
- [x: string]: unknown;
48
- } | undefined;
49
- } | {
50
- uri: string;
51
- name: string;
52
- type: "resource_link";
53
- description?: string | undefined;
54
- mimeType?: string | undefined;
55
- annotations?: {
56
- audience?: ("user" | "assistant")[] | undefined;
57
- priority?: number | undefined;
58
- lastModified?: string | undefined;
59
- } | undefined;
60
- _meta?: {
61
- [x: string]: unknown;
62
- } | undefined;
63
- icons?: {
64
- src: string;
65
- mimeType?: string | undefined;
66
- sizes?: string[] | undefined;
67
- theme?: "light" | "dark" | undefined;
68
- }[] | undefined;
69
- title?: string | undefined;
70
- } | {
71
- type: "resource";
72
- resource: {
73
- uri: string;
74
- text: string;
75
- mimeType?: string | undefined;
76
- _meta?: {
77
- [x: string]: unknown;
78
- } | undefined;
79
- } | {
80
- uri: string;
81
- blob: string;
82
- mimeType?: string | undefined;
83
- _meta?: {
84
- [x: string]: unknown;
85
- } | undefined;
86
- };
87
- annotations?: {
88
- audience?: ("user" | "assistant")[] | undefined;
89
- priority?: number | undefined;
90
- lastModified?: string | undefined;
91
- } | undefined;
92
- _meta?: {
93
- [x: string]: unknown;
94
- } | undefined;
95
- })[];
96
- _meta?: {
97
- [x: string]: unknown;
98
- progressToken?: string | number | undefined;
99
- "io.modelcontextprotocol/related-task"?: {
100
- taskId: string;
101
- } | undefined;
102
- } | undefined;
103
- structuredContent?: {
104
- [x: string]: unknown;
105
- } | undefined;
106
- isError?: boolean | undefined;
107
- } | Promise<{
108
- [x: string]: unknown;
109
- content: ({
110
- type: "text";
111
- text: string;
112
- annotations?: {
113
- audience?: ("user" | "assistant")[] | undefined;
114
- priority?: number | undefined;
115
- lastModified?: string | undefined;
116
- } | undefined;
117
- _meta?: {
118
- [x: string]: unknown;
119
- } | undefined;
120
- } | {
121
- type: "image";
122
- data: string;
123
- mimeType: string;
124
- annotations?: {
125
- audience?: ("user" | "assistant")[] | undefined;
126
- priority?: number | undefined;
127
- lastModified?: string | undefined;
128
- } | undefined;
129
- _meta?: {
130
- [x: string]: unknown;
131
- } | undefined;
132
- } | {
133
- type: "audio";
134
- data: string;
135
- mimeType: string;
136
- annotations?: {
137
- audience?: ("user" | "assistant")[] | undefined;
138
- priority?: number | undefined;
139
- lastModified?: string | undefined;
140
- } | undefined;
141
- _meta?: {
142
- [x: string]: unknown;
143
- } | undefined;
144
- } | {
145
- uri: string;
146
- name: string;
147
- type: "resource_link";
148
- description?: string | undefined;
149
- mimeType?: string | undefined;
150
- annotations?: {
151
- audience?: ("user" | "assistant")[] | undefined;
152
- priority?: number | undefined;
153
- lastModified?: string | undefined;
154
- } | undefined;
155
- _meta?: {
156
- [x: string]: unknown;
157
- } | undefined;
158
- icons?: {
159
- src: string;
160
- mimeType?: string | undefined;
161
- sizes?: string[] | undefined;
162
- theme?: "light" | "dark" | undefined;
163
- }[] | undefined;
164
- title?: string | undefined;
165
- } | {
166
- type: "resource";
167
- resource: {
168
- uri: string;
169
- text: string;
170
- mimeType?: string | undefined;
171
- _meta?: {
172
- [x: string]: unknown;
173
- } | undefined;
174
- } | {
175
- uri: string;
176
- blob: string;
177
- mimeType?: string | undefined;
178
- _meta?: {
179
- [x: string]: unknown;
180
- } | undefined;
181
- };
182
- annotations?: {
183
- audience?: ("user" | "assistant")[] | undefined;
184
- priority?: number | undefined;
185
- lastModified?: string | undefined;
186
- } | undefined;
187
- _meta?: {
188
- [x: string]: unknown;
189
- } | undefined;
190
- })[];
191
- _meta?: {
192
- [x: string]: unknown;
193
- progressToken?: string | number | undefined;
194
- "io.modelcontextprotocol/related-task"?: {
195
- taskId: string;
196
- } | undefined;
197
- } | undefined;
198
- structuredContent?: {
199
- [x: string]: unknown;
200
- } | undefined;
201
- isError?: boolean | undefined;
202
- }>];
@@ -1,150 +0,0 @@
1
- import { modelConnection } from '@likec4/core/model';
2
- import { invariant, isSameHierarchy } from '@likec4/core/utils';
3
- import * as z from 'zod/v3';
4
- import { likec4Tool } from '../utils';
5
- import { includedInViews, includedInViewsSchema, locationSchema, mkLocate, projectIdSchema } from './_common';
6
- const endpointSchema = z.object({
7
- id: z.string(),
8
- title: z.string(),
9
- kind: z.string(),
10
- });
11
- const searchResultSchema = z.object({
12
- type: z.enum(['direct', 'indirect']).describe('Type of relationship, "direct" for direct relationships, "indirect" for relationships through nested elements'),
13
- source: endpointSchema,
14
- target: endpointSchema,
15
- kind: z.string().nullable().describe('Relationship kind'),
16
- title: z.string().nullable().describe('Relationship title'),
17
- description: z.string().nullable().describe('Relationship description'),
18
- technology: z.string().nullable().describe('Relationship technology'),
19
- tags: z.array(z.string()).describe('Relationship tags'),
20
- includedInViews: includedInViewsSchema.describe('Views that include this relationship'),
21
- sourceLocation: locationSchema,
22
- });
23
- export const findRelationships = likec4Tool({
24
- name: 'find-relationships',
25
- annotations: {
26
- readOnlyHint: true,
27
- idempotentHint: true,
28
- title: 'Find relationships between two elements',
29
- },
30
- description: `
31
- Find relationships between two LikeC4 elements within a project.
32
-
33
- What it does:
34
- - Finds both direct relationships (element1 ↔ element2) and indirect ones that arise via containment (e.g. via nested elements).
35
- - Returns rich metadata for each relationship and where it appears in views.
36
-
37
- Inputs:
38
- - element1: string — Element ID (FQN)
39
- - element2: string — Element ID (FQN)
40
- - project: string (optional, defaults to "default") — Project id
41
-
42
- Output:
43
- - found: Relationship[]
44
-
45
- Relationship (object) fields:
46
- - type: "direct" | "indirect" — direct is between the specified endpoints; indirect is via nested elements
47
- - source: Endpoint
48
- - target: Endpoint
49
- - kind: string|null — relationship kind from the model
50
- - title: string|null — relationship title if provided
51
- - description: string|null — relationship description text
52
- - technology: string|null — relationship technology
53
- - tags: string[] — relationship tags
54
- - includedInViews: View[] — views where this relationship appears
55
- - sourceLocation: { path: string, range: { start: { line: number, character: number }, end: { line: number, character: number } } } | null
56
-
57
- Endpoint (object) fields:
58
- - id: string — Element ID (FQN)
59
- - title: string — element title
60
- - kind: string — element kind
61
-
62
- View (object) fields:
63
- - id: string — view identifier
64
- - title: string — view title
65
- - type: "element" | "deployment" | "dynamic"
66
-
67
- Notes:
68
- - Read-only, idempotent; does not mutate the model. May trigger UI navigation in supporting clients.
69
- - The order of results is not guaranteed.
70
-
71
- Example:
72
- Request:
73
- {
74
- "element1": "shop.frontend",
75
- "element2": "shop.backend",
76
- "project": "default"
77
- }
78
-
79
- Response:
80
- {
81
- "found": [
82
- {
83
- "type": "direct",
84
- "source": { "id": "shop.frontend", "title": "Frontend", "kind": "component" },
85
- "target": { "id": "shop.backend", "title": "Backend", "kind": "component" },
86
- "kind": "sync",
87
- "title": "Calls",
88
- "description": "Frontend calls Backend",
89
- "technology": "HTTP",
90
- "tags": ["public"],
91
- "includedInViews": [
92
- { "id": "system-overview", "title": "System Overview", "type": "element" }
93
- ],
94
- "sourceLocation": {
95
- "path": "/abs/path/project/model.c4",
96
- "range": { "start": { "line": 12, "character": 0 }, "end": { "line": 14, "character": 0 } }
97
- }
98
- }
99
- ]
100
- }
101
- `,
102
- inputSchema: {
103
- element1: z.string().describe('Element ID (FQN)'),
104
- element2: z.string().describe('Element ID (FQN)'),
105
- project: projectIdSchema,
106
- },
107
- outputSchema: {
108
- found: z.array(searchResultSchema),
109
- },
110
- }, async (languageServices, args) => {
111
- const projectId = languageServices.projectsManager.ensureProjectId(args.project);
112
- if (isSameHierarchy(args.element1, args.element2)) {
113
- throw new Error('No relationships possible between parent-child');
114
- }
115
- const found = [];
116
- const model = await languageServices.computedModel(projectId);
117
- const el1 = model.findElement(args.element1);
118
- invariant(el1, `Element "${args.element1}" not found in project "${projectId}"`);
119
- const el2 = model.findElement(args.element2);
120
- invariant(el2, `Element "${args.element2}" not found in project "${projectId}"`);
121
- const locate = mkLocate(languageServices, projectId);
122
- const relationships = modelConnection.findConnection(el1, el2, 'both').flatMap(c => [...c.relations]);
123
- for (const relationship of relationships) {
124
- const isDirect = (relationship.source === el1 && relationship.target === el2)
125
- || (relationship.source === el2 && relationship.target === el1);
126
- found.push({
127
- type: isDirect ? 'direct' : 'indirect',
128
- source: {
129
- id: relationship.source.id,
130
- title: relationship.source.title,
131
- kind: relationship.source.kind,
132
- },
133
- target: {
134
- id: relationship.target.id,
135
- title: relationship.target.title,
136
- kind: relationship.target.kind,
137
- },
138
- kind: relationship.kind,
139
- title: relationship.title,
140
- description: relationship.description.text,
141
- technology: relationship.technology,
142
- tags: [...relationship.tags],
143
- includedInViews: includedInViews(relationship.views()),
144
- sourceLocation: locate({ relation: relationship.id }),
145
- });
146
- }
147
- return {
148
- found,
149
- };
150
- });