@pleri/olam-cli 0.1.147 → 0.1.150

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 (137) hide show
  1. package/dist/agent-stream/agent-sdk-to-chunks.js +276 -0
  2. package/dist/agent-stream/agent-stream-launch.js +348 -0
  3. package/dist/agent-stream/chunks-subscriber-transport.js +262 -0
  4. package/dist/agent-stream/codex-runner.js +188 -0
  5. package/dist/agent-stream/driver-runner.js +347 -0
  6. package/dist/agent-stream/operator-subscription.js +179 -0
  7. package/dist/commands/auth.d.ts.map +1 -1
  8. package/dist/commands/auth.js +26 -1
  9. package/dist/commands/auth.js.map +1 -1
  10. package/dist/commands/create.d.ts.map +1 -1
  11. package/dist/commands/create.js +39 -0
  12. package/dist/commands/create.js.map +1 -1
  13. package/dist/commands/doctor.d.ts +54 -3
  14. package/dist/commands/doctor.d.ts.map +1 -1
  15. package/dist/commands/doctor.js +348 -6
  16. package/dist/commands/doctor.js.map +1 -1
  17. package/dist/commands/init.d.ts +46 -0
  18. package/dist/commands/init.d.ts.map +1 -1
  19. package/dist/commands/init.js +90 -0
  20. package/dist/commands/init.js.map +1 -1
  21. package/dist/commands/kg-build.d.ts +23 -0
  22. package/dist/commands/kg-build.d.ts.map +1 -1
  23. package/dist/commands/kg-build.js +104 -2
  24. package/dist/commands/kg-build.js.map +1 -1
  25. package/dist/commands/restart.d.ts +18 -0
  26. package/dist/commands/restart.d.ts.map +1 -0
  27. package/dist/commands/restart.js +113 -0
  28. package/dist/commands/restart.js.map +1 -0
  29. package/dist/commands/services.d.ts +41 -3
  30. package/dist/commands/services.d.ts.map +1 -1
  31. package/dist/commands/services.js +221 -13
  32. package/dist/commands/services.js.map +1 -1
  33. package/dist/commands/setup-linux-gate.d.ts +26 -0
  34. package/dist/commands/setup-linux-gate.d.ts.map +1 -0
  35. package/dist/commands/setup-linux-gate.js +42 -0
  36. package/dist/commands/setup-linux-gate.js.map +1 -0
  37. package/dist/commands/setup-metrics.d.ts +26 -0
  38. package/dist/commands/setup-metrics.d.ts.map +1 -0
  39. package/dist/commands/setup-metrics.js +57 -0
  40. package/dist/commands/setup-metrics.js.map +1 -0
  41. package/dist/commands/setup-phase-5a-skill-source.d.ts +68 -0
  42. package/dist/commands/setup-phase-5a-skill-source.d.ts.map +1 -0
  43. package/dist/commands/setup-phase-5a-skill-source.js +196 -0
  44. package/dist/commands/setup-phase-5a-skill-source.js.map +1 -0
  45. package/dist/commands/setup-phase-5b-project-sweep.d.ts +38 -0
  46. package/dist/commands/setup-phase-5b-project-sweep.d.ts.map +1 -0
  47. package/dist/commands/setup-phase-5b-project-sweep.js +176 -0
  48. package/dist/commands/setup-phase-5b-project-sweep.js.map +1 -0
  49. package/dist/commands/setup.d.ts +19 -0
  50. package/dist/commands/setup.d.ts.map +1 -1
  51. package/dist/commands/setup.js +22 -0
  52. package/dist/commands/setup.js.map +1 -1
  53. package/dist/commands/skills-10x.d.ts +23 -0
  54. package/dist/commands/skills-10x.d.ts.map +1 -0
  55. package/dist/commands/skills-10x.js +308 -0
  56. package/dist/commands/skills-10x.js.map +1 -0
  57. package/dist/commands/substrate-audit-log.d.ts +2 -0
  58. package/dist/commands/substrate-audit-log.d.ts.map +1 -1
  59. package/dist/commands/substrate-audit-log.js +13 -0
  60. package/dist/commands/substrate-audit-log.js.map +1 -1
  61. package/dist/image-digests.json +7 -7
  62. package/dist/index.js +18102 -15234
  63. package/dist/index.js.map +1 -1
  64. package/dist/lib/auth-refresh-kubernetes.d.ts +62 -0
  65. package/dist/lib/auth-refresh-kubernetes.d.ts.map +1 -0
  66. package/dist/lib/auth-refresh-kubernetes.js +127 -0
  67. package/dist/lib/auth-refresh-kubernetes.js.map +1 -0
  68. package/dist/lib/build-if-stale.d.ts +33 -0
  69. package/dist/lib/build-if-stale.d.ts.map +1 -0
  70. package/dist/lib/build-if-stale.js +156 -0
  71. package/dist/lib/build-if-stale.js.map +1 -0
  72. package/dist/lib/bundle-freshness.d.ts +57 -0
  73. package/dist/lib/bundle-freshness.d.ts.map +1 -0
  74. package/dist/lib/bundle-freshness.js +223 -0
  75. package/dist/lib/bundle-freshness.js.map +1 -0
  76. package/dist/lib/bundle-source.d.ts +52 -0
  77. package/dist/lib/bundle-source.d.ts.map +1 -0
  78. package/dist/lib/bundle-source.js +83 -0
  79. package/dist/lib/bundle-source.js.map +1 -0
  80. package/dist/lib/kubectl-wrap.d.ts +6 -0
  81. package/dist/lib/kubectl-wrap.d.ts.map +1 -1
  82. package/dist/lib/kubectl-wrap.js +6 -1
  83. package/dist/lib/kubectl-wrap.js.map +1 -1
  84. package/dist/lib/manifest-refresh.d.ts +42 -1
  85. package/dist/lib/manifest-refresh.d.ts.map +1 -1
  86. package/dist/lib/manifest-refresh.js +83 -7
  87. package/dist/lib/manifest-refresh.js.map +1 -1
  88. package/dist/lib/peripheral-registry.d.ts +36 -0
  89. package/dist/lib/peripheral-registry.d.ts.map +1 -0
  90. package/dist/lib/peripheral-registry.js +55 -0
  91. package/dist/lib/peripheral-registry.js.map +1 -0
  92. package/dist/lib/port-forward.d.ts +67 -0
  93. package/dist/lib/port-forward.d.ts.map +1 -1
  94. package/dist/lib/port-forward.js +153 -0
  95. package/dist/lib/port-forward.js.map +1 -1
  96. package/dist/lib/upgrade-kubernetes.d.ts +52 -12
  97. package/dist/lib/upgrade-kubernetes.d.ts.map +1 -1
  98. package/dist/lib/upgrade-kubernetes.js +390 -22
  99. package/dist/lib/upgrade-kubernetes.js.map +1 -1
  100. package/dist/mcp-server.js +84 -58
  101. package/host-cp/compose.yaml +6 -0
  102. package/host-cp/k8s/manifests/30-configmap.yaml +6 -0
  103. package/host-cp/k8s/manifests/50-deployment.yaml +46 -9
  104. package/host-cp/k8s/manifests/auth-service/10-serviceaccount.yaml +8 -0
  105. package/host-cp/k8s/manifests/auth-service/20-rbac.yaml +34 -0
  106. package/host-cp/k8s/manifests/auth-service/30-configmap.yaml +24 -0
  107. package/host-cp/k8s/manifests/auth-service/45-pvc.yaml +25 -0
  108. package/host-cp/k8s/manifests/auth-service/50-deployment.yaml +117 -0
  109. package/host-cp/k8s/manifests/auth-service/60-service.yaml +21 -0
  110. package/host-cp/k8s/manifests/kg-service/10-serviceaccount.yaml +8 -0
  111. package/host-cp/k8s/manifests/kg-service/20-rbac.yaml +34 -0
  112. package/host-cp/k8s/manifests/kg-service/30-configmap.yaml +18 -0
  113. package/host-cp/k8s/manifests/kg-service/45-pvc.yaml +25 -0
  114. package/host-cp/k8s/manifests/kg-service/50-deployment.yaml +108 -0
  115. package/host-cp/k8s/manifests/kg-service/60-service.yaml +21 -0
  116. package/host-cp/k8s/manifests/mcp-auth-service/10-serviceaccount.yaml +8 -0
  117. package/host-cp/k8s/manifests/mcp-auth-service/20-rbac.yaml +34 -0
  118. package/host-cp/k8s/manifests/mcp-auth-service/30-configmap.yaml +18 -0
  119. package/host-cp/k8s/manifests/mcp-auth-service/45-pvc.yaml +25 -0
  120. package/host-cp/k8s/manifests/mcp-auth-service/50-deployment.yaml +117 -0
  121. package/host-cp/k8s/manifests/mcp-auth-service/60-service.yaml +21 -0
  122. package/host-cp/k8s/manifests/memory-service/10-serviceaccount.yaml +8 -0
  123. package/host-cp/k8s/manifests/memory-service/20-rbac.yaml +34 -0
  124. package/host-cp/k8s/manifests/memory-service/30-configmap.yaml +20 -0
  125. package/host-cp/k8s/manifests/memory-service/45-pvc.yaml +25 -0
  126. package/host-cp/k8s/manifests/memory-service/50-deployment.yaml +121 -0
  127. package/host-cp/k8s/manifests/memory-service/60-service.yaml +21 -0
  128. package/host-cp/k8s/templates/auth-service-secret-template.yaml +28 -0
  129. package/host-cp/k8s/templates/kg-service-secret-template.yaml +28 -0
  130. package/host-cp/k8s/templates/mcp-auth-service-secret-template.yaml +28 -0
  131. package/host-cp/k8s/templates/memory-service-secret-template.yaml +29 -0
  132. package/host-cp/src/agent-runtime-trigger.mjs +7 -5
  133. package/host-cp/src/plan-chat-secret.mjs +13 -2
  134. package/host-cp/src/plan-chat-service.mjs +116 -15
  135. package/host-cp/src/server.mjs +23 -11
  136. package/host-cp/src/upgrade-spawner.mjs +10 -5
  137. package/package.json +4 -2
@@ -27,6 +27,7 @@
27
27
  import * as fs from 'node:fs';
28
28
  import * as path from 'node:path';
29
29
  import { OLAM_STATE_DIR } from './config.js';
30
+ import { installRoot } from '../install-root.js';
30
31
  export const MANIFEST_REFRESH_AUDIT_LOG = path.join(OLAM_STATE_DIR, 'manifest-refresh-audit.jsonl');
31
32
  /** Security-sensitive field paths checked by the diff. */
32
33
  export const SECURITY_SENSITIVE_FIELDS = [
@@ -36,6 +37,71 @@ export const SECURITY_SENSITIVE_FIELDS = [
36
37
  'readOnlyRootFilesystem',
37
38
  'rules', // RBAC Role rules
38
39
  ];
40
+ /**
41
+ * Copy bundled manifests from the CLI package's host-cp/k8s/manifests/ to
42
+ * ~/.olam/k8s/manifests/ if the target dir does not yet exist.
43
+ *
44
+ * @param forceRefresh — when true, always overwrite (--force-refresh-manifests path).
45
+ * @param deps — injectable for tests.
46
+ */
47
+ export function seedManifestsFromBundle(forceRefresh, deps = {}) {
48
+ const existsSyncImpl = deps.existsSync ?? fs.existsSync;
49
+ const cpSyncImpl = deps.cpSync ?? fs.cpSync;
50
+ const mkdirSyncImpl = deps.mkdirSync ?? fs.mkdirSync;
51
+ // Resolve bundled source path: <install-root>/host-cp/k8s/manifests/
52
+ const rootDir = deps.installRootDir ?? installRoot();
53
+ const sourcePath = path.join(rootDir, 'host-cp', 'k8s', 'manifests');
54
+ // Resolve target path: ~/.olam/k8s/manifests/
55
+ // Allow override for tests; otherwise use the canonical OLAM_K8S_MANIFESTS_DIR equivalent.
56
+ const OLAM_HOME = path.join(process.env.HOME ?? process.env.USERPROFILE ?? '/tmp', '.olam');
57
+ const targetPath = deps.targetManifestsDir ?? path.join(OLAM_HOME, 'k8s', 'manifests');
58
+ // Skip if target exists AND force-refresh is not set (idempotent path).
59
+ if (!forceRefresh && existsSyncImpl(targetPath)) {
60
+ return {
61
+ seeded: false,
62
+ skipped: true,
63
+ reason: `~/.olam/k8s/manifests/ already exists — skipping seed (use --force-refresh-manifests to overwrite)`,
64
+ };
65
+ }
66
+ // Source bundle check: after the target-exists shortcut so dev-mode runs
67
+ // (where installRoot points at the monorepo and host-cp/k8s/ is built on demand)
68
+ // don't fail when target already exists. When source is absent, treat as a
69
+ // skipped-with-warning rather than a hard error. The hard error only fires
70
+ // when the copy itself fails (e.g. permission denied) — not when the CLI is
71
+ // running from a monorepo dev context without a pre-built bundle.
72
+ //
73
+ // Why: in dev/test contexts, operators often run `olam upgrade --substrate=kubernetes`
74
+ // from a source checkout where host-cp/k8s/manifests/ is not yet populated into
75
+ // <pkg>/host-cp/. Failing hard there breaks the dev workflow unnecessarily.
76
+ // Production installs (from npm) always have the bundle; the seeder succeeds there.
77
+ if (!existsSyncImpl(sourcePath)) {
78
+ return {
79
+ seeded: false,
80
+ skipped: true,
81
+ reason: `Bundled manifests not found at ${sourcePath} — skipping seed (dev/monorepo context).\n` +
82
+ 'If running from a published install, re-run npm install to restore the bundle.',
83
+ };
84
+ }
85
+ try {
86
+ mkdirSyncImpl(path.dirname(targetPath), { recursive: true });
87
+ cpSyncImpl(sourcePath, targetPath, { recursive: true });
88
+ }
89
+ catch (err) {
90
+ return {
91
+ seeded: false,
92
+ skipped: false,
93
+ error: `Failed to seed manifests from ${sourcePath} to ${targetPath}: ${err instanceof Error ? err.message : String(err)}`,
94
+ };
95
+ }
96
+ return {
97
+ seeded: true,
98
+ source: sourcePath,
99
+ target: targetPath,
100
+ message: forceRefresh
101
+ ? `Manifests force-refreshed from ${sourcePath} → ${targetPath}`
102
+ : `Manifests seeded from ${sourcePath} → ${targetPath}`,
103
+ };
104
+ }
39
105
  /**
40
106
  * Extract all values at a given dot-delimited key path from a parsed object
41
107
  * (recursively searches arrays and nested objects).
@@ -129,32 +195,41 @@ function appendAuditEntry(entry, auditLogPath, writeFileSyncImpl) {
129
195
  * @param manifestsDir — path to ~/.olam/k8s/manifests/
130
196
  * @param acceptRegression — true when --accept-security-regression is set
131
197
  * @param deps — injectable for tests
198
+ * @param peripheral — when set, scope diff to manifests/<peripheral>/ ONLY (C4/D19)
132
199
  *
133
200
  * Returns ok=false when:
134
201
  * - Security-sensitive fields differ AND !acceptRegression.
135
202
  * - Audit log write fails (ENOSPC).
203
+ * - peripheral is set but the peripheral subdir does not exist.
136
204
  *
137
205
  * On ok=true the audit log entry is written with accepted=true (or
138
206
  * accepted=false when no regression was detected — regression-free
139
207
  * refreshes are still audited).
208
+ *
209
+ * When peripheral is set, the audit-log entry includes { peripheral: <name> } (D19).
210
+ * Other peripherals' security drift does NOT block a targeted peripheral refresh (D19).
140
211
  */
141
- export async function runManifestRefresh(manifestsDir, acceptRegression, deps = {}) {
212
+ export async function runManifestRefresh(manifestsDir, acceptRegression, deps = {}, peripheral) {
142
213
  const auditLogPath = deps.auditLogPath ?? MANIFEST_REFRESH_AUDIT_LOG;
143
214
  const readdirSync = deps.readdirSync ?? fs.readdirSync;
144
215
  const readFileSync = deps.readFileSync ?? fs.readFileSync;
145
216
  const writeFileSyncImpl = deps.writeFileSync ?? fs.writeFileSync;
146
217
  const existsSync = deps.existsSync ?? fs.existsSync;
147
218
  const now = deps.now ? deps.now() : new Date();
148
- if (!existsSync(manifestsDir)) {
219
+ // When --peripheral=<name> is set, scope to manifests/<peripheral>/ ONLY (C4/D19).
220
+ const targetDir = peripheral ? path.join(manifestsDir, peripheral) : manifestsDir;
221
+ if (!existsSync(targetDir)) {
149
222
  return {
150
223
  ok: false,
151
- message: `manifests directory not found: ${manifestsDir}`,
224
+ message: peripheral
225
+ ? `peripheral manifests directory not found: ${targetDir}`
226
+ : `manifests directory not found: ${targetDir}`,
152
227
  };
153
228
  }
154
- // Read all manifest files and diff security fields.
229
+ // Read manifest files from the scoped directory (non-recursive).
155
230
  let files;
156
231
  try {
157
- const entries = readdirSync(manifestsDir, { withFileTypes: true });
232
+ const entries = readdirSync(targetDir, { withFileTypes: true });
158
233
  files = entries
159
234
  .filter((e) => e.isFile() && (e.name.endsWith('.yaml') || e.name.endsWith('.json')))
160
235
  .map((e) => e.name);
@@ -167,7 +242,7 @@ export async function runManifestRefresh(manifestsDir, acceptRegression, deps =
167
242
  }
168
243
  const allChangedFields = [];
169
244
  for (const file of files) {
170
- const filePath = path.join(manifestsDir, file);
245
+ const filePath = path.join(targetDir, file);
171
246
  let content;
172
247
  try {
173
248
  content = readFileSync(filePath, 'utf8');
@@ -197,11 +272,12 @@ export async function runManifestRefresh(manifestsDir, acceptRegression, deps =
197
272
  // Write audit entry BEFORE confirming ok (ENOSPC aborts the refresh).
198
273
  const entry = {
199
274
  ts: now.toISOString(),
200
- manifests_path: manifestsDir,
275
+ manifests_path: targetDir,
201
276
  security_regression: hasSecurityRegression,
202
277
  changed_fields: allChangedFields,
203
278
  accepted: acceptRegression,
204
279
  operator_pid: process.pid,
280
+ ...(peripheral !== undefined ? { peripheral } : {}),
205
281
  };
206
282
  try {
207
283
  appendAuditEntry(entry, auditLogPath, writeFileSyncImpl);
@@ -1 +1 @@
1
- {"version":3,"file":"manifest-refresh.js","sourceRoot":"","sources":["../../src/lib/manifest-refresh.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"manifest-refresh.js","sourceRoot":"","sources":["../../src/lib/manifest-refresh.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * peripheral-registry.ts — Typed const registry of olam's 4 k8s peripheral services.
3
+ *
4
+ * Phase 2 Phase B (olam-host-suite-phase-2-peripheral-services-on-k3s).
5
+ *
6
+ * Each entry describes everything port-forward.ts (B2), upgrade-kubernetes.ts (C),
7
+ * and services.ts / doctor.ts (D) need to drive the lifecycle of one peripheral.
8
+ *
9
+ * ---
10
+ * YAML-DRIVEN REFACTOR TRIGGER (Decision D26)
11
+ *
12
+ * This file uses a hardcoded TypeScript const — acceptable while the registry
13
+ * has ≤4 entries (small, type-safe, IDE-checkable). ADD THE 5th PERIPHERAL HERE
14
+ * as a plain object literal first; if the registry grows to 5+ entries and the
15
+ * pattern becomes repetitive, THEN migrate to yaml-driven config. Do not
16
+ * over-engineer for the case that hasn't arrived.
17
+ * ---
18
+ *
19
+ * host-cp is NOT in PERIPHERALS. It is a named special-case in port-forward.ts.
20
+ */
21
+ export type Peripheral = {
22
+ /** Human-readable name; matches the k8s Service metadata.name and docker-compose service name (olam-<name> prefix for compose). */
23
+ name: 'auth-service' | 'mcp-auth-service' | 'kg-service' | 'memory-service';
24
+ /** Local port kubectl port-forward binds on the host. */
25
+ port: number;
26
+ /** k8s Service metadata.name in the olam namespace (Phase A 60-service.yaml). */
27
+ k8sServiceName: string;
28
+ /** docker-compose service name for the compose substrate equivalent (Phase D). */
29
+ composeContainerName: string;
30
+ /** ENV var name in host-cp's deployment ConfigMap that exposes this peripheral's URL. */
31
+ configMapKeyInHostCp: string;
32
+ /** Health check path — e.g. /health or /agentmemory/livez. */
33
+ healthPath: string;
34
+ };
35
+ export declare const PERIPHERALS: ReadonlyArray<Peripheral>;
36
+ //# sourceMappingURL=peripheral-registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"peripheral-registry.d.ts","sourceRoot":"","sources":["../../src/lib/peripheral-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,MAAM,MAAM,UAAU,GAAG;IACvB,mIAAmI;IACnI,IAAI,EAAE,cAAc,GAAG,kBAAkB,GAAG,YAAY,GAAG,gBAAgB,CAAC;IAC5E,yDAAyD;IACzD,IAAI,EAAE,MAAM,CAAC;IACb,iFAAiF;IACjF,cAAc,EAAE,MAAM,CAAC;IACvB,kFAAkF;IAClF,oBAAoB,EAAE,MAAM,CAAC;IAC7B,yFAAyF;IACzF,oBAAoB,EAAE,MAAM,CAAC;IAC7B,8DAA8D;IAC9D,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,aAAa,CAAC,UAAU,CAiCxC,CAAC"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * peripheral-registry.ts — Typed const registry of olam's 4 k8s peripheral services.
3
+ *
4
+ * Phase 2 Phase B (olam-host-suite-phase-2-peripheral-services-on-k3s).
5
+ *
6
+ * Each entry describes everything port-forward.ts (B2), upgrade-kubernetes.ts (C),
7
+ * and services.ts / doctor.ts (D) need to drive the lifecycle of one peripheral.
8
+ *
9
+ * ---
10
+ * YAML-DRIVEN REFACTOR TRIGGER (Decision D26)
11
+ *
12
+ * This file uses a hardcoded TypeScript const — acceptable while the registry
13
+ * has ≤4 entries (small, type-safe, IDE-checkable). ADD THE 5th PERIPHERAL HERE
14
+ * as a plain object literal first; if the registry grows to 5+ entries and the
15
+ * pattern becomes repetitive, THEN migrate to yaml-driven config. Do not
16
+ * over-engineer for the case that hasn't arrived.
17
+ * ---
18
+ *
19
+ * host-cp is NOT in PERIPHERALS. It is a named special-case in port-forward.ts.
20
+ */
21
+ export const PERIPHERALS = [
22
+ {
23
+ name: 'auth-service',
24
+ port: 9999,
25
+ k8sServiceName: 'auth-service',
26
+ composeContainerName: 'olam-auth-service',
27
+ configMapKeyInHostCp: 'OLAM_AUTH_SERVICE_URL',
28
+ healthPath: '/health',
29
+ },
30
+ {
31
+ name: 'mcp-auth-service',
32
+ port: 9998,
33
+ k8sServiceName: 'mcp-auth-service',
34
+ composeContainerName: 'olam-mcp-auth-service',
35
+ configMapKeyInHostCp: 'OLAM_MCP_AUTH_SERVICE_URL',
36
+ healthPath: '/health',
37
+ },
38
+ {
39
+ name: 'kg-service',
40
+ port: 9997,
41
+ k8sServiceName: 'kg-service',
42
+ composeContainerName: 'olam-kg-service',
43
+ configMapKeyInHostCp: 'OLAM_KG_SERVICE_URL',
44
+ healthPath: '/health',
45
+ },
46
+ {
47
+ name: 'memory-service',
48
+ port: 3111,
49
+ k8sServiceName: 'memory-service',
50
+ composeContainerName: 'olam-memory-service',
51
+ configMapKeyInHostCp: 'OLAM_MEMORY_SERVICE_URL',
52
+ healthPath: '/agentmemory/livez',
53
+ },
54
+ ];
55
+ //# sourceMappingURL=peripheral-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"peripheral-registry.js","sourceRoot":"","sources":["../../src/lib/peripheral-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAiBH,MAAM,CAAC,MAAM,WAAW,GAA8B;IACpD;QACE,IAAI,EAAE,cAAc;QACpB,IAAI,EAAE,IAAI;QACV,cAAc,EAAE,cAAc;QAC9B,oBAAoB,EAAE,mBAAmB;QACzC,oBAAoB,EAAE,uBAAuB;QAC7C,UAAU,EAAE,SAAS;KACtB;IACD;QACE,IAAI,EAAE,kBAAkB;QACxB,IAAI,EAAE,IAAI;QACV,cAAc,EAAE,kBAAkB;QAClC,oBAAoB,EAAE,uBAAuB;QAC7C,oBAAoB,EAAE,2BAA2B;QACjD,UAAU,EAAE,SAAS;KACtB;IACD;QACE,IAAI,EAAE,YAAY;QAClB,IAAI,EAAE,IAAI;QACV,cAAc,EAAE,YAAY;QAC5B,oBAAoB,EAAE,iBAAiB;QACvC,oBAAoB,EAAE,qBAAqB;QAC3C,UAAU,EAAE,SAAS;KACtB;IACD;QACE,IAAI,EAAE,gBAAgB;QACtB,IAAI,EAAE,IAAI;QACV,cAAc,EAAE,gBAAgB;QAChC,oBAAoB,EAAE,qBAAqB;QAC3C,oBAAoB,EAAE,yBAAyB;QAC/C,UAAU,EAAE,oBAAoB;KACjC;CACO,CAAC"}
@@ -4,10 +4,19 @@
4
4
  * Phase 1b C1 of olam-host-suite-phase-1b-k3s-beta-flavour (plan
5
5
  * ~/.claude/plans/olam-host-suite-phase-1b-k3s-beta-flavour.md).
6
6
  *
7
+ * Phase 2 Phase B B2 (olam-host-suite-phase-2-peripheral-services-on-k3s):
8
+ * Extended with registry-driven multi-peripheral support:
9
+ * spawnAllPeripheralPortForwards() — iterate PERIPHERALS; spawn each in parallel
10
+ * stopAllPeripheralPortForwards() — SIGTERM each peripheral's port-forward
11
+ * getPeripheralLivenessSnapshot() — TCP probe all 4 peripherals; return {name, alive}[]
12
+ * Each peripheral uses its own independent flock + PID file named by peripheral.name.
13
+ * host-cp port-forward retained as a named special-case; Phase 1b callers unchanged.
14
+ *
7
15
  * Decisions consumed:
8
16
  * D17 — port-forward spawn via flock advisory lock (race-safe)
9
17
  * D23 — PID file at ~/.olam/state/port-forward.pid (mode 0600)
10
18
  * D24 — probePortForwardLiveness uses TCP probe, NOT kill(pid, 0)
19
+ * D26 — per-peripheral PID/lock at ~/.olam/state/port-forward-<name>.{pid,lock}
11
20
  *
12
21
  * ## Flock strategy (why O_CREAT|O_EXCL, not POSIX flock(2))
13
22
  *
@@ -40,6 +49,7 @@
40
49
  import { spawn } from 'node:child_process';
41
50
  import * as path from 'node:path';
42
51
  import * as os from 'node:os';
52
+ import { type Peripheral } from './peripheral-registry.js';
43
53
  export declare const PORT_FORWARD_PORT = 19000;
44
54
  export declare const PORT_FORWARD_LOCK_PATH: string;
45
55
  export declare const PORT_FORWARD_PID_PATH: string;
@@ -97,5 +107,62 @@ export declare function spawnPortForward(context: string, namespace: string, tar
97
107
  * No-op when no PID file exists. Returns true when a process was signalled.
98
108
  */
99
109
  export declare function stopPortForward(deps?: PortForwardDeps): boolean;
110
+ /**
111
+ * Options for peripheral port-forward operations (injectable for tests).
112
+ * Extends the same deps pattern as the host-cp single port-forward.
113
+ */
114
+ export interface PeripheralPortForwardDeps {
115
+ /** Override state directory (default: OLAM_STATE_DIR). Used in tests to isolate state. */
116
+ readonly stateDir?: string;
117
+ /** Override spawn factory (default: child_process.spawn). */
118
+ readonly spawnImpl?: typeof spawn;
119
+ /** Override TCP probe (default: real TCP socket). */
120
+ readonly tcpProbeImpl?: (host: string, port: number, timeoutMs: number) => Promise<boolean>;
121
+ }
122
+ /**
123
+ * Spawn a kubectl port-forward for a single peripheral, guarded by an
124
+ * independent advisory lock per peripheral. Mirrors the Phase 1b host-cp
125
+ * pattern (D17/D23/D24) generalised to any Peripheral entry.
126
+ *
127
+ * Returns true when a new process was spawned; false when the tunnel was
128
+ * already live or the lock was held by a concurrent caller.
129
+ *
130
+ * @internal — called by spawnAllPeripheralPortForwards; exported for test injection.
131
+ */
132
+ export declare function spawnPeripheralPortForward(peripheral: Peripheral, context: string, namespace: string, deps?: PeripheralPortForwardDeps): Promise<boolean>;
133
+ /**
134
+ * Spawn kubectl port-forward processes for all 4 peripherals in parallel.
135
+ *
136
+ * Each peripheral uses its own independent flock + PID file
137
+ * (`~/.olam/state/port-forward-<name>.{lock,pid}`), so locking one
138
+ * peripheral does NOT block another.
139
+ *
140
+ * @param context - kubectl context name (--context flag); defaults to 'olam'
141
+ * @param namespace - target namespace; defaults to 'olam'
142
+ * @param deps - injectable dependencies for testing
143
+ */
144
+ export declare function spawnAllPeripheralPortForwards(context?: string, namespace?: string, deps?: PeripheralPortForwardDeps): Promise<void>;
145
+ /**
146
+ * Send SIGTERM to all running peripheral port-forward processes and
147
+ * remove their PID and lock files.
148
+ *
149
+ * No-op for any peripheral whose PID file is absent (process already stopped).
150
+ *
151
+ * @param deps - injectable dependencies for testing (stateDir override)
152
+ */
153
+ export declare function stopAllPeripheralPortForwards(deps?: Pick<PeripheralPortForwardDeps, 'stateDir'>): void;
154
+ export interface PeripheralLivenessEntry {
155
+ name: string;
156
+ alive: boolean;
157
+ }
158
+ /**
159
+ * TCP-probe each peripheral and return a snapshot of their liveness.
160
+ *
161
+ * Uses the same realTcpProbe utility as probePortForwardLiveness (D24).
162
+ * Probes run in parallel for speed.
163
+ *
164
+ * @param deps - injectable dependencies for testing
165
+ */
166
+ export declare function getPeripheralLivenessSnapshot(deps?: Pick<PeripheralPortForwardDeps, 'tcpProbeImpl'>): Promise<PeripheralLivenessEntry[]>;
100
167
  export { os, path };
101
168
  //# sourceMappingURL=port-forward.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"port-forward.d.ts","sourceRoot":"","sources":["../../src/lib/port-forward.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAG3C,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAG9B,eAAO,MAAM,iBAAiB,QAAQ,CAAC;AACvC,eAAO,MAAM,sBAAsB,QAAiD,CAAC;AACrF,eAAO,MAAM,qBAAqB,QAAgD,CAAC;AAKnF,MAAM,WAAW,eAAe;IAC9B,2EAA2E;IAC3E,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,qDAAqD;IACrD,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IAClC,6CAA6C;IAC7C,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC5F,uEAAuE;IACvE,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CAC7B;AAED;;;;;;;;GAQG;AACH,wBAAsB,wBAAwB,CAC5C,IAAI,GAAE,IAAI,CAAC,eAAe,EAAE,cAAc,CAAM,GAC/C,OAAO,CAAC,OAAO,CAAC,CAGlB;AA8ED,MAAM,MAAM,sBAAsB,GAC9B;IAAE,OAAO,EAAE,IAAI,CAAC;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,GAC/B;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,GAAG,WAAW,CAAA;CAAE,CAAC;AAErD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,SAAS,GAAE,MAA0B,EACrC,UAAU,GAAE,MAA0B,EACtC,IAAI,GAAE,eAAoB,GACzB,OAAO,CAAC,sBAAsB,CAAC,CAgEjC;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,IAAI,GAAE,eAAoB,GAAG,OAAO,CAWnE;AAGD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC"}
1
+ {"version":3,"file":"port-forward.d.ts","sourceRoot":"","sources":["../../src/lib/port-forward.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+CG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAG3C,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAE9B,OAAO,EAAe,KAAK,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAExE,eAAO,MAAM,iBAAiB,QAAQ,CAAC;AACvC,eAAO,MAAM,sBAAsB,QAAiD,CAAC;AACrF,eAAO,MAAM,qBAAqB,QAAgD,CAAC;AAKnF,MAAM,WAAW,eAAe;IAC9B,2EAA2E;IAC3E,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,qDAAqD;IACrD,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IAClC,6CAA6C;IAC7C,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC5F,uEAAuE;IACvE,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CAC7B;AAED;;;;;;;;GAQG;AACH,wBAAsB,wBAAwB,CAC5C,IAAI,GAAE,IAAI,CAAC,eAAe,EAAE,cAAc,CAAM,GAC/C,OAAO,CAAC,OAAO,CAAC,CAGlB;AA8ED,MAAM,MAAM,sBAAsB,GAC9B;IAAE,OAAO,EAAE,IAAI,CAAC;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,GAC/B;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,GAAG,WAAW,CAAA;CAAE,CAAC;AAErD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,SAAS,GAAE,MAA0B,EACrC,UAAU,GAAE,MAA0B,EACtC,IAAI,GAAE,eAAoB,GACzB,OAAO,CAAC,sBAAsB,CAAC,CAgEjC;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,IAAI,GAAE,eAAoB,GAAG,OAAO,CAWnE;AAID;;;GAGG;AACH,MAAM,WAAW,yBAAyB;IACxC,0FAA0F;IAC1F,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,6DAA6D;IAC7D,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IAClC,qDAAqD;IACrD,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CAC7F;AAoBD;;;;;;;;;GASG;AACH,wBAAsB,0BAA0B,CAC9C,UAAU,EAAE,UAAU,EACtB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,IAAI,GAAE,yBAA8B,GACnC,OAAO,CAAC,OAAO,CAAC,CAkElB;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,8BAA8B,CAClD,OAAO,SAAS,EAChB,SAAS,SAAS,EAClB,IAAI,GAAE,yBAA8B,GACnC,OAAO,CAAC,IAAI,CAAC,CAIf;AAED;;;;;;;GAOG;AACH,wBAAgB,6BAA6B,CAC3C,IAAI,GAAE,IAAI,CAAC,yBAAyB,EAAE,UAAU,CAAM,GACrD,IAAI,CAYN;AAED,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,OAAO,CAAC;CAChB;AAED;;;;;;;GAOG;AACH,wBAAsB,6BAA6B,CACjD,IAAI,GAAE,IAAI,CAAC,yBAAyB,EAAE,cAAc,CAAM,GACzD,OAAO,CAAC,uBAAuB,EAAE,CAAC,CAQpC;AAGD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC"}
@@ -4,10 +4,19 @@
4
4
  * Phase 1b C1 of olam-host-suite-phase-1b-k3s-beta-flavour (plan
5
5
  * ~/.claude/plans/olam-host-suite-phase-1b-k3s-beta-flavour.md).
6
6
  *
7
+ * Phase 2 Phase B B2 (olam-host-suite-phase-2-peripheral-services-on-k3s):
8
+ * Extended with registry-driven multi-peripheral support:
9
+ * spawnAllPeripheralPortForwards() — iterate PERIPHERALS; spawn each in parallel
10
+ * stopAllPeripheralPortForwards() — SIGTERM each peripheral's port-forward
11
+ * getPeripheralLivenessSnapshot() — TCP probe all 4 peripherals; return {name, alive}[]
12
+ * Each peripheral uses its own independent flock + PID file named by peripheral.name.
13
+ * host-cp port-forward retained as a named special-case; Phase 1b callers unchanged.
14
+ *
7
15
  * Decisions consumed:
8
16
  * D17 — port-forward spawn via flock advisory lock (race-safe)
9
17
  * D23 — PID file at ~/.olam/state/port-forward.pid (mode 0600)
10
18
  * D24 — probePortForwardLiveness uses TCP probe, NOT kill(pid, 0)
19
+ * D26 — per-peripheral PID/lock at ~/.olam/state/port-forward-<name>.{pid,lock}
11
20
  *
12
21
  * ## Flock strategy (why O_CREAT|O_EXCL, not POSIX flock(2))
13
22
  *
@@ -43,6 +52,7 @@ import * as net from 'node:net';
43
52
  import * as path from 'node:path';
44
53
  import * as os from 'node:os';
45
54
  import { OLAM_STATE_DIR } from './config.js';
55
+ import { PERIPHERALS } from './peripheral-registry.js';
46
56
  export const PORT_FORWARD_PORT = 19000;
47
57
  export const PORT_FORWARD_LOCK_PATH = path.join(OLAM_STATE_DIR, 'port-forward.lock');
48
58
  export const PORT_FORWARD_PID_PATH = path.join(OLAM_STATE_DIR, 'port-forward.pid');
@@ -235,6 +245,149 @@ export function stopPortForward(deps = {}) {
235
245
  catch { /* already gone */ }
236
246
  return true;
237
247
  }
248
+ /**
249
+ * Build the PID file path for a peripheral by name.
250
+ * Path: <stateDir>/port-forward-<name>.pid
251
+ */
252
+ function peripheralPidPath(name, stateDir) {
253
+ return path.join(stateDir, `port-forward-${name}.pid`);
254
+ }
255
+ /**
256
+ * Build the lock file path for a peripheral by name.
257
+ * Path: <stateDir>/port-forward-<name>.lock
258
+ * Each peripheral gets its own independent lock file (D26: locking auth-service
259
+ * must NOT block mcp-auth-service).
260
+ */
261
+ function peripheralLockPath(name, stateDir) {
262
+ return path.join(stateDir, `port-forward-${name}.lock`);
263
+ }
264
+ /**
265
+ * Spawn a kubectl port-forward for a single peripheral, guarded by an
266
+ * independent advisory lock per peripheral. Mirrors the Phase 1b host-cp
267
+ * pattern (D17/D23/D24) generalised to any Peripheral entry.
268
+ *
269
+ * Returns true when a new process was spawned; false when the tunnel was
270
+ * already live or the lock was held by a concurrent caller.
271
+ *
272
+ * @internal — called by spawnAllPeripheralPortForwards; exported for test injection.
273
+ */
274
+ export async function spawnPeripheralPortForward(peripheral, context, namespace, deps = {}) {
275
+ const stateDir = deps.stateDir ?? OLAM_STATE_DIR;
276
+ const spawnImpl = deps.spawnImpl ?? spawn;
277
+ const tcpProbeImpl = deps.tcpProbeImpl ?? realTcpProbe;
278
+ // Ensure state dir exists.
279
+ if (!fs.existsSync(stateDir)) {
280
+ fs.mkdirSync(stateDir, { recursive: true });
281
+ }
282
+ const lockPath = peripheralLockPath(peripheral.name, stateDir);
283
+ const pidPath = peripheralPidPath(peripheral.name, stateDir);
284
+ let releaseLock = null;
285
+ try {
286
+ releaseLock = acquireAdvisoryLock(lockPath);
287
+ }
288
+ catch (err) {
289
+ const code = err.code;
290
+ if (code === 'EEXIST') {
291
+ return false; // lock held by concurrent caller
292
+ }
293
+ throw err;
294
+ }
295
+ try {
296
+ // TCP-probe any existing port-forward before deciding to spawn (D24).
297
+ const alive = await tcpProbeImpl('127.0.0.1', peripheral.port, TCP_PROBE_TIMEOUT_MS);
298
+ if (alive) {
299
+ return false; // tunnel already live
300
+ }
301
+ // Spawn kubectl port-forward detached (stdio ignored).
302
+ const child = spawnImpl('kubectl', [
303
+ '--context', context,
304
+ 'port-forward',
305
+ '-n', namespace,
306
+ `service/${peripheral.k8sServiceName}`,
307
+ `${peripheral.port}:${peripheral.port}`,
308
+ ], {
309
+ stdio: ['ignore', 'ignore', 'ignore'],
310
+ detached: true,
311
+ });
312
+ if (typeof child.pid !== 'number' || child.pid <= 0) {
313
+ return false; // spawn failed; non-fatal
314
+ }
315
+ // Atomic PID file write (tmp → rename, mode 0600).
316
+ writePidFile(pidPath, child.pid);
317
+ // Unref so the parent CLI process can exit without waiting for the tunnel.
318
+ child.unref();
319
+ // Best-effort PID file cleanup when the port-forward exits.
320
+ child.once('exit', () => {
321
+ try {
322
+ fs.unlinkSync(pidPath);
323
+ }
324
+ catch { /* already gone */ }
325
+ });
326
+ return true;
327
+ }
328
+ finally {
329
+ releaseLock();
330
+ }
331
+ }
332
+ /**
333
+ * Spawn kubectl port-forward processes for all 4 peripherals in parallel.
334
+ *
335
+ * Each peripheral uses its own independent flock + PID file
336
+ * (`~/.olam/state/port-forward-<name>.{lock,pid}`), so locking one
337
+ * peripheral does NOT block another.
338
+ *
339
+ * @param context - kubectl context name (--context flag); defaults to 'olam'
340
+ * @param namespace - target namespace; defaults to 'olam'
341
+ * @param deps - injectable dependencies for testing
342
+ */
343
+ export async function spawnAllPeripheralPortForwards(context = 'olam', namespace = 'olam', deps = {}) {
344
+ await Promise.all(PERIPHERALS.map((p) => spawnPeripheralPortForward(p, context, namespace, deps)));
345
+ }
346
+ /**
347
+ * Send SIGTERM to all running peripheral port-forward processes and
348
+ * remove their PID and lock files.
349
+ *
350
+ * No-op for any peripheral whose PID file is absent (process already stopped).
351
+ *
352
+ * @param deps - injectable dependencies for testing (stateDir override)
353
+ */
354
+ export function stopAllPeripheralPortForwards(deps = {}) {
355
+ const stateDir = deps.stateDir ?? OLAM_STATE_DIR;
356
+ for (const p of PERIPHERALS) {
357
+ const pidPath = peripheralPidPath(p.name, stateDir);
358
+ const lockPath = peripheralLockPath(p.name, stateDir);
359
+ const pid = readPidFile(pidPath);
360
+ if (pid !== null) {
361
+ try {
362
+ process.kill(pid, 'SIGTERM');
363
+ }
364
+ catch { /* ESRCH: already dead; fine */ }
365
+ }
366
+ try {
367
+ fs.unlinkSync(pidPath);
368
+ }
369
+ catch { /* already gone */ }
370
+ try {
371
+ fs.unlinkSync(lockPath);
372
+ }
373
+ catch { /* already gone */ }
374
+ }
375
+ }
376
+ /**
377
+ * TCP-probe each peripheral and return a snapshot of their liveness.
378
+ *
379
+ * Uses the same realTcpProbe utility as probePortForwardLiveness (D24).
380
+ * Probes run in parallel for speed.
381
+ *
382
+ * @param deps - injectable dependencies for testing
383
+ */
384
+ export async function getPeripheralLivenessSnapshot(deps = {}) {
385
+ const tcpProbeImpl = deps.tcpProbeImpl ?? realTcpProbe;
386
+ return Promise.all(PERIPHERALS.map(async (p) => {
387
+ const alive = await tcpProbeImpl('127.0.0.1', p.port, TCP_PROBE_TIMEOUT_MS);
388
+ return { name: p.name, alive };
389
+ }));
390
+ }
238
391
  // Re-export so tests can import from this module without needing os/path.
239
392
  export { os, path };
240
393
  //# sourceMappingURL=port-forward.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"port-forward.js","sourceRoot":"","sources":["../../src/lib/port-forward.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"port-forward.js","sourceRoot":"","sources":["../../src/lib/port-forward.ts"],"names":[],"mappings":"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"}