@homeflare/alchemy 0.20.0 → 0.21.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 (172) hide show
  1. package/README.md +25 -0
  2. package/dist/caddy/access-forward-auth.d.ts +56 -0
  3. package/dist/caddy/access-forward-auth.d.ts.map +1 -0
  4. package/dist/caddy/index.d.ts +6 -0
  5. package/dist/caddy/index.d.ts.map +1 -1
  6. package/dist/caddy/index.js +169 -75
  7. package/dist/caddy/index.js.map +10 -7
  8. package/dist/cloudflare/mcp-server-api.d.ts +135 -0
  9. package/dist/cloudflare/mcp-server-api.d.ts.map +1 -0
  10. package/dist/cloudflare/mcp-server-form.d.ts +116 -0
  11. package/dist/cloudflare/mcp-server-form.d.ts.map +1 -0
  12. package/dist/index.d.ts +1 -0
  13. package/dist/index.d.ts.map +1 -1
  14. package/dist/launchd/file-converge.d.ts +70 -0
  15. package/dist/launchd/file-converge.d.ts.map +1 -0
  16. package/dist/launchd/file-identity.d.ts +32 -0
  17. package/dist/launchd/file-identity.d.ts.map +1 -0
  18. package/dist/launchd/host-file-form.d.ts +2 -0
  19. package/dist/launchd/host-file-form.d.ts.map +1 -1
  20. package/dist/launchd/host-file-lifecycle.d.ts +11 -24
  21. package/dist/launchd/host-file-lifecycle.d.ts.map +1 -1
  22. package/dist/launchd/host-file.d.ts.map +1 -1
  23. package/dist/launchd/index.js +173 -120
  24. package/dist/launchd/index.js.map +12 -10
  25. package/dist/launchd/local-runner.d.ts.map +1 -1
  26. package/dist/launchd/runner.d.ts +17 -2
  27. package/dist/launchd/runner.d.ts.map +1 -1
  28. package/dist/launchd/sudo-runner.d.ts +11 -0
  29. package/dist/launchd/sudo-runner.d.ts.map +1 -1
  30. package/dist/linux/index.js.map +3 -3
  31. package/dist/linux/sudo-listing.d.ts +47 -0
  32. package/dist/linux/sudo-listing.d.ts.map +1 -0
  33. package/dist/proxmox/credential-literals.d.ts +1 -1
  34. package/dist/proxmox/credential-literals.d.ts.map +1 -1
  35. package/dist/proxmox/generated/pbs/nodes-node.d.ts +1 -1
  36. package/dist/proxmox/generated/pbs/nodes-node.d.ts.map +1 -1
  37. package/dist/proxmox/generated/pbs.d.ts +7 -0
  38. package/dist/proxmox/generated/pbs.d.ts.map +1 -1
  39. package/dist/proxmox/generated/pve.d.ts +7 -0
  40. package/dist/proxmox/generated/pve.d.ts.map +1 -1
  41. package/dist/proxmox/index.d.ts +1 -1
  42. package/dist/proxmox/index.d.ts.map +1 -1
  43. package/dist/proxmox/index.js +2 -2
  44. package/dist/proxmox/index.js.map +9 -9
  45. package/dist/proxmox/pbs-notification-target-form.d.ts +1 -1
  46. package/dist/proxmox/pbs-notification-target-form.d.ts.map +1 -1
  47. package/dist/proxmox/pbs-notification-target.d.ts +1 -1
  48. package/dist/proxmox/pbs-notification-target.d.ts.map +1 -1
  49. package/dist/release/archive.d.ts +11 -0
  50. package/dist/release/archive.d.ts.map +1 -0
  51. package/dist/release/binary-claim.d.ts +53 -0
  52. package/dist/release/binary-claim.d.ts.map +1 -0
  53. package/dist/release/binary-diff.d.ts +38 -0
  54. package/dist/release/binary-diff.d.ts.map +1 -0
  55. package/dist/release/binary-form.d.ts +118 -0
  56. package/dist/release/binary-form.d.ts.map +1 -0
  57. package/dist/release/binary-lifecycle.d.ts +55 -0
  58. package/dist/release/binary-lifecycle.d.ts.map +1 -0
  59. package/dist/release/binary-read.d.ts +11 -0
  60. package/dist/release/binary-read.d.ts.map +1 -0
  61. package/dist/release/binary.d.ts +68 -0
  62. package/dist/release/binary.d.ts.map +1 -0
  63. package/dist/release/catalog.d.ts +76 -0
  64. package/dist/release/catalog.d.ts.map +1 -0
  65. package/dist/release/checksums.d.ts +22 -0
  66. package/dist/release/checksums.d.ts.map +1 -0
  67. package/dist/release/declared-pins.d.ts +4 -0
  68. package/dist/release/declared-pins.d.ts.map +1 -0
  69. package/dist/release/download.d.ts +44 -0
  70. package/dist/release/download.d.ts.map +1 -0
  71. package/dist/release/fake-deploy.d.ts +48 -0
  72. package/dist/release/fake-deploy.d.ts.map +1 -0
  73. package/dist/release/fake-engine.d.ts +8 -0
  74. package/dist/release/fake-engine.d.ts.map +1 -0
  75. package/dist/release/fake-install.d.ts +39 -0
  76. package/dist/release/fake-install.d.ts.map +1 -0
  77. package/dist/release/fake-provider.d.ts +58 -0
  78. package/dist/release/fake-provider.d.ts.map +1 -0
  79. package/dist/release/fake-release.d.ts +95 -0
  80. package/dist/release/fake-release.d.ts.map +1 -0
  81. package/dist/release/index.d.ts +24 -0
  82. package/dist/release/index.d.ts.map +1 -0
  83. package/dist/release/index.js +1365 -0
  84. package/dist/release/index.js.map +35 -0
  85. package/dist/release/providers.d.ts +19 -0
  86. package/dist/release/providers.d.ts.map +1 -0
  87. package/dist/release/refused.d.ts +39 -0
  88. package/dist/release/refused.d.ts.map +1 -0
  89. package/dist/release/tar.d.ts +14 -0
  90. package/dist/release/tar.d.ts.map +1 -0
  91. package/dist/release/victoria.d.ts +36 -0
  92. package/dist/release/victoria.d.ts.map +1 -0
  93. package/dist/{proxmox → secrets}/write-only.d.ts.map +1 -1
  94. package/docs/release-binary-catalogs.md +113 -0
  95. package/docs/release-binary-measured.md +163 -0
  96. package/docs/release-binary-refusals.md +57 -0
  97. package/docs/release-binary-upstream.md +163 -0
  98. package/docs/release-binary.md +154 -0
  99. package/package.json +5 -1
  100. package/src/caddy/access-forward-auth.test.ts +63 -0
  101. package/src/caddy/access-forward-auth.ts +120 -0
  102. package/src/caddy/index.ts +10 -0
  103. package/src/caddy/providers.test.ts +4 -0
  104. package/src/cloudflare/mcp-server-api.ts +294 -0
  105. package/src/cloudflare/mcp-server-form.ts +219 -0
  106. package/src/index.ts +1 -0
  107. package/src/launchd/file-converge.ts +233 -0
  108. package/src/launchd/file-identity.ts +69 -0
  109. package/src/launchd/host-file-alias.test.ts +65 -0
  110. package/src/launchd/host-file-form.ts +2 -1
  111. package/src/launchd/host-file-lifecycle.ts +25 -144
  112. package/src/launchd/host-file.ts +8 -2
  113. package/src/launchd/local-runner.test.ts +12 -1
  114. package/src/launchd/local-runner.ts +2 -0
  115. package/src/launchd/runner.ts +17 -2
  116. package/src/launchd/sudo-runner.ts +11 -0
  117. package/src/linux/sudo-listing.ts +122 -0
  118. package/src/proxmox/credential-literals.ts +1 -1
  119. package/src/proxmox/generated/pbs/nodes-node.ts +1 -1
  120. package/src/proxmox/generated/pbs.ts +7 -0
  121. package/src/proxmox/generated/pve.ts +7 -0
  122. package/src/proxmox/index.ts +1 -1
  123. package/src/proxmox/pbs-notification-target-form.ts +1 -1
  124. package/src/proxmox/pbs-notification-target-lifecycle.ts +1 -1
  125. package/src/proxmox/pbs-notification-target-wire.ts +1 -1
  126. package/src/proxmox/pbs-notification-target.ts +1 -1
  127. package/src/release/adopt-parity.test.ts +106 -0
  128. package/src/release/apply-pins.test.ts +128 -0
  129. package/src/release/archive.ts +94 -0
  130. package/src/release/binary-alias.test.ts +109 -0
  131. package/src/release/binary-claim.ts +80 -0
  132. package/src/release/binary-claims.test.ts +47 -0
  133. package/src/release/binary-diff.ts +73 -0
  134. package/src/release/binary-form.ts +229 -0
  135. package/src/release/binary-lifecycle.test.ts +90 -0
  136. package/src/release/binary-lifecycle.ts +202 -0
  137. package/src/release/binary-read.ts +55 -0
  138. package/src/release/binary-refusals.test.ts +192 -0
  139. package/src/release/binary-sudo.test.ts +93 -0
  140. package/src/release/binary.ts +181 -0
  141. package/src/release/catalog.test.ts +96 -0
  142. package/src/release/catalog.ts +175 -0
  143. package/src/release/checksums.test.ts +35 -0
  144. package/src/release/checksums.ts +43 -0
  145. package/src/release/declared-pins.ts +39 -0
  146. package/src/release/download.test.ts +138 -0
  147. package/src/release/download.ts +110 -0
  148. package/src/release/error-channel.test.ts +69 -0
  149. package/src/release/fake-deploy.ts +87 -0
  150. package/src/release/fake-engine.ts +50 -0
  151. package/src/release/fake-install.ts +59 -0
  152. package/src/release/fake-provider.ts +68 -0
  153. package/src/release/fake-release.ts +185 -0
  154. package/src/release/fixtures/victoria/darwin-arm64-assets.txt +22 -0
  155. package/src/release/fixtures/victoria/victoria-logs-darwin-arm64-v1.52.0_checksums.txt +2 -0
  156. package/src/release/fixtures/victoria/victoria-metrics-darwin-arm64-v1.151.0_checksums.txt +2 -0
  157. package/src/release/fixtures/victoria/victoria-traces-darwin-arm64-v0.10.0_checksums.txt +2 -0
  158. package/src/release/fixtures/victoria/vmutils-darwin-arm64-v1.151.0_checksums.txt +8 -0
  159. package/src/release/index.ts +41 -0
  160. package/src/release/plan.test.ts +189 -0
  161. package/src/release/provider-refusals.test.ts +48 -0
  162. package/src/release/providers.test.ts +174 -0
  163. package/src/release/providers.ts +24 -0
  164. package/src/release/recovery-read.test.ts +44 -0
  165. package/src/release/refused.ts +40 -0
  166. package/src/release/tar.test.ts +142 -0
  167. package/src/release/tar.ts +195 -0
  168. package/src/release/victoria.test.ts +108 -0
  169. package/src/release/victoria.ts +154 -0
  170. package/src/{proxmox → secrets}/write-only.ts +6 -0
  171. /package/dist/{proxmox → secrets}/write-only.d.ts +0 -0
  172. /package/src/{proxmox → secrets}/write-only.test.ts +0 -0
@@ -0,0 +1,108 @@
1
+ /**
2
+ * The REAL Victoria data set against the vendor's own files — no network: fixtures/victoria/ holds
3
+ * the four checksum files byte-for-byte as fetched on 2026-09-22 (each one's SHA-256 equalled
4
+ * GitHub's asset digest for it that day; the data set records it), and the darwin-arm64 asset
5
+ * names the release API listed.
6
+ *
7
+ * ★ THE CHAIN THIS PROVES: fixture bytes = the recorded digest of the vendor file → the parser
8
+ * reads exactly its lines → the data set equals those lines. A pin typed by hand, a member missed
9
+ * or a line the vendor added fails here, not on a host.
10
+ * ⚠️ CONSISTENCY, NOT PROVENANCE. No network here: that the recorded digest is GITHUB'S was measured
11
+ * once, on the recorded date. A change that edits a fixture and its pins together passes; review
12
+ * is the gate for that.
13
+ */
14
+ import { describe, expect, test } from 'bun:test';
15
+ import { sha256Hex } from '../launchd/job-form.ts';
16
+ import { releaseUrl } from './binary-form.ts';
17
+ import { catalogBinary } from './catalog.ts';
18
+ import { parseChecksums } from './checksums.ts';
19
+ import { VICTORIA_RELEASES } from './victoria.ts';
20
+
21
+ const fixture = (name: string) => Bun.file(new URL(`fixtures/victoria/${name}`, import.meta.url));
22
+ const assets = (await fixture('darwin-arm64-assets.txt').text()).trim().split('\n');
23
+ const REPOS: Readonly<Record<string, string>> = {
24
+ 'victoria-logs': 'VictoriaMetrics/VictoriaLogs',
25
+ 'victoria-metrics': 'VictoriaMetrics/VictoriaMetrics',
26
+ 'victoria-traces': 'VictoriaMetrics/VictoriaTraces',
27
+ vmutils: 'VictoriaMetrics/VictoriaMetrics',
28
+ };
29
+
30
+ const archives = Object.entries(VICTORIA_RELEASES.packages).flatMap(([pkg, entry]) =>
31
+ Object.entries(entry.versions).flatMap(([version, platforms]) =>
32
+ Object.entries(platforms).map(([platform, archive]) => ({
33
+ archive,
34
+ entry,
35
+ pkg,
36
+ platform,
37
+ version,
38
+ })),
39
+ ),
40
+ );
41
+
42
+ describe('the Victoria data set is the vendor checksum files', () => {
43
+ test('it pins the four archives the Mac host runs, and nothing else', () => {
44
+ expect(archives.map((a) => `${a.pkg} ${a.version} ${a.platform}`).sort()).toEqual([
45
+ 'victoria-logs 1.52.0 darwin-arm64',
46
+ 'victoria-metrics 1.151.0 darwin-arm64',
47
+ 'victoria-traces 0.10.0 darwin-arm64',
48
+ 'vmutils 1.151.0 darwin-arm64',
49
+ ]);
50
+ });
51
+
52
+ test.each(archives.map((a) => [`${a.pkg} ${a.version}`, a] as const))('%s', async (_, a) => {
53
+ const asset = `${a.pkg}-${a.platform}-v${a.version}.tar.gz`;
54
+ const sums = `${a.pkg}-${a.platform}-v${a.version}_checksums.txt`;
55
+ // ⛔ Exact, whole names — and the names the release API actually lists.
56
+ expect([a.archive.repo, a.archive.tag, a.archive.asset]).toEqual([
57
+ REPOS[a.pkg] ?? '',
58
+ `v${a.version}`,
59
+ asset,
60
+ ]);
61
+ const base = `https://github.com/${REPOS[a.pkg] ?? ''}/releases/download/v${a.version}`;
62
+ expect(releaseUrl(a.archive.repo, a.archive.tag, a.archive.asset)).toBe(`${base}/${asset}`);
63
+ expect(a.archive.checksums.url).toBe(`${base}/${sums}`);
64
+ expect(a.archive.checksums.recorded).toBe('2026-09-22');
65
+ expect(assets).toContain(asset);
66
+ const bytes = new Uint8Array(await fixture(sums).arrayBuffer());
67
+ expect(sha256Hex(bytes)).toBe(a.archive.checksums.sha256);
68
+ const lines = parseChecksums(new TextDecoder().decode(bytes));
69
+ const [first, ...members] = [...lines.entries()];
70
+ expect(first).toEqual([asset, a.archive.sha256]);
71
+ expect(Object.fromEntries(members)).toEqual(a.archive.members);
72
+ // ★ Every installed name maps to `<name>-prod`, deliberately, and every one is pinned.
73
+ for (const [binary, member] of Object.entries(a.entry.binaries)) {
74
+ expect(member).toBe(`${binary}-prod`);
75
+ expect(a.archive.members[member]).toMatch(/^[0-9a-f]{64}$/);
76
+ }
77
+ expect(Object.keys(a.entry.binaries).length).toBe(members.length);
78
+ });
79
+
80
+ test('no pinned asset is an enterprise, cluster or other sibling, though each one is listed', () => {
81
+ const siblings = assets.filter((name) => /-(enterprise|cluster)[._]/.test(name));
82
+ expect(siblings.length).toBe(12);
83
+ const names = archives.flatMap((a) => [a.archive.asset, a.archive.checksums.url]);
84
+ for (const name of names) expect(name).not.toMatch(/enterprise|cluster|vlutils/);
85
+ for (const sibling of siblings) expect(names.some((n) => n.endsWith(sibling))).toBe(false);
86
+ });
87
+
88
+ test('vmalert out of the data set: the member vmalert-prod of the plain vmutils archive', () => {
89
+ const request = {
90
+ binary: 'vmalert',
91
+ package: 'vmutils',
92
+ platform: 'darwin-arm64',
93
+ version: '1.151.0',
94
+ };
95
+ expect(catalogBinary(VICTORIA_RELEASES, request)).toEqual({
96
+ archive: {
97
+ asset: 'vmutils-darwin-arm64-v1.151.0.tar.gz',
98
+ repo: 'VictoriaMetrics/VictoriaMetrics',
99
+ sha256: '27d68bac90e28929214091ed9d27f2e9fef25a080407e2c8661ea9b52dd6b183',
100
+ size: 123_584_800,
101
+ tag: 'v1.151.0',
102
+ },
103
+ member: 'vmalert-prod',
104
+ name: 'vmalert',
105
+ sha256: '62845795167e9ff47890e83ac4ac5934693c105767db88591c95a08f3c4fb354',
106
+ });
107
+ });
108
+ });
@@ -0,0 +1,154 @@
1
+ /**
2
+ * VictoriaMetrics' release archives, pinned — the first data set for Release.Binary, and vendor
3
+ * facts only: every digest copied from the vendor's own checksum file for that archive and
4
+ * cross-checked against GitHub's asset digest ON THE RECORDED DATE. Nothing here names a host, a
5
+ * path, a user or an estate. victoria.test.ts holds every pin to the committed checksum files
6
+ * (fixtures/victoria/) — ⚠️ consistency, not provenance: it cannot re-read GitHub, so a fixture
7
+ * edited together with its pins passes, and review is the gate for that.
8
+ *
9
+ * ★ PINNED IN CODE, NOT FETCHED AT APPLY. The checksum file is published by the same account, on
10
+ * the same release, over the same channel as the archive it describes — and these releases are
11
+ * MUTABLE (`"immutable": false` on v1.151.0, v1.52.0 and v0.10.0, measured 2026-09-22; the
12
+ * vendor's own release Makefile says to delete an asset in the UI to re-upload it). Whoever can
13
+ * swap an archive can swap its checksum file in the same minute, and a provider that trusts
14
+ * whatever checksum file it finds would install the new bytes and call them verified. A pin
15
+ * committed here changes only through a reviewed kit release, so a swapped asset is a REFUSAL
16
+ * that names the digest it expected. It also means an apply makes one request, not two, and a
17
+ * plan knows exactly which bytes it will install without touching the network.
18
+ * ⚠️ TRUST ROOT. At apply, these pins alone: the transport (TLS, the redirect, the CDN) can fail
19
+ * a download, never pass other bytes. The pins' own root is the GitHub release over TLS as read
20
+ * on RECORDED (trust on first use), uploaded from a maintainer's personal account.
21
+ * VictoriaMetrics publishes no signature, cosign bundle, SLSA provenance or GitHub artifact
22
+ * attestation for these archives (measured 2026-09-22: no .sig/.asc/.pem/.bundle assets; the
23
+ * attestations API answers 404 for all four digests, next to a positive control that answers
24
+ * 200). A checksum file proves the download is not corrupt — integrity — not who built it.
25
+ * ⛔ A NEW VERSION IS A NEW ENTRY, WALKED DOWN THE SAME WAY — docs/release-binary-catalogs.md.
26
+ * Never `latest`, never sorted by publish date: VictoriaLogs v1.51.1 was published AFTER v1.52.0.
27
+ * ⛔ EXACT NAMES. `-enterprise`, `-cluster` and `-enterprise-cluster` archives sit beside each of
28
+ * these with every prefix in common, so each asset name below is written out whole — never
29
+ * composed from a package and a version, which is how a template drifts onto a sibling.
30
+ * ★ THE VENDOR'S `-prod` SUFFIX IS DROPPED ON PURPOSE: every member is `<binary>-prod`, and
31
+ * installing it as `<binary>` keeps a job's argv[0], `ps` and `pgrep` names identical to the
32
+ * builds it replaces. The map is written out per package, never derived.
33
+ */
34
+ import type { ReleaseCatalog } from './catalog.ts';
35
+
36
+ const RECORDED = '2026-09-22';
37
+ const DOWNLOAD = 'https://github.com/VictoriaMetrics';
38
+
39
+ export const VICTORIA_RELEASES: ReleaseCatalog = {
40
+ packages: {
41
+ 'victoria-logs': {
42
+ binaries: { 'victoria-logs': 'victoria-logs-prod' },
43
+ versions: {
44
+ '1.52.0': {
45
+ 'darwin-arm64': {
46
+ asset: 'victoria-logs-darwin-arm64-v1.52.0.tar.gz',
47
+ checksums: {
48
+ recorded: RECORDED,
49
+ sha256: 'd4ca686c3cceec78a0f4e733ef9ab3f857549131ea48cd6f89f701cda406ac4b',
50
+ url: `${DOWNLOAD}/VictoriaLogs/releases/download/v1.52.0/victoria-logs-darwin-arm64-v1.52.0_checksums.txt`,
51
+ },
52
+ members: {
53
+ 'victoria-logs-prod':
54
+ '9e48809e314902782959b3a4e683a3087476759d0293791a0564921c676ca7be',
55
+ },
56
+ repo: 'VictoriaMetrics/VictoriaLogs',
57
+ sha256: '3157d4b6181d8a7e3e30918e2cbfcd4cc4cb66263e3ef21ea91e4f20f8980883',
58
+ size: 10_943_697,
59
+ tag: 'v1.52.0',
60
+ },
61
+ },
62
+ },
63
+ },
64
+ 'victoria-metrics': {
65
+ // ⛔ The SINGLE-NODE archive. `…-cluster.tar.gz` holds vminsert/vmselect/vmstorage instead.
66
+ binaries: { 'victoria-metrics': 'victoria-metrics-prod' },
67
+ versions: {
68
+ '1.151.0': {
69
+ 'darwin-arm64': {
70
+ asset: 'victoria-metrics-darwin-arm64-v1.151.0.tar.gz',
71
+ checksums: {
72
+ recorded: RECORDED,
73
+ sha256: '735745ee0e7b2d5b8118883f2d0ed124c2a12d70261c16380128f5e362566d1e',
74
+ url: `${DOWNLOAD}/VictoriaMetrics/releases/download/v1.151.0/victoria-metrics-darwin-arm64-v1.151.0_checksums.txt`,
75
+ },
76
+ members: {
77
+ 'victoria-metrics-prod':
78
+ '3c493a95ac1e9034a3261b230c4d62f3b186a04aafcdbacc99bfc110dc5de6a1',
79
+ },
80
+ repo: 'VictoriaMetrics/VictoriaMetrics',
81
+ sha256: '8792437c4c0b63719fed7b44ad18d4b4167bbe6861ab3e84c7bb010c922e7582',
82
+ size: 12_739_105,
83
+ tag: 'v1.151.0',
84
+ },
85
+ },
86
+ },
87
+ },
88
+ 'victoria-traces': {
89
+ binaries: { 'victoria-traces': 'victoria-traces-prod' },
90
+ versions: {
91
+ '0.10.0': {
92
+ 'darwin-arm64': {
93
+ asset: 'victoria-traces-darwin-arm64-v0.10.0.tar.gz',
94
+ checksums: {
95
+ recorded: RECORDED,
96
+ sha256: 'cd32bfc21900b48ba543124e43827a1d13d735e45d50dbfd742c0ca6640e1aae',
97
+ url: `${DOWNLOAD}/VictoriaTraces/releases/download/v0.10.0/victoria-traces-darwin-arm64-v0.10.0_checksums.txt`,
98
+ },
99
+ members: {
100
+ 'victoria-traces-prod':
101
+ '4759ec89a466129b9eefc22244a111e1f489739340747805fd93b58fd0f7b2dd',
102
+ },
103
+ repo: 'VictoriaMetrics/VictoriaTraces',
104
+ sha256: 'cbe83f1d409cbb85fbf1c890c4a9b7fd34c1d74acec4dce2e0ebe46fcb260e38',
105
+ size: 11_126_077,
106
+ tag: 'v0.10.0',
107
+ },
108
+ },
109
+ },
110
+ },
111
+ vmutils: {
112
+ // ★ ONE ARCHIVE, SEVEN TOOLS (measured: 264 MB unpacked). Only a declared member is extracted.
113
+ // vmalert-logs is not a tool of its own: it is vmalert run with `--rule.defaultRuleType=vlogs`.
114
+ binaries: {
115
+ vmagent: 'vmagent-prod',
116
+ vmalert: 'vmalert-prod',
117
+ 'vmalert-tool': 'vmalert-tool-prod',
118
+ vmauth: 'vmauth-prod',
119
+ vmbackup: 'vmbackup-prod',
120
+ vmctl: 'vmctl-prod',
121
+ vmrestore: 'vmrestore-prod',
122
+ },
123
+ versions: {
124
+ '1.151.0': {
125
+ 'darwin-arm64': {
126
+ asset: 'vmutils-darwin-arm64-v1.151.0.tar.gz',
127
+ checksums: {
128
+ recorded: RECORDED,
129
+ sha256: 'fda5a64fce9022bee7614c3fda27271c0826f1d7b90f8b162e1f48c77c0df04b',
130
+ url: `${DOWNLOAD}/VictoriaMetrics/releases/download/v1.151.0/vmutils-darwin-arm64-v1.151.0_checksums.txt`,
131
+ },
132
+ members: {
133
+ 'vmagent-prod': 'd3b6fa1f71ef48beac619f15f8adfa7610e76605caf37db1ebfbb379b6692329',
134
+ 'vmalert-prod': '62845795167e9ff47890e83ac4ac5934693c105767db88591c95a08f3c4fb354',
135
+ 'vmalert-tool-prod':
136
+ 'cbffb9495e4bb1457c9d45e0a7064b3a3a29b2cfd1ae24bfe8f00ec327c26998',
137
+ // ⚠️ gitleaks' generic-api-key rule reads this one public digest as a key (its
138
+ // entropy; measured 2026-09-22). It is the vendor's published SHA-256 of vmauth-prod.
139
+ 'vmauth-prod': '398df9e0f5b7035d037e39ee9ff66a10ddde5333d832602463aa4d2865fdb508', // gitleaks:allow
140
+ 'vmbackup-prod': '1974a2ee211b49bf581287808e010846f6c47ff135276214c6da628567777b9e',
141
+ 'vmctl-prod': '998b111eee206b98e6d25fdf2fbaa455ecc17c7f9e7c3b2373e127cef762459f',
142
+ 'vmrestore-prod': 'fc824df7215b01b57921ed46afde7fea6b6698adf13d9ea8e3fe36e194ef8190',
143
+ },
144
+ repo: 'VictoriaMetrics/VictoriaMetrics',
145
+ sha256: '27d68bac90e28929214091ed9d27f2e9fef25a080407e2c8661ea9b52dd6b183',
146
+ size: 123_584_800,
147
+ tag: 'v1.151.0',
148
+ },
149
+ },
150
+ },
151
+ },
152
+ },
153
+ vendor: 'VictoriaMetrics',
154
+ };
@@ -2,6 +2,12 @@
2
2
  * Values a declaration may SEND and must never STORE — a webhook secret, a header carrying a
3
3
  * credential, an smtp password — and the one form in which a plan may still remember them.
4
4
  *
5
+ * ★ FAMILY-NEUTRAL ON PURPOSE, MOVED HERE FROM `proxmox/` 2026-09-22. The rule it encodes is not
6
+ * about Proxmox: Alchemy's state store is the same unencrypted store for every provider, so the
7
+ * Cloudflare MCP server entry's `auth_credentials` needs exactly this shape. A second copy under
8
+ * `cloudflare/` would be two seal formats for one rule; a cross-family import would make
9
+ * Cloudflare depend on Proxmox. Neither; it lives on its own.
10
+ *
5
11
  * ⛔ A SECRET PROP IS A SECRET IN THE STATE STORE, WHATEVER TYPE IT HAS. Alchemy persists props as
6
12
  * well as attributes — `delete` is handed `olds`, which can only have come from the store — and
7
13
  * it does not encrypt either: `StateEncoding.ts` TAGS a `Redacted` value and writes the inner
File without changes
File without changes