@meshxdata/fops 0.1.50 → 0.1.51

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 CHANGED
@@ -1,3 +1,189 @@
1
+ # Changelog
2
+
3
+ All notable changes to @meshxdata/fops (Foundation Operator CLI) are documented here.
4
+
5
+ ## [0.1.51] - 2026-03-24
6
+
7
+ - operator cli plugin fix (4dae908)
8
+ - operator cli plugin fix (25620cc)
9
+ - operator cli test fixes (1d1c18f)
10
+ - feat(test): add setup-users command for QA test user creation (b929507)
11
+ - feat(aks): show HA standby clusters with visual grouping (8fb640c)
12
+ - refactor(provision): extract VM provisioning to dedicated module (af321a7)
13
+ - refactor(provision): extract post-start health checks to dedicated module (6ed5f2d)
14
+ - fix: ping timeout 15s, fix prometheus sed escaping (d11ac14)
15
+ - refactor(vm): extract terraform HCL generation to dedicated module (896a64b)
16
+ - refactor(keyvault): extract key operations to dedicated module (716bbe4)
17
+ - refactor(azure): extract swarm functions to azure-fleet-swarm.js (4690e34)
18
+ - refactor(azure): extract SSH/remote functions to azure-ops-ssh.js (e62b8f0)
19
+ - refactor(azure): split azure-ops.js into smaller modules (4515425)
20
+ - feat(aks): add --ha flag for full cross-region HA setup (ece68c5)
21
+ - feat(fops): inject ENVIRONMENT_NAME on VM provisioning (6ef2a27)
22
+ - fix(postgres): disable SSL mode to fix connection issues (c789ae9)
23
+ - feat(trino): add caching configuration for docker-compose (3668224)
24
+ - fix(fops-azure): run pytest directly instead of missing scripts (29f8410)
25
+ - add -d detach option for local frontend dev, remove hive cpu limits (3306667)
26
+ - release 0.1.49 (dcca32b)
27
+ - release 0.1.48 (9b195e5)
28
+ - stash on updates (2916c01)
29
+ - stash on updates (b5c14df)
30
+ - stash on updates (d0453d1)
31
+ - frontend dev fixes (0ca7b00)
32
+ - fix: update azure test commands (77c81da)
33
+ - default locust to CLI mode, add --web for UI (ca35bff)
34
+ - add locust command for load testing AKS clusters (1278722)
35
+ - update spot node pool default autoscaling to 1-20 (617c182)
36
+ - module for aks (3dd1a61)
37
+ - add hive to PG_SERVICE_DBS for fops pg-setup (afccb16)
38
+ - feat(azure): enhance aks doctor with ExternalSecrets and PGSSLMODE checks (8b14861)
39
+ - add foundation-postgres ExternalName service to reconciler (ea88e11)
40
+ - new flux templates (0e2e372)
41
+ - feat(azure): add storage-engine secrets to Key Vault (a4f488e)
42
+ - feat(azure-aks): add AUTH0_DOMAIN to template rendering variables (216c37e)
43
+ - feat(azure): add storage account creation per cluster (aa1b138)
44
+ - bump watcher (ab24473)
45
+ - fix: concurrent compute calls (#66) (03e2edf)
46
+ - bump backend version (5058ff5)
47
+ - bump fops to 0.1.44 (8c0ef5d)
48
+ - Mlflow and azure plugin fix (176881f)
49
+ - fix lifecycle (a2cb9e7)
50
+ - callback url for localhost (821fb94)
51
+ - disable 4 scaffolding plugin by default. (bfb2b76)
52
+ - jaccard improvements (b7494a0)
53
+ - refactor azure plugin (68dfef4)
54
+ - refactor azure plugin (b24a008)
55
+ - fix trino catalog missing (4928a55)
56
+ - v36 bump and changelog generation on openai (37a0440)
57
+ - v36 bump and changelog generation on openai (a3b02d9)
58
+ - bump (a990058)
59
+ - status bar fix and new plugin for ttyd (27dde1e)
60
+ - file demo and tray (1a3e704)
61
+ - electron app (59ad0bb)
62
+ - compose and fops file plugin (1cf0e81)
63
+ - bump (346ffc1)
64
+ - localhost replaced by 127.0.0.1 (82b9f30)
65
+ - .29 (587b0e1)
66
+ - improve up down and bootstrap script (b79ebaf)
67
+ - checksum (22c8086)
68
+ - checksum (96b434f)
69
+ - checksum (15ed3c0)
70
+ - checksum (8a6543a)
71
+ - bump embed trino linksg (8440504)
72
+ - bump data (765ffd9)
73
+ - bump (cb8b232)
74
+ - broken tests (c532229)
75
+ - release 0.1.18, preflight checks (d902249)
76
+ - fix compute display bug (d10f5d9)
77
+ - cleanup packer files (6330f18)
78
+ - plan mode (cb36a8a)
79
+ - bump to 0.1.16 - agent ui (41ac1a2)
80
+ - bump to 0.1.15 - agent ui (4ebe2e1)
81
+ - bump to 0.1.14 (6c3a7fa)
82
+ - bump to 0.1.13 (8db570f)
83
+ - release 0.1.12 (c1c79e5)
84
+ - bump (11aa3b0)
85
+ - git keep and bump tui (be1678e)
86
+ - skills, index, rrf, compacted context (100k > 10k) (7b2fffd)
87
+ - cloudflare and token consumption, graphs indexing (0ad9eec)
88
+ - bump storage default (22c83ba)
89
+ - storage fix (68a22a0)
90
+ - skills update (7f56500)
91
+ - v9 bump (3864446)
92
+ - bump (c95eedc)
93
+ - rrf (dbf8c95)
94
+ - feat: warning when running predictions (95e8c52)
95
+ - feat: support for local predictions (45cf26b)
96
+ - feat: wip support for predictions + mlflow (3457052)
97
+ - add Reciprocal Rank Fusion (RRF) to knowledge and skill retrieval (61549bc)
98
+ - validate CSV headers in compute_run readiness check (a8c7a43)
99
+ - fix corrupted Iceberg metadata: probe tables + force cleanup on re-apply (50578af)
100
+ - enforce: never use foundation_apply to fix broken products (2e049bf)
101
+ - update SKILL.md with complete tool reference for knowledge retrieval (30b1924)
102
+ - add storage read, input DP table probe, and compute_run improvements (34e6c4c)
103
+ - skills update (1220385)
104
+ - skills update (bb66958)
105
+ - some tui improvement andd tools apply overwrite (e90c35c)
106
+ - skills update (e9227a1)
107
+ - skills update (669c4b3)
108
+ - fix plugin pre-flight checks (f741743)
109
+ - increase agent context (6479aaa)
110
+ - skills and init sql fixes (5fce35e)
111
+ - checksum (3518b56)
112
+ - penging job limit (a139861)
113
+ - checksum (575d28c)
114
+ - bump (92049ba)
115
+ - fix bug per tab status (0a33657)
116
+ - fix bug per tab status (50457c6)
117
+ - checksumming (0ad842e)
118
+ - shot af mardkwon overlapping (51f63b9)
119
+ - add spark dockerfile for multiarch builds (95abbd1)
120
+ - fix plugin initialization (16b9782)
121
+ - split index.js (50902a2)
122
+ - cloudflare cidr (cc4e021)
123
+ - cloduflare restrictions (2f6ba2d)
124
+ - sequential start (86b496e)
125
+ - sequential start (4930fe1)
126
+ - sequential start (353f014)
127
+ - qa tests (2dc6a1a)
128
+ - bump sha for .85 (dc2edfe)
129
+ - preserve env on sudo (7831227)
130
+ - bump sha for .84 (6c052f9)
131
+ - non interactive for azure vms (0aa8a2f)
132
+ - keep .env if present (d072450)
133
+ - bump (7a8e732)
134
+ - ensure opa is on compose if not set (f4a5228)
135
+ - checksum bump (a2ccc20)
136
+ - netrc defensive checks (a0b0ccc)
137
+ - netrc defensive checks (ae37403)
138
+ - checksum (ec45d11)
139
+ - update sync and fix up (7f9af72)
140
+ - expand test for azure and add new per app tag support (388a168)
141
+ - checksum on update (44005fc)
142
+ - cleanup for later (15e5313)
143
+ - cleanup for later (11c9597)
144
+ - switch branch feature (822fecc)
145
+ - add pull (d1c19ab)
146
+ - Bump hono from 4.11.9 to 4.12.0 in /operator-cli (ad25144)
147
+ - tests (f180a9a)
148
+ - cleanup (39c49a3)
149
+ - registry (7b7126a)
150
+ - reconcile kafka (832d0db)
151
+ - gh login bug (025886c)
152
+ - cleanup (bb96cab)
153
+ - strip envs from process (2421180)
154
+ - force use of gh creds not tokens in envs var (fff7787)
155
+ - resolve import between npm installs and npm link (79522e1)
156
+ - fix gh scope and azure states (afd846c)
157
+ - refactoring (da50352)
158
+ - split fops repo (d447638)
159
+ - aks (b791f8f)
160
+ - refactor azure (67d3bad)
161
+ - wildcard (391f023)
162
+ - azure plugin (c074074)
163
+ - zap (d7e6e7f)
164
+ - fix knock (cf89c05)
165
+ - azure (4adec98)
166
+ - Bump tar from 7.5.7 to 7.5.9 in /operator-cli (e41e98e)
167
+ - azure stack index.js split (de12272)
168
+ - Bump ajv from 8.17.1 to 8.18.0 in /operator-cli (76da21f)
169
+ - packer (9665fbc)
170
+ - remove stack api (db0fd4d)
171
+ - packer cleanup (fe1bf14)
172
+ - force refresh token (3a3d7e2)
173
+ - provision shell (2ad505f)
174
+ - azure vm management (91dcb31)
175
+ - azure specific (2b0cca8)
176
+ - azure packer (12175b8)
177
+ - init hashed pwd (db8523c)
178
+ - packer (5b5c7c4)
179
+ - doctor for azure vm (ed524fa)
180
+ - packer and 1pwd (c6d053e)
181
+ - split big index.js (dc85a1b)
182
+ - kafka volume update (21815ec)
183
+ - fix openai azure tools confirmation and flow (0118cd1)
184
+ - nighly fixx, test fix (5e0d04f)
185
+ - open ai training (cdc494a)
186
+
1
187
  ## [0.1.50] - 2026-03-24
2
188
 
3
189
  - operator cli plugin fix (25620cc)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@meshxdata/fops",
3
- "version": "0.1.50",
3
+ "version": "0.1.51",
4
4
  "description": "CLI to install and manage data mesh platforms",
5
5
  "keywords": [
6
6
  "fops",
@@ -1618,6 +1618,8 @@ class AppDelegate: NSObject, NSApplicationDelegate, NSMenuDelegate {
1618
1618
  checkForUpdate()
1619
1619
  let updateTimer = Timer(timeInterval: 900, repeats: true) { _ in self.checkForUpdate() }
1620
1620
  RunLoop.main.add(updateTimer, forMode: .common)
1621
+ // Preload Azure resources
1622
+ preloadAzureResources()
1621
1623
  }
1622
1624
 
1623
1625
  func checkForUpdate() {
@@ -1819,7 +1821,19 @@ class AppDelegate: NSObject, NSApplicationDelegate, NSMenuDelegate {
1819
1821
 
1820
1822
  var azureCache: [String: Any]? = nil
1821
1823
  var azureCacheTime: Date? = nil
1822
- let azureCacheTTL: TimeInterval = 60 // 60 seconds
1824
+ let azureCacheTTL: TimeInterval = 120 // 2 minutes
1825
+
1826
+ func preloadAzureResources() {
1827
+ fops(["azure", "list", "--json"], capture: true) { out, success in
1828
+ guard success,
1829
+ let data = out.data(using: .utf8),
1830
+ let json = try? JSONSerialization.jsonObject(with: data) as? [String: Any] else { return }
1831
+ DispatchQueue.main.async {
1832
+ self.azureCache = json
1833
+ self.azureCacheTime = Date()
1834
+ }
1835
+ }
1836
+ }
1823
1837
 
1824
1838
  func populateAzureMenu(_ m: NSMenu) {
1825
1839
  // Use cache if fresh
@@ -1837,21 +1851,23 @@ class AppDelegate: NSObject, NSApplicationDelegate, NSMenuDelegate {
1837
1851
 
1838
1852
  // Fetch VMs and AKS clusters via fops azure list --json
1839
1853
  fops(["azure", "list", "--json"], capture: true) { out, success in
1840
- guard success,
1841
- let data = out.data(using: .utf8),
1842
- let json = try? JSONSerialization.jsonObject(with: data) as? [String: Any] else {
1843
- m.removeAllItems()
1844
- let err = NSMenuItem(title: "Not authenticated or plugin disabled", action: nil, keyEquivalent: "")
1845
- err.isEnabled = false
1846
- m.addItem(err)
1847
- return
1848
- }
1854
+ DispatchQueue.main.async {
1855
+ guard success,
1856
+ let data = out.data(using: .utf8),
1857
+ let json = try? JSONSerialization.jsonObject(with: data) as? [String: Any] else {
1858
+ m.removeAllItems()
1859
+ let err = NSMenuItem(title: "Not authenticated or plugin disabled", action: nil, keyEquivalent: "")
1860
+ err.isEnabled = false
1861
+ m.addItem(err)
1862
+ return
1863
+ }
1849
1864
 
1850
- // Update cache
1851
- self.azureCache = json
1852
- self.azureCacheTime = Date()
1865
+ // Update cache
1866
+ self.azureCache = json
1867
+ self.azureCacheTime = Date()
1853
1868
 
1854
- self.renderAzureMenu(m, data: json)
1869
+ self.renderAzureMenu(m, data: json)
1870
+ }
1855
1871
  }
1856
1872
  }
1857
1873
 
@@ -1870,9 +1886,21 @@ class AppDelegate: NSObject, NSApplicationDelegate, NSMenuDelegate {
1870
1886
  let name = vm["name"] as? String ?? "unknown"
1871
1887
  let ip = vm["publicIp"] as? String ?? ""
1872
1888
  let ipSuffix = ip.isEmpty ? "" : " (\\(ip))"
1873
- let item = NSMenuItem(title: " " + name + ipSuffix, action: #selector(AppDelegate.openAzureVM(_:)), keyEquivalent: "")
1874
- item.representedObject = name
1875
- item.target = self
1889
+
1890
+ let item = NSMenuItem(title: " " + name + ipSuffix, action: nil, keyEquivalent: "")
1891
+ let submenu = NSMenu()
1892
+
1893
+ let sshItem = NSMenuItem(title: "SSH", action: #selector(AppDelegate.azureVMSSH(_:)), keyEquivalent: "")
1894
+ sshItem.representedObject = name
1895
+ sshItem.target = self
1896
+ submenu.addItem(sshItem)
1897
+
1898
+ let testItem = NSMenuItem(title: "Run Tests", action: #selector(AppDelegate.azureVMTest(_:)), keyEquivalent: "")
1899
+ testItem.representedObject = name
1900
+ testItem.target = self
1901
+ submenu.addItem(testItem)
1902
+
1903
+ item.submenu = submenu
1876
1904
  m.addItem(item)
1877
1905
  }
1878
1906
  }
@@ -1887,9 +1915,28 @@ class AppDelegate: NSObject, NSApplicationDelegate, NSMenuDelegate {
1887
1915
  let name = cluster["name"] as? String ?? "unknown"
1888
1916
  let state = cluster["provisioningState"] as? String ?? ""
1889
1917
  let dot = state.lowercased() == "succeeded" ? "● " : "○ "
1890
- let item = NSMenuItem(title: " " + dot + name, action: #selector(AppDelegate.openAzureAKS(_:)), keyEquivalent: "")
1891
- item.representedObject = name
1892
- item.target = self
1918
+
1919
+ let item = NSMenuItem(title: " " + dot + name, action: nil, keyEquivalent: "")
1920
+ let submenu = NSMenu()
1921
+
1922
+ let kubeconfigItem = NSMenuItem(title: "Kubeconfig", action: #selector(AppDelegate.azureAKSKubeconfig(_:)), keyEquivalent: "")
1923
+ kubeconfigItem.representedObject = name
1924
+ kubeconfigItem.target = self
1925
+ submenu.addItem(kubeconfigItem)
1926
+
1927
+ let testItem = NSMenuItem(title: "Run Tests", action: #selector(AppDelegate.azureAKSTest(_:)), keyEquivalent: "")
1928
+ testItem.representedObject = name
1929
+ testItem.target = self
1930
+ submenu.addItem(testItem)
1931
+
1932
+ submenu.addItem(NSMenuItem.separator())
1933
+
1934
+ let statusItem = NSMenuItem(title: "Status", action: #selector(AppDelegate.azureAKSStatus(_:)), keyEquivalent: "")
1935
+ statusItem.representedObject = name
1936
+ statusItem.target = self
1937
+ submenu.addItem(statusItem)
1938
+
1939
+ item.submenu = submenu
1893
1940
  m.addItem(item)
1894
1941
  }
1895
1942
  }
@@ -1901,12 +1948,27 @@ class AppDelegate: NSObject, NSApplicationDelegate, NSMenuDelegate {
1901
1948
  }
1902
1949
  }
1903
1950
 
1904
- @objc func openAzureVM(_ sender: NSMenuItem) {
1951
+ @objc func azureVMSSH(_ sender: NSMenuItem) {
1905
1952
  guard let name = sender.representedObject as? String else { return }
1906
1953
  openTerminal(command: "fops azure ssh \\(name)")
1907
1954
  }
1908
1955
 
1909
- @objc func openAzureAKS(_ sender: NSMenuItem) {
1956
+ @objc func azureVMTest(_ sender: NSMenuItem) {
1957
+ guard let name = sender.representedObject as? String else { return }
1958
+ openTerminal(command: "fops azure test \\(name)")
1959
+ }
1960
+
1961
+ @objc func azureAKSKubeconfig(_ sender: NSMenuItem) {
1962
+ guard let name = sender.representedObject as? String else { return }
1963
+ openTerminal(command: "fops azure aks kubeconfig \\(name)")
1964
+ }
1965
+
1966
+ @objc func azureAKSTest(_ sender: NSMenuItem) {
1967
+ guard let name = sender.representedObject as? String else { return }
1968
+ openTerminal(command: "fops azure aks test \\(name)")
1969
+ }
1970
+
1971
+ @objc func azureAKSStatus(_ sender: NSMenuItem) {
1910
1972
  guard let name = sender.representedObject as? String else { return }
1911
1973
  openTerminal(command: "fops azure aks status \\(name)")
1912
1974
  }