archsight 0.1.4 → 0.2.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 (190) hide show
  1. checksums.yaml +4 -4
  2. data/Dockerfile +5 -4
  3. data/README.md +44 -59
  4. data/chart/archsight/Chart.yaml +6 -0
  5. data/chart/archsight/README.md +3 -0
  6. data/chart/archsight/templates/NOTES.txt +22 -0
  7. data/chart/archsight/templates/_helpers.tpl +62 -0
  8. data/chart/archsight/templates/deployment.yaml +114 -0
  9. data/chart/archsight/templates/ingress.yaml +56 -0
  10. data/chart/archsight/templates/resources-configmap.yaml +10 -0
  11. data/chart/archsight/templates/resources-pvc.yaml +23 -0
  12. data/chart/archsight/templates/service.yaml +15 -0
  13. data/chart/archsight/templates/serviceaccount.yaml +12 -0
  14. data/chart/archsight/values.yaml +162 -0
  15. data/docs/architecture.md +39 -0
  16. data/docs/docker.md +49 -0
  17. data/{lib/archsight/web/doc → docs}/import.md +10 -2
  18. data/{lib/archsight/web/doc → docs}/index.md.erb +3 -1
  19. data/docs/kubernetes.md +149 -0
  20. data/docs/licenses.md +307 -0
  21. data/lib/archsight/analysis/executor.rb +0 -10
  22. data/lib/archsight/annotations/annotation.rb +85 -36
  23. data/lib/archsight/annotations/architecture_annotations.rb +1 -34
  24. data/lib/archsight/annotations/computed.rb +1 -1
  25. data/lib/archsight/annotations/generated_annotations.rb +6 -3
  26. data/lib/archsight/annotations/git_annotations.rb +8 -4
  27. data/lib/archsight/annotations/interface_annotations.rb +35 -0
  28. data/lib/archsight/cli.rb +4 -2
  29. data/lib/archsight/editor/content_hasher.rb +37 -0
  30. data/lib/archsight/editor/file_writer.rb +79 -0
  31. data/lib/archsight/editor.rb +237 -0
  32. data/lib/archsight/graph.rb +1 -51
  33. data/lib/archsight/helpers.rb +0 -20
  34. data/lib/archsight/import/handlers/github.rb +16 -6
  35. data/lib/archsight/import/handlers/gitlab.rb +28 -10
  36. data/lib/archsight/import/handlers/repository.rb +56 -6
  37. data/lib/archsight/import/handlers/rest_api.rb +13 -1
  38. data/lib/archsight/import/license_analyzer.rb +650 -0
  39. data/lib/archsight/import/team_matcher.rb +111 -61
  40. data/lib/archsight/linter.rb +1 -1
  41. data/lib/archsight/mcp/base.rb +11 -0
  42. data/lib/archsight/mcp/execute_analysis_tool.rb +100 -0
  43. data/lib/archsight/mcp.rb +1 -0
  44. data/lib/archsight/renderer.rb +4 -4
  45. data/lib/archsight/resources/analysis.rb +1 -17
  46. data/lib/archsight/resources/application_interface.rb +1 -5
  47. data/lib/archsight/resources/base.rb +14 -14
  48. data/lib/archsight/resources/business_actor.rb +18 -3
  49. data/lib/archsight/resources/technology_artifact.rb +48 -0
  50. data/lib/archsight/resources/technology_interface.rb +1 -1
  51. data/lib/archsight/resources/technology_service.rb +5 -0
  52. data/lib/archsight/version.rb +1 -1
  53. data/lib/archsight/web/api/docs.rb +37 -2
  54. data/lib/archsight/web/api/json_helpers.rb +79 -13
  55. data/lib/archsight/web/api/openapi/spec.yaml +699 -0
  56. data/lib/archsight/web/api/routes.rb +23 -0
  57. data/lib/archsight/web/application.rb +48 -128
  58. data/lib/archsight/web/editor/form_builder.rb +100 -0
  59. data/lib/archsight/web/editor/helpers.rb +150 -0
  60. data/lib/archsight/web/editor/routes.rb +166 -0
  61. data/lib/archsight/web/public/vue/ApiDocsPage-B1RqTNqh.js +1 -0
  62. data/lib/archsight/web/public/vue/ApiDocsPage-DhNTOH4o.css +1 -0
  63. data/lib/archsight/web/public/vue/DocPage-DzwBgBd4.js +1 -0
  64. data/lib/archsight/web/public/vue/EditorPage-D_miHSv4.js +34 -0
  65. data/lib/archsight/web/public/vue/EditorPage-Dq0MuTnp.css +1 -0
  66. data/lib/archsight/web/public/vue/ErrorPage-CQQtPey3.js +2 -0
  67. data/lib/archsight/web/public/vue/ErrorPage-CwPT3JUr.css +1 -0
  68. data/lib/archsight/web/public/vue/GraphView-DRcIqAiR.css +1 -0
  69. data/lib/archsight/web/public/vue/GraphView-T9jFH_qg.js +1 -0
  70. data/lib/archsight/web/public/vue/InstanceRouter-1Sm-CRhf.js +2 -0
  71. data/lib/archsight/web/public/vue/InstanceRouter-BJkDRXZY.css +1 -0
  72. data/lib/archsight/web/public/vue/KindList-JA_L_-Cz.js +1 -0
  73. data/lib/archsight/web/public/vue/ResourceList-8iqavWdg.js +1 -0
  74. data/lib/archsight/web/public/vue/ResourceList-DP-z-j71.css +1 -0
  75. data/lib/archsight/web/public/vue/SearchResults-BGHbg48-.css +1 -0
  76. data/lib/archsight/web/public/vue/SearchResults-BdgFeHcm.js +1 -0
  77. data/lib/archsight/web/public/vue/_basePickBy-CVgieyx-.js +1 -0
  78. data/lib/archsight/web/public/vue/_baseUniq-BNfrOSaP.js +1 -0
  79. data/lib/archsight/web/public/vue/architectureDiagram-VXUJARFQ-CJXNpTr5.js +36 -0
  80. data/lib/archsight/web/public/vue/blockDiagram-VD42YOAC-B5488Hes.js +122 -0
  81. data/lib/archsight/web/public/vue/c4Diagram-YG6GDRKO-eYY3hprM.js +10 -0
  82. data/lib/archsight/web/public/vue/chunk-4BX2VUAB-ZoXeL4D1.js +1 -0
  83. data/lib/archsight/web/public/vue/chunk-55IACEB6-rNtQYnu_.js +1 -0
  84. data/lib/archsight/web/public/vue/chunk-B4BG7PRW-DolAeVV9.js +165 -0
  85. data/lib/archsight/web/public/vue/chunk-DI55MBZ5-DnN0f_hj.js +220 -0
  86. data/lib/archsight/web/public/vue/chunk-FMBD7UC4-BQWOCMuR.js +15 -0
  87. data/lib/archsight/web/public/vue/chunk-QN33PNHL-DId301Kb.js +1 -0
  88. data/lib/archsight/web/public/vue/chunk-QZHKN3VN-xbY0NLgv.js +1 -0
  89. data/lib/archsight/web/public/vue/chunk-TZMSLE5B-CgF9_37b.js +1 -0
  90. data/lib/archsight/web/public/vue/classDiagram-2ON5EDUG-jGlvI-Za.js +1 -0
  91. data/lib/archsight/web/public/vue/classDiagram-v2-WZHVMYZB-jGlvI-Za.js +1 -0
  92. data/lib/archsight/web/public/vue/clone-6iRPe1-W.js +1 -0
  93. data/lib/archsight/web/public/vue/cose-bilkent-S5V4N54A-CB9Zfu50.js +1 -0
  94. data/lib/archsight/web/public/vue/cytoscape.esm-5J0xJHOV.js +321 -0
  95. data/lib/archsight/web/public/vue/dagre-6UL2VRFP-BqkmE-LI.js +4 -0
  96. data/lib/archsight/web/public/vue/diagram-PSM6KHXK-CKBfqtw3.js +24 -0
  97. data/lib/archsight/web/public/vue/diagram-QEK2KX5R-B78rOlvK.js +43 -0
  98. data/lib/archsight/web/public/vue/diagram-S2PKOQOG-BlXC6Cia.js +24 -0
  99. data/lib/archsight/web/public/vue/erDiagram-Q2GNP2WA-BnliyziJ.js +60 -0
  100. data/lib/archsight/web/public/vue/flowDiagram-NV44I4VS-wuqPowTd.js +162 -0
  101. data/lib/archsight/web/public/vue/ganttDiagram-JELNMOA3-GSffAIH3.js +267 -0
  102. data/lib/archsight/web/public/vue/gitGraphDiagram-V2S2FVAM-OA7VyugW.js +65 -0
  103. data/lib/archsight/web/public/vue/graph-BXHAtA0S.js +1 -0
  104. data/lib/archsight/web/public/vue/graphviz-CJms5bxZ.js +13 -0
  105. data/lib/archsight/web/public/vue/index-DsEsN0_K.js +2 -0
  106. data/lib/archsight/web/public/vue/index-Tiu4C-Sb.css +1 -0
  107. data/lib/archsight/web/public/vue/infoDiagram-HS3SLOUP-nlVe2qgv.js +2 -0
  108. data/lib/archsight/web/public/vue/journeyDiagram-XKPGCS4Q-CtTIcKwf.js +139 -0
  109. data/lib/archsight/web/public/vue/kanban-definition-3W4ZIXB7-837KX0sW.js +89 -0
  110. data/lib/archsight/web/public/vue/katex-C-M49wc6.js +261 -0
  111. data/lib/archsight/web/public/vue/layout-DtE0QdL6.js +1 -0
  112. data/lib/archsight/web/public/vue/mermaid-DpPHPFQh.js +250 -0
  113. data/lib/archsight/web/public/vue/mindmap-definition-VGOIOE7T-9gLF2AoY.js +68 -0
  114. data/lib/archsight/web/public/vue/pieDiagram-ADFJNKIX-CyCNgw3u.js +30 -0
  115. data/lib/archsight/web/public/vue/quadrantDiagram-AYHSOK5B-CkPh8g02.js +7 -0
  116. data/lib/archsight/web/public/vue/requirementDiagram-UZGBJVZJ-Dkt6OSlY.js +64 -0
  117. data/lib/archsight/web/public/vue/sankeyDiagram-TZEHDZUN-BqprTk8x.js +10 -0
  118. data/lib/archsight/web/public/vue/sequenceDiagram-WL72ISMW-CTmTe1FQ.js +145 -0
  119. data/lib/archsight/web/public/vue/stateDiagram-FKZM4ZOC-CphqmkEU.js +1 -0
  120. data/lib/archsight/web/public/vue/stateDiagram-v2-4FDKWEC3-CxaDW5sW.js +1 -0
  121. data/lib/archsight/web/public/vue/timeline-definition-IT6M3QCI-CSQUZkyE.js +61 -0
  122. data/lib/archsight/web/public/vue/treemap-GDKQZRPO-DTojm7Yr.js +162 -0
  123. data/lib/archsight/web/public/{css/graph.css → vue/useGraphviz-A5s4h76R.js} +2 -1
  124. data/lib/archsight/web/public/vue/useHighlight-C6Kb5G3l.js +10 -0
  125. data/lib/archsight/web/public/vue/useMermaid-DqxTrLRB.js +1 -0
  126. data/lib/archsight/web/public/vue/usePanZoom-BybZ_rfh.js +11 -0
  127. data/lib/archsight/web/public/vue/xychartDiagram-PRI3JC2R-B1ZJZtDC.js +7 -0
  128. data/lib/archsight/web/public/vue.html +15 -0
  129. data/media/artifact.jpg +0 -0
  130. data/media/service.jpg +0 -0
  131. metadata +104 -77
  132. data/lib/archsight/web/public/css/artifact.css +0 -995
  133. data/lib/archsight/web/public/css/base.css +0 -201
  134. data/lib/archsight/web/public/css/highlight.min.css +0 -10
  135. data/lib/archsight/web/public/css/iconoir.css +0 -22
  136. data/lib/archsight/web/public/css/instance.css +0 -818
  137. data/lib/archsight/web/public/css/layout.css +0 -421
  138. data/lib/archsight/web/public/css/mermaid-layers.css +0 -188
  139. data/lib/archsight/web/public/css/pico.min.css +0 -4
  140. data/lib/archsight/web/public/img/archimate.png +0 -0
  141. data/lib/archsight/web/public/img/togaf-high-level.png +0 -0
  142. data/lib/archsight/web/public/js/graph-zoom.js +0 -18
  143. data/lib/archsight/web/public/js/highlight.min.js +0 -3899
  144. data/lib/archsight/web/public/js/htmx.min.js +0 -1
  145. data/lib/archsight/web/public/js/mermaid-init.js +0 -88
  146. data/lib/archsight/web/public/js/mermaid.min.js +0 -2811
  147. data/lib/archsight/web/public/js/sparkline.js +0 -42
  148. data/lib/archsight/web/public/js/svg-pan-zoom.min.js +0 -3
  149. data/lib/archsight/web/public/js/svg-zoom-controls.js +0 -93
  150. data/lib/archsight/web/views/api_docs.erb +0 -19
  151. data/lib/archsight/web/views/index.haml +0 -12
  152. data/lib/archsight/web/views/partials/artifact/_activity.haml +0 -55
  153. data/lib/archsight/web/views/partials/artifact/_agentic.haml +0 -25
  154. data/lib/archsight/web/views/partials/artifact/_deployment.haml +0 -29
  155. data/lib/archsight/web/views/partials/artifact/_git_info.haml +0 -16
  156. data/lib/archsight/web/views/partials/artifact/_language_stats.haml +0 -53
  157. data/lib/archsight/web/views/partials/artifact/_links.haml +0 -24
  158. data/lib/archsight/web/views/partials/artifact/_project_estimate.haml +0 -32
  159. data/lib/archsight/web/views/partials/artifact/_repositories.haml +0 -55
  160. data/lib/archsight/web/views/partials/artifact/_team.haml +0 -83
  161. data/lib/archsight/web/views/partials/artifact/_workflow.haml +0 -69
  162. data/lib/archsight/web/views/partials/components/_activity.haml +0 -37
  163. data/lib/archsight/web/views/partials/components/_git.haml +0 -17
  164. data/lib/archsight/web/views/partials/components/_jira.haml +0 -18
  165. data/lib/archsight/web/views/partials/components/_languages.haml +0 -29
  166. data/lib/archsight/web/views/partials/components/_owner.haml +0 -15
  167. data/lib/archsight/web/views/partials/components/_repositories.haml +0 -37
  168. data/lib/archsight/web/views/partials/components/_status.haml +0 -23
  169. data/lib/archsight/web/views/partials/instance/_analysis_detail.haml +0 -74
  170. data/lib/archsight/web/views/partials/instance/_analysis_result.haml +0 -64
  171. data/lib/archsight/web/views/partials/instance/_detail.haml +0 -103
  172. data/lib/archsight/web/views/partials/instance/_graph.haml +0 -6
  173. data/lib/archsight/web/views/partials/instance/_import_detail.haml +0 -87
  174. data/lib/archsight/web/views/partials/instance/_list.haml +0 -84
  175. data/lib/archsight/web/views/partials/instance/_relations.haml +0 -43
  176. data/lib/archsight/web/views/partials/instance/_requirements.haml +0 -41
  177. data/lib/archsight/web/views/partials/instance/_view_detail.haml +0 -57
  178. data/lib/archsight/web/views/partials/layout/_content.haml +0 -44
  179. data/lib/archsight/web/views/partials/layout/_error.haml +0 -22
  180. data/lib/archsight/web/views/partials/layout/_head.haml +0 -24
  181. data/lib/archsight/web/views/partials/layout/_navigation.haml +0 -21
  182. data/lib/archsight/web/views/partials/layout/_sidebar.haml +0 -27
  183. data/lib/archsight/web/views/search.haml +0 -53
  184. /data/{lib/archsight/web/doc → docs}/archimate.md +0 -0
  185. /data/{lib/archsight/web/doc → docs}/computed_annotations.md +0 -0
  186. /data/{lib/archsight/web/doc → docs}/icons.md +0 -0
  187. /data/{lib/archsight/web/doc → docs}/modeling.md +0 -0
  188. /data/{lib/archsight/web/doc → docs}/search.md +0 -0
  189. /data/{lib/archsight/web/doc → docs}/togaf.md +0 -0
  190. /data/{lib/archsight/web/doc → docs}/tool.md +0 -0
@@ -99,6 +99,33 @@ paths:
99
99
  schema:
100
100
  $ref: '#/components/schemas/Error'
101
101
 
102
+ /api/v1/kinds/{kind}/filters:
103
+ get:
104
+ summary: Get filterable annotations for a kind
105
+ description: |
106
+ Returns the list of annotations that can be used as filters for a given kind,
107
+ along with their available values.
108
+ operationId: getKindFilters
109
+ tags:
110
+ - Kinds
111
+ parameters:
112
+ - $ref: '#/components/parameters/kind'
113
+ responses:
114
+ '200':
115
+ description: Array of filter definitions
116
+ content:
117
+ application/json:
118
+ schema:
119
+ type: array
120
+ items:
121
+ $ref: '#/components/schemas/Filter'
122
+ '404':
123
+ description: Kind not found
124
+ content:
125
+ application/json:
126
+ schema:
127
+ $ref: '#/components/schemas/Error'
128
+
102
129
  /api/v1/kinds/{kind}/instances/{name}:
103
130
  get:
104
131
  summary: Get instance details
@@ -126,6 +153,30 @@ paths:
126
153
  schema:
127
154
  $ref: '#/components/schemas/Error'
128
155
 
156
+ /api/v1/kinds/Analysis/instances/{name}/execute:
157
+ post:
158
+ summary: Execute an analysis
159
+ description: |
160
+ Runs the named Analysis instance and returns the result with typed sections.
161
+ operationId: executeAnalysis
162
+ tags:
163
+ - Instances
164
+ parameters:
165
+ - $ref: '#/components/parameters/name'
166
+ responses:
167
+ '200':
168
+ description: Analysis execution result
169
+ content:
170
+ application/json:
171
+ schema:
172
+ $ref: '#/components/schemas/AnalysisResult'
173
+ '404':
174
+ description: Analysis not found
175
+ content:
176
+ application/json:
177
+ schema:
178
+ $ref: '#/components/schemas/Error'
179
+
129
180
  /api/v1/search:
130
181
  get:
131
182
  summary: Search instances
@@ -175,6 +226,344 @@ paths:
175
226
  schema:
176
227
  $ref: '#/components/schemas/QueryError'
177
228
 
229
+ /dot:
230
+ get:
231
+ summary: Get full architecture graph as DOT
232
+ description: Returns the complete architecture graph in GraphViz DOT format.
233
+ operationId: getFullDot
234
+ tags:
235
+ - Graph
236
+ responses:
237
+ '200':
238
+ description: GraphViz DOT source
239
+ content:
240
+ text/plain:
241
+ schema:
242
+ type: string
243
+
244
+ /kinds/{kind}/instances/{name}/dot:
245
+ get:
246
+ summary: Get instance graph as DOT
247
+ description: Returns the GraphViz DOT graph centered on a specific instance and its relations.
248
+ operationId: getInstanceDot
249
+ tags:
250
+ - Graph
251
+ parameters:
252
+ - $ref: '#/components/parameters/kind'
253
+ - name: name
254
+ in: path
255
+ required: true
256
+ description: Instance name
257
+ schema:
258
+ type: string
259
+ responses:
260
+ '200':
261
+ description: GraphViz DOT source
262
+ content:
263
+ text/plain:
264
+ schema:
265
+ type: string
266
+
267
+ /api/v1/docs/{filename}:
268
+ get:
269
+ summary: Get documentation page
270
+ description: Returns rendered HTML from a static markdown or ERB documentation file.
271
+ operationId: getDocPage
272
+ tags:
273
+ - Documentation
274
+ parameters:
275
+ - name: filename
276
+ in: path
277
+ required: true
278
+ description: Documentation filename (without extension)
279
+ schema:
280
+ type: string
281
+ responses:
282
+ '200':
283
+ description: Rendered HTML documentation
284
+ content:
285
+ text/html:
286
+ schema:
287
+ type: string
288
+ '404':
289
+ description: Documentation not found
290
+
291
+ /api/v1/docs/resources/{filename}:
292
+ get:
293
+ summary: Get auto-generated resource documentation
294
+ description: Returns rendered HTML documentation auto-generated for a resource kind.
295
+ operationId: getResourceDoc
296
+ tags:
297
+ - Documentation
298
+ parameters:
299
+ - name: filename
300
+ in: path
301
+ required: true
302
+ description: Resource kind in snake_case (e.g., technology_artifact)
303
+ schema:
304
+ type: string
305
+ responses:
306
+ '200':
307
+ description: Rendered HTML documentation
308
+ content:
309
+ text/html:
310
+ schema:
311
+ type: string
312
+ '404':
313
+ description: Documentation not found
314
+
315
+ /reload:
316
+ get:
317
+ summary: Reload resources from disk
318
+ description: |
319
+ Triggers a reload of all YAML resources from disk.
320
+ Only works if the server was started with reload enabled (default in development).
321
+ Returns JSON when Accept header includes application/json, otherwise redirects.
322
+ operationId: reload
323
+ tags:
324
+ - Operations
325
+ responses:
326
+ '200':
327
+ description: Reload successful
328
+ content:
329
+ application/json:
330
+ schema:
331
+ type: object
332
+ properties:
333
+ ok:
334
+ type: boolean
335
+ example: true
336
+ '404':
337
+ description: Reload is disabled on this server
338
+ '422':
339
+ description: Resource error during reload
340
+ content:
341
+ application/json:
342
+ schema:
343
+ $ref: '#/components/schemas/ReloadError'
344
+
345
+ /api/v1/editor/kinds/{kind}/form:
346
+ get:
347
+ summary: Get form metadata for creating a new resource
348
+ description: Returns field definitions, relation options, and instance lists for the editor form.
349
+ operationId: getEditorNewForm
350
+ tags:
351
+ - Editor
352
+ parameters:
353
+ - $ref: '#/components/parameters/kind'
354
+ responses:
355
+ '200':
356
+ description: Form metadata for resource creation
357
+ content:
358
+ application/json:
359
+ schema:
360
+ $ref: '#/components/schemas/EditorFormMetadata'
361
+ '404':
362
+ description: Kind not found
363
+
364
+ /api/v1/editor/kinds/{kind}/instances/{name}/form:
365
+ get:
366
+ summary: Get form metadata for editing an existing resource
367
+ description: |
368
+ Returns field definitions, relation options, and current values for editing.
369
+ Includes content_hash for optimistic locking on save.
370
+ operationId: getEditorEditForm
371
+ tags:
372
+ - Editor
373
+ parameters:
374
+ - $ref: '#/components/parameters/kind'
375
+ - $ref: '#/components/parameters/name'
376
+ responses:
377
+ '200':
378
+ description: Form metadata with current resource values
379
+ content:
380
+ application/json:
381
+ schema:
382
+ allOf:
383
+ - $ref: '#/components/schemas/EditorFormMetadata'
384
+ - type: object
385
+ properties:
386
+ mode:
387
+ type: string
388
+ enum: [edit]
389
+ name:
390
+ type: string
391
+ description: Current instance name
392
+ annotations:
393
+ type: object
394
+ additionalProperties: true
395
+ description: Current annotation values
396
+ relations:
397
+ type: array
398
+ items:
399
+ type: object
400
+ properties:
401
+ verb:
402
+ type: string
403
+ kind:
404
+ type: string
405
+ name:
406
+ type: string
407
+ path_ref:
408
+ type: string
409
+ description: "File path and line (e.g., path/to/file.yaml:5)"
410
+ content_hash:
411
+ type: string
412
+ description: Hash for optimistic locking
413
+ '404':
414
+ description: Kind or instance not found
415
+
416
+ /api/v1/editor/kinds/{kind}/generate:
417
+ post:
418
+ summary: Generate YAML for a new resource
419
+ description: Validates form input and generates YAML for a new resource.
420
+ operationId: editorGenerateNew
421
+ tags:
422
+ - Editor
423
+ parameters:
424
+ - $ref: '#/components/parameters/kind'
425
+ requestBody:
426
+ required: true
427
+ content:
428
+ application/json:
429
+ schema:
430
+ $ref: '#/components/schemas/GenerateRequest'
431
+ responses:
432
+ '200':
433
+ description: Generated YAML or validation errors
434
+ content:
435
+ application/json:
436
+ schema:
437
+ $ref: '#/components/schemas/GenerateResponse'
438
+ '404':
439
+ description: Kind not found
440
+
441
+ /api/v1/editor/kinds/{kind}/instances/{name}/generate:
442
+ post:
443
+ summary: Generate YAML for an existing resource edit
444
+ description: Validates form input and generates YAML for editing an existing resource.
445
+ operationId: editorGenerateEdit
446
+ tags:
447
+ - Editor
448
+ parameters:
449
+ - $ref: '#/components/parameters/kind'
450
+ - $ref: '#/components/parameters/name'
451
+ requestBody:
452
+ required: true
453
+ content:
454
+ application/json:
455
+ schema:
456
+ $ref: '#/components/schemas/GenerateRequest'
457
+ responses:
458
+ '200':
459
+ description: Generated YAML with path reference
460
+ content:
461
+ application/json:
462
+ schema:
463
+ $ref: '#/components/schemas/GenerateResponse'
464
+ '404':
465
+ description: Kind not found
466
+
467
+ /api/v1/editor/kinds/{kind}/instances/{name}/save:
468
+ post:
469
+ summary: Save YAML to file
470
+ description: |
471
+ Writes generated YAML back to the resource file on disk.
472
+ Requires the server to be started with --inline-edit flag.
473
+ Uses optimistic locking via content_hash to detect conflicts.
474
+ operationId: editorSave
475
+ tags:
476
+ - Editor
477
+ parameters:
478
+ - $ref: '#/components/parameters/kind'
479
+ - $ref: '#/components/parameters/name'
480
+ requestBody:
481
+ required: true
482
+ content:
483
+ application/json:
484
+ schema:
485
+ $ref: '#/components/schemas/SaveRequest'
486
+ responses:
487
+ '200':
488
+ description: Save successful
489
+ content:
490
+ application/json:
491
+ schema:
492
+ $ref: '#/components/schemas/SaveResponse'
493
+ '400':
494
+ description: Write error
495
+ content:
496
+ application/json:
497
+ schema:
498
+ $ref: '#/components/schemas/SaveResponse'
499
+ '403':
500
+ description: Inline edit is disabled
501
+ content:
502
+ application/json:
503
+ schema:
504
+ $ref: '#/components/schemas/SaveResponse'
505
+ '404':
506
+ description: Instance not found
507
+ '409':
508
+ description: Content conflict (file changed since last read)
509
+ content:
510
+ application/json:
511
+ schema:
512
+ $ref: '#/components/schemas/SaveResponse'
513
+
514
+ /api/v1/editor/kinds/{kind}/instances:
515
+ get:
516
+ summary: List instance names for a kind
517
+ description: Returns a sorted array of instance name strings for the given kind.
518
+ operationId: editorListInstances
519
+ tags:
520
+ - Editor
521
+ parameters:
522
+ - $ref: '#/components/parameters/kind'
523
+ responses:
524
+ '200':
525
+ description: Array of instance name strings
526
+ content:
527
+ application/json:
528
+ schema:
529
+ type: array
530
+ items:
531
+ type: string
532
+ '404':
533
+ description: Kind not found
534
+
535
+ /api/v1/editor/relation-kinds:
536
+ get:
537
+ summary: Get target kinds for a relation verb
538
+ description: Returns the valid target kinds for a given resource kind and relation verb.
539
+ operationId: editorRelationKinds
540
+ tags:
541
+ - Editor
542
+ parameters:
543
+ - name: kind
544
+ in: query
545
+ required: true
546
+ description: Source resource kind
547
+ schema:
548
+ type: string
549
+ - name: verb
550
+ in: query
551
+ required: true
552
+ description: Relation verb
553
+ schema:
554
+ type: string
555
+ responses:
556
+ '200':
557
+ description: Array of valid target kind strings
558
+ content:
559
+ application/json:
560
+ schema:
561
+ type: array
562
+ items:
563
+ type: string
564
+ '400':
565
+ description: Kind and verb parameters required
566
+
178
567
  /mcp:
179
568
  get:
180
569
  summary: MCP Server endpoint
@@ -459,6 +848,308 @@ components:
459
848
  items:
460
849
  $ref: '#/components/schemas/Instance'
461
850
 
851
+ Filter:
852
+ type: object
853
+ required:
854
+ - key
855
+ - title
856
+ - filter_type
857
+ - values
858
+ properties:
859
+ key:
860
+ type: string
861
+ description: Annotation key path (e.g., "activity/status")
862
+ title:
863
+ type: string
864
+ description: Human-readable title
865
+ description:
866
+ type: string
867
+ description: Description of the filter
868
+ filter_type:
869
+ type: string
870
+ description: Filter type (e.g., "select", "boolean")
871
+ values:
872
+ type: array
873
+ items:
874
+ type: string
875
+ description: Available values for the filter
876
+
877
+ AnalysisResult:
878
+ type: object
879
+ required:
880
+ - name
881
+ - success
882
+ - has_findings
883
+ - duration
884
+ - sections
885
+ properties:
886
+ name:
887
+ type: string
888
+ description: Analysis instance name
889
+ success:
890
+ type: boolean
891
+ description: Whether the analysis executed successfully
892
+ has_findings:
893
+ type: boolean
894
+ description: Whether the analysis produced findings
895
+ duration:
896
+ type: number
897
+ format: float
898
+ description: Execution duration in seconds
899
+ sections:
900
+ type: array
901
+ items:
902
+ $ref: '#/components/schemas/AnalysisSection'
903
+ error:
904
+ type: string
905
+ description: Error message (only present on failure)
906
+ error_backtrace:
907
+ type: array
908
+ items:
909
+ type: string
910
+ description: Error backtrace lines (only present on failure)
911
+
912
+ AnalysisSection:
913
+ type: object
914
+ required:
915
+ - type
916
+ discriminator:
917
+ propertyName: type
918
+ properties:
919
+ type:
920
+ type: string
921
+ enum: [heading, text, message, table, list, code]
922
+ description: Section type
923
+ level:
924
+ type: integer
925
+ description: Heading level (heading type) or severity (message type)
926
+ text:
927
+ type: string
928
+ description: Heading text (heading type)
929
+ content:
930
+ type: string
931
+ description: Text content (text type) or code content (code type)
932
+ message:
933
+ type: string
934
+ description: Message text (message type)
935
+ headers:
936
+ type: array
937
+ items:
938
+ type: string
939
+ description: Table column headers (table type)
940
+ rows:
941
+ type: array
942
+ items:
943
+ type: array
944
+ items:
945
+ type: string
946
+ description: Table rows (table type)
947
+ items:
948
+ type: array
949
+ items:
950
+ type: string
951
+ description: List items (list type)
952
+ lang:
953
+ type: string
954
+ description: Code language (code type)
955
+
956
+ EditorFormMetadata:
957
+ type: object
958
+ required:
959
+ - kind
960
+ - icon
961
+ - layer
962
+ - fields
963
+ - relation_options
964
+ - instances_by_kind
965
+ - inline_edit_enabled
966
+ - mode
967
+ properties:
968
+ kind:
969
+ type: string
970
+ description: Resource kind name
971
+ icon:
972
+ type: string
973
+ description: Kind icon identifier
974
+ layer:
975
+ type: string
976
+ description: Architecture layer
977
+ mode:
978
+ type: string
979
+ enum: [create, edit]
980
+ description: Form mode
981
+ fields:
982
+ type: array
983
+ items:
984
+ $ref: '#/components/schemas/EditorField'
985
+ relation_options:
986
+ type: array
987
+ items:
988
+ $ref: '#/components/schemas/RelationOption'
989
+ description: Available relation verb+kind combinations
990
+ instances_by_kind:
991
+ type: object
992
+ additionalProperties:
993
+ type: array
994
+ items:
995
+ type: string
996
+ description: Instance names grouped by target kind (for relation dropdowns)
997
+ inline_edit_enabled:
998
+ type: boolean
999
+ description: Whether inline file editing is enabled on the server
1000
+
1001
+ EditorField:
1002
+ type: object
1003
+ required:
1004
+ - key
1005
+ - title
1006
+ - input_type
1007
+ - required
1008
+ properties:
1009
+ key:
1010
+ type: string
1011
+ description: Annotation key path
1012
+ title:
1013
+ type: string
1014
+ description: Human-readable field title
1015
+ description:
1016
+ type: string
1017
+ description: Field description/help text
1018
+ input_type:
1019
+ type: string
1020
+ description: Input type (text, textarea, select, number, boolean, code, etc.)
1021
+ options:
1022
+ type: array
1023
+ items:
1024
+ type: string
1025
+ description: Available options (for select input type)
1026
+ step:
1027
+ type: number
1028
+ description: Step value (for number input type)
1029
+ required:
1030
+ type: boolean
1031
+ description: Whether the field is required
1032
+ code_language:
1033
+ type: string
1034
+ description: Code language hint (for code input type)
1035
+
1036
+ RelationOption:
1037
+ type: object
1038
+ required:
1039
+ - combo
1040
+ - verb
1041
+ - target_kind
1042
+ properties:
1043
+ combo:
1044
+ type: string
1045
+ description: "Combined key (e.g., \"dependsOn:TechnologyArtifact\")"
1046
+ verb:
1047
+ type: string
1048
+ description: Relation verb
1049
+ target_kind:
1050
+ type: string
1051
+ description: Target resource kind
1052
+
1053
+ GenerateRequest:
1054
+ type: object
1055
+ required:
1056
+ - name
1057
+ properties:
1058
+ name:
1059
+ type: string
1060
+ description: Resource name
1061
+ annotations:
1062
+ type: object
1063
+ additionalProperties: true
1064
+ description: Annotation key-value pairs
1065
+ relations:
1066
+ type: array
1067
+ items:
1068
+ type: object
1069
+ properties:
1070
+ verb:
1071
+ type: string
1072
+ kind:
1073
+ type: string
1074
+ name:
1075
+ type: string
1076
+ names:
1077
+ type: array
1078
+ items:
1079
+ type: string
1080
+ description: Relations to include
1081
+ content_hash:
1082
+ type: string
1083
+ description: Content hash for edit mode (passed through to response)
1084
+
1085
+ GenerateResponse:
1086
+ type: object
1087
+ properties:
1088
+ yaml:
1089
+ type: string
1090
+ nullable: true
1091
+ description: Generated YAML (null if validation failed)
1092
+ errors:
1093
+ type: array
1094
+ nullable: true
1095
+ items:
1096
+ type: string
1097
+ description: Validation errors (null if valid)
1098
+ path_ref:
1099
+ type: string
1100
+ nullable: true
1101
+ description: "File path reference (edit mode only, e.g., path/file.yaml:5)"
1102
+ content_hash:
1103
+ type: string
1104
+ nullable: true
1105
+ description: Content hash (edit mode only, for optimistic locking)
1106
+
1107
+ SaveRequest:
1108
+ type: object
1109
+ required:
1110
+ - yaml
1111
+ - content_hash
1112
+ properties:
1113
+ yaml:
1114
+ type: string
1115
+ description: YAML content to save
1116
+ content_hash:
1117
+ type: string
1118
+ description: Content hash from the generate response (for conflict detection)
1119
+
1120
+ SaveResponse:
1121
+ type: object
1122
+ required:
1123
+ - success
1124
+ properties:
1125
+ success:
1126
+ type: boolean
1127
+ description: Whether the save was successful
1128
+ message:
1129
+ type: string
1130
+ description: Success message with file path
1131
+ error:
1132
+ type: string
1133
+ description: Error message (on failure)
1134
+
1135
+ ReloadError:
1136
+ type: object
1137
+ required:
1138
+ - error
1139
+ properties:
1140
+ error:
1141
+ type: string
1142
+ description: Error message
1143
+ path:
1144
+ type: string
1145
+ description: File path where the error occurred
1146
+ line_no:
1147
+ type: integer
1148
+ description: Line number of the error
1149
+ context:
1150
+ type: string
1151
+ description: Surrounding lines for context
1152
+
462
1153
  Error:
463
1154
  type: object
464
1155
  required:
@@ -496,5 +1187,13 @@ tags:
496
1187
  description: Instance operations
497
1188
  - name: Search
498
1189
  description: Search and query operations
1190
+ - name: Graph
1191
+ description: GraphViz DOT graph generation
1192
+ - name: Documentation
1193
+ description: Documentation pages (markdown and auto-generated)
1194
+ - name: Editor
1195
+ description: Resource editor form metadata and YAML generation
1196
+ - name: Operations
1197
+ description: Server management operations
499
1198
  - name: MCP
500
1199
  description: Model Context Protocol for AI assistant integration