jui-tools-mcp-server 2.17.0 → 2.18.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 (33) hide show
  1. package/README.md +2 -2
  2. package/dist/tools/infra/infra_cost.js +65 -2
  3. package/dist/tools/infra/infra_validate.d.ts +0 -5
  4. package/dist/tools/infra/infra_validate.js +41 -4
  5. package/package.json +1 -1
  6. package/scripts/record-infra-fixtures.sh +65 -0
  7. package/src/tools/infra/infra_cost.ts +57 -2
  8. package/src/tools/infra/infra_validate.ts +39 -4
  9. package/tests/fixtures/infra/RECORDED_FROM +1 -1
  10. package/tests/fixtures/infra/answers-without-plan.json +9 -0
  11. package/tests/fixtures/infra/check-infra.json +8 -6
  12. package/tests/fixtures/infra/cost-infra.day.json +2 -2
  13. package/tests/fixtures/infra/cost-infra.month-by-node.json +10 -2
  14. package/tests/fixtures/infra/cost-infra.month.json +21 -4
  15. package/tests/fixtures/infra/cost-infra.plan-bad.json +16 -0
  16. package/tests/fixtures/infra/cost-infra.plan-move-account.json +167 -0
  17. package/tests/fixtures/infra/cost-infra.plan-move.json +174 -0
  18. package/tests/fixtures/infra/cost-infra.plan-none.json +16 -0
  19. package/tests/fixtures/infra/cost-infra.plan-shrink.json +162 -0
  20. package/tests/fixtures/infra/validate-infra-load.errors.json +2 -1
  21. package/tests/fixtures/infra/validate-infra-load.unreadable.json +1 -0
  22. package/tests/fixtures/infra/validate-infra.errors.json +6 -2
  23. package/tests/fixtures/infra/validate-infra.ok.json +1 -1
  24. package/tests/fixtures/infra/validate-infra.plan-both.json +504 -0
  25. package/tests/fixtures/infra/validate-infra.plan-duplicate.json +539 -0
  26. package/tests/fixtures/infra/validate-infra.plan-edge-end.json +539 -0
  27. package/tests/fixtures/infra/validate-infra.plan-half.json +49 -0
  28. package/tests/fixtures/infra/validate-infra.plan-move.json +506 -0
  29. package/tests/fixtures/infra/validate-infra.plan-none.json +49 -0
  30. package/tests/fixtures/infra/validate-infra.plan-order-unknown.json +539 -0
  31. package/tests/fixtures/infra/validate-infra.plan-remove-missing.json +539 -0
  32. package/tests/fixtures/infra/validate-infra.plans.json +506 -0
  33. package/tests/tools_infra.test.ts +208 -0
