@meshxdata/fops 0.1.52 → 0.1.53

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 (86) hide show
  1. package/CHANGELOG.md +372 -0
  2. package/package.json +2 -6
  3. package/src/agent/agent.js +6 -0
  4. package/src/commands/setup.js +34 -0
  5. package/src/fleet-registry.js +38 -2
  6. package/src/plugins/__test-fixtures__/fake-plugin.js +2 -0
  7. package/src/plugins/__test-fixtures__/no-register-plugin.js +2 -0
  8. package/src/plugins/__test-fixtures__/with-register/index.js +2 -0
  9. package/src/plugins/__test-fixtures__/without-register/index.js +2 -0
  10. package/src/plugins/api.js +4 -0
  11. package/src/plugins/builtins/docker-compose.js +59 -0
  12. package/src/plugins/bundled/fops-plugin-azure/index.js +4 -0
  13. package/src/plugins/bundled/fops-plugin-azure/lib/azure-aks-core.js +44 -53
  14. package/src/plugins/bundled/fops-plugin-azure/lib/azure-aks-storage.js +2 -2
  15. package/src/plugins/bundled/fops-plugin-azure/lib/azure-cost.js +52 -22
  16. package/src/plugins/bundled/fops-plugin-azure/lib/azure-helpers.js +6 -2
  17. package/src/plugins/bundled/fops-plugin-azure/lib/azure-ops.js +113 -7
  18. package/src/plugins/bundled/fops-plugin-azure/lib/azure-provision-init.js +13 -4
  19. package/src/plugins/bundled/fops-plugin-azure/lib/azure-provision.js +91 -14
  20. package/src/plugins/bundled/fops-plugin-azure/lib/azure-service.js +507 -0
  21. package/src/plugins/bundled/fops-plugin-azure/lib/azure-sync.js +146 -7
  22. package/src/plugins/bundled/fops-plugin-azure/lib/azure.js +1 -1
  23. package/src/plugins/bundled/fops-plugin-azure/lib/commands/vm-cmds.js +61 -0
  24. package/src/plugins/bundled/fops-plugin-cloud/api.js +712 -0
  25. package/src/plugins/bundled/fops-plugin-cloud/fops.plugin.json +6 -0
  26. package/src/plugins/bundled/fops-plugin-cloud/index.js +208 -0
  27. package/src/plugins/bundled/fops-plugin-cloud/lib/azure-provider.js +81 -0
  28. package/src/plugins/bundled/fops-plugin-cloud/lib/provider.js +50 -0
  29. package/src/plugins/bundled/fops-plugin-cloud/ui/dist/assets/favicon-C49brna2.svg +15 -0
  30. package/src/plugins/bundled/fops-plugin-cloud/ui/dist/assets/index-CVqQ_kKW.js +65 -0
  31. package/src/plugins/bundled/fops-plugin-cloud/ui/dist/assets/index-DZetahP3.css +1 -0
  32. package/src/plugins/bundled/fops-plugin-cloud/ui/dist/index.html +28 -0
  33. package/src/plugins/bundled/fops-plugin-cloud/ui/index.html +27 -0
  34. package/src/plugins/bundled/fops-plugin-cloud/ui/package-lock.json +2634 -0
  35. package/src/plugins/bundled/fops-plugin-cloud/ui/package.json +29 -0
  36. package/src/plugins/bundled/fops-plugin-cloud/ui/postcss.config.cjs +5 -0
  37. package/src/plugins/bundled/fops-plugin-cloud/ui/src/App.jsx +32 -0
  38. package/src/plugins/bundled/fops-plugin-cloud/ui/src/api/client.js +114 -0
  39. package/src/plugins/bundled/fops-plugin-cloud/ui/src/api/queries.js +111 -0
  40. package/src/plugins/bundled/fops-plugin-cloud/ui/src/components/LogPanel.jsx +162 -0
  41. package/src/plugins/bundled/fops-plugin-cloud/ui/src/components/ThemeToggle.jsx +46 -0
  42. package/src/plugins/bundled/fops-plugin-cloud/ui/src/css/additional-styles/utility-patterns.css +147 -0
  43. package/src/plugins/bundled/fops-plugin-cloud/ui/src/css/style.css +138 -0
  44. package/src/plugins/bundled/fops-plugin-cloud/ui/src/favicon.svg +15 -0
  45. package/src/plugins/bundled/fops-plugin-cloud/ui/src/lib/utils.ts +19 -0
  46. package/src/plugins/bundled/fops-plugin-cloud/ui/src/main.jsx +25 -0
  47. package/src/plugins/bundled/fops-plugin-cloud/ui/src/pages/Audit.jsx +164 -0
  48. package/src/plugins/bundled/fops-plugin-cloud/ui/src/pages/Costs.jsx +305 -0
  49. package/src/plugins/bundled/fops-plugin-cloud/ui/src/pages/CreateResource.jsx +285 -0
  50. package/src/plugins/bundled/fops-plugin-cloud/ui/src/pages/Fleet.jsx +307 -0
  51. package/src/plugins/bundled/fops-plugin-cloud/ui/src/pages/Resources.jsx +229 -0
  52. package/src/plugins/bundled/fops-plugin-cloud/ui/src/partials/Header.jsx +132 -0
  53. package/src/plugins/bundled/fops-plugin-cloud/ui/src/partials/Sidebar.jsx +174 -0
  54. package/src/plugins/bundled/fops-plugin-cloud/ui/src/partials/SidebarLinkGroup.jsx +21 -0
  55. package/src/plugins/bundled/fops-plugin-cloud/ui/src/utils/AuthContext.jsx +170 -0
  56. package/src/plugins/bundled/fops-plugin-cloud/ui/src/utils/Info.jsx +49 -0
  57. package/src/plugins/bundled/fops-plugin-cloud/ui/src/utils/ThemeContext.jsx +37 -0
  58. package/src/plugins/bundled/fops-plugin-cloud/ui/src/utils/Transition.jsx +116 -0
  59. package/src/plugins/bundled/fops-plugin-cloud/ui/src/utils/Utils.js +63 -0
  60. package/src/plugins/bundled/fops-plugin-cloud/ui/vite.config.js +23 -0
  61. package/src/plugins/bundled/fops-plugin-foundation/test-helpers.js +65 -0
  62. package/src/plugins/loader.js +34 -1
  63. package/src/plugins/registry.js +15 -0
  64. package/src/plugins/schemas.js +17 -0
  65. package/src/project.js +1 -1
  66. package/src/serve.js +196 -2
  67. package/src/shell.js +21 -1
  68. package/src/web/admin.html.js +236 -0
  69. package/src/web/api.js +73 -0
  70. package/src/web/dist/assets/index-BphVaAUd.css +1 -0
  71. package/src/web/dist/assets/index-CSckLzuG.js +129 -0
  72. package/src/web/dist/index.html +2 -2
  73. package/src/web/frontend/index.html +16 -0
  74. package/src/web/frontend/src/App.jsx +445 -0
  75. package/src/web/frontend/src/components/ChatView.jsx +910 -0
  76. package/src/web/frontend/src/components/InputBox.jsx +523 -0
  77. package/src/web/frontend/src/components/Sidebar.jsx +410 -0
  78. package/src/web/frontend/src/components/StatusBar.jsx +37 -0
  79. package/src/web/frontend/src/components/TabBar.jsx +87 -0
  80. package/src/web/frontend/src/hooks/useWebSocket.js +412 -0
  81. package/src/web/frontend/src/index.css +78 -0
  82. package/src/web/frontend/src/main.jsx +6 -0
  83. package/src/web/frontend/vite.config.js +21 -0
  84. package/src/web/server.js +64 -1
  85. package/src/web/dist/assets/index-NXC8Hvnp.css +0 -1
  86. package/src/web/dist/assets/index-QH1N4ejK.js +0 -112
