@meshxdata/fops 0.1.37 → 0.1.39
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.
- package/CHANGELOG.md +374 -0
- package/package.json +1 -1
- package/src/agent/llm.js +2 -0
- package/src/auth/azure.js +92 -0
- package/src/auth/cloudflare.js +125 -0
- package/src/auth/index.js +2 -0
- package/src/commands/index.js +8 -4
- package/src/commands/lifecycle.js +31 -10
- package/src/doctor.js +27 -5
- package/src/plugins/bundled/fops-plugin-1password/index.js +13 -1
- package/src/plugins/bundled/fops-plugin-azure/index.js +4 -2
- package/src/plugins/bundled/fops-plugin-azure/lib/azure-aks.js +130 -2
- package/src/plugins/bundled/fops-plugin-azure/lib/azure-auth.js +66 -6
- package/src/plugins/bundled/fops-plugin-azure/lib/azure-helpers.js +64 -2
- package/src/plugins/bundled/fops-plugin-azure/lib/azure-ops.js +36 -28
- package/src/plugins/bundled/fops-plugin-azure/lib/azure-provision.js +66 -26
- package/src/plugins/bundled/fops-plugin-azure/lib/azure-shared-cache.js +1 -1
- package/src/plugins/bundled/fops-plugin-azure/lib/azure-sync.js +4 -4
- package/src/plugins/bundled/fops-plugin-azure/lib/commands/infra-cmds.js +4 -0
- package/src/plugins/bundled/fops-plugin-azure/lib/commands/test-cmds.js +22 -0
- package/src/plugins/bundled/fops-plugin-azure/lib/commands/vm-cmds.js +4 -3
- package/src/plugins/bundled/fops-plugin-azure/templates/cluster/apps/dai-backend.yaml +13 -0
- package/src/plugins/bundled/fops-plugin-azure/templates/cluster/apps/dai-frontend.yaml +13 -0
- package/src/plugins/bundled/fops-plugin-azure/templates/cluster/apps/foundation-backend.yaml +13 -0
- package/src/plugins/bundled/fops-plugin-azure/templates/cluster/apps/foundation-frontend.yaml +13 -0
- package/src/plugins/bundled/fops-plugin-azure/templates/cluster/apps/foundation-hive.yaml +13 -0
- package/src/plugins/bundled/fops-plugin-azure/templates/cluster/apps/foundation-kafka.yaml +13 -0
- package/src/plugins/bundled/fops-plugin-azure/templates/cluster/apps/foundation-meltano.yaml +13 -0
- package/src/plugins/bundled/fops-plugin-azure/templates/cluster/apps/foundation-mlflow.yaml +13 -0
- package/src/plugins/bundled/fops-plugin-azure/templates/cluster/apps/foundation-opa.yaml +13 -0
- package/src/plugins/bundled/fops-plugin-azure/templates/cluster/apps/foundation-processor.yaml +13 -0
- package/src/plugins/bundled/fops-plugin-azure/templates/cluster/apps/foundation-scheduler.yaml +13 -0
- package/src/plugins/bundled/fops-plugin-azure/templates/cluster/apps/foundation-storage-engine.yaml +13 -0
- package/src/plugins/bundled/fops-plugin-azure/templates/cluster/apps/foundation-trino.yaml +13 -0
- package/src/plugins/bundled/fops-plugin-azure/templates/cluster/apps/foundation-watcher.yaml +13 -0
- package/src/plugins/bundled/fops-plugin-azure/templates/cluster/config/repository.yaml +66 -0
- package/src/plugins/bundled/fops-plugin-azure/templates/cluster/kustomization.yaml +30 -0
- package/src/plugins/bundled/fops-plugin-azure/templates/cluster/operator/acr-webhook-controller.yaml +63 -0
- package/src/plugins/bundled/fops-plugin-azure/templates/cluster/operator/externalsecrets.yaml +15 -0
- package/src/plugins/bundled/fops-plugin-azure/templates/cluster/operator/istio.yaml +42 -0
- package/src/plugins/bundled/fops-plugin-azure/templates/cluster/operator/kafka.yaml +15 -0
- package/src/plugins/bundled/fops-plugin-azure/templates/cluster/operator/kube-reflector.yaml +33 -0
- package/src/plugins/bundled/fops-plugin-azure/templates/cluster/operator/kubecost.yaml +12 -0
- package/src/plugins/bundled/fops-plugin-azure/templates/cluster/operator/nats-server.yaml +15 -0
- package/src/plugins/bundled/fops-plugin-azure/templates/cluster/operator/prometheus-agent.yaml +34 -0
- package/src/plugins/bundled/fops-plugin-azure/templates/cluster/operator/reloader.yaml +12 -0
- package/src/plugins/bundled/fops-plugin-azure/templates/cluster/operator/spark.yaml +112 -0
- package/src/plugins/bundled/fops-plugin-azure/templates/cluster/operator/tailscale.yaml +67 -0
- package/src/plugins/bundled/fops-plugin-azure/templates/cluster/operator/vertical-pod-autoscaler.yaml +15 -0
- package/src/plugins/bundled/fops-plugin-foundation/index.js +44 -7
- package/src/plugins/loader.js +23 -6
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,380 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to @meshxdata/fops (Foundation Operator CLI) are documented here.
|
|
4
4
|
|
|
5
|
+
## [0.1.39] - 2026-03-10
|
|
6
|
+
|
|
7
|
+
- callback url for localhost (821fb94)
|
|
8
|
+
- disable 4 scaffolding plugin by default. (bfb2b76)
|
|
9
|
+
- jaccard improvements (b7494a0)
|
|
10
|
+
- refactor azure plugin (68dfef4)
|
|
11
|
+
- refactor azure plugin (b24a008)
|
|
12
|
+
- fix trino catalog missing (4928a55)
|
|
13
|
+
- v36 bump and changelog generation on openai (37a0440)
|
|
14
|
+
- v36 bump and changelog generation on openai (a3b02d9)
|
|
15
|
+
- bump (a990058)
|
|
16
|
+
- status bar fix and new plugin for ttyd (27dde1e)
|
|
17
|
+
- file demo and tray (1a3e704)
|
|
18
|
+
- electron app (59ad0bb)
|
|
19
|
+
- compose and fops file plugin (1cf0e81)
|
|
20
|
+
- bump (346ffc1)
|
|
21
|
+
- localhost replaced by 127.0.0.1 (82b9f30)
|
|
22
|
+
- .29 (587b0e1)
|
|
23
|
+
- improve up down and bootstrap script (b79ebaf)
|
|
24
|
+
- checksum (22c8086)
|
|
25
|
+
- checksum (96b434f)
|
|
26
|
+
- checksum (15ed3c0)
|
|
27
|
+
- checksum (8a6543a)
|
|
28
|
+
- bump embed trino linksg (8440504)
|
|
29
|
+
- bump data (765ffd9)
|
|
30
|
+
- bump (cb8b232)
|
|
31
|
+
- broken tests (c532229)
|
|
32
|
+
- release 0.1.18, preflight checks (d902249)
|
|
33
|
+
- fix compute display bug (d10f5d9)
|
|
34
|
+
- cleanup packer files (6330f18)
|
|
35
|
+
- plan mode (cb36a8a)
|
|
36
|
+
- bump to 0.1.16 - agent ui (41ac1a2)
|
|
37
|
+
- bump to 0.1.15 - agent ui (4ebe2e1)
|
|
38
|
+
- bump to 0.1.14 (6c3a7fa)
|
|
39
|
+
- bump to 0.1.13 (8db570f)
|
|
40
|
+
- release 0.1.12 (c1c79e5)
|
|
41
|
+
- bump (11aa3b0)
|
|
42
|
+
- git keep and bump tui (be1678e)
|
|
43
|
+
- skills, index, rrf, compacted context (100k > 10k) (7b2fffd)
|
|
44
|
+
- cloudflare and token consumption, graphs indexing (0ad9eec)
|
|
45
|
+
- bump storage default (22c83ba)
|
|
46
|
+
- storage fix (68a22a0)
|
|
47
|
+
- skills update (7f56500)
|
|
48
|
+
- v9 bump (3864446)
|
|
49
|
+
- bump (c95eedc)
|
|
50
|
+
- rrf (dbf8c95)
|
|
51
|
+
- feat: warning when running predictions (95e8c52)
|
|
52
|
+
- feat: support for local predictions (45cf26b)
|
|
53
|
+
- feat: wip support for predictions + mlflow (3457052)
|
|
54
|
+
- add Reciprocal Rank Fusion (RRF) to knowledge and skill retrieval (61549bc)
|
|
55
|
+
- validate CSV headers in compute_run readiness check (a8c7a43)
|
|
56
|
+
- fix corrupted Iceberg metadata: probe tables + force cleanup on re-apply (50578af)
|
|
57
|
+
- enforce: never use foundation_apply to fix broken products (2e049bf)
|
|
58
|
+
- update SKILL.md with complete tool reference for knowledge retrieval (30b1924)
|
|
59
|
+
- add storage read, input DP table probe, and compute_run improvements (34e6c4c)
|
|
60
|
+
- skills update (1220385)
|
|
61
|
+
- skills update (bb66958)
|
|
62
|
+
- some tui improvement andd tools apply overwrite (e90c35c)
|
|
63
|
+
- skills update (e9227a1)
|
|
64
|
+
- skills update (669c4b3)
|
|
65
|
+
- fix plugin pre-flight checks (f741743)
|
|
66
|
+
- increase agent context (6479aaa)
|
|
67
|
+
- skills and init sql fixes (5fce35e)
|
|
68
|
+
- checksum (3518b56)
|
|
69
|
+
- penging job limit (a139861)
|
|
70
|
+
- checksum (575d28c)
|
|
71
|
+
- bump (92049ba)
|
|
72
|
+
- fix bug per tab status (0a33657)
|
|
73
|
+
- fix bug per tab status (50457c6)
|
|
74
|
+
- checksumming (0ad842e)
|
|
75
|
+
- shot af mardkwon overlapping (51f63b9)
|
|
76
|
+
- add spark dockerfile for multiarch builds (95abbd1)
|
|
77
|
+
- fix plugin initialization (16b9782)
|
|
78
|
+
- split index.js (50902a2)
|
|
79
|
+
- cloudflare cidr (cc4e021)
|
|
80
|
+
- cloduflare restrictions (2f6ba2d)
|
|
81
|
+
- sequential start (86b496e)
|
|
82
|
+
- sequential start (4930fe1)
|
|
83
|
+
- sequential start (353f014)
|
|
84
|
+
- qa tests (2dc6a1a)
|
|
85
|
+
- bump sha for .85 (dc2edfe)
|
|
86
|
+
- preserve env on sudo (7831227)
|
|
87
|
+
- bump sha for .84 (6c052f9)
|
|
88
|
+
- non interactive for azure vms (0aa8a2f)
|
|
89
|
+
- keep .env if present (d072450)
|
|
90
|
+
- bump (7a8e732)
|
|
91
|
+
- ensure opa is on compose if not set (f4a5228)
|
|
92
|
+
- checksum bump (a2ccc20)
|
|
93
|
+
- netrc defensive checks (a0b0ccc)
|
|
94
|
+
- netrc defensive checks (ae37403)
|
|
95
|
+
- checksum (ec45d11)
|
|
96
|
+
- update sync and fix up (7f9af72)
|
|
97
|
+
- expand test for azure and add new per app tag support (388a168)
|
|
98
|
+
- checksum on update (44005fc)
|
|
99
|
+
- cleanup for later (15e5313)
|
|
100
|
+
- cleanup for later (11c9597)
|
|
101
|
+
- switch branch feature (822fecc)
|
|
102
|
+
- add pull (d1c19ab)
|
|
103
|
+
- Bump hono from 4.11.9 to 4.12.0 in /operator-cli (ad25144)
|
|
104
|
+
- tests (f180a9a)
|
|
105
|
+
- cleanup (39c49a3)
|
|
106
|
+
- registry (7b7126a)
|
|
107
|
+
- reconcile kafka (832d0db)
|
|
108
|
+
- gh login bug (025886c)
|
|
109
|
+
- cleanup (bb96cab)
|
|
110
|
+
- strip envs from process (2421180)
|
|
111
|
+
- force use of gh creds not tokens in envs var (fff7787)
|
|
112
|
+
- resolve import between npm installs and npm link (79522e1)
|
|
113
|
+
- fix gh scope and azure states (afd846c)
|
|
114
|
+
- refactoring (da50352)
|
|
115
|
+
- split fops repo (d447638)
|
|
116
|
+
- aks (b791f8f)
|
|
117
|
+
- refactor azure (67d3bad)
|
|
118
|
+
- wildcard (391f023)
|
|
119
|
+
- azure plugin (c074074)
|
|
120
|
+
- zap (d7e6e7f)
|
|
121
|
+
- fix knock (cf89c05)
|
|
122
|
+
- azure (4adec98)
|
|
123
|
+
- Bump tar from 7.5.7 to 7.5.9 in /operator-cli (e41e98e)
|
|
124
|
+
- azure stack index.js split (de12272)
|
|
125
|
+
- Bump ajv from 8.17.1 to 8.18.0 in /operator-cli (76da21f)
|
|
126
|
+
- packer (9665fbc)
|
|
127
|
+
- remove stack api (db0fd4d)
|
|
128
|
+
- packer cleanup (fe1bf14)
|
|
129
|
+
- force refresh token (3a3d7e2)
|
|
130
|
+
- provision shell (2ad505f)
|
|
131
|
+
- azure vm management (91dcb31)
|
|
132
|
+
- azure specific (2b0cca8)
|
|
133
|
+
- azure packer (12175b8)
|
|
134
|
+
- init hashed pwd (db8523c)
|
|
135
|
+
- packer (5b5c7c4)
|
|
136
|
+
- doctor for azure vm (ed524fa)
|
|
137
|
+
- packer and 1pwd (c6d053e)
|
|
138
|
+
- split big index.js (dc85a1b)
|
|
139
|
+
- kafka volume update (21815ec)
|
|
140
|
+
- fix openai azure tools confirmation and flow (0118cd1)
|
|
141
|
+
- nighly fixx, test fix (5e0d04f)
|
|
142
|
+
- open ai training (cdc494a)
|
|
143
|
+
- openai integration in azure (1ca1475)
|
|
144
|
+
- ci (672cea9)
|
|
145
|
+
- refresh ghcr creds (4220c48)
|
|
146
|
+
- cleaned up version (1a0074f)
|
|
147
|
+
- traefik on ghcr and templates (8e31a05)
|
|
148
|
+
- apply fcl (e78911f)
|
|
149
|
+
- demo landscape (dd205fe)
|
|
150
|
+
- smarter login and schema (1af514f)
|
|
151
|
+
- no down before up unless something broke (56b1132)
|
|
152
|
+
- dai, reconcile failed containers (12907fa)
|
|
153
|
+
- reconcile dead container (7da75e4)
|
|
154
|
+
- defensive around storage buckets dir (b98871d)
|
|
155
|
+
- defensive around storage buckets dir (e86e132)
|
|
156
|
+
- gear in for multiarch (bf3fa3e)
|
|
157
|
+
- up autofix (99c7f89)
|
|
158
|
+
- autofix stale containers on up (43c7d0f)
|
|
159
|
+
- shared sessions fix (5de1359)
|
|
160
|
+
- share sessions between ui and tui (8321391)
|
|
161
|
+
- fix chat view display details (e263996)
|
|
162
|
+
- fix chat view display details (9babdda)
|
|
163
|
+
- tui up fixes (86e9f17)
|
|
164
|
+
- fix commands init (442538b)
|
|
165
|
+
- enable k3s profile (b2dcfc8)
|
|
166
|
+
- test up till job creation (656d388)
|
|
167
|
+
- tui fixes (0599779)
|
|
168
|
+
- cleanup (27731f0)
|
|
169
|
+
- train (90bf559)
|
|
170
|
+
- training (f809bf6)
|
|
171
|
+
- training (ba2b836)
|
|
172
|
+
- training (6fc5267)
|
|
173
|
+
- training (4af8ac9)
|
|
174
|
+
- fix build script (bd82836)
|
|
175
|
+
- infra test (5b79815)
|
|
176
|
+
- infra test (3a0ac05)
|
|
177
|
+
- infra test (e5c67b5)
|
|
178
|
+
- tests (ae7b621)
|
|
179
|
+
- tests (c09ae6a)
|
|
180
|
+
- update tui (4784153)
|
|
181
|
+
- training (0a5a330)
|
|
182
|
+
- tui (df4dd4a)
|
|
183
|
+
- pkg builds (4dc9993)
|
|
184
|
+
- also source env for creds (9a17d8f)
|
|
185
|
+
- fcl support (e8a5743)
|
|
186
|
+
- fcl support (8d6b6cd)
|
|
187
|
+
- fcl support (cb76a4a)
|
|
188
|
+
- bump package (df2ee85)
|
|
189
|
+
|
|
190
|
+
## [0.1.38] - 2026-03-10
|
|
191
|
+
|
|
192
|
+
- callback url for localhost (821fb94)
|
|
193
|
+
- disable 4 scaffolding plugin by default. (bfb2b76)
|
|
194
|
+
- jaccard improvements (b7494a0)
|
|
195
|
+
- refactor azure plugin (68dfef4)
|
|
196
|
+
- refactor azure plugin (b24a008)
|
|
197
|
+
- fix trino catalog missing (4928a55)
|
|
198
|
+
- v36 bump and changelog generation on openai (37a0440)
|
|
199
|
+
- v36 bump and changelog generation on openai (a3b02d9)
|
|
200
|
+
- bump (a990058)
|
|
201
|
+
- status bar fix and new plugin for ttyd (27dde1e)
|
|
202
|
+
- file demo and tray (1a3e704)
|
|
203
|
+
- electron app (59ad0bb)
|
|
204
|
+
- compose and fops file plugin (1cf0e81)
|
|
205
|
+
- bump (346ffc1)
|
|
206
|
+
- localhost replaced by 127.0.0.1 (82b9f30)
|
|
207
|
+
- .29 (587b0e1)
|
|
208
|
+
- improve up down and bootstrap script (b79ebaf)
|
|
209
|
+
- checksum (22c8086)
|
|
210
|
+
- checksum (96b434f)
|
|
211
|
+
- checksum (15ed3c0)
|
|
212
|
+
- checksum (8a6543a)
|
|
213
|
+
- bump embed trino linksg (8440504)
|
|
214
|
+
- bump data (765ffd9)
|
|
215
|
+
- bump (cb8b232)
|
|
216
|
+
- broken tests (c532229)
|
|
217
|
+
- release 0.1.18, preflight checks (d902249)
|
|
218
|
+
- fix compute display bug (d10f5d9)
|
|
219
|
+
- cleanup packer files (6330f18)
|
|
220
|
+
- plan mode (cb36a8a)
|
|
221
|
+
- bump to 0.1.16 - agent ui (41ac1a2)
|
|
222
|
+
- bump to 0.1.15 - agent ui (4ebe2e1)
|
|
223
|
+
- bump to 0.1.14 (6c3a7fa)
|
|
224
|
+
- bump to 0.1.13 (8db570f)
|
|
225
|
+
- release 0.1.12 (c1c79e5)
|
|
226
|
+
- bump (11aa3b0)
|
|
227
|
+
- git keep and bump tui (be1678e)
|
|
228
|
+
- skills, index, rrf, compacted context (100k > 10k) (7b2fffd)
|
|
229
|
+
- cloudflare and token consumption, graphs indexing (0ad9eec)
|
|
230
|
+
- bump storage default (22c83ba)
|
|
231
|
+
- storage fix (68a22a0)
|
|
232
|
+
- skills update (7f56500)
|
|
233
|
+
- v9 bump (3864446)
|
|
234
|
+
- bump (c95eedc)
|
|
235
|
+
- rrf (dbf8c95)
|
|
236
|
+
- feat: warning when running predictions (95e8c52)
|
|
237
|
+
- feat: support for local predictions (45cf26b)
|
|
238
|
+
- feat: wip support for predictions + mlflow (3457052)
|
|
239
|
+
- add Reciprocal Rank Fusion (RRF) to knowledge and skill retrieval (61549bc)
|
|
240
|
+
- validate CSV headers in compute_run readiness check (a8c7a43)
|
|
241
|
+
- fix corrupted Iceberg metadata: probe tables + force cleanup on re-apply (50578af)
|
|
242
|
+
- enforce: never use foundation_apply to fix broken products (2e049bf)
|
|
243
|
+
- update SKILL.md with complete tool reference for knowledge retrieval (30b1924)
|
|
244
|
+
- add storage read, input DP table probe, and compute_run improvements (34e6c4c)
|
|
245
|
+
- skills update (1220385)
|
|
246
|
+
- skills update (bb66958)
|
|
247
|
+
- some tui improvement andd tools apply overwrite (e90c35c)
|
|
248
|
+
- skills update (e9227a1)
|
|
249
|
+
- skills update (669c4b3)
|
|
250
|
+
- fix plugin pre-flight checks (f741743)
|
|
251
|
+
- increase agent context (6479aaa)
|
|
252
|
+
- skills and init sql fixes (5fce35e)
|
|
253
|
+
- checksum (3518b56)
|
|
254
|
+
- penging job limit (a139861)
|
|
255
|
+
- checksum (575d28c)
|
|
256
|
+
- bump (92049ba)
|
|
257
|
+
- fix bug per tab status (0a33657)
|
|
258
|
+
- fix bug per tab status (50457c6)
|
|
259
|
+
- checksumming (0ad842e)
|
|
260
|
+
- shot af mardkwon overlapping (51f63b9)
|
|
261
|
+
- add spark dockerfile for multiarch builds (95abbd1)
|
|
262
|
+
- fix plugin initialization (16b9782)
|
|
263
|
+
- split index.js (50902a2)
|
|
264
|
+
- cloudflare cidr (cc4e021)
|
|
265
|
+
- cloduflare restrictions (2f6ba2d)
|
|
266
|
+
- sequential start (86b496e)
|
|
267
|
+
- sequential start (4930fe1)
|
|
268
|
+
- sequential start (353f014)
|
|
269
|
+
- qa tests (2dc6a1a)
|
|
270
|
+
- bump sha for .85 (dc2edfe)
|
|
271
|
+
- preserve env on sudo (7831227)
|
|
272
|
+
- bump sha for .84 (6c052f9)
|
|
273
|
+
- non interactive for azure vms (0aa8a2f)
|
|
274
|
+
- keep .env if present (d072450)
|
|
275
|
+
- bump (7a8e732)
|
|
276
|
+
- ensure opa is on compose if not set (f4a5228)
|
|
277
|
+
- checksum bump (a2ccc20)
|
|
278
|
+
- netrc defensive checks (a0b0ccc)
|
|
279
|
+
- netrc defensive checks (ae37403)
|
|
280
|
+
- checksum (ec45d11)
|
|
281
|
+
- update sync and fix up (7f9af72)
|
|
282
|
+
- expand test for azure and add new per app tag support (388a168)
|
|
283
|
+
- checksum on update (44005fc)
|
|
284
|
+
- cleanup for later (15e5313)
|
|
285
|
+
- cleanup for later (11c9597)
|
|
286
|
+
- switch branch feature (822fecc)
|
|
287
|
+
- add pull (d1c19ab)
|
|
288
|
+
- Bump hono from 4.11.9 to 4.12.0 in /operator-cli (ad25144)
|
|
289
|
+
- tests (f180a9a)
|
|
290
|
+
- cleanup (39c49a3)
|
|
291
|
+
- registry (7b7126a)
|
|
292
|
+
- reconcile kafka (832d0db)
|
|
293
|
+
- gh login bug (025886c)
|
|
294
|
+
- cleanup (bb96cab)
|
|
295
|
+
- strip envs from process (2421180)
|
|
296
|
+
- force use of gh creds not tokens in envs var (fff7787)
|
|
297
|
+
- resolve import between npm installs and npm link (79522e1)
|
|
298
|
+
- fix gh scope and azure states (afd846c)
|
|
299
|
+
- refactoring (da50352)
|
|
300
|
+
- split fops repo (d447638)
|
|
301
|
+
- aks (b791f8f)
|
|
302
|
+
- refactor azure (67d3bad)
|
|
303
|
+
- wildcard (391f023)
|
|
304
|
+
- azure plugin (c074074)
|
|
305
|
+
- zap (d7e6e7f)
|
|
306
|
+
- fix knock (cf89c05)
|
|
307
|
+
- azure (4adec98)
|
|
308
|
+
- Bump tar from 7.5.7 to 7.5.9 in /operator-cli (e41e98e)
|
|
309
|
+
- azure stack index.js split (de12272)
|
|
310
|
+
- Bump ajv from 8.17.1 to 8.18.0 in /operator-cli (76da21f)
|
|
311
|
+
- packer (9665fbc)
|
|
312
|
+
- remove stack api (db0fd4d)
|
|
313
|
+
- packer cleanup (fe1bf14)
|
|
314
|
+
- force refresh token (3a3d7e2)
|
|
315
|
+
- provision shell (2ad505f)
|
|
316
|
+
- azure vm management (91dcb31)
|
|
317
|
+
- azure specific (2b0cca8)
|
|
318
|
+
- azure packer (12175b8)
|
|
319
|
+
- init hashed pwd (db8523c)
|
|
320
|
+
- packer (5b5c7c4)
|
|
321
|
+
- doctor for azure vm (ed524fa)
|
|
322
|
+
- packer and 1pwd (c6d053e)
|
|
323
|
+
- split big index.js (dc85a1b)
|
|
324
|
+
- kafka volume update (21815ec)
|
|
325
|
+
- fix openai azure tools confirmation and flow (0118cd1)
|
|
326
|
+
- nighly fixx, test fix (5e0d04f)
|
|
327
|
+
- open ai training (cdc494a)
|
|
328
|
+
- openai integration in azure (1ca1475)
|
|
329
|
+
- ci (672cea9)
|
|
330
|
+
- refresh ghcr creds (4220c48)
|
|
331
|
+
- cleaned up version (1a0074f)
|
|
332
|
+
- traefik on ghcr and templates (8e31a05)
|
|
333
|
+
- apply fcl (e78911f)
|
|
334
|
+
- demo landscape (dd205fe)
|
|
335
|
+
- smarter login and schema (1af514f)
|
|
336
|
+
- no down before up unless something broke (56b1132)
|
|
337
|
+
- dai, reconcile failed containers (12907fa)
|
|
338
|
+
- reconcile dead container (7da75e4)
|
|
339
|
+
- defensive around storage buckets dir (b98871d)
|
|
340
|
+
- defensive around storage buckets dir (e86e132)
|
|
341
|
+
- gear in for multiarch (bf3fa3e)
|
|
342
|
+
- up autofix (99c7f89)
|
|
343
|
+
- autofix stale containers on up (43c7d0f)
|
|
344
|
+
- shared sessions fix (5de1359)
|
|
345
|
+
- share sessions between ui and tui (8321391)
|
|
346
|
+
- fix chat view display details (e263996)
|
|
347
|
+
- fix chat view display details (9babdda)
|
|
348
|
+
- tui up fixes (86e9f17)
|
|
349
|
+
- fix commands init (442538b)
|
|
350
|
+
- enable k3s profile (b2dcfc8)
|
|
351
|
+
- test up till job creation (656d388)
|
|
352
|
+
- tui fixes (0599779)
|
|
353
|
+
- cleanup (27731f0)
|
|
354
|
+
- train (90bf559)
|
|
355
|
+
- training (f809bf6)
|
|
356
|
+
- training (ba2b836)
|
|
357
|
+
- training (6fc5267)
|
|
358
|
+
- training (4af8ac9)
|
|
359
|
+
- fix build script (bd82836)
|
|
360
|
+
- infra test (5b79815)
|
|
361
|
+
- infra test (3a0ac05)
|
|
362
|
+
- infra test (e5c67b5)
|
|
363
|
+
- tests (ae7b621)
|
|
364
|
+
- tests (c09ae6a)
|
|
365
|
+
- update tui (4784153)
|
|
366
|
+
- training (0a5a330)
|
|
367
|
+
- tui (df4dd4a)
|
|
368
|
+
- pkg builds (4dc9993)
|
|
369
|
+
- also source env for creds (9a17d8f)
|
|
370
|
+
- fcl support (e8a5743)
|
|
371
|
+
- fcl support (8d6b6cd)
|
|
372
|
+
- fcl support (cb76a4a)
|
|
373
|
+
- bump package (df2ee85)
|
|
374
|
+
|
|
375
|
+
# Changelog
|
|
376
|
+
|
|
377
|
+
All notable changes to @meshxdata/fops (Foundation Operator CLI) are documented here.
|
|
378
|
+
|
|
5
379
|
## [0.1.37] - 2026-03-06
|
|
6
380
|
|
|
7
381
|
- **Azure plugin & VM management:** Major refactor of the Azure plugin with improved VM lifecycle management, non-interactive VM support, better state handling, and expanded test coverage. Includes Azure-specific fixes, token refresh improvements, and enhanced preflight checks.
|
package/package.json
CHANGED
package/src/agent/llm.js
CHANGED
|
@@ -309,6 +309,8 @@ let _responsesApiFallback = false;
|
|
|
309
309
|
function isResponsesApiFormatError(err) {
|
|
310
310
|
if (!err) return false;
|
|
311
311
|
const status = err.status ?? err.error?.status ?? err.code;
|
|
312
|
+
// 404 = Responses API route doesn't exist on this Azure endpoint/api-version
|
|
313
|
+
if (status === 404 || status === "404") return true;
|
|
312
314
|
if (status !== 400 && status !== "400") return false;
|
|
313
315
|
const msg = [err.message, err.error?.message, err.body?.error?.message].filter(Boolean).join(" ");
|
|
314
316
|
return /Responses API|moved to ['"]input['"]|unknown parameter|'input' is required|'instructions' is not/i.test(msg);
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import chalk from "chalk";
|
|
2
|
+
import { getInquirer } from "../lazy.js";
|
|
3
|
+
|
|
4
|
+
async function getExeca() {
|
|
5
|
+
const { execa } = await import("execa");
|
|
6
|
+
return execa;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
async function checkAzInstalled(execa) {
|
|
10
|
+
try {
|
|
11
|
+
await execa("az", ["--version"], { timeout: 10000, reject: true });
|
|
12
|
+
return true;
|
|
13
|
+
} catch {
|
|
14
|
+
return false;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
async function getAzAccount(execa) {
|
|
19
|
+
try {
|
|
20
|
+
const { stdout } = await execa("az", ["account", "show", "--output", "json"], { timeout: 15000 });
|
|
21
|
+
return JSON.parse(stdout);
|
|
22
|
+
} catch {
|
|
23
|
+
return null;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export async function runAzureLogin() {
|
|
28
|
+
const execa = await getExeca();
|
|
29
|
+
|
|
30
|
+
const installed = await checkAzInstalled(execa);
|
|
31
|
+
if (!installed) {
|
|
32
|
+
console.log(chalk.red("\n Azure CLI (az) is not installed."));
|
|
33
|
+
console.log(chalk.dim(" Install it from: https://docs.microsoft.com/en-us/cli/azure/install-azure-cli"));
|
|
34
|
+
if (process.platform === "darwin") {
|
|
35
|
+
console.log(chalk.dim(" macOS: brew install azure-cli"));
|
|
36
|
+
} else if (process.platform === "linux") {
|
|
37
|
+
console.log(chalk.dim(" Linux: curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash"));
|
|
38
|
+
}
|
|
39
|
+
console.log("");
|
|
40
|
+
return false;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
const account = await getAzAccount(execa);
|
|
44
|
+
if (account) {
|
|
45
|
+
console.log("");
|
|
46
|
+
console.log(chalk.bold.cyan(" Azure CLI — Current Session"));
|
|
47
|
+
console.log("");
|
|
48
|
+
console.log(chalk.green(` ✓ Logged in as: ${account.user?.name || account.user?.type || "unknown"}`));
|
|
49
|
+
console.log(chalk.dim(` Subscription: ${account.name} (${account.id})`));
|
|
50
|
+
console.log(chalk.dim(` Tenant: ${account.tenantId}`));
|
|
51
|
+
console.log("");
|
|
52
|
+
|
|
53
|
+
const { relogin } = await (await getInquirer()).prompt([{
|
|
54
|
+
type: "confirm",
|
|
55
|
+
name: "relogin",
|
|
56
|
+
message: "Re-authenticate (switch account or refresh session)?",
|
|
57
|
+
default: false,
|
|
58
|
+
}]);
|
|
59
|
+
|
|
60
|
+
if (!relogin) {
|
|
61
|
+
console.log(chalk.dim("Keeping existing Azure session.\n"));
|
|
62
|
+
return true;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
await execa("az", ["logout"], { reject: false, timeout: 10000 });
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
console.log("");
|
|
69
|
+
console.log(chalk.bold.cyan(" Azure Login"));
|
|
70
|
+
console.log(chalk.dim(" This will open your browser for interactive sign-in."));
|
|
71
|
+
console.log("");
|
|
72
|
+
|
|
73
|
+
const { exitCode } = await execa("az", ["login"], {
|
|
74
|
+
stdio: "inherit",
|
|
75
|
+
timeout: 300000,
|
|
76
|
+
reject: false,
|
|
77
|
+
});
|
|
78
|
+
|
|
79
|
+
if (exitCode !== 0) {
|
|
80
|
+
console.log(chalk.red("\n Azure login failed or was cancelled.\n"));
|
|
81
|
+
return false;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
const newAccount = await getAzAccount(execa);
|
|
85
|
+
if (newAccount) {
|
|
86
|
+
console.log(chalk.green(`\n ✓ Azure login successful!`));
|
|
87
|
+
console.log(chalk.dim(` Logged in as: ${newAccount.user?.name || newAccount.user?.type}`));
|
|
88
|
+
console.log(chalk.dim(` Subscription: ${newAccount.name} (${newAccount.id})\n`));
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
return true;
|
|
92
|
+
}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import os from "node:os";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import chalk from "chalk";
|
|
5
|
+
import { openBrowser } from "./login.js";
|
|
6
|
+
import { getInquirer } from "../lazy.js";
|
|
7
|
+
|
|
8
|
+
const CF_TOKENS_URL = "https://dash.cloudflare.com/profile/api-tokens";
|
|
9
|
+
const FOPS_CONFIG_PATH = path.join(os.homedir(), ".fops.json");
|
|
10
|
+
|
|
11
|
+
function readFopsConfig() {
|
|
12
|
+
try {
|
|
13
|
+
if (fs.existsSync(FOPS_CONFIG_PATH)) {
|
|
14
|
+
return JSON.parse(fs.readFileSync(FOPS_CONFIG_PATH, "utf8"));
|
|
15
|
+
}
|
|
16
|
+
} catch {}
|
|
17
|
+
return {};
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
function saveFopsConfig(config) {
|
|
21
|
+
fs.writeFileSync(FOPS_CONFIG_PATH, JSON.stringify(config, null, 2) + "\n", { mode: 0o600 });
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export function resolveCloudflareApiToken() {
|
|
25
|
+
if (process.env.CLOUDFLARE_API_TOKEN?.trim()) return process.env.CLOUDFLARE_API_TOKEN.trim();
|
|
26
|
+
if (process.env.CF_API_TOKEN?.trim()) return process.env.CF_API_TOKEN.trim();
|
|
27
|
+
try {
|
|
28
|
+
const config = readFopsConfig();
|
|
29
|
+
const token = config.cloudflare?.apiToken?.trim();
|
|
30
|
+
if (token) return token;
|
|
31
|
+
} catch {}
|
|
32
|
+
return null;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
function saveCloudflareToken(token) {
|
|
36
|
+
const config = readFopsConfig();
|
|
37
|
+
config.cloudflare = { ...config.cloudflare, apiToken: token.trim() };
|
|
38
|
+
saveFopsConfig(config);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
async function validateCloudflareToken(token) {
|
|
42
|
+
try {
|
|
43
|
+
const res = await fetch("https://api.cloudflare.com/client/v4/user/tokens/verify", {
|
|
44
|
+
headers: { Authorization: `Bearer ${token}` },
|
|
45
|
+
});
|
|
46
|
+
const json = await res.json();
|
|
47
|
+
if (json.success) {
|
|
48
|
+
return { valid: true, status: json.result?.status };
|
|
49
|
+
}
|
|
50
|
+
const msg = (json.errors || []).map((e) => e.message).join("; ");
|
|
51
|
+
return { valid: false, error: msg || `Cloudflare API returned ${res.status}.` };
|
|
52
|
+
} catch (err) {
|
|
53
|
+
return { valid: false, error: `Could not reach Cloudflare API: ${err.message}` };
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
export async function runCloudflareLogin() {
|
|
58
|
+
const existing = resolveCloudflareApiToken();
|
|
59
|
+
if (existing) {
|
|
60
|
+
const masked = existing.slice(0, 8) + "..." + existing.slice(-4);
|
|
61
|
+
const { overwrite } = await (await getInquirer()).prompt([{
|
|
62
|
+
type: "confirm",
|
|
63
|
+
name: "overwrite",
|
|
64
|
+
message: `Already have a Cloudflare API token (${masked}). Replace it?`,
|
|
65
|
+
default: false,
|
|
66
|
+
}]);
|
|
67
|
+
if (!overwrite) {
|
|
68
|
+
console.log(chalk.dim("Keeping existing Cloudflare token."));
|
|
69
|
+
return true;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
console.log("");
|
|
74
|
+
console.log(chalk.bold.cyan(" Cloudflare API Token Setup"));
|
|
75
|
+
console.log("");
|
|
76
|
+
console.log(chalk.white(" To connect Foundation to Cloudflare, you need an API token."));
|
|
77
|
+
console.log(chalk.white(" Here's how to get one:\n"));
|
|
78
|
+
console.log(chalk.dim(" 1. Go to ") + chalk.cyan(CF_TOKENS_URL));
|
|
79
|
+
console.log(chalk.dim(" 2. Click ") + chalk.white('"Create Token"'));
|
|
80
|
+
console.log(chalk.dim(" 3. Use the ") + chalk.white('"Edit zone DNS"') + chalk.dim(" template (or create a custom token)"));
|
|
81
|
+
console.log(chalk.dim(" 4. Copy the token and paste it below"));
|
|
82
|
+
console.log("");
|
|
83
|
+
|
|
84
|
+
const { openIt } = await (await getInquirer()).prompt([{
|
|
85
|
+
type: "confirm",
|
|
86
|
+
name: "openIt",
|
|
87
|
+
message: "Open Cloudflare API tokens page in your browser?",
|
|
88
|
+
default: true,
|
|
89
|
+
}]);
|
|
90
|
+
|
|
91
|
+
if (openIt) {
|
|
92
|
+
const opened = openBrowser(CF_TOKENS_URL);
|
|
93
|
+
if (!opened) {
|
|
94
|
+
console.log(chalk.yellow("\n Could not open browser. Visit: " + CF_TOKENS_URL + "\n"));
|
|
95
|
+
} else {
|
|
96
|
+
console.log("");
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
const { token } = await (await getInquirer()).prompt([{
|
|
101
|
+
type: "password",
|
|
102
|
+
name: "token",
|
|
103
|
+
message: "Paste your Cloudflare API token:",
|
|
104
|
+
mask: "*",
|
|
105
|
+
validate: (v) => {
|
|
106
|
+
if (!v?.trim()) return "API token is required.";
|
|
107
|
+
return true;
|
|
108
|
+
},
|
|
109
|
+
}]);
|
|
110
|
+
|
|
111
|
+
console.log(chalk.dim("\n Validating token..."));
|
|
112
|
+
const result = await validateCloudflareToken(token.trim());
|
|
113
|
+
|
|
114
|
+
if (!result.valid) {
|
|
115
|
+
console.log(chalk.red(`\n ${result.error}`));
|
|
116
|
+
console.log(chalk.dim(" Check the token and try again with: fops login cloudflare\n"));
|
|
117
|
+
return false;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
saveCloudflareToken(token);
|
|
121
|
+
console.log(chalk.green(`\n Cloudflare login successful!`));
|
|
122
|
+
if (result.status) console.log(chalk.dim(` Token status: ${result.status}`));
|
|
123
|
+
console.log(chalk.dim(" Token saved to ~/.fops.json\n"));
|
|
124
|
+
return true;
|
|
125
|
+
}
|
package/src/auth/index.js
CHANGED
|
@@ -4,3 +4,5 @@ export { authHelp, offerClaudeLogin, runLogin } from "./login.js";
|
|
|
4
4
|
export { runOAuthLogin } from "./oauth.js";
|
|
5
5
|
export { runCodaLogin, resolveCodaApiToken } from "./coda.js";
|
|
6
6
|
export { runLinearLogin, resolveLinearApiKey } from "./linear.js";
|
|
7
|
+
export { runCloudflareLogin, resolveCloudflareApiToken } from "./cloudflare.js";
|
|
8
|
+
export { runAzureLogin } from "./azure.js";
|
package/src/commands/index.js
CHANGED
|
@@ -15,20 +15,24 @@ export function registerCommands(program, registry) {
|
|
|
15
15
|
|
|
16
16
|
program
|
|
17
17
|
.command("login")
|
|
18
|
-
.description("Authenticate with services (Claude, Coda, Linear)")
|
|
19
|
-
.argument("[service]", "Service to login to: claude (default), coda, or
|
|
18
|
+
.description("Authenticate with services (Claude, Coda, Linear, Cloudflare, Azure)")
|
|
19
|
+
.argument("[service]", "Service to login to: claude (default), coda, linear, cloudflare, or azure")
|
|
20
20
|
.option("--no-browser", "Paste API key in terminal instead of OAuth")
|
|
21
21
|
.action(async (service, opts) => {
|
|
22
|
-
const { runLogin, runCodaLogin, runLinearLogin } = await import("../auth/index.js");
|
|
22
|
+
const { runLogin, runCodaLogin, runLinearLogin, runCloudflareLogin, runAzureLogin } = await import("../auth/index.js");
|
|
23
23
|
const target = (service || "claude").toLowerCase();
|
|
24
24
|
if (target === "coda") {
|
|
25
25
|
await runCodaLogin();
|
|
26
26
|
} else if (target === "linear") {
|
|
27
27
|
await runLinearLogin();
|
|
28
|
+
} else if (target === "cloudflare" || target === "cf") {
|
|
29
|
+
await runCloudflareLogin();
|
|
30
|
+
} else if (target === "azure" || target === "az") {
|
|
31
|
+
await runAzureLogin();
|
|
28
32
|
} else if (target === "claude") {
|
|
29
33
|
await runLogin({ browser: opts.browser });
|
|
30
34
|
} else {
|
|
31
|
-
console.error(chalk.red(`Unknown service "${target}". Use: claude, coda, linear`));
|
|
35
|
+
console.error(chalk.red(`Unknown service "${target}". Use: claude, coda, linear, cloudflare, azure`));
|
|
32
36
|
process.exit(1);
|
|
33
37
|
}
|
|
34
38
|
});
|