@@ -0,0 +1,539 @@
1
+ {
2
+ "ok": true,
3
+ "dir": "docs/infra",
4
+ "version": 0,
5
+ "files": [
6
+ "external.json",
7
+ "main.json"
8
+ ],
9
+ "environments": [
10
+ {
11
+ "id": "production",
12
+ "label": "本番",
13
+ "kind": "production"
14
+ },
15
+ {
16
+ "id": "staging",
17
+ "label": "ステージング",
18
+ "kind": "staging"
19
+ }
20
+ ],
21
+ "flows": [],
22
+ "problems": [],
23
+ "icons": {},
24
+ "migrations": [
25
+ {
26
+ "name": "remove-missing",
27
+ "dir": "docs/infra/migrations/remove-missing",
28
+ "steps": [
29
+ {
30
+ "index": 1,
31
+ "node": "worker-prod",
32
+ "kind": "add",
33
+ "edgesRemoved": [],
34
+ "edgesAdded": []
35
+ }
36
+ ],
37
+ "counts": {
38
+ "added": 1,
39
+ "replaced": 0,
40
+ "removed": 0,
41
+ "edgesAdded": 0,
42
+ "edgesRemoved": 0
43
+ },
44
+ "model": {
45
+ "version": 0,
46
+ "files": [
47
+ "external.json",
48
+ "main.json",
49
+ "remove-missing/changes.json"
50
+ ],
51
+ "environments": [
52
+ {
53
+ "id": "production",
54
+ "label": "本番",
55
+ "kind": "production"
56
+ },
57
+ {
58
+ "id": "staging",
59
+ "label": "ステージング",
60
+ "kind": "staging"
61
+ }
62
+ ],
63
+ "groups": [
64
+ {
65
+ "id": "aws-prod",
66
+ "kind": "account",
67
+ "provider": "aws",
68
+ "label": "本番アカウント",
69
+ "environments": [
70
+ "production"
71
+ ],
72
+ "providerResolved": "aws"
73
+ },
74
+ {
75
+ "id": "aws-stg",
76
+ "kind": "account",
77
+ "provider": "aws",
78
+ "label": "ステージングアカウント",
79
+ "environments": [
80
+ "staging"
81
+ ],
82
+ "providerResolved": "aws"
83
+ },
84
+ {
85
+ "id": "apne1-prod",
86
+ "kind": "region",
87
+ "region": "ap-northeast-1",
88
+ "parent": "aws-prod",
89
+ "environments": [
90
+ "production"
91
+ ],
92
+ "label": "apne1-prod",
93
+ "providerResolved": "aws"
94
+ },
95
+ {
96
+ "id": "apne1-stg",
97
+ "kind": "region",
98
+ "region": "ap-northeast-1",
99
+ "parent": "aws-stg",
100
+ "environments": [
101
+ "staging"
102
+ ],
103
+ "label": "apne1-stg",
104
+ "providerResolved": "aws"
105
+ },
106
+ {
107
+ "id": "vpc-prod",
108
+ "kind": "network",
109
+ "parent": "apne1-prod",
110
+ "label": "VPC (2 AZ)",
111
+ "environments": [
112
+ "production"
113
+ ],
114
+ "providerResolved": "aws"
115
+ },
116
+ {
117
+ "id": "vpc-stg",
118
+ "kind": "network",
119
+ "parent": "apne1-stg",
120
+ "label": "VPC (1 AZ)",
121
+ "environments": [
122
+ "staging"
123
+ ],
124
+ "providerResolved": "aws"
125
+ },
126
+ {
127
+ "id": "private-prod",
128
+ "kind": "subnet",
129
+ "parent": "vpc-prod",
130
+ "visibility": "private",
131
+ "environments": [
132
+ "production"
133
+ ],
134
+ "label": "private-prod",
135
+ "providerResolved": "aws"
136
+ },
137
+ {
138
+ "id": "private-stg",
139
+ "kind": "subnet",
140
+ "parent": "vpc-stg",
141
+ "visibility": "private",
142
+ "environments": [
143
+ "staging"
144
+ ],
145
+ "label": "private-stg",
146
+ "providerResolved": "aws"
147
+ }
148
+ ],
149
+ "nodes": [
150
+ {
151
+ "id": "stripe",
152
+ "category": "external.saas",
153
+ "provider": "stripe",
154
+ "label": "Stripe",
155
+ "managed_by": "external",
156
+ "evidence": [
157
+ {
158
+ "file": "backend/app/config.py",
159
+ "pattern": "stripe_"
160
+ }
161
+ ],
162
+ "count": 1,
163
+ "providerResolved": "stripe",
164
+ "regionResolved": "",
165
+ "fold": false,
166
+ "environments": [
167
+ "production",
168
+ "staging"
169
+ ]
170
+ },
171
+ {
172
+ "id": "mailer",
173
+ "category": "mail",
174
+ "provider": "sendgrid",
175
+ "label": "メール配信",
176
+ "managed_by": "external",
177
+ "count": 1,
178
+ "providerResolved": "sendgrid",
179
+ "regionResolved": "",
180
+ "fold": false,
181
+ "environments": [
182
+ "production",
183
+ "staging"
184
+ ]
185
+ },
186
+ {
187
+ "id": "cdn",
188
+ "category": "edge.cdn",
189
+ "service": "cloudfront",
190
+ "provider": "aws",
191
+ "label": "CloudFront",
192
+ "count": 1,
193
+ "providerResolved": "aws",
194
+ "regionResolved": "",
195
+ "managed_by": "iac",
196
+ "fold": false,
197
+ "environments": [
198
+ "production",
199
+ "staging"
200
+ ]
201
+ },
202
+ {
203
+ "id": "alb-prod",
204
+ "category": "load_balancer",
205
+ "service": "elb.alb",
206
+ "group": "vpc-prod",
207
+ "environments": [
208
+ "production"
209
+ ],
210
+ "label": "alb-prod",
211
+ "count": 1,
212
+ "providerResolved": "aws",
213
+ "regionResolved": "ap-northeast-1",
214
+ "managed_by": "iac",
215
+ "fold": false
216
+ },
217
+ {
218
+ "id": "alb-stg",
219
+ "category": "load_balancer",
220
+ "service": "elb.alb",
221
+ "group": "vpc-stg",
222
+ "environments": [
223
+ "staging"
224
+ ],
225
+ "label": "alb-stg",
226
+ "count": 1,
227
+ "providerResolved": "aws",
228
+ "regionResolved": "ap-northeast-1",
229
+ "managed_by": "iac",
230
+ "fold": false
231
+ },
232
+ {
233
+ "id": "api-prod",
234
+ "category": "compute.container",
235
+ "service": "ecs.fargate",
236
+ "group": "private-prod",
237
+ "count": 3,
238
+ "app": "backend",
239
+ "iac": [
240
+ "module.api.aws_ecs_service.this"
241
+ ],
242
+ "environments": [
243
+ "production"
244
+ ],
245
+ "spec": [
246
+ {
247
+ "key": "cpu",
248
+ "value": "1024"
249
+ },
250
+ {
251
+ "key": "memory",
252
+ "value": "2048"
253
+ },
254
+ {
255
+ "key": "tasks",
256
+ "value": "3"
257
+ }
258
+ ],
259
+ "label": "api-prod",
260
+ "providerResolved": "aws",
261
+ "regionResolved": "ap-northeast-1",
262
+ "managed_by": "iac",
263
+ "fold": false
264
+ },
265
+ {
266
+ "id": "api-stg",
267
+ "category": "compute.container",
268
+ "service": "ecs.fargate",
269
+ "group": "private-stg",
270
+ "app": "backend",
271
+ "environments": [
272
+ "staging"
273
+ ],
274
+ "label": "api-stg",
275
+ "count": 1,
276
+ "providerResolved": "aws",
277
+ "regionResolved": "ap-northeast-1",
278
+ "managed_by": "iac",
279
+ "fold": false
280
+ },
281
+ {
282
+ "id": "db-prod",
283
+ "category": "database.relational",
284
+ "service": "rds.mysql",
285
+ "group": "private-prod",
286
+ "engine": "mysql 8.4",
287
+ "ha": "multi-az",
288
+ "data_doc": "docs/db",
289
+ "environments": [
290
+ "production"
291
+ ],
292
+ "spec": [
293
+ {
294
+ "key": "instance_class",
295
+ "value": "db.r6g.large"
296
+ },
297
+ {
298
+ "key": "storage_gb",
299
+ "value": "200"
300
+ },
301
+ {
302
+ "key": "multi_az",
303
+ "value": "true"
304
+ }
305
+ ],
306
+ "label": "db-prod",
307
+ "count": 1,
308
+ "providerResolved": "aws",
309
+ "regionResolved": "ap-northeast-1",
310
+ "managed_by": "iac",
311
+ "fold": false
312
+ },
313
+ {
314
+ "id": "db-stg",
315
+ "category": "database.relational",
316
+ "service": "rds.mysql",
317
+ "group": "private-stg",
318
+ "engine": "mysql 8.4",
319
+ "data_doc": "docs/db",
320
+ "environments": [
321
+ "staging"
322
+ ],
323
+ "label": "db-stg",
324
+ "count": 1,
325
+ "providerResolved": "aws",
326
+ "regionResolved": "ap-northeast-1",
327
+ "managed_by": "iac",
328
+ "fold": false
329
+ },
330
+ {
331
+ "id": "assets",
332
+ "category": "storage.object",
333
+ "service": "s3",
334
+ "provider": "aws",
335
+ "region": "ap-northeast-1",
336
+ "label": "アセットのバケツ",
337
+ "count": 1,
338
+ "providerResolved": "aws",
339
+ "regionResolved": "ap-northeast-1",
340
+ "managed_by": "iac",
341
+ "fold": false,
342
+ "environments": [
343
+ "production",
344
+ "staging"
345
+ ]
346
+ },
347
+ {
348
+ "id": "api-role",
349
+ "category": "security.iam",
350
+ "service": "iam.role",
351
+ "provider": "aws",
352
+ "label": "API の実行ロール",
353
+ "count": 1,
354
+ "providerResolved": "aws",
355
+ "regionResolved": "",
356
+ "managed_by": "iac",
357
+ "fold": true,
358
+ "environments": [
359
+ "production",
360
+ "staging"
361
+ ]
362
+ },
363
+ {
364
+ "id": "api-5xx",
365
+ "category": "monitoring.alarm",
366
+ "service": "cloudwatch.alarm",
367
+ "provider": "aws",
368
+ "label": "API の 5xx",
369
+ "environments": [
370
+ "production"
371
+ ],
372
+ "count": 1,
373
+ "providerResolved": "aws",
374
+ "regionResolved": "",
375
+ "managed_by": "iac",
376
+ "fold": true
377
+ },
378
+ {
379
+ "id": "worker-prod",
380
+ "category": "compute.container",
381
+ "service": "ecs.fargate",
382
+ "group": "private-prod",
383
+ "count": 1,
384
+ "environments": [
385
+ "production"
386
+ ],
387
+ "spec": [
388
+ {
389
+ "key": "cpu",
390
+ "value": "512"
391
+ },
392
+ {
393
+ "key": "memory",
394
+ "value": "1024"
395
+ },
396
+ {
397
+ "key": "tasks",
398
+ "value": "1"
399
+ }
400
+ ],
401
+ "label": "worker-prod",
402
+ "providerResolved": "aws",
403
+ "regionResolved": "ap-northeast-1",
404
+ "managed_by": "iac",
405
+ "fold": false
406
+ }
407
+ ],
408
+ "edges": [
409
+ {
410
+ "from": "api-prod",
411
+ "to": "stripe",
412
+ "protocol": "https",
413
+ "direction": "out",
414
+ "environments": [
415
+ "production"
416
+ ],
417
+ "crossProvider": true
418
+ },
419
+ {
420
+ "from": "api-prod",
421
+ "to": "mailer",
422
+ "protocol": "https",
423
+ "direction": "out",
424
+ "environments": [
425
+ "production"
426
+ ],
427
+ "crossProvider": true
428
+ },
429
+ {
430
+ "from": "api-stg",
431
+ "to": "stripe",
432
+ "protocol": "https",
433
+ "label": "テストモード",
434
+ "environments": [
435
+ "staging"
436
+ ],
437
+ "direction": "out",
438
+ "crossProvider": true
439
+ },
440
+ {
441
+ "from": "cdn",
442
+ "to": "alb-prod",
443
+ "protocol": "https",
444
+ "port": 443,
445
+ "environments": [
446
+ "production"
447
+ ],
448
+ "direction": "out",
449
+ "crossProvider": false
450
+ },
451
+ {
452
+ "from": "cdn",
453
+ "to": "alb-stg",
454
+ "protocol": "https",
455
+ "port": 443,
456
+ "environments": [
457
+ "staging"
458
+ ],
459
+ "direction": "out",
460
+ "crossProvider": false
461
+ },
462
+ {
463
+ "from": "alb-prod",
464
+ "to": "api-prod",
465
+ "protocol": "http",
466
+ "port": 8000,
467
+ "direction": "out",
468
+ "environments": [
469
+ "production"
470
+ ],
471
+ "crossProvider": false
472
+ },
473
+ {
474
+ "from": "alb-stg",
475
+ "to": "api-stg",
476
+ "protocol": "http",
477
+ "port": 8000,
478
+ "direction": "out",
479
+ "environments": [
480
+ "staging"
481
+ ],
482
+ "crossProvider": false
483
+ },
484
+ {
485
+ "from": "api-prod",
486
+ "to": "db-prod",
487
+ "protocol": "mysql",
488
+ "port": 3306,
489
+ "direction": "out",
490
+ "environments": [
491
+ "production"
492
+ ],
493
+ "crossProvider": false
494
+ },
495
+ {
496
+ "from": "api-stg",
497
+ "to": "db-stg",
498
+ "protocol": "mysql",
499
+ "port": 3306,
500
+ "direction": "out",
501
+ "environments": [
502
+ "staging"
503
+ ],
504
+ "crossProvider": false
505
+ },
506
+ {
507
+ "from": "cdn",
508
+ "to": "assets",
509
+ "protocol": "https",
510
+ "direction": "out",
511
+ "environments": [
512
+ "production",
513
+ "staging"
514
+ ],
515
+ "crossProvider": false
516
+ }
517
+ ],
518
+ "flows": []
519
+ },
520
+ "problems": [
521
+ {
522
+ "file": "remove-missing/removals.json",
523
+ "path": "/nodes/0",
524
+ "code": "migration.remove_missing",
525
+ "message": "node 'nope' is not in the old model: nothing to remove",
526
+ "severity": "error",
527
+ "short": "docs/infra/migrations/remove-missing/removals.json: /nodes/0 で消すものが、旧の構成にありません(migration.remove_missing)"
528
+ }
529
+ ],
530
+ "ok": false
531
+ }
532
+ ],
533
+ "readMs": 6,
534
+ "counts": {
535
+ "groups": 8,
536
+ "nodes": 12,
537
+ "edges": 10
538
+ }
539
+ }