package/CHANGELOG.md CHANGED
@@ -1,3 +1,375 @@
1
+ ## [0.1.45] - 2026-03-12
2
+
3
+ - bump fops to 0.1.44 (8c0ef5d)
4
+ - Mlflow and azure plugin fix (176881f)
5
+ - fix lifecycle (a2cb9e7)
6
+ - callback url for localhost (821fb94)
7
+ - disable 4 scaffolding plugin by default. (bfb2b76)
8
+ - jaccard improvements (b7494a0)
9
+ - refactor azure plugin (68dfef4)
10
+ - refactor azure plugin (b24a008)
11
+ - fix trino catalog missing (4928a55)
12
+ - v36 bump and changelog generation on openai (37a0440)
13
+ - v36 bump and changelog generation on openai (a3b02d9)
14
+ - bump (a990058)
15
+ - status bar fix and new plugin for ttyd (27dde1e)
16
+ - file demo and tray (1a3e704)
17
+ - electron app (59ad0bb)
18
+ - compose and fops file plugin (1cf0e81)
19
+ - bump (346ffc1)
20
+ - localhost replaced by 127.0.0.1 (82b9f30)
21
+ - .29 (587b0e1)
22
+ - improve up down and bootstrap script (b79ebaf)
23
+ - checksum (22c8086)
24
+ - checksum (96b434f)
25
+ - checksum (15ed3c0)
26
+ - checksum (8a6543a)
27
+ - bump embed trino linksg (8440504)
28
+ - bump data (765ffd9)
29
+ - bump (cb8b232)
30
+ - broken tests (c532229)
31
+ - release 0.1.18, preflight checks (d902249)
32
+ - fix compute display bug (d10f5d9)
33
+ - cleanup packer files (6330f18)
34
+ - plan mode (cb36a8a)
35
+ - bump to 0.1.16 - agent ui (41ac1a2)
36
+ - bump to 0.1.15 - agent ui (4ebe2e1)
37
+ - bump to 0.1.14 (6c3a7fa)
38
+ - bump to 0.1.13 (8db570f)
39
+ - release 0.1.12 (c1c79e5)
40
+ - bump (11aa3b0)
41
+ - git keep and bump tui (be1678e)
42
+ - skills, index, rrf, compacted context (100k > 10k) (7b2fffd)
43
+ - cloudflare and token consumption, graphs indexing (0ad9eec)
44
+ - bump storage default (22c83ba)
45
+ - storage fix (68a22a0)
46
+ - skills update (7f56500)
47
+ - v9 bump (3864446)
48
+ - bump (c95eedc)
49
+ - rrf (dbf8c95)
50
+ - feat: warning when running predictions (95e8c52)
51
+ - feat: support for local predictions (45cf26b)
52
+ - feat: wip support for predictions + mlflow (3457052)
53
+ - add Reciprocal Rank Fusion (RRF) to knowledge and skill retrieval (61549bc)
54
+ - validate CSV headers in compute_run readiness check (a8c7a43)
55
+ - fix corrupted Iceberg metadata: probe tables + force cleanup on re-apply (50578af)
56
+ - enforce: never use foundation_apply to fix broken products (2e049bf)
57
+ - update SKILL.md with complete tool reference for knowledge retrieval (30b1924)
58
+ - add storage read, input DP table probe, and compute_run improvements (34e6c4c)
59
+ - skills update (1220385)
60
+ - skills update (bb66958)
61
+ - some tui improvement andd tools apply overwrite (e90c35c)
62
+ - skills update (e9227a1)
63
+ - skills update (669c4b3)
64
+ - fix plugin pre-flight checks (f741743)
65
+ - increase agent context (6479aaa)
66
+ - skills and init sql fixes (5fce35e)
67
+ - checksum (3518b56)
68
+ - penging job limit (a139861)
69
+ - checksum (575d28c)
70
+ - bump (92049ba)
71
+ - fix bug per tab status (0a33657)
72
+ - fix bug per tab status (50457c6)
73
+ - checksumming (0ad842e)
74
+ - shot af mardkwon overlapping (51f63b9)
75
+ - add spark dockerfile for multiarch builds (95abbd1)
76
+ - fix plugin initialization (16b9782)
77
+ - split index.js (50902a2)
78
+ - cloudflare cidr (cc4e021)
79
+ - cloduflare restrictions (2f6ba2d)
80
+ - sequential start (86b496e)
81
+ - sequential start (4930fe1)
82
+ - sequential start (353f014)
83
+ - qa tests (2dc6a1a)
84
+ - bump sha for .85 (dc2edfe)
85
+ - preserve env on sudo (7831227)
86
+ - bump sha for .84 (6c052f9)
87
+ - non interactive for azure vms (0aa8a2f)
88
+ - keep .env if present (d072450)
89
+ - bump (7a8e732)
90
+ - ensure opa is on compose if not set (f4a5228)
91
+ - checksum bump (a2ccc20)
92
+ - netrc defensive checks (a0b0ccc)
93
+ - netrc defensive checks (ae37403)
94
+ - checksum (ec45d11)
95
+ - update sync and fix up (7f9af72)
96
+ - expand test for azure and add new per app tag support (388a168)
97
+ - checksum on update (44005fc)
98
+ - cleanup for later (15e5313)
99
+ - cleanup for later (11c9597)
100
+ - switch branch feature (822fecc)
101
+ - add pull (d1c19ab)
102
+ - Bump hono from 4.11.9 to 4.12.0 in /operator-cli (ad25144)
103
+ - tests (f180a9a)
104
+ - cleanup (39c49a3)
105
+ - registry (7b7126a)
106
+ - reconcile kafka (832d0db)
107
+ - gh login bug (025886c)
108
+ - cleanup (bb96cab)
109
+ - strip envs from process (2421180)
110
+ - force use of gh creds not tokens in envs var (fff7787)
111
+ - resolve import between npm installs and npm link (79522e1)
112
+ - fix gh scope and azure states (afd846c)
113
+ - refactoring (da50352)
114
+ - split fops repo (d447638)
115
+ - aks (b791f8f)
116
+ - refactor azure (67d3bad)
117
+ - wildcard (391f023)
118
+ - azure plugin (c074074)
119
+ - zap (d7e6e7f)
120
+ - fix knock (cf89c05)
121
+ - azure (4adec98)
122
+ - Bump tar from 7.5.7 to 7.5.9 in /operator-cli (e41e98e)
123
+ - azure stack index.js split (de12272)
124
+ - Bump ajv from 8.17.1 to 8.18.0 in /operator-cli (76da21f)
125
+ - packer (9665fbc)
126
+ - remove stack api (db0fd4d)
127
+ - packer cleanup (fe1bf14)
128
+ - force refresh token (3a3d7e2)
129
+ - provision shell (2ad505f)
130
+ - azure vm management (91dcb31)
131
+ - azure specific (2b0cca8)
132
+ - azure packer (12175b8)
133
+ - init hashed pwd (db8523c)
134
+ - packer (5b5c7c4)
135
+ - doctor for azure vm (ed524fa)
136
+ - packer and 1pwd (c6d053e)
137
+ - split big index.js (dc85a1b)
138
+ - kafka volume update (21815ec)
139
+ - fix openai azure tools confirmation and flow (0118cd1)
140
+ - nighly fixx, test fix (5e0d04f)
141
+ - open ai training (cdc494a)
142
+ - openai integration in azure (1ca1475)
143
+ - ci (672cea9)
144
+ - refresh ghcr creds (4220c48)
145
+ - cleaned up version (1a0074f)
146
+ - traefik on ghcr and templates (8e31a05)
147
+ - apply fcl (e78911f)
148
+ - demo landscape (dd205fe)
149
+ - smarter login and schema (1af514f)
150
+ - no down before up unless something broke (56b1132)
151
+ - dai, reconcile failed containers (12907fa)
152
+ - reconcile dead container (7da75e4)
153
+ - defensive around storage buckets dir (b98871d)
154
+ - defensive around storage buckets dir (e86e132)
155
+ - gear in for multiarch (bf3fa3e)
156
+ - up autofix (99c7f89)
157
+ - autofix stale containers on up (43c7d0f)
158
+ - shared sessions fix (5de1359)
159
+ - share sessions between ui and tui (8321391)
160
+ - fix chat view display details (e263996)
161
+ - fix chat view display details (9babdda)
162
+ - tui up fixes (86e9f17)
163
+ - fix commands init (442538b)
164
+ - enable k3s profile (b2dcfc8)
165
+ - test up till job creation (656d388)
166
+ - tui fixes (0599779)
167
+ - cleanup (27731f0)
168
+ - train (90bf559)
169
+ - training (f809bf6)
170
+ - training (ba2b836)
171
+ - training (6fc5267)
172
+ - training (4af8ac9)
173
+ - fix build script (bd82836)
174
+ - infra test (5b79815)
175
+ - infra test (3a0ac05)
176
+ - infra test (e5c67b5)
177
+ - tests (ae7b621)
178
+ - tests (c09ae6a)
179
+ - update tui (4784153)
180
+ - training (0a5a330)
181
+ - tui (df4dd4a)
182
+ - pkg builds (4dc9993)
183
+ - also source env for creds (9a17d8f)
184
+ - fcl support (e8a5743)
185
+
186
+ # Changelog
187
+
188
+ All notable changes to @meshxdata/fops (Foundation Operator CLI) are documented here.
189
+
190
+ ## [0.1.53] - 2026-03-25
191
+
192
+ - cluster discovery (009257d)
193
+ - feat(storage): add loki container to provisioning (898c544)
194
+ - feat(azure): add ping command to check backend health (8336825)
195
+ - operator cli bump 0.1.52 (f052cb5)
196
+ - fix(doctor): set KUBECONFIG for k3s kubectl commands (db9359b)
197
+ - fix(azure): move --landscape to test run command, not separate subcommand (4b9b089)
198
+ - feat(azure): add test integration command with landscape support (b2990a0)
199
+ - fix(fleet): skip VMs without public IPs in fleet exec (39acbaa)
200
+ - feat(azure): detect and fix External Secrets identity issues (f907d11)
201
+ - operator cli bump 0.1.51 (db55bdc)
202
+ - feat: add postgres-exporter and Azure tray menu improvements (2a337ac)
203
+ - operator cli plugin fix (4dae908)
204
+ - operator cli plugin fix (25620cc)
205
+ - operator cli test fixes (1d1c18f)
206
+ - feat(test): add setup-users command for QA test user creation (b929507)
207
+ - feat(aks): show HA standby clusters with visual grouping (8fb640c)
208
+ - refactor(provision): extract VM provisioning to dedicated module (af321a7)
209
+ - refactor(provision): extract post-start health checks to dedicated module (6ed5f2d)
210
+ - fix: ping timeout 15s, fix prometheus sed escaping (d11ac14)
211
+ - refactor(vm): extract terraform HCL generation to dedicated module (896a64b)
212
+ - refactor(keyvault): extract key operations to dedicated module (716bbe4)
213
+ - refactor(azure): extract swarm functions to azure-fleet-swarm.js (4690e34)
214
+ - refactor(azure): extract SSH/remote functions to azure-ops-ssh.js (e62b8f0)
215
+ - refactor(azure): split azure-ops.js into smaller modules (4515425)
216
+ - feat(aks): add --ha flag for full cross-region HA setup (ece68c5)
217
+ - feat(fops): inject ENVIRONMENT_NAME on VM provisioning (6ef2a27)
218
+ - fix(postgres): disable SSL mode to fix connection issues (c789ae9)
219
+ - feat(trino): add caching configuration for docker-compose (3668224)
220
+ - fix(fops-azure): run pytest directly instead of missing scripts (29f8410)
221
+ - add -d detach option for local frontend dev, remove hive cpu limits (3306667)
222
+ - release 0.1.49 (dcca32b)
223
+ - release 0.1.48 (9b195e5)
224
+ - stash on updates (2916c01)
225
+ - stash on updates (b5c14df)
226
+ - stash on updates (d0453d1)
227
+ - frontend dev fixes (0ca7b00)
228
+ - fix: update azure test commands (77c81da)
229
+ - default locust to CLI mode, add --web for UI (ca35bff)
230
+ - add locust command for load testing AKS clusters (1278722)
231
+ - update spot node pool default autoscaling to 1-20 (617c182)
232
+ - module for aks (3dd1a61)
233
+ - add hive to PG_SERVICE_DBS for fops pg-setup (afccb16)
234
+ - feat(azure): enhance aks doctor with ExternalSecrets and PGSSLMODE checks (8b14861)
235
+ - add foundation-postgres ExternalName service to reconciler (ea88e11)
236
+ - new flux templates (0e2e372)
237
+ - feat(azure): add storage-engine secrets to Key Vault (a4f488e)
238
+ - feat(azure-aks): add AUTH0_DOMAIN to template rendering variables (216c37e)
239
+ - feat(azure): add storage account creation per cluster (aa1b138)
240
+ - bump watcher (ab24473)
241
+ - fix: concurrent compute calls (#66) (03e2edf)
242
+ - bump backend version (5058ff5)
243
+ - bump fops to 0.1.44 (8c0ef5d)
244
+ - Mlflow and azure plugin fix (176881f)
245
+ - fix lifecycle (a2cb9e7)
246
+ - callback url for localhost (821fb94)
247
+ - disable 4 scaffolding plugin by default. (bfb2b76)
248
+ - jaccard improvements (b7494a0)
249
+ - refactor azure plugin (68dfef4)
250
+ - refactor azure plugin (b24a008)
251
+ - fix trino catalog missing (4928a55)
252
+ - v36 bump and changelog generation on openai (37a0440)
253
+ - v36 bump and changelog generation on openai (a3b02d9)
254
+ - bump (a990058)
255
+ - status bar fix and new plugin for ttyd (27dde1e)
256
+ - file demo and tray (1a3e704)
257
+ - electron app (59ad0bb)
258
+ - compose and fops file plugin (1cf0e81)
259
+ - bump (346ffc1)
260
+ - localhost replaced by 127.0.0.1 (82b9f30)
261
+ - .29 (587b0e1)
262
+ - improve up down and bootstrap script (b79ebaf)
263
+ - checksum (22c8086)
264
+ - checksum (96b434f)
265
+ - checksum (15ed3c0)
266
+ - checksum (8a6543a)
267
+ - bump embed trino linksg (8440504)
268
+ - bump data (765ffd9)
269
+ - bump (cb8b232)
270
+ - broken tests (c532229)
271
+ - release 0.1.18, preflight checks (d902249)
272
+ - fix compute display bug (d10f5d9)
273
+ - cleanup packer files (6330f18)
274
+ - plan mode (cb36a8a)
275
+ - bump to 0.1.16 - agent ui (41ac1a2)
276
+ - bump to 0.1.15 - agent ui (4ebe2e1)
277
+ - bump to 0.1.14 (6c3a7fa)
278
+ - bump to 0.1.13 (8db570f)
279
+ - release 0.1.12 (c1c79e5)
280
+ - bump (11aa3b0)
281
+ - git keep and bump tui (be1678e)
282
+ - skills, index, rrf, compacted context (100k > 10k) (7b2fffd)
283
+ - cloudflare and token consumption, graphs indexing (0ad9eec)
284
+ - bump storage default (22c83ba)
285
+ - storage fix (68a22a0)
286
+ - skills update (7f56500)
287
+ - v9 bump (3864446)
288
+ - bump (c95eedc)
289
+ - rrf (dbf8c95)
290
+ - feat: warning when running predictions (95e8c52)
291
+ - feat: support for local predictions (45cf26b)
292
+ - feat: wip support for predictions + mlflow (3457052)
293
+ - add Reciprocal Rank Fusion (RRF) to knowledge and skill retrieval (61549bc)
294
+ - validate CSV headers in compute_run readiness check (a8c7a43)
295
+ - fix corrupted Iceberg metadata: probe tables + force cleanup on re-apply (50578af)
296
+ - enforce: never use foundation_apply to fix broken products (2e049bf)
297
+ - update SKILL.md with complete tool reference for knowledge retrieval (30b1924)
298
+ - add storage read, input DP table probe, and compute_run improvements (34e6c4c)
299
+ - skills update (1220385)
300
+ - skills update (bb66958)
301
+ - some tui improvement andd tools apply overwrite (e90c35c)
302
+ - skills update (e9227a1)
303
+ - skills update (669c4b3)
304
+ - fix plugin pre-flight checks (f741743)
305
+ - increase agent context (6479aaa)
306
+ - skills and init sql fixes (5fce35e)
307
+ - checksum (3518b56)
308
+ - penging job limit (a139861)
309
+ - checksum (575d28c)
310
+ - bump (92049ba)
311
+ - fix bug per tab status (0a33657)
312
+ - fix bug per tab status (50457c6)
313
+ - checksumming (0ad842e)
314
+ - shot af mardkwon overlapping (51f63b9)
315
+ - add spark dockerfile for multiarch builds (95abbd1)
316
+ - fix plugin initialization (16b9782)
317
+ - split index.js (50902a2)
318
+ - cloudflare cidr (cc4e021)
319
+ - cloduflare restrictions (2f6ba2d)
320
+ - sequential start (86b496e)
321
+ - sequential start (4930fe1)
322
+ - sequential start (353f014)
323
+ - qa tests (2dc6a1a)
324
+ - bump sha for .85 (dc2edfe)
325
+ - preserve env on sudo (7831227)
326
+ - bump sha for .84 (6c052f9)
327
+ - non interactive for azure vms (0aa8a2f)
328
+ - keep .env if present (d072450)
329
+ - bump (7a8e732)
330
+ - ensure opa is on compose if not set (f4a5228)
331
+ - checksum bump (a2ccc20)
332
+ - netrc defensive checks (a0b0ccc)
333
+ - netrc defensive checks (ae37403)
334
+ - checksum (ec45d11)
335
+ - update sync and fix up (7f9af72)
336
+ - expand test for azure and add new per app tag support (388a168)
337
+ - checksum on update (44005fc)
338
+ - cleanup for later (15e5313)
339
+ - cleanup for later (11c9597)
340
+ - switch branch feature (822fecc)
341
+ - add pull (d1c19ab)
342
+ - Bump hono from 4.11.9 to 4.12.0 in /operator-cli (ad25144)
343
+ - tests (f180a9a)
344
+ - cleanup (39c49a3)
345
+ - registry (7b7126a)
346
+ - reconcile kafka (832d0db)
347
+ - gh login bug (025886c)
348
+ - cleanup (bb96cab)
349
+ - strip envs from process (2421180)
350
+ - force use of gh creds not tokens in envs var (fff7787)
351
+ - resolve import between npm installs and npm link (79522e1)
352
+ - fix gh scope and azure states (afd846c)
353
+ - refactoring (da50352)
354
+ - split fops repo (d447638)
355
+ - aks (b791f8f)
356
+ - refactor azure (67d3bad)
357
+ - wildcard (391f023)
358
+ - azure plugin (c074074)
359
+ - zap (d7e6e7f)
360
+ - fix knock (cf89c05)
361
+ - azure (4adec98)
362
+ - Bump tar from 7.5.7 to 7.5.9 in /operator-cli (e41e98e)
363
+ - azure stack index.js split (de12272)
364
+ - Bump ajv from 8.17.1 to 8.18.0 in /operator-cli (76da21f)
365
+ - packer (9665fbc)
366
+ - remove stack api (db0fd4d)
367
+ - packer cleanup (fe1bf14)
368
+ - force refresh token (3a3d7e2)
369
+ - provision shell (2ad505f)
370
+ - azure vm management (91dcb31)
371
+ - azure specific (2b0cca8)
372
+
1
373
  ## [0.1.52] - 2026-03-24
2
374
 
3
375
  - fix(doctor): set KUBECONFIG for k3s kubectl commands (db9359b)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@meshxdata/fops",
3
- "version": "0.1.52",
3
+ "version": "0.1.53",
4
4
  "description": "CLI to install and manage data mesh platforms",
5
5
  "keywords": [
6
6
  "fops",
@@ -17,11 +17,7 @@
17
17
  "fops.mjs",
18
18
  "src/",
19
19
  "!src/**/*.test.js",
20
- "!src/**/__test-fixtures__/",
21
- "!src/**/test-helpers.js",
22
- "!src/web/frontend/src/",
23
- "!src/web/frontend/vite.config.js",
24
- "!src/web/frontend/index.html",
20
+ "!src/**/node_modules",
25
21
  "!scripts/",
26
22
  "README.md",
27
23
  "CHANGELOG.md"
@@ -376,6 +376,11 @@ export async function runAgentSingleTurn(root, message, opts = {}) {
376
376
  const { runToolLoop } = await import("./tool-loop.js");
377
377
  const messages = [{ role: "user", content: message }];
378
378
  const toolNames = activeAgent ? activeAgent.tools : [];
379
+ // Auto-approve tool confirmations when there's no TTY (e.g. fops exec, piped)
380
+ const noTty = !process.stdin.isTTY;
381
+ const autoConfirmFn = noTty
382
+ ? async () => ({ action: "yes" })
383
+ : undefined;
379
384
  const toolResult = await runToolLoop({
380
385
  messages,
381
386
  systemPrompt: systemContent,
@@ -383,6 +388,7 @@ export async function runAgentSingleTurn(root, message, opts = {}) {
383
388
  maxIterations: activeAgent?.maxIterations || 10,
384
389
  registry,
385
390
  context: { root },
391
+ confirmFn: autoConfirmFn,
386
392
  });
387
393
  replyText = toolResult.finalResponse;
388
394
  if (toolResult.usage && (toolResult.usage.input_tokens || toolResult.usage.output_tokens)) {
@@ -58,6 +58,40 @@ export function registerSetupCommands(program, registry) {
58
58
  .command("config")
59
59
  .description("Manage feature flags and component versions");
60
60
 
61
+ config
62
+ .command("set <key> <value>")
63
+ .description("Set a top-level key in ~/.fops.json (e.g. projectRoot)")
64
+ .action(async (key, value) => {
65
+ const { readState, saveState } = await import("../state.js");
66
+ const state = readState();
67
+ state[key] = value;
68
+ saveState(state);
69
+ const configPath = path.join(os.homedir(), ".fops.json");
70
+ console.log(OK(` ✓ ${key} = ${value}`), DIM(`(${configPath})`));
71
+ });
72
+
73
+ config
74
+ .command("get [key]")
75
+ .description("Show a key from ~/.fops.json, or all top-level keys")
76
+ .action(async (key) => {
77
+ const { readState } = await import("../state.js");
78
+ const state = readState();
79
+ if (key) {
80
+ const val = state[key];
81
+ if (val === undefined) {
82
+ console.log(DIM(` ${key} is not set`));
83
+ } else {
84
+ console.log(` ${key} = ${typeof val === "object" ? JSON.stringify(val) : val}`);
85
+ }
86
+ } else {
87
+ const skip = new Set(["azure", "_meta"]);
88
+ for (const [k, v] of Object.entries(state)) {
89
+ if (skip.has(k)) continue;
90
+ console.log(` ${k} = ${typeof v === "object" ? JSON.stringify(v) : v}`);
91
+ }
92
+ }
93
+ });
94
+
61
95
  config
62
96
  .command("flags", { isDefault: true })
63
97
  .description("Toggle MX_FF_* feature flags and restart affected services")
@@ -102,13 +102,31 @@ function parseSnapshot(raw, vmMeta) {
102
102
  if (eq > 0) flags[line.slice(0, eq)] = line.slice(eq + 1);
103
103
  }
104
104
 
105
- // Services
105
+ // Services — health + version from container images
106
+ const SERVICE_IMAGE_MAP = {
107
+ be: "foundation-backend",
108
+ fe: "foundation-frontend",
109
+ pr: "foundation-processor",
110
+ wa: "foundation-watcher",
111
+ sc: "foundation-scheduler",
112
+ se: "foundation-storage-engine",
113
+ };
114
+
106
115
  const services = {
107
116
  backend: (raw.backendHealth || "").trim() === "OK" ? "healthy" : "down",
108
117
  frontend: (raw.frontendHealth || "").trim() === "OK" ? "healthy" : "down",
109
118
  storage: (raw.storageHealth || "").trim() === "OK" ? "healthy" : "down",
110
119
  };
111
120
 
121
+ // Extract version tags from container images
122
+ for (const [key, imageName] of Object.entries(SERVICE_IMAGE_MAP)) {
123
+ const c = containers.find((c) => c.image?.includes(imageName));
124
+ if (c?.image) {
125
+ const tag = c.image.split(":").pop() || "";
126
+ services[key] = { tag, health: c.healthy ? "healthy" : c.unhealthy ? "unhealthy" : "down" };
127
+ }
128
+ }
129
+
112
130
  // Foundation entities (meshes, data systems, data sources, data products)
113
131
  let foundation = null;
114
132
  try {
@@ -306,7 +324,25 @@ export class FleetRegistry {
306
324
  fopsVersion: s.stack.fopsVersion,
307
325
  branch: s.stack.gitBranch,
308
326
  commit: s.stack.gitSha,
309
- services: s.services,
327
+ services: (() => {
328
+ const svc = { ...s.services };
329
+ // HTTP scrape puts versions in a nested object; merge them up
330
+ if (svc.versions) {
331
+ Object.assign(svc, svc.versions);
332
+ delete svc.versions;
333
+ }
334
+ // If still no version keys, extract from container images
335
+ if (!svc.be && s.containers?.list) {
336
+ const IMAGE_MAP = { be: "foundation-backend", fe: "foundation-frontend", pr: "foundation-processor", wa: "foundation-watcher", sc: "foundation-scheduler", se: "foundation-storage-engine" };
337
+ for (const [key, img] of Object.entries(IMAGE_MAP)) {
338
+ const c = s.containers.list.find((c) => c.image?.includes(img));
339
+ if (c?.image) {
340
+ svc[key] = { tag: c.image.split(":").pop() || "", health: c.healthy ? "healthy" : c.unhealthy ? "unhealthy" : "down" };
341
+ }
342
+ }
343
+ }
344
+ return svc;
345
+ })(),
310
346
  lastScrape: entry.lastScrape,
311
347
  });
312
348
  }
@@ -0,0 +1,2 @@
1
+ // Test fixture: minimal plugin with register function
2
+ export function register(api) {}
@@ -0,0 +1,2 @@
1
+ // Test fixture: plugin without register function
2
+ export const name = "no-register";
@@ -0,0 +1,2 @@
1
+ // Test fixture: discovered plugin with register function
2
+ export function register(api) {}
@@ -0,0 +1,2 @@
1
+ // Test fixture: discovered plugin without register function
2
+ export const name = "no-register";
@@ -98,6 +98,10 @@ export function createPluginApi(pluginId, registry, opts = {}) {
98
98
  registry.services.push({ pluginId, name, instance });
99
99
  },
100
100
 
101
+ registerWebPanel(panel) {
102
+ registry.addWebPanel({ pluginId, ...panel });
103
+ },
104
+
101
105
  registerIndexSource(source) {
102
106
  if (!registry.indexSources) registry.indexSources = [];
103
107
  registry.indexSources.push({ pluginId, name: source.name, fn: source.fn });
@@ -465,6 +465,65 @@ You manage Docker Compose stacks: inspect containers, read logs, restart service
465
465
  - If asked about security or CVEs, use compose_scan.`,
466
466
  });
467
467
 
468
+ // ── Debug Agent ───────────────────────────────────────────────────
469
+ api.registerAgent({
470
+ name: "debug",
471
+ description: "Debug stack issues — diagnose alerts, check containers, logs, metrics, and suggest fixes",
472
+ contextMode: "minimal",
473
+ tools: [
474
+ "compose_ps",
475
+ "compose_logs",
476
+ "compose_restart",
477
+ "compose_exec",
478
+ "compose_inspect",
479
+ "compose_stats",
480
+ "compose_images",
481
+ "embeddings_search",
482
+ ],
483
+ maxIterations: 20,
484
+ systemPrompt: `You are FOPS Debug Agent — an expert platform debugger for Foundation stack issues.
485
+
486
+ ## Role
487
+ You investigate alerts, diagnose service failures, and suggest fixes. You have direct access to Docker containers, logs, and system metrics. You are called by the Glue bot when monitoring alerts fire.
488
+
489
+ ## Tools Available
490
+ - **compose_ps**: List all containers and their status (start here)
491
+ - **compose_logs**: Read container logs (check for errors, crashes, OOM)
492
+ - **compose_inspect**: Get container details (health checks, env vars, mounts, restarts)
493
+ - **compose_stats**: CPU/memory/network usage per container
494
+ - **compose_exec**: Run commands inside containers (e.g. check disk, network, processes)
495
+ - **compose_images**: List images and versions
496
+ - **compose_restart**: Restart specific services
497
+ - **embeddings_search**: Search docs, configs, and past knowledge for context
498
+
499
+ ## Investigation Approach
500
+ 1. **Triage**: Run compose_ps to see overall stack health. Identify unhealthy/restarting containers.
501
+ 2. **Diagnose**: For each affected container:
502
+ - compose_logs to find errors, exceptions, OOM kills, crash traces
503
+ - compose_inspect for health check failures, restart count, resource limits
504
+ - compose_stats for CPU/memory spikes
505
+ 3. **Context**: Use embeddings_search to find relevant docs or known issues.
506
+ 4. **Root cause**: Correlate findings — is it a code bug, resource exhaustion, dependency failure, config issue?
507
+ 5. **Fix**: Suggest specific actions (restart, config change, scale, rollback).
508
+
509
+ ## Output Format
510
+ Structure your response as:
511
+ - **Status**: One-line summary (e.g. "Processor container restarting due to OOM")
512
+ - **Findings**: What you discovered from each tool
513
+ - **Root Cause**: Most likely cause
514
+ - **Actions**: Specific steps to fix
515
+ - **Prevention**: How to avoid this in the future
516
+
517
+ ## Rules
518
+ - Always check compose_ps first.
519
+ - Check logs BEFORE suggesting restarts.
520
+ - Look for patterns: repeated restarts, OOM kills, connection refused, timeout errors.
521
+ - If a dependency is down (postgres, kafka), flag it — fixing the dependency fixes the dependent.
522
+ - Be concise — this output goes into a Glue chat thread.
523
+ - Never suggest 'docker compose down' — prefer targeted restarts.
524
+ - After restarting, verify with compose_ps.`,
525
+ });
526
+
468
527
  // ── Doctor check: Trivy ───────────────────────────────────────────
469
528
  api.registerDoctorCheck({
470
529
  name: "Trivy",
@@ -23,6 +23,10 @@ import { registerRegistryCommands } from "./lib/commands/registry-cmds.js";
23
23
  export { resolveFoundationCreds, resolveAuth0Config, authenticateVm, vmFetch };
24
24
 
25
25
  export async function register(api) {
26
+ // ── Service: expose structured API for cross-plugin use ──
27
+ const { AzureService } = await import("./lib/azure-service.js");
28
+ api.registerService("azure", new AzureService());
29
+
26
30
  // ── Commands ──────────────────────────────────────────────────────────
27
31
 
28
32
  api.registerCommand((program, registry) => {