@synap-core/eve 0.1.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 (64) hide show
  1. package/README.md +251 -0
  2. package/dist/add-R6RGUYER.js +22 -0
  3. package/dist/add-R6RGUYER.js.map +1 -0
  4. package/dist/auth-7FFZNARZ-4OIRGZ7R.js +31 -0
  5. package/dist/auth-7FFZNARZ-4OIRGZ7R.js.map +1 -0
  6. package/dist/chunk-22RIHU4J.js +975 -0
  7. package/dist/chunk-22RIHU4J.js.map +1 -0
  8. package/dist/chunk-23XQDB7K.js +1773 -0
  9. package/dist/chunk-23XQDB7K.js.map +1 -0
  10. package/dist/chunk-5TBV2VHZ.js +6067 -0
  11. package/dist/chunk-5TBV2VHZ.js.map +1 -0
  12. package/dist/chunk-D7P3IYYR.js +44 -0
  13. package/dist/chunk-D7P3IYYR.js.map +1 -0
  14. package/dist/chunk-EHPC7CKE.js +757 -0
  15. package/dist/chunk-EHPC7CKE.js.map +1 -0
  16. package/dist/chunk-FAE5UZFE.js +17 -0
  17. package/dist/chunk-FAE5UZFE.js.map +1 -0
  18. package/dist/chunk-HRF6TNXX.js +53 -0
  19. package/dist/chunk-HRF6TNXX.js.map +1 -0
  20. package/dist/chunk-HVJEW7TU.js +495 -0
  21. package/dist/chunk-HVJEW7TU.js.map +1 -0
  22. package/dist/chunk-JO5H5G6U.js +1529 -0
  23. package/dist/chunk-JO5H5G6U.js.map +1 -0
  24. package/dist/chunk-MUEQNBE6.js +1140 -0
  25. package/dist/chunk-MUEQNBE6.js.map +1 -0
  26. package/dist/chunk-O5WTCVMZ.js +3391 -0
  27. package/dist/chunk-O5WTCVMZ.js.map +1 -0
  28. package/dist/chunk-ROKIQIEX.js +65 -0
  29. package/dist/chunk-ROKIQIEX.js.map +1 -0
  30. package/dist/chunk-T7GCAJK5.js +4895 -0
  31. package/dist/chunk-T7GCAJK5.js.map +1 -0
  32. package/dist/chunk-UOQWJ3S4.js +138 -0
  33. package/dist/chunk-UOQWJ3S4.js.map +1 -0
  34. package/dist/chunk-YQWV5W4U.js +3479 -0
  35. package/dist/chunk-YQWV5W4U.js.map +1 -0
  36. package/dist/chunk-ZPDNZRVW.js +272 -0
  37. package/dist/chunk-ZPDNZRVW.js.map +1 -0
  38. package/dist/config-store-KTOWIKAS-XVZHNPKW.js +11 -0
  39. package/dist/config-store-KTOWIKAS-XVZHNPKW.js.map +1 -0
  40. package/dist/dist-2VRFSXMO.js +40 -0
  41. package/dist/dist-2VRFSXMO.js.map +1 -0
  42. package/dist/dist-C2QB4IKT.js +340 -0
  43. package/dist/dist-C2QB4IKT.js.map +1 -0
  44. package/dist/dist-DEIUVZ57.js +299 -0
  45. package/dist/dist-DEIUVZ57.js.map +1 -0
  46. package/dist/dist-DSKHGECB.js +36 -0
  47. package/dist/dist-DSKHGECB.js.map +1 -0
  48. package/dist/dist-GN2DN7CI.js +95 -0
  49. package/dist/dist-GN2DN7CI.js.map +1 -0
  50. package/dist/dist-TZL4XW2R.js +58 -0
  51. package/dist/dist-TZL4XW2R.js.map +1 -0
  52. package/dist/dist-ZP2APOYV.js +53 -0
  53. package/dist/dist-ZP2APOYV.js.map +1 -0
  54. package/dist/index.js +15083 -0
  55. package/dist/index.js.map +1 -0
  56. package/dist/operational-5RT6AZJI-ZEMPD32Q.js +12 -0
  57. package/dist/operational-5RT6AZJI-ZEMPD32Q.js.map +1 -0
  58. package/dist/reconcile-A4I3Z7VX-GQMEN4GC.js +12 -0
  59. package/dist/reconcile-A4I3Z7VX-GQMEN4GC.js.map +1 -0
  60. package/dist/rsshub-GOJBTNOD-UNNVKBFL.js +18 -0
  61. package/dist/rsshub-GOJBTNOD-UNNVKBFL.js.map +1 -0
  62. package/dist/synap-image-install-X36REYQ5-UGO4MAOP.js +17 -0
  63. package/dist/synap-image-install-X36REYQ5-UGO4MAOP.js.map +1 -0
  64. package/package.json +44 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../@eve/lifecycle/dist/chunk-6JFSP4GT.js"],"sourcesContent":["// src/auth.ts\nimport { existsSync as existsSync2, readFileSync as readFileSync2 } from \"fs\";\nimport { join as join2 } from \"path\";\nimport { exec as execCallback } from \"child_process\";\nimport { promisify } from \"util\";\nimport { randomBytes } from \"crypto\";\n\n// src/env-files.ts\nimport {\n readFileSync,\n writeFileSync,\n renameSync,\n existsSync,\n mkdirSync,\n unlinkSync\n} from \"fs\";\nimport { join, dirname } from \"path\";\nvar ENV_FILENAME = \".env\";\nfunction envPath(deployDir) {\n return join(deployDir, ENV_FILENAME);\n}\nfunction readEnvVar(deployDir, key) {\n const path = envPath(deployDir);\n if (!existsSync(path)) return null;\n const text = readFileSync(path, \"utf-8\");\n let last = null;\n for (const line of text.split(/\\r?\\n/)) {\n const trimmed = line.trimStart();\n if (!trimmed || trimmed.startsWith(\"#\")) continue;\n const eq = line.indexOf(\"=\");\n if (eq < 0) continue;\n if (line.slice(0, eq).trim() === key) {\n last = line.slice(eq + 1);\n }\n }\n return last;\n}\nfunction readEnvFile(deployDir) {\n const path = envPath(deployDir);\n const out = /* @__PURE__ */ new Map();\n if (!existsSync(path)) return out;\n const text = readFileSync(path, \"utf-8\");\n for (const line of text.split(/\\r?\\n/)) {\n const trimmed = line.trimStart();\n if (!trimmed || trimmed.startsWith(\"#\")) continue;\n const eq = line.indexOf(\"=\");\n if (eq < 0) continue;\n const k = line.slice(0, eq).trim();\n if (!k) continue;\n out.set(k, line.slice(eq + 1));\n }\n return out;\n}\nfunction writeEnvVar(deployDir, key, value) {\n if (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(key)) {\n throw new Error(`writeEnvVar: invalid env var name ${JSON.stringify(key)}`);\n }\n const path = envPath(deployDir);\n if (!existsSync(dirname(path))) {\n mkdirSync(dirname(path), { recursive: true });\n }\n const existed = existsSync(path);\n const original = existed ? readFileSync(path, \"utf-8\") : \"\";\n const hadTrailingNewline = original.endsWith(\"\\n\");\n let previous = null;\n let found = false;\n const sourceText = hadTrailingNewline ? original.slice(0, -1) : original;\n const lines = sourceText === \"\" ? [] : sourceText.split(/\\r?\\n/);\n const out = [];\n for (const line of lines) {\n const trimmed = line.trimStart();\n if (!trimmed || trimmed.startsWith(\"#\")) {\n out.push(line);\n continue;\n }\n const eq = line.indexOf(\"=\");\n if (eq < 0) {\n out.push(line);\n continue;\n }\n const k = line.slice(0, eq).trim();\n if (k !== key) {\n out.push(line);\n continue;\n }\n const val = line.slice(eq + 1);\n if (!found) {\n previous = val;\n found = true;\n if (value !== null) {\n out.push(`${key}=${value}`);\n }\n }\n }\n if (!found && value !== null) {\n out.push(`${key}=${value}`);\n }\n let next = out.join(\"\\n\");\n if (next.length > 0) next += \"\\n\";\n if (existed && next === original) {\n return { changed: false, previous };\n }\n const tmp = `${path}.tmp-${process.pid}`;\n try {\n writeFileSync(tmp, next, { mode: 384 });\n renameSync(tmp, path);\n } catch (err) {\n try {\n unlinkSync(tmp);\n } catch {\n }\n throw err;\n }\n return { changed: true, previous };\n}\n\n// src/auth.ts\nimport {\n LEGACY_CODER_ENGINE_SLUGS,\n POD_DEPLOY_DIR_CANDIDATES,\n SYNAP_BACKEND_CONTAINERS,\n agentsToProvision,\n findPodDeployDir,\n readAgentKey,\n readEveSecrets,\n resolveSynapUrlOnHost,\n restartBackendContainer,\n writeAgentKey,\n writeCodeEngine,\n writeEveSecrets\n} from \"@eve/dna\";\n\n// src/diagnostics.ts\nimport { randomUUID } from \"crypto\";\nvar OPENAPI_TIMEOUT_MS = 4e3;\nvar AUTH_TIMEOUT_MS = 6e3;\nvar ENTITY_POST_TIMEOUT_MS = 6e3;\nvar SSE_TIMEOUT_MS = 35e3;\nvar ME_TIMEOUT_MS = 6e3;\nvar DELETE_TIMEOUT_MS = 4e3;\nvar AUTH_NAME = \"Synap auth\";\nvar DISCOVERY_NAME = \"Synap public discovery\";\nvar IDEMPOTENCY_NAME = \"Synap idempotency replay\";\nvar EVENTS_NAME = \"Synap event stream\";\nvar SUB_TOKENS_NAME = \"Synap sub-token mode\";\nasync function runHubProtocolProbes(opts) {\n const synapUrl = opts.synapUrl.replace(/\\/+$/, \"\");\n const apiKey = opts.apiKey;\n const signal = opts.signal;\n const runner = opts.runner ?? new FetchRunner();\n const onRunnerNote = opts.onRunnerNote;\n const auth = await probeSynapAuth(runner, synapUrl, apiKey, signal, onRunnerNote);\n if (auth.status !== \"pass\") {\n const skipMsg = auth.status === \"skip\" ? \"Skipped \\u2014 Synap URL or API key missing\" : \"Skipped \\u2014 auth probe didn't pass\";\n return [\n auth,\n skipDiag(\"hub-protocol-idempotency\", IDEMPOTENCY_NAME, skipMsg),\n skipDiag(\"hub-protocol-events\", EVENTS_NAME, skipMsg),\n skipDiag(\"hub-protocol-sub-tokens\", SUB_TOKENS_NAME, skipMsg)\n ];\n }\n const [idem, sse, subTokens] = await Promise.all([\n probeIdempotency(runner, synapUrl, apiKey, signal),\n probeEventStream(runner, synapUrl, apiKey, signal),\n probeSubTokens(runner, synapUrl, apiKey, signal)\n ]);\n return [auth, idem, sse, subTokens];\n}\nasync function probeSynapAuth(runner, synapUrl, apiKey, outer, onRunnerNote) {\n const start = Date.now();\n if (!synapUrl) {\n return {\n id: \"hub-protocol-openapi\",\n name: AUTH_NAME,\n status: \"skip\",\n message: \"Synap apiUrl not configured in secrets\",\n fix: \"Re-run setup or open the AI page \\u2192 Save\",\n durationMs: Date.now() - start\n };\n }\n if (!apiKey) {\n return {\n id: \"hub-protocol-openapi\",\n name: AUTH_NAME,\n status: \"skip\",\n message: \"Synap API key missing \\u2014 auth probe needs Bearer auth\",\n fix: \"Re-install Synap (`eve add synap`) to provision an API key\",\n durationMs: Date.now() - start\n };\n }\n void onRunnerNote;\n const result = await getAuthStatus({\n synapUrl,\n apiKey,\n runner,\n signal: outer,\n timeoutMs: AUTH_TIMEOUT_MS\n });\n if (result.ok) {\n return {\n id: \"hub-protocol-openapi\",\n name: AUTH_NAME,\n status: \"pass\",\n message: authPassMessage(result.status),\n durationMs: Date.now() - start\n };\n }\n return failureToDiagnostic(result.failure, synapUrl, Date.now() - start);\n}\nfunction authPassMessage(s) {\n const userTag = s.userId.slice(0, 8);\n const emailPart = s.userEmail ?? \"no email\";\n const scopes = s.scopes.length > 0 ? `[${s.scopes.join(\", \")}]` : \"[no scopes]\";\n return `Auth OK \\u2014 user ${userTag} (${emailPart}), scopes ${scopes}, key age ${s.ageDays}d`;\n}\nfunction failureToDiagnostic(failure, synapUrl, durationMs) {\n switch (failure.reason) {\n case \"key_revoked\":\n return {\n id: \"hub-protocol-openapi\",\n name: AUTH_NAME,\n status: \"fail\",\n message: failure.message || \"API key was revoked or never registered\",\n fix: \"eve auth renew\",\n durationMs\n };\n case \"expired\":\n return {\n id: \"hub-protocol-openapi\",\n name: AUTH_NAME,\n status: \"fail\",\n message: failure.message || \"API key expired\",\n fix: \"eve auth renew\",\n durationMs\n };\n case \"invalid_format\":\n return {\n id: \"hub-protocol-openapi\",\n name: AUTH_NAME,\n status: \"fail\",\n message: failure.message || \"API key format is malformed\",\n fix: \"Re-run `eve install` or `eve auth renew`\",\n durationMs\n };\n case \"no_auth\":\n return {\n id: \"hub-protocol-openapi\",\n name: AUTH_NAME,\n status: \"fail\",\n message: \"No bearer key sent \\u2014 internal probe bug or missing agents.eve.hubApiKey\",\n fix: \"Run: eve auth provision (or check ~/.eve/secrets/secrets.json has agents.eve.hubApiKey set)\",\n durationMs\n };\n case \"missing_scope\":\n return {\n id: \"hub-protocol-openapi\",\n name: AUTH_NAME,\n status: \"fail\",\n message: failure.message || `Key lacks required scope '${failure.missingScope ?? \"?\"}'`,\n fix: failure.missingScope ? `eve auth grant ${failure.missingScope}` : \"Re-mint the agent key with the required scopes (eve auth renew)\",\n durationMs\n };\n case \"backend_unhealthy\":\n return {\n id: \"hub-protocol-openapi\",\n name: AUTH_NAME,\n status: \"fail\",\n message: failure.message || `Backend returned ${failure.httpStatus}`,\n fix: \"docker logs synap-backend-backend-1 --tail 50\",\n durationMs\n };\n case \"transport\":\n return {\n id: \"hub-protocol-openapi\",\n name: AUTH_NAME,\n status: \"fail\",\n message: `Cannot reach pod at ${synapUrl} (${failure.message})`,\n fix: \"Run `eve doctor` for a deeper view (check Synap container is running)\",\n durationMs\n };\n case \"unknown\":\n default:\n return {\n id: \"hub-protocol-openapi\",\n name: AUTH_NAME,\n status: \"fail\",\n message: failure.message || `Auth check failed (${failure.httpStatus})`,\n durationMs\n };\n }\n}\nasync function probeSynapDiscovery(runner, synapUrl, outer) {\n const start = Date.now();\n if (!synapUrl) {\n return {\n id: \"hub-protocol-discovery\",\n name: DISCOVERY_NAME,\n status: \"skip\",\n message: \"Synap apiUrl not configured\",\n durationMs: Date.now() - start\n };\n }\n const url = `${synapUrl.replace(/\\/+$/, \"\")}/api/hub/openapi.json`;\n const res = await runner.httpGet(\n url,\n { Accept: \"application/json\" },\n { signal: outer, timeoutMs: OPENAPI_TIMEOUT_MS }\n );\n if (res.status === 0) {\n return {\n id: \"hub-protocol-discovery\",\n name: DISCOVERY_NAME,\n status: \"skip\",\n message: `Could not reach ${url} (${res.error ?? \"network error\"})`,\n durationMs: Date.now() - start\n };\n }\n if (res.status === 200) {\n let version = \"?\";\n try {\n const parsed = JSON.parse(res.body);\n if (typeof parsed.openapi === \"string\") version = parsed.openapi;\n } catch {\n }\n return {\n id: \"hub-protocol-discovery\",\n name: DISCOVERY_NAME,\n status: \"pass\",\n message: `Public openapi.json reachable (OpenAPI ${version})`,\n durationMs: Date.now() - start\n };\n }\n if (res.status === 401 || res.status === 403) {\n return {\n id: \"hub-protocol-discovery\",\n name: DISCOVERY_NAME,\n status: \"skip\",\n message: `Backend still requires auth on /api/hub/openapi.json (${res.status}) \\u2014 predates the public-discovery release`,\n durationMs: Date.now() - start\n };\n }\n if (res.status === 404) {\n return {\n id: \"hub-protocol-discovery\",\n name: DISCOVERY_NAME,\n status: \"skip\",\n message: \"Older backend \\u2014 /api/hub/openapi.json not exposed\",\n durationMs: Date.now() - start\n };\n }\n return {\n id: \"hub-protocol-discovery\",\n name: DISCOVERY_NAME,\n status: \"skip\",\n message: `Unexpected status ${res.status} from ${url}`,\n durationMs: Date.now() - start\n };\n}\nasync function probeIdempotency(runner, synapUrl, apiKey, outer) {\n const start = Date.now();\n if (!synapUrl || !apiKey) {\n return skipDiag(\"hub-protocol-idempotency\", IDEMPOTENCY_NAME, \"Skipped \\u2014 Synap URL or API key missing\");\n }\n const url = `${synapUrl}/api/hub/entities`;\n const idempotencyKey = randomUUID();\n const body = {\n profileSlug: \"note\",\n title: \"eve-doctor-idempotency-smoke\",\n source: \"openwebui-pipeline\"\n };\n const bodyJson = JSON.stringify(body);\n const headers = {\n Authorization: `Bearer ${apiKey}`,\n \"Content-Type\": \"application/json\",\n Accept: \"application/json\",\n \"Idempotency-Key\": idempotencyKey\n };\n const post = () => runner.httpPost(url, headers, bodyJson, {\n signal: outer,\n timeoutMs: ENTITY_POST_TIMEOUT_MS\n });\n const first = await post();\n if (first.status === 0) {\n return {\n id: \"hub-protocol-idempotency\",\n name: IDEMPOTENCY_NAME,\n status: \"fail\",\n message: `Cannot reach ${url} (${first.error ?? \"network error\"})`,\n fix: \"Check the Synap container is running and the URL is reachable\",\n durationMs: Date.now() - start\n };\n }\n if (first.status === 401 || first.status === 403) {\n return {\n id: \"hub-protocol-idempotency\",\n name: IDEMPOTENCY_NAME,\n status: \"fail\",\n message: `API key rejected \\u2014 ${first.status} from POST /api/hub/entities`,\n fix: \"Re-run setup to mint a fresh agent API key\",\n durationMs: Date.now() - start\n };\n }\n if (first.status === 404) {\n return {\n id: \"hub-protocol-idempotency\",\n name: IDEMPOTENCY_NAME,\n status: \"fail\",\n message: \"POST /api/hub/entities not available \\u2014 backend version too old\",\n fix: \"Update Synap (`eve update synap`)\",\n durationMs: Date.now() - start\n };\n }\n if (first.status < 200 || first.status >= 300) {\n return {\n id: \"hub-protocol-idempotency\",\n name: IDEMPOTENCY_NAME,\n status: \"fail\",\n message: `First POST returned ${first.status}: ${truncate(first.body)}`,\n durationMs: Date.now() - start\n };\n }\n const second = await post();\n if (second.status === 0) {\n return {\n id: \"hub-protocol-idempotency\",\n name: IDEMPOTENCY_NAME,\n status: \"fail\",\n message: `Second POST failed (${second.error ?? \"network error\"}) \\u2014 couldn't verify replay`,\n durationMs: Date.now() - start\n };\n }\n if (second.status < 200 || second.status >= 300) {\n return {\n id: \"hub-protocol-idempotency\",\n name: IDEMPOTENCY_NAME,\n status: \"fail\",\n message: `Second POST returned ${second.status}: ${truncate(second.body)}`,\n durationMs: Date.now() - start\n };\n }\n const entityId = extractEntityId(first.body);\n if (entityId) {\n void deleteEntityBestEffort(synapUrl, apiKey, entityId, runner);\n }\n const replayHeader = second.headers[\"x-idempotent-replay\"];\n if (replayHeader !== \"true\") {\n return {\n id: \"hub-protocol-idempotency\",\n name: IDEMPOTENCY_NAME,\n status: \"fail\",\n message: \"Backend doesn't echo X-Idempotent-Replay \\u2014 idempotency middleware not mounted\",\n fix: \"Update Synap (`eve update synap`) \\u2014 needs 2026-05+ Hub Protocol\",\n durationMs: Date.now() - start\n };\n }\n if (first.body !== second.body) {\n return {\n id: \"hub-protocol-idempotency\",\n name: IDEMPOTENCY_NAME,\n status: \"fail\",\n message: \"Backend created a duplicate entity (idempotency middleware not honouring the key)\",\n fix: \"Update Synap (`eve update synap`) \\u2014 needs 2026-05+ Hub Protocol\",\n durationMs: Date.now() - start\n };\n }\n return {\n id: \"hub-protocol-idempotency\",\n name: IDEMPOTENCY_NAME,\n status: \"pass\",\n message: \"Replay confirmed \\u2014 same Idempotency-Key returns the cached response\",\n durationMs: Date.now() - start\n };\n}\nasync function probeEventStream(runner, synapUrl, apiKey, outer) {\n const start = Date.now();\n if (!synapUrl || !apiKey) {\n return skipDiag(\"hub-protocol-events\", EVENTS_NAME, \"Skipped \\u2014 Synap URL or API key missing\");\n }\n const url = `${synapUrl}/api/hub/events/stream`;\n const headers = { Authorization: `Bearer ${apiKey}`, Accept: \"text/event-stream\" };\n const stream = await runner.httpStream(url, headers, { signal: outer, timeoutMs: SSE_TIMEOUT_MS });\n if (!stream.ok) {\n if (stream.error === \"stream-not-supported\") {\n return skipDiag(\n \"hub-protocol-events\",\n EVENTS_NAME,\n \"Skipped \\u2014 SSE probing not supported by current runner (e.g. docker-exec wget without unbuffered piping)\"\n );\n }\n if (stream.status === 401 || stream.status === 403) {\n return {\n id: \"hub-protocol-events\",\n name: EVENTS_NAME,\n status: \"fail\",\n message: `API key rejected on /api/hub/events/stream (${stream.status})`,\n fix: \"Re-run setup to mint a fresh agent API key\",\n durationMs: Date.now() - start\n };\n }\n if (stream.status === 404) {\n return {\n id: \"hub-protocol-events\",\n name: EVENTS_NAME,\n status: \"fail\",\n message: \"GET /api/hub/events/stream not available \\u2014 backend version too old\",\n fix: \"Update Synap (`eve update synap`)\",\n durationMs: Date.now() - start\n };\n }\n if (stream.status === 0) {\n const aborted = stream.error?.toLowerCase().includes(\"abort\") || stream.error?.toLowerCase().includes(\"timeout\");\n return {\n id: \"hub-protocol-events\",\n name: EVENTS_NAME,\n status: \"fail\",\n message: aborted ? `No SSE response within ${SSE_TIMEOUT_MS / 1e3}s \\u2014 proxy may be killing the stream` : `Cannot open event stream at ${url} (${stream.error ?? \"network error\"})`,\n fix: aborted ? \"Check reverse-proxy buffering: nginx needs `proxy_buffering off` for SSE\" : \"Check the Synap container is running\",\n durationMs: Date.now() - start\n };\n }\n return {\n id: \"hub-protocol-events\",\n name: EVENTS_NAME,\n status: \"fail\",\n message: `Event stream returned ${stream.status} (${stream.error ?? \"no body\"})`,\n durationMs: Date.now() - start\n };\n }\n let received = false;\n let receivedKind = \"\";\n let buffer = \"\";\n let readError = null;\n try {\n if (stream.chunks) {\n for await (const chunk of stream.chunks) {\n buffer += chunk;\n const lines = buffer.split(\"\\n\");\n buffer = lines.pop() ?? \"\";\n for (const line of lines) {\n const trimmed = line.trim();\n if (trimmed.startsWith(\"event:\")) {\n const kind = trimmed.slice(6).trim();\n if (kind === \"heartbeat\" || kind === \"event\") {\n received = true;\n receivedKind = kind;\n break;\n }\n }\n }\n if (received) break;\n }\n }\n } catch (err) {\n if (!(err instanceof Error && err.name === \"AbortError\")) {\n readError = err instanceof Error ? err : new Error(String(err));\n }\n } finally {\n await stream.close();\n }\n if (readError) {\n return {\n id: \"hub-protocol-events\",\n name: EVENTS_NAME,\n status: \"fail\",\n message: `Stream read error: ${readError.message}`,\n durationMs: Date.now() - start\n };\n }\n if (!received) {\n return {\n id: \"hub-protocol-events\",\n name: EVENTS_NAME,\n status: \"fail\",\n message: `No heartbeat received within ${SSE_TIMEOUT_MS / 1e3}s \\u2014 stream may be proxied without flush`,\n fix: \"Check reverse-proxy: SSE needs `proxy_buffering off` and no response gzip\",\n durationMs: Date.now() - start\n };\n }\n return {\n id: \"hub-protocol-events\",\n name: EVENTS_NAME,\n status: \"pass\",\n message: `Stream open \\u2014 received \\`${receivedKind}\\` frame within ${SSE_TIMEOUT_MS / 1e3}s`,\n durationMs: Date.now() - start\n };\n}\nasync function probeSubTokens(runner, synapUrl, apiKey, outer) {\n const start = Date.now();\n if (!synapUrl || !apiKey) {\n return skipDiag(\"hub-protocol-sub-tokens\", SUB_TOKENS_NAME, \"Skipped \\u2014 Synap URL or API key missing\");\n }\n const url = `${synapUrl}/api/hub/users/me`;\n const externalUserId = `eve-doctor-smoke-${Date.now()}`;\n const fetchMe = async (extraHeaders) => {\n const res = await runner.httpGet(\n url,\n {\n Authorization: `Bearer ${apiKey}`,\n Accept: \"application/json\",\n ...extraHeaders\n },\n { signal: outer, timeoutMs: ME_TIMEOUT_MS }\n );\n if (res.status === 0) {\n return {\n ok: false,\n status: 0,\n message: res.error ?? \"network error\"\n };\n }\n if (res.status < 200 || res.status >= 300) {\n return { ok: false, status: res.status, message: truncate(res.body) };\n }\n let id = null;\n try {\n const parsed = JSON.parse(res.body);\n const candidate = parsed.id ?? parsed.user?.id;\n if (typeof candidate === \"string\") id = candidate;\n } catch {\n return { ok: false, status: res.status, message: \"response was not JSON\" };\n }\n return { ok: true, userId: id, status: res.status };\n };\n const parent = await fetchMe({});\n if (!parent.ok) {\n if (parent.status === 401 || parent.status === 403) {\n return {\n id: \"hub-protocol-sub-tokens\",\n name: SUB_TOKENS_NAME,\n status: \"fail\",\n message: `API key rejected on /api/hub/users/me (${parent.status})`,\n fix: \"Re-run setup to mint a fresh agent API key\",\n durationMs: Date.now() - start\n };\n }\n if (parent.status === 404) {\n return {\n id: \"hub-protocol-sub-tokens\",\n name: SUB_TOKENS_NAME,\n status: \"fail\",\n message: \"GET /api/hub/users/me not available \\u2014 backend version too old\",\n fix: \"Update Synap (`eve update synap`)\",\n durationMs: Date.now() - start\n };\n }\n return {\n id: \"hub-protocol-sub-tokens\",\n name: SUB_TOKENS_NAME,\n status: \"fail\",\n message: `Couldn't fetch parent user (${parent.status || \"network error\"}): ${parent.message}`,\n durationMs: Date.now() - start\n };\n }\n if (!parent.userId) {\n return {\n id: \"hub-protocol-sub-tokens\",\n name: SUB_TOKENS_NAME,\n status: \"fail\",\n message: \"Backend returned /users/me without an id field\",\n durationMs: Date.now() - start\n };\n }\n const sub = await fetchMe({ \"X-External-User-Id\": externalUserId });\n if (!sub.ok) {\n return {\n id: \"hub-protocol-sub-tokens\",\n name: SUB_TOKENS_NAME,\n status: \"fail\",\n message: `Couldn't fetch user with X-External-User-Id (${sub.status || \"network error\"}): ${sub.message}`,\n durationMs: Date.now() - start\n };\n }\n if (!sub.userId) {\n return {\n id: \"hub-protocol-sub-tokens\",\n name: SUB_TOKENS_NAME,\n status: \"fail\",\n message: \"Backend returned /users/me without an id field on sub-token call\",\n durationMs: Date.now() - start\n };\n }\n if (parent.userId === sub.userId) {\n return {\n id: \"hub-protocol-sub-tokens\",\n name: SUB_TOKENS_NAME,\n status: \"skip\",\n message: \"Multi-user mode: OFF \\u2014 X-External-User-Id ignored (HUB_PROTOCOL_SUB_TOKENS=false)\",\n durationMs: Date.now() - start\n };\n }\n return {\n id: \"hub-protocol-sub-tokens\",\n name: SUB_TOKENS_NAME,\n status: \"pass\",\n message: `Multi-user mode: ON \\u2014 sub-token resolved to a separate user id (parent=${shortId(parent.userId)}, sub=${shortId(sub.userId)})`,\n durationMs: Date.now() - start\n };\n}\nfunction skipDiag(id, name, message) {\n return { id, name, status: \"skip\", message, durationMs: 0 };\n}\nfunction truncate(text, max = 160) {\n const oneline = text.replace(/\\s+/g, \" \").trim();\n return oneline.length > max ? `${oneline.slice(0, max)}\\u2026` : oneline;\n}\nfunction shortId(id) {\n return id.length > 8 ? `\\u2026${id.slice(-8)}` : id;\n}\nfunction extractEntityId(text) {\n try {\n const parsed = JSON.parse(text);\n const direct = parsed.id;\n if (typeof direct === \"string\") return direct;\n const nested = parsed.entity?.id;\n if (typeof nested === \"string\") return nested;\n return null;\n } catch {\n return null;\n }\n}\nasync function deleteEntityBestEffort(synapUrl, apiKey, entityId, runner) {\n const r = runner ?? new FetchRunner();\n try {\n await r.httpDelete(\n `${synapUrl}/api/hub/entities/${encodeURIComponent(entityId)}`,\n { Authorization: `Bearer ${apiKey}` },\n { timeoutMs: DELETE_TIMEOUT_MS }\n );\n } catch {\n }\n}\nfunction combineSignals(outer, timeoutMs) {\n const ac = new AbortController();\n const timer = setTimeout(() => ac.abort(), timeoutMs);\n let onAbort = null;\n if (outer) {\n if (outer.aborted) {\n ac.abort();\n } else {\n onAbort = () => ac.abort();\n outer.addEventListener(\"abort\", onAbort);\n }\n }\n return {\n signal: ac.signal,\n cleanup: () => {\n clearTimeout(timer);\n if (onAbort && outer) outer.removeEventListener(\"abort\", onAbort);\n }\n };\n}\nfunction headersToRecord(h) {\n const out = {};\n h.forEach((value, key) => {\n out[key.toLowerCase()] = value;\n });\n return out;\n}\nfunction isFetchTransportError(err) {\n if (!(err instanceof Error)) return false;\n const cause = err.cause;\n const code = cause?.code;\n if (code === \"ECONNREFUSED\" || code === \"EHOSTUNREACH\" || code === \"ENOTFOUND\" || code === \"EAI_AGAIN\") {\n return true;\n }\n const msg = err.message || \"\";\n return /\\bECONNREFUSED\\b|\\bEHOSTUNREACH\\b|\\bENOTFOUND\\b/.test(msg);\n}\nvar FetchRunner = class {\n name = \"fetch\";\n async httpGet(url, headers, opts = {}) {\n return this.request(\"GET\", url, headers, void 0, opts);\n }\n async httpPost(url, headers, body, opts = {}) {\n return this.request(\"POST\", url, headers, body, opts);\n }\n async httpDelete(url, headers, opts = {}) {\n return this.request(\"DELETE\", url, headers, void 0, opts);\n }\n async request(method, url, headers, body, opts) {\n const ac = combineSignals(opts.signal, opts.timeoutMs ?? 6e3);\n try {\n const res = await fetch(url, {\n method,\n headers,\n body,\n signal: ac.signal\n });\n const text = await res.text();\n return {\n status: res.status,\n body: text,\n headers: headersToRecord(res.headers)\n };\n } catch (err) {\n return {\n status: 0,\n body: \"\",\n headers: {},\n error: err instanceof Error ? err.message : \"network error\"\n };\n } finally {\n ac.cleanup();\n }\n }\n async httpStream(url, headers, opts = {}) {\n const ac = combineSignals(opts.signal, opts.timeoutMs ?? 35e3);\n let res;\n try {\n res = await fetch(url, { method: \"GET\", headers, signal: ac.signal });\n } catch (err) {\n ac.cleanup();\n return {\n ok: false,\n status: 0,\n headers: {},\n close: async () => {\n },\n error: err instanceof Error ? err.message : \"network error\"\n };\n }\n if (!res.ok || !res.body) {\n try {\n await res.body?.cancel();\n } catch {\n }\n ac.cleanup();\n return {\n ok: false,\n status: res.status,\n headers: headersToRecord(res.headers),\n close: async () => {\n },\n error: res.body ? void 0 : \"no body\"\n };\n }\n const reader = res.body.getReader();\n const decoder = new TextDecoder();\n async function* iterate() {\n while (true) {\n const { done, value } = await reader.read();\n if (done) return;\n if (value) yield decoder.decode(value, { stream: true });\n }\n }\n const close = async () => {\n try {\n await reader.cancel();\n } catch {\n }\n ac.cleanup();\n };\n return {\n ok: true,\n status: res.status,\n headers: headersToRecord(res.headers),\n chunks: iterate(),\n close\n };\n }\n};\n\n// src/auth.ts\nvar execAsync = promisify(execCallback);\nvar EVE_AGENT_TYPE = \"eve\";\nvar EVE_EXTRA_SCOPES = [\"providers.write\"];\nvar DEFAULT_TIMEOUT_MS = 6e3;\nasync function getAuthStatus(opts) {\n const synapUrl = opts.synapUrl.replace(/\\/+$/, \"\");\n if (!synapUrl) {\n return {\n ok: false,\n failure: {\n reason: \"no_auth\",\n httpStatus: 0,\n message: \"synapUrl not configured\"\n }\n };\n }\n if (!opts.apiKey) {\n return {\n ok: false,\n failure: {\n reason: \"no_auth\",\n httpStatus: 0,\n message: \"apiKey not configured\"\n }\n };\n }\n const runner = opts.runner ?? new FetchRunner();\n const url = `${synapUrl}/api/hub/auth/status`;\n const headers = {\n Authorization: `Bearer ${opts.apiKey}`,\n Accept: \"application/json\"\n };\n const res = await runner.httpGet(url, headers, {\n signal: opts.signal,\n timeoutMs: opts.timeoutMs ?? DEFAULT_TIMEOUT_MS\n });\n if (res.status === 0) {\n return {\n ok: false,\n failure: {\n reason: \"transport\",\n httpStatus: 0,\n message: res.error ?? \"network error\"\n }\n };\n }\n if (res.status >= 500) {\n return {\n ok: false,\n failure: {\n reason: \"backend_unhealthy\",\n httpStatus: res.status,\n message: `Backend returned ${res.status}`,\n raw: tryJson(res.body)\n }\n };\n }\n if (res.status === 401 || res.status === 403) {\n return parse401(res.status, res.body);\n }\n if (res.status === 404) {\n return {\n ok: false,\n failure: {\n reason: \"backend_unhealthy\",\n httpStatus: 404,\n message: \"GET /api/hub/auth/status not available \\u2014 backend version too old\",\n raw: tryJson(res.body)\n }\n };\n }\n if (res.status < 200 || res.status >= 300) {\n return {\n ok: false,\n failure: {\n reason: \"unknown\",\n httpStatus: res.status,\n message: `Backend returned ${res.status}`,\n raw: tryJson(res.body)\n }\n };\n }\n const parsed = tryJson(res.body);\n if (!parsed || typeof parsed !== \"object\") {\n return {\n ok: false,\n failure: {\n reason: \"unknown\",\n httpStatus: res.status,\n message: \"auth/status returned non-JSON body\"\n }\n };\n }\n const body = parsed;\n const keyId = stringOr(body.keyId, \"\");\n const userId = stringOr(body.userId, \"\");\n const createdAtStr = stringOr(body.createdAt, \"\");\n if (!keyId || !userId || !createdAtStr) {\n return {\n ok: false,\n failure: {\n reason: \"unknown\",\n httpStatus: res.status,\n message: \"auth/status payload missing required fields (keyId/userId/createdAt)\",\n raw: parsed\n }\n };\n }\n const ageDays = computeAgeDays(createdAtStr);\n const status = {\n keyId,\n keyIdPrefix: stringOr(body.keyIdPrefix, keyId.slice(0, 8)),\n userId,\n userEmail: stringOrNull(body.userEmail),\n userName: stringOrNull(body.userName),\n name: stringOrNull(body.name),\n scopes: stringArray(body.scopes),\n createdAt: createdAtStr,\n expiresAt: stringOrNull(body.expiresAt),\n lastUsedAt: stringOrNull(body.lastUsedAt),\n ageDays,\n parentKeyId: stringOrNull(body.parentKeyId),\n isActive: true,\n raw: parsed\n };\n return { ok: true, status };\n}\nasync function isKeyValid(opts) {\n const r = await getAuthStatus(opts);\n return r.ok;\n}\nvar RENEW_TIMEOUT_MS = 1e4;\nasync function renewAgentKey(opts = {}) {\n const agentType = opts.agentType ?? \"eve\";\n const result = await provisionAgent({\n agentType,\n deployDir: opts.deployDir,\n reason: opts.reason ?? \"renew\",\n runner: opts.runner,\n timeoutMs: opts.timeoutMs,\n provisioningToken: opts.provisioningToken,\n idempotent: opts.idempotent\n });\n if (result.provisioned) {\n return {\n renewed: true,\n apiKey: result.record.hubApiKey,\n keyIdPrefix: result.keyIdPrefix,\n agentType,\n wasAlreadyPresent: result.wasAlreadyPresent\n };\n }\n return { renewed: false, reason: result.reason, agentType };\n}\nasync function provisionAgent(opts) {\n const agentType = opts.agentType;\n if (!agentType || agentType.trim().length === 0) {\n return { provisioned: false, agentType: \"\", reason: \"agentType is required\" };\n }\n const cwd = opts.deployDir ?? process.env.EVE_HOME ?? process.cwd();\n const secrets = await readEveSecrets(cwd);\n const synapUrl = (opts.synapUrl ?? await resolveSynapUrlOnHost(secrets)).trim();\n if (!synapUrl) {\n const hasSecrets = !!secrets;\n return {\n provisioned: false,\n agentType,\n reason: hasSecrets ? \"synap pod URL unresolved \\u2014 set domain.primary or synap.apiUrl in ~/.eve/secrets.json\" : \"~/.eve/secrets.json not found \\u2014 run `eve setup` first to initialise Eve on this server\"\n };\n }\n let tokenLookup = opts.provisioningToken ? { token: opts.provisioningToken, source: \"explicit\", diagnosticReason: \"\" } : await resolveProvisioningTokenWithDiagnostics();\n if (!tokenLookup.token && !opts.provisioningToken) {\n try {\n const ensured = await ensurePodProvisioningToken();\n tokenLookup = {\n token: ensured.token,\n source: ensured.source === \"generated\" ? \"file\" : \"file\",\n diagnosticReason: \"\"\n };\n if (ensured.source === \"generated\" && ensured.backendRestarted) {\n await waitForBackend(synapUrl, opts.runner ?? new FetchRunner());\n }\n } catch (err) {\n return {\n provisioned: false,\n agentType,\n reason: tokenLookup.diagnosticReason || `Could not auto-generate PROVISIONING_TOKEN: ${err instanceof Error ? err.message : String(err)}`\n };\n }\n }\n if (!tokenLookup.token) {\n return {\n provisioned: false,\n agentType,\n reason: tokenLookup.diagnosticReason\n };\n }\n const provisioningToken = tokenLookup.token;\n const runner = opts.runner ?? new FetchRunner();\n const url = `${synapUrl.replace(/\\/+$/, \"\")}/api/hub/setup/agent`;\n const previousPrefix = (secrets?.agents?.[agentType]?.hubApiKey ?? secrets?.synap?.apiKey ?? \"\").slice(0, 8);\n const body = JSON.stringify({\n agentType,\n // Scopes BEYOND the pod's shared agent bundle, granted per-agent.\n //\n // Only `eve` asks, and only for `providers.write`. Writing an ai_providers\n // row sets the URL the pod sends every prompt to, which is why the pod keeps\n // that scope out of the default bundle — so requesting it for every agent\n // here would undo the narrowing rather than satisfy it. `eve` needs it\n // because it is the operator tool that registers providers (e.g. the\n // FreeLLMAPI gateway) on the user's behalf.\n //\n // The pod refuses this from a weak surface key; we authenticate with the\n // PROVISIONING_TOKEN, which is operator-grade. An older pod without the\n // scope ignores the unknown field — the key simply lacks it, and\n // `upsertPodProvider` then reports the 403 in plain words.\n ...agentType === EVE_AGENT_TYPE ? { extraScopes: EVE_EXTRA_SCOPES } : {},\n // Diagnostic hints — backend ignores unknown fields. Useful in pod\n // logs to attribute key churn (\"renew\", \"migrate\", \"install\") and\n // to chain new keys back to the previous one if the backend tracks\n // parentKeyId.\n name: `eve-${agentType}`,\n parentKeyIdPrefix: previousPrefix || void 0,\n reason: opts.reason ?? \"provision\",\n idempotent: opts.idempotent ?? false\n });\n const headers = {\n Authorization: `Bearer ${provisioningToken}`,\n \"Content-Type\": \"application/json\",\n Accept: \"application/json\"\n };\n const res = await runner.httpPost(url, headers, body, {\n timeoutMs: opts.timeoutMs ?? RENEW_TIMEOUT_MS\n });\n if (res.status === 0) {\n return {\n provisioned: false,\n agentType,\n reason: `Cannot reach ${url} (${res.error ?? \"network error\"})`\n };\n }\n if (res.status === 202) {\n const parsed2 = tryJson(res.body);\n const adminUrl = typeof parsed2 === \"object\" && parsed2 && typeof parsed2.adminUrl === \"string\" ? parsed2.adminUrl : null;\n return {\n provisioned: false,\n agentType,\n reason: `Backend deferred the request (issuer pending approval). Visit ${adminUrl ?? `${synapUrl}/admin/trusted-issuers`} to approve, then retry.`\n };\n }\n if (res.status === 401 || res.status === 403) {\n return {\n provisioned: false,\n agentType,\n reason: `PROVISIONING_TOKEN rejected (${res.status}) \\u2014 token expired, wrong, or backend doesn't accept it. Re-check deploy/.env or run \\`eve install\\`.`\n };\n }\n if (res.status === 404) {\n const parsed404 = tryJson(res.body);\n const isBackend404 = parsed404 !== null && typeof parsed404 === \"object\" && (\"error\" in parsed404 || \"message\" in parsed404);\n if (isBackend404) {\n const setupUrl = synapUrl.replace(/127\\.0\\.0\\.1:\\d+/, \"pod.<your-domain>\").replace(/:\\d+$/, \"\");\n return {\n provisioned: false,\n agentType,\n reason: `No admin account on this pod \\u2014 the backend returned 404 because there is no workspace to create the agent in. Create your first admin at ${setupUrl}/setup (or run \\`eve auth provision --email <you@example.com>\\` to be prompted inline), then retry.`\n };\n }\n return {\n provisioned: false,\n agentType,\n reason: `POST ${url} returned 404 (route not matched). Check Traefik routes with \\`eve domain check\\` \\u2014 or the backend image may be outdated (run \\`eve update synap\\`). Raw: ${res.body.slice(0, 120)}`\n };\n }\n if (res.status < 200 || res.status >= 300) {\n return {\n provisioned: false,\n agentType,\n reason: `Backend returned ${res.status}: ${res.body.slice(0, 160)}`\n };\n }\n const parsed = tryJson(res.body);\n if (!parsed || typeof parsed !== \"object\") {\n return {\n provisioned: false,\n agentType,\n reason: \"Mint response was not JSON\"\n };\n }\n const obj = parsed;\n if (obj.alreadyValid === true) {\n const serverWorkspaceId = stringOr(obj.workspaceId, \"\");\n try {\n const existing = await readAgentKey(agentType, cwd);\n if (existing?.hubApiKey) {\n const updated = {\n ...existing,\n ...serverWorkspaceId ? { workspaceId: serverWorkspaceId } : {}\n };\n await writeAgentKey(agentType, updated, cwd);\n return {\n provisioned: true,\n agentType,\n record: updated,\n keyIdPrefix: (updated.keyId ?? updated.hubApiKey).slice(0, 8),\n wasAlreadyPresent: true\n };\n }\n } catch {\n }\n }\n const hubApiKey = stringOr(obj.hubApiKey, stringOr(obj.apiKey, \"\"));\n if (!hubApiKey) {\n return {\n provisioned: false,\n agentType,\n reason: \"Mint response did not include hubApiKey\"\n };\n }\n const agentUserId = stringOr(obj.agentUserId, \"\");\n let workspaceId = stringOr(obj.workspaceId, \"\");\n if (!workspaceId) {\n try {\n const existing = await readAgentKey(agentType, cwd);\n if (existing?.workspaceId) workspaceId = existing.workspaceId;\n } catch {\n }\n }\n const keyId = stringOr(obj.keyId, \"\");\n const keyIdPrefix = stringOr(\n obj.keyIdPrefix,\n keyId.slice(0, 8) || hubApiKey.slice(0, 8)\n );\n if (!agentUserId) {\n return {\n provisioned: false,\n agentType,\n reason: \"Mint response missing required field: agentUserId\"\n };\n }\n const record = {\n hubApiKey,\n agentUserId,\n workspaceId,\n keyId: keyId || void 0,\n createdAt: (/* @__PURE__ */ new Date()).toISOString()\n };\n try {\n await writeAgentKey(agentType, record, cwd);\n } catch (err) {\n return {\n provisioned: false,\n agentType,\n reason: `Mint succeeded but secrets.json write failed: ${err instanceof Error ? err.message : String(err)}`\n };\n }\n try {\n await writeEveSecrets({ pod: { bootstrapToken: provisioningToken } }, cwd);\n } catch {\n }\n return { provisioned: true, agentType, record, keyIdPrefix };\n}\nasync function provisionAllAgents(opts) {\n const cwd = opts.deployDir ?? process.env.EVE_HOME ?? process.cwd();\n const skipIfPresent = opts.skipIfPresent ?? true;\n const agents = agentsToProvision(opts.installedComponentIds);\n const results = [];\n for (const agent of agents) {\n if (skipIfPresent) {\n const existing = await readAgentKey(agent.agentType, cwd);\n if (existing && existing.hubApiKey) {\n results.push({\n provisioned: true,\n agentType: agent.agentType,\n record: existing,\n keyIdPrefix: (existing.keyId ?? existing.hubApiKey).slice(0, 8),\n wasAlreadyPresent: true\n });\n continue;\n }\n }\n const result = await provisionAgent({\n agentType: agent.agentType,\n deployDir: cwd,\n reason: opts.reason ?? \"provision-all\",\n runner: opts.runner,\n synapUrl: opts.synapUrl,\n provisioningToken: opts.provisioningToken\n });\n results.push(result);\n }\n return results;\n}\nasync function migrateLegacyToAgents(opts) {\n const cwd = opts.deployDir ?? process.env.EVE_HOME ?? process.cwd();\n const secretsBefore = await readEveSecrets(cwd);\n const collapse = await collapseLegacyCoderAgents(secretsBefore, cwd);\n const eveExisting = await readAgentKey(\"eve\", cwd);\n const needsPerAgent = !eveExisting || !eveExisting.hubApiKey;\n if (!needsPerAgent && !collapse.collapsed) {\n return {\n migrated: false,\n results: [],\n reason: \"already migrated \\u2014 eve agent key present and no legacy coder slugs\"\n };\n }\n const results = await provisionAllAgents({\n installedComponentIds: opts.installedComponentIds,\n deployDir: cwd,\n reason: collapse.collapsed ? \"migrate-legacy-coder-collapse\" : \"migrate-legacy\",\n runner: opts.runner,\n skipIfPresent: !needsPerAgent\n });\n const anyOk = results.some((r) => r.provisioned);\n return {\n migrated: anyOk || collapse.collapsed,\n results,\n reason: anyOk ? void 0 : collapse.collapsed ? \"coder collapse applied; new agent provisioning failed \\u2014 see per-agent reasons\" : \"no agent could be provisioned \\u2014 see per-agent reasons\",\n collapsedToEngine: collapse.engine,\n strippedLegacySlugs: collapse.stripped\n };\n}\nasync function collapseLegacyCoderAgents(secrets, cwd) {\n if (!secrets) return { collapsed: false, stripped: [] };\n const agents = secrets.agents ?? {};\n const presentLegacy = LEGACY_CODER_ENGINE_SLUGS.filter(\n (slug) => agents[slug] !== void 0\n );\n if (presentLegacy.length === 0) {\n return { collapsed: false, stripped: [] };\n }\n const existingChoice = secrets.builder?.codeEngine;\n const pickedEngine = existingChoice && LEGACY_CODER_ENGINE_SLUGS.includes(existingChoice) ? existingChoice : presentLegacy[0];\n await writeCodeEngine(pickedEngine, cwd);\n const nextAgents = {};\n for (const [slug, rec] of Object.entries(agents)) {\n if (LEGACY_CODER_ENGINE_SLUGS.includes(slug)) continue;\n nextAgents[slug] = rec;\n }\n await writeEveSecrets({ agents: nextAgents }, cwd);\n return { collapsed: true, engine: pickedEngine, stripped: presentLegacy };\n}\nasync function resolveProvisioningToken() {\n return (await resolveProvisioningTokenWithDiagnostics()).token;\n}\nasync function waitForBackend(synapUrl, runner, opts = {}) {\n const timeoutMs = opts.timeoutMs ?? 2e4;\n const intervalMs = opts.intervalMs ?? 500;\n const url = `${synapUrl.replace(/\\/+$/, \"\")}/api/hub/health`;\n const start = Date.now();\n while (Date.now() - start < timeoutMs) {\n try {\n const res = await runner.httpGet(url, {}, { timeoutMs: 1500 });\n if (res.status >= 200 && res.status < 500) return;\n } catch {\n }\n await new Promise((resolve) => setTimeout(resolve, intervalMs));\n }\n}\nasync function ensurePodProvisioningToken() {\n const probe = await resolveProvisioningTokenWithDiagnostics();\n if (probe.token) {\n return { token: probe.token, source: \"existing\" };\n }\n const deployDir = findPodDeployDir();\n if (!deployDir) {\n throw new Error(\n \"No pod deploy directory found \\u2014 set SYNAP_DEPLOY_DIR or install synap-backend first (checked: \" + POD_DEPLOY_DIR_CANDIDATES.join(\", \") + \").\"\n );\n }\n const token = randomBytes(32).toString(\"hex\");\n const result = writeEnvVar(deployDir, \"PROVISIONING_TOKEN\", token);\n const envFilePath = join2(deployDir, \".env\");\n const backendRestarted = restartBackendContainer(deployDir);\n void result;\n return {\n token,\n source: \"generated\",\n writtenTo: envFilePath,\n backendRestarted\n };\n}\nasync function resolveProvisioningTokenWithDiagnostics() {\n const envName = process.env.EVE_PROVISIONING_TOKEN !== void 0 ? \"EVE_PROVISIONING_TOKEN\" : process.env.PROVISIONING_TOKEN !== void 0 ? \"PROVISIONING_TOKEN\" : null;\n const envValue = process.env.EVE_PROVISIONING_TOKEN ?? process.env.PROVISIONING_TOKEN;\n if (envName !== null && (envValue ?? \"\").trim().length === 0) {\n return {\n token: null,\n source: \"empty\",\n diagnosticReason: `${envName} is set but empty. Either unset it (so we can fall back to the pod's deploy/.env) or assign a real value (\\`openssl rand -hex 32\\`).`\n };\n }\n if (envValue && envValue.trim().length > 0) {\n return { token: envValue.trim(), source: \"env\", diagnosticReason: \"\" };\n }\n const dirCandidates = [\n process.env.SYNAP_DEPLOY_DIR,\n \"/opt/synap-backend/deploy\",\n \"/opt/synap-backend\",\n \"/opt/synap/deploy\",\n \"/opt/synap\",\n \"/opt/synap-pod/deploy\",\n \"/opt/synap-pod\",\n \"/srv/synap-backend/deploy\",\n \"/srv/synap/deploy\"\n ].filter((d) => typeof d === \"string\" && d.length > 0);\n let fileFoundEmpty = false;\n let fileFoundEmptyAt = \"\";\n for (const dir of dirCandidates) {\n const envPath2 = join2(dir, \".env\");\n if (!existsSync2(envPath2)) continue;\n const probe = readEnvFileVarWithStatus(envPath2, \"PROVISIONING_TOKEN\");\n if (probe.value) {\n return { token: probe.value, source: \"file\", diagnosticReason: \"\" };\n }\n if (probe.status === \"found-empty\" && !fileFoundEmpty) {\n fileFoundEmpty = true;\n fileFoundEmptyAt = envPath2;\n }\n }\n const dockerProbe = await readProvisioningTokenFromDockerWithStatus();\n if (dockerProbe.value) {\n return { token: dockerProbe.value, source: \"docker\", diagnosticReason: \"\" };\n }\n if (fileFoundEmpty || dockerProbe.status === \"found-empty\") {\n const where = fileFoundEmpty ? fileFoundEmptyAt : \"the running synap-backend container's env\";\n return {\n token: null,\n source: \"empty\",\n diagnosticReason: `PROVISIONING_TOKEN is empty in ${where}. The pod was deployed without filling it in. Fix: \\`openssl rand -hex 32\\` and write the value into the pod's deploy/.env, then \\`docker compose up -d backend\\` (or \\`docker restart synap-backend-backend-1\\`) and retry. See \\`eve auth bootstrap-token\\` for an automated path once supported.`\n };\n }\n return {\n token: null,\n source: \"missing\",\n diagnosticReason: \"PROVISIONING_TOKEN unavailable. Set EVE_PROVISIONING_TOKEN, or ensure the pod's deploy/.env is readable. PROVISIONING_TOKEN was generated when synap-backend was first installed and lives in deploy/.env on the pod host.\"\n };\n}\nfunction readEnvFileVarWithStatus(envPath2, key) {\n try {\n const text = readFileSync2(envPath2, \"utf-8\");\n let sawEmpty = false;\n for (const raw of text.split(/\\r?\\n/)) {\n const line = raw.trim();\n if (!line || line.startsWith(\"#\")) continue;\n const eq = line.indexOf(\"=\");\n if (eq < 0) continue;\n if (line.slice(0, eq).trim() === key) {\n const value = line.slice(eq + 1).trim();\n if (value.length > 0) return { value, status: \"found\" };\n sawEmpty = true;\n }\n }\n return { value: null, status: sawEmpty ? \"found-empty\" : \"absent\" };\n } catch {\n return { value: null, status: \"absent\" };\n }\n}\nasync function readProvisioningTokenFromDockerWithStatus() {\n let sawEmpty = false;\n for (const container of SYNAP_BACKEND_CONTAINERS) {\n try {\n const { stdout: out } = await execAsync(\n `docker inspect --format='{{range .Config.Env}}{{println .}}{{end}}' ${container}`,\n { encoding: \"utf-8\", timeout: 4e3 }\n );\n for (const raw of out.split(/\\r?\\n/)) {\n const line = raw.trim();\n if (!line) continue;\n const eq = line.indexOf(\"=\");\n if (eq < 0) continue;\n if (line.slice(0, eq) === \"PROVISIONING_TOKEN\") {\n const value = line.slice(eq + 1).trim();\n if (value.length > 0) return { value, status: \"found\" };\n sawEmpty = true;\n }\n }\n } catch {\n }\n }\n return { value: null, status: sawEmpty ? \"found-empty\" : \"absent\" };\n}\nvar STRUCTURED_REASONS = /* @__PURE__ */ new Set([\n \"key_revoked\",\n \"missing_scope\",\n \"expired\",\n \"invalid_format\",\n \"no_auth\"\n]);\nfunction parse401(httpStatus, body) {\n const parsed = tryJson(body);\n if (parsed && typeof parsed === \"object\") {\n const obj = parsed;\n const reasonStr = stringOr(obj.reason, \"\");\n if (reasonStr && STRUCTURED_REASONS.has(reasonStr)) {\n return {\n ok: false,\n failure: {\n reason: reasonStr,\n httpStatus,\n message: stringOr(obj.message, `unauthorized (${reasonStr})`),\n missingScope: stringOr(obj.missingScope, \"\") || void 0,\n keyIdPrefix: stringOr(obj.keyIdPrefix, \"\") || void 0,\n raw: parsed\n }\n };\n }\n }\n return {\n ok: false,\n failure: {\n reason: \"key_revoked\",\n httpStatus,\n message: `unauthorized (${httpStatus}) \\u2014 backend did not return a structured envelope`,\n raw: parsed ?? body\n }\n };\n}\nfunction stringOr(v, fallback) {\n return typeof v === \"string\" ? v : fallback;\n}\nfunction stringOrNull(v) {\n return typeof v === \"string\" ? v : null;\n}\nfunction stringArray(v) {\n if (!Array.isArray(v)) return [];\n return v.filter((x) => typeof x === \"string\");\n}\nfunction tryJson(text) {\n if (!text) return null;\n try {\n return JSON.parse(text);\n } catch {\n return null;\n }\n}\nfunction computeAgeDays(createdAt) {\n const t = Date.parse(createdAt);\n if (Number.isNaN(t)) return 0;\n const ms = Date.now() - t;\n if (ms <= 0) return 0;\n return Math.floor(ms / (1e3 * 60 * 60 * 24));\n}\n\nexport {\n readEnvVar,\n readEnvFile,\n writeEnvVar,\n getAuthStatus,\n isKeyValid,\n renewAgentKey,\n provisionAgent,\n provisionAllAgents,\n migrateLegacyToAgents,\n resolveProvisioningToken,\n waitForBackend,\n ensurePodProvisioningToken,\n runHubProtocolProbes,\n probeSynapDiscovery,\n truncate,\n shortId,\n extractEntityId,\n deleteEntityBestEffort,\n combineSignals,\n isFetchTransportError,\n FetchRunner\n};\n"],"mappings":"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","names":[]}