openmeld 0.3.232 → 0.3.233

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 (102) hide show
  1. package/dist/{add-me-membership-ChntsjGm.js → add-me-membership-_O3IzRLn.js} +2 -2
  2. package/dist/{add-me-membership-ChntsjGm.js.map → add-me-membership-_O3IzRLn.js.map} +1 -1
  3. package/dist/{agents-DruPcNSg.js → agents-B5E7c7sQ.js} +9 -9
  4. package/dist/{agents-DruPcNSg.js.map → agents-B5E7c7sQ.js.map} +1 -1
  5. package/dist/{api-client-foundation-CDj_9Rks.js → api-client-foundation-1p1VVFJ_.js} +1 -1
  6. package/dist/{api-client-foundation-EZpFLGVC.js → api-client-foundation-C-RPnq_p.js} +3 -3
  7. package/dist/{api-client-foundation-EZpFLGVC.js.map → api-client-foundation-C-RPnq_p.js.map} +1 -1
  8. package/dist/auth-session-CmjjkLiB.js +4 -0
  9. package/dist/{auth-session-DhSHCYvl.js → auth-session-iXCJO5oB.js} +4 -4
  10. package/dist/{auth-session-DhSHCYvl.js.map → auth-session-iXCJO5oB.js.map} +1 -1
  11. package/dist/{channel-tvFZSSVr.js → channel-BciBrA3Y.js} +4 -4
  12. package/dist/{channel-tvFZSSVr.js.map → channel-BciBrA3Y.js.map} +1 -1
  13. package/dist/{cli-binary-manifest-Bjf6T7Ef.js → cli-binary-manifest-ETxqCzfS.js} +8 -1
  14. package/dist/cli-binary-manifest-ETxqCzfS.js.map +1 -0
  15. package/dist/{command-0yoZa1GT.js → command-D0pcAIoE.js} +16 -16
  16. package/dist/{command-0yoZa1GT.js.map → command-D0pcAIoE.js.map} +1 -1
  17. package/dist/{computer-connection-CoBDorh6.js → computer-connection-CHP1-0rK.js} +2 -2
  18. package/dist/{computer-connection-CoBDorh6.js.map → computer-connection-CHP1-0rK.js.map} +1 -1
  19. package/dist/{computer-connection-review-Dy7p1LXZ.js → computer-connection-review-dHotFqmD.js} +5 -5
  20. package/dist/{computer-connection-review-Dy7p1LXZ.js.map → computer-connection-review-dHotFqmD.js.map} +1 -1
  21. package/dist/{computer-disconnect-4Ks_DVXV.js → computer-disconnect-B2DLDxWx.js} +7 -7
  22. package/dist/{computer-disconnect-4Ks_DVXV.js.map → computer-disconnect-B2DLDxWx.js.map} +1 -1
  23. package/dist/{computer-setup-continuation-ZcQb7MvI.js → computer-setup-continuation-Cv_c1B-7.js} +3 -3
  24. package/dist/{computer-setup-continuation-ZcQb7MvI.js.map → computer-setup-continuation-Cv_c1B-7.js.map} +1 -1
  25. package/dist/{context-BPIoofMa.js → context-BnhlFS8m.js} +3 -3
  26. package/dist/{context-BPIoofMa.js.map → context-BnhlFS8m.js.map} +1 -1
  27. package/dist/{control-plane-rTE2rHZ5.js → control-plane-QqGL-jtT.js} +2 -2
  28. package/dist/{control-plane-rTE2rHZ5.js.map → control-plane-QqGL-jtT.js.map} +1 -1
  29. package/dist/{daemon-device-id-DDazRZUV.js → daemon-device-id-DbSIqHoZ.js} +5 -5
  30. package/dist/{daemon-device-id-DDazRZUV.js.map → daemon-device-id-DbSIqHoZ.js.map} +1 -1
  31. package/dist/{daemon-lifecycle-journal-CRxQL9m6.js → daemon-lifecycle-journal-DsVVvKJe.js} +6 -6
  32. package/dist/{daemon-lifecycle-journal-CRxQL9m6.js.map → daemon-lifecycle-journal-DsVVvKJe.js.map} +1 -1
  33. package/dist/{daemon-service-runtime-BTzL0w6s.js → daemon-service-runtime-DZI6Ke3_.js} +4 -4
  34. package/dist/{daemon-service-runtime-BTzL0w6s.js.map → daemon-service-runtime-DZI6Ke3_.js.map} +1 -1
  35. package/dist/{daemon-service-update-coordinator-BDs0p4bA.js → daemon-service-update-coordinator-BgVBlJ4d.js} +13 -13
  36. package/dist/{daemon-service-update-coordinator-BDs0p4bA.js.map → daemon-service-update-coordinator-BgVBlJ4d.js.map} +1 -1
  37. package/dist/{dispatch-owned-runtime-CK2YJ2Oo.js → dispatch-owned-runtime-BeIQetEt.js} +9 -9
  38. package/dist/{dispatch-owned-runtime-CK2YJ2Oo.js.map → dispatch-owned-runtime-BeIQetEt.js.map} +1 -1
  39. package/dist/{dist-Bw6OBFYo.js → dist-BgYBvEBB.js} +13 -7
  40. package/dist/dist-BgYBvEBB.js.map +1 -0
  41. package/dist/{dist--TaSMxQz.js → dist-DQS0XYkb.js} +3 -3
  42. package/dist/{dist--TaSMxQz.js.map → dist-DQS0XYkb.js.map} +1 -1
  43. package/dist/{dist-B12upl5l.js → dist-z72xYz5Z.js} +1 -1
  44. package/dist/{elapsed-time-C3nfbdd9.js → elapsed-time-C7S-6bWV.js} +6 -6
  45. package/dist/{elapsed-time-C3nfbdd9.js.map → elapsed-time-C7S-6bWV.js.map} +1 -1
  46. package/dist/{entry-De__5RVq.js → entry-CX24qHnm.js} +7 -7
  47. package/dist/{entry-De__5RVq.js.map → entry-CX24qHnm.js.map} +1 -1
  48. package/dist/{installation-inventory-Bq8iZfSa.js → installation-inventory-B3mwQFEA.js} +3 -3
  49. package/dist/{installation-inventory-Bq8iZfSa.js.map → installation-inventory-B3mwQFEA.js.map} +1 -1
  50. package/dist/{installer-C7iSAOSz.js → installer-DnIJ4y3l.js} +2 -2
  51. package/dist/{installer-C7iSAOSz.js.map → installer-DnIJ4y3l.js.map} +1 -1
  52. package/dist/{local-components-DleLEzSU.js → local-components-DJiMS67S.js} +36 -3
  53. package/dist/local-components-DJiMS67S.js.map +1 -0
  54. package/dist/{meta-api-BpwJWE22.js → meta-api-DgHkiIdr.js} +4 -4
  55. package/dist/{meta-api-BpwJWE22.js.map → meta-api-DgHkiIdr.js.map} +1 -1
  56. package/dist/{openmeld-C0OSZJtn.js → openmeld-kYp99hOl.js} +32 -32
  57. package/dist/{openmeld-C0OSZJtn.js.map → openmeld-kYp99hOl.js.map} +1 -1
  58. package/dist/{openmeld-maintenance-worker-DY90mkWW.js → openmeld-maintenance-worker-BqU1Asrm.js} +9 -9
  59. package/dist/{openmeld-maintenance-worker-DY90mkWW.js.map → openmeld-maintenance-worker-BqU1Asrm.js.map} +1 -1
  60. package/dist/{openmeld-tools-update-join-DgzNuaDy.js → openmeld-tools-update-join-BKJnGR5h.js} +4 -4
  61. package/dist/{openmeld-tools-update-join-DgzNuaDy.js.map → openmeld-tools-update-join-BKJnGR5h.js.map} +1 -1
  62. package/dist/{openmeld-tools-update-process-frame-DbEZ3fEh.js → openmeld-tools-update-process-frame-Csy2XKUf.js} +1 -1
  63. package/dist/{openmeld-tools-update-process-frame-BtFKp70p.js → openmeld-tools-update-process-frame-YLOS82E3.js} +2 -2
  64. package/dist/{openmeld-tools-update-process-frame-BtFKp70p.js.map → openmeld-tools-update-process-frame-YLOS82E3.js.map} +1 -1
  65. package/dist/openmeld.js +5 -5
  66. package/dist/{prepare-provider-runtime-BGdfbFyZ.js → prepare-provider-runtime-CD6XRt7X.js} +374 -175
  67. package/dist/prepare-provider-runtime-CD6XRt7X.js.map +1 -0
  68. package/dist/{prepare-session-executor-CA1gq8dR.js → prepare-session-executor-DY2s4FuY.js} +19 -19
  69. package/dist/{prepare-session-executor-CA1gq8dR.js.map → prepare-session-executor-DY2s4FuY.js.map} +1 -1
  70. package/dist/{process-channel-C1wRGUmk.js → process-channel-CzgOWiuh.js} +2 -2
  71. package/dist/{process-channel-C1wRGUmk.js.map → process-channel-CzgOWiuh.js.map} +1 -1
  72. package/dist/{runtime-DFlEdls4.js → runtime-Br4Ga0rJ.js} +17 -17
  73. package/dist/{runtime-DFlEdls4.js.map → runtime-Br4Ga0rJ.js.map} +1 -1
  74. package/dist/{runtime-agent-controller-reporting-submission-C_xD2A-P.js → runtime-agent-controller-reporting-submission-CQjbBiHh.js} +139 -33
  75. package/dist/runtime-agent-controller-reporting-submission-CQjbBiHh.js.map +1 -0
  76. package/dist/{runtime-reporting-health-state-_bvJcV1y.js → runtime-reporting-health-state-a1FUE1S-.js} +13 -12
  77. package/dist/{runtime-reporting-health-state-_bvJcV1y.js.map → runtime-reporting-health-state-a1FUE1S-.js.map} +1 -1
  78. package/dist/{runtime-transport-DH8Ks-AU.js → runtime-transport-D4CVffnp.js} +3 -3
  79. package/dist/{runtime-transport-DH8Ks-AU.js.map → runtime-transport-D4CVffnp.js.map} +1 -1
  80. package/dist/{service-KHA_Yv8q.js → service-D9QVc4_y.js} +56 -20
  81. package/dist/service-D9QVc4_y.js.map +1 -0
  82. package/dist/{service-account-authorization-BHWs8cRP.js → service-account-authorization-DLhUgGDb.js} +2 -2
  83. package/dist/{service-account-authorization-BHWs8cRP.js.map → service-account-authorization-DLhUgGDb.js.map} +1 -1
  84. package/dist/{service-account-control-BcHjpVid.js → service-account-control-DIdQILmo.js} +9 -9
  85. package/dist/{service-account-control-BcHjpVid.js.map → service-account-control-DIdQILmo.js.map} +1 -1
  86. package/dist/{service-control-capabilities-DTKD2-o0.js → service-control-capabilities-BvHU_NcX.js} +1 -1
  87. package/dist/{service-control-capabilities-B4433dGT.js → service-control-capabilities-CGv5Cuxo.js} +3 -3
  88. package/dist/{service-control-capabilities-B4433dGT.js.map → service-control-capabilities-CGv5Cuxo.js.map} +1 -1
  89. package/dist/{state-iJqU2XWw.js → state-AWe5DSV8.js} +2 -2
  90. package/dist/{state-iJqU2XWw.js.map → state-AWe5DSV8.js.map} +1 -1
  91. package/dist/upgrade-CLnZ4WBF.js +4 -0
  92. package/dist/{upgrade-DlBDEvs4.js → upgrade-CcnlL7FH.js} +8 -8
  93. package/dist/{upgrade-DlBDEvs4.js.map → upgrade-CcnlL7FH.js.map} +1 -1
  94. package/package.json +14 -14
  95. package/dist/auth-session-BOG3gV2K2.js +0 -4
  96. package/dist/cli-binary-manifest-Bjf6T7Ef.js.map +0 -1
  97. package/dist/dist-Bw6OBFYo.js.map +0 -1
  98. package/dist/local-components-DleLEzSU.js.map +0 -1
  99. package/dist/prepare-provider-runtime-BGdfbFyZ.js.map +0 -1
  100. package/dist/runtime-agent-controller-reporting-submission-C_xD2A-P.js.map +0 -1
  101. package/dist/service-KHA_Yv8q.js.map +0 -1
  102. package/dist/upgrade-CuzsgsKh.js +0 -4
@@ -1 +0,0 @@
1
- {"version":3,"file":"runtime-agent-controller-reporting-submission-C_xD2A-P.js","names":["exhaustive","PROBE_OUTPUT_LIMIT","toErrorMessage","normalizeOptionalText","toRecord","appendProbeOutput","toErrorMessage"],"sources":["../src/agents/controller-version-channel.ts","../src/local-service/inventory/opencode-readiness-probe.ts","../src/local-service/inventory/probe-working-directory.ts","../src/local-service/inventory/runtime-provider-usage-limits.ts","../src/local-service/inventory/agent-controller-interface.ts","../src/local-service/inventory/agent-controller-inventory.ts","../src/local-service/reporting/agent-controller-interface-cloud-projection.ts","../src/local-service/reporting/runtime-agent-controller-reporting-submission.ts"],"sourcesContent":["import { readFile } from \"node:fs/promises\";\nimport type {\n BuiltinAgentControllerOfficialChannel,\n BuiltinAgentControllerVersionMaintenanceDefinition,\n ControllerVersionLatestSpec,\n} from \"./builtin-agent-controller-definitions\";\nimport {\n isBunGlobalCommandPath,\n isHomebrewCommandPath,\n isNpmGlobalCommandPath,\n isPnpmGlobalCommandPath,\n} from \"./controller-command-paths\";\n\nconst LATEST_VERSION_TIMEOUT_MS = 4000;\nconst LATEST_VERSION_CACHE_TTL_MS = 60 * 60 * 1000;\nconst FAILED_LATEST_VERSION_CACHE_TTL_MS = 5 * 60 * 1000;\nconst HOMEBREW_CELLAR_RE = /^(.*)\\/[Cc]ellar\\/([^/]+)\\/([^/]+)\\//u;\nconst HOMEBREW_CASKROOM_RE = /^(.*)\\/[Cc]askroom\\/([^/]+)\\/([^/]+)\\//u;\nconst HOMEBREW_FORMULA_VERSION_RE = /^\\s*version\\s+\"([^\"]+)\"/mu;\nconst HOMEBREW_RELEASE_URL_VERSION_RE =\n /releases\\/download\\/v?([^/]+)(?:\\/|$)/u;\nconst GITHUB_TAG_PREFIX_RE = /^v/u;\nconst PLAIN_VERSION_LINE_RE = /\\r?\\n/u;\nconst OFFICIAL_HOMEBREW_TAPS = new Set([\n \"homebrew/core\",\n \"homebrew/cask\",\n \"homebrew/homebrew-core\",\n \"homebrew/homebrew-cask\",\n]);\nconst OPENMELD_VERSION_LOOKUP_USER_AGENT = \"OpenMeld\";\n\nexport type LatestVersionFetchFailureDiagnostic = {\n attempt: 1 | 2;\n errorMessage: string | null;\n errorName: string | null;\n reason: \"http_error\" | \"invalid_response\" | \"request_error\" | \"timeout\";\n statusCode: number | null;\n url: string;\n};\n\nexport type LatestVersionLookupResult = {\n failureDiagnostics: readonly LatestVersionFetchFailureDiagnostic[];\n version: string | null;\n};\n\nexport type ControllerVersionChannel = {\n cacheKey: string;\n latest: ControllerResolvedLatestLookup;\n updateCommand: string | null;\n};\n\ntype ControllerResolvedLatestLookup =\n | { kind: \"github-release\"; repository: string }\n | {\n kind: \"homebrew-api\";\n package: NonNullable<\n BuiltinAgentControllerVersionMaintenanceDefinition[\"homebrewPackage\"]\n >;\n }\n | {\n kind: \"homebrew-tap-ruby\";\n name: string;\n packageKind: \"cask\" | \"formula\";\n tap: string;\n }\n | { kind: \"http-json\"; url: string }\n | { kind: \"http-text\"; url: string }\n | { kind: \"npm\"; packageName: string };\n\ntype HomebrewInstallIdentity = {\n kind: \"cask\" | \"formula\";\n name: string;\n tap: string | null;\n};\n\nconst latestControllerVersionCache = new Map<\n string,\n { expiresAtMs: number; version: string | null }\n>();\n\nexport async function resolveControllerVersionChannel(input: {\n commandPath: string;\n commandPaths: readonly string[];\n definition: BuiltinAgentControllerVersionMaintenanceDefinition;\n}): Promise<ControllerVersionChannel | null> {\n const officialChannel = findOfficialChannel(\n input.commandPath,\n input.commandPaths,\n input.definition.officialChannels\n );\n if (officialChannel) {\n const latest = resolveDeclaredLatestLookup(\n officialChannel.latest,\n input.definition\n );\n if (!latest) {\n return null;\n }\n return {\n cacheKey: buildLatestCacheKey(latest),\n latest,\n updateCommand: officialChannel.updateCommand,\n };\n }\n\n if (isPackageManagerCommandPath(input.commandPaths)) {\n if (input.definition.npmPackageName) {\n return {\n cacheKey: `npm:${input.definition.npmPackageName}`,\n latest: {\n kind: \"npm\",\n packageName: input.definition.npmPackageName,\n },\n updateCommand: resolvePackageManagerUpdateCommand({\n commandPaths: input.commandPaths,\n packageName: input.definition.npmPackageName,\n }),\n };\n }\n return null;\n }\n\n if (\n input.definition.homebrewPackage &&\n input.commandPaths.some(isHomebrewCommandPath)\n ) {\n const homebrewInstall = await resolveHomebrewInstallIdentity({\n commandPaths: input.commandPaths,\n declaredPackage: input.definition.homebrewPackage,\n });\n if (!homebrewInstall) {\n return null;\n }\n const latest = resolveHomebrewLatestLookup(homebrewInstall);\n return {\n cacheKey: buildLatestCacheKey(latest),\n latest,\n updateCommand: resolveHomebrewUpdateCommand(homebrewInstall),\n };\n }\n\n if (input.definition.npmPackageName) {\n return {\n cacheKey: `npm:${input.definition.npmPackageName}`,\n latest: {\n kind: \"npm\",\n packageName: input.definition.npmPackageName,\n },\n updateCommand: `npm install -g ${input.definition.npmPackageName}@latest`,\n };\n }\n\n return null;\n}\n\nexport async function fetchLatestControllerVersion(\n channel: ControllerVersionChannel\n): Promise<LatestVersionLookupResult> {\n const nowMs = Date.now();\n const cached = latestControllerVersionCache.get(channel.cacheKey);\n if (cached && cached.expiresAtMs > nowMs) {\n return { failureDiagnostics: [], version: cached.version };\n }\n\n const lookupResult = await fetchLatestForLookup(channel.latest);\n latestControllerVersionCache.set(channel.cacheKey, {\n expiresAtMs:\n nowMs +\n (lookupResult.version\n ? LATEST_VERSION_CACHE_TTL_MS\n : FAILED_LATEST_VERSION_CACHE_TTL_MS),\n version: lookupResult.version,\n });\n return lookupResult;\n}\n\nexport function buildHomebrewFormulaeApiUrl(input: {\n kind: \"cask\" | \"formula\";\n name: string;\n}): string {\n return `https://formulae.brew.sh/api/${input.kind}/${encodeURIComponent(input.name)}.json`;\n}\n\nexport function buildHomebrewTapPackageUrls(input: {\n kind: \"cask\" | \"formula\";\n name: string;\n tap: string;\n}): string[] {\n const repository = resolveHomebrewTapGitHubRepository(input.tap);\n if (!repository) {\n return [];\n }\n const base = `https://raw.githubusercontent.com/${repository.owner}/${repository.repo}/HEAD`;\n const packageDirectory = input.kind === \"cask\" ? \"Casks\" : \"Formula\";\n return [\n `${base}/${input.name}.rb`,\n `${base}/${packageDirectory}/${input.name}.rb`,\n ];\n}\n\nexport function parseHomebrewRubyPackageVersion(source: string): string | null {\n const declaredVersion = source.match(HOMEBREW_FORMULA_VERSION_RE)?.[1];\n if (declaredVersion) {\n return declaredVersion.trim();\n }\n const releaseVersion = source.match(HOMEBREW_RELEASE_URL_VERSION_RE)?.[1];\n return releaseVersion ? releaseVersion.trim() : null;\n}\n\nfunction findOfficialChannel(\n commandPath: string,\n commandPaths: readonly string[],\n channels: BuiltinAgentControllerVersionMaintenanceDefinition[\"officialChannels\"]\n): BuiltinAgentControllerOfficialChannel | null {\n if (!channels) {\n return null;\n }\n for (const channel of channels) {\n if (channel.matchesPath(commandPath)) {\n return channel;\n }\n }\n for (const path of commandPaths) {\n if (path === commandPath) {\n continue;\n }\n for (const channel of channels) {\n if (channel.matchesPath(path)) {\n return channel;\n }\n }\n }\n return null;\n}\n\nfunction resolveDeclaredLatestLookup(\n latest: ControllerVersionLatestSpec,\n definition: BuiltinAgentControllerVersionMaintenanceDefinition\n): ControllerResolvedLatestLookup | null {\n if (latest.kind === \"npm\") {\n return definition.npmPackageName\n ? { kind: \"npm\", packageName: definition.npmPackageName }\n : null;\n }\n if (latest.kind === \"homebrew\") {\n return definition.homebrewPackage\n ? { kind: \"homebrew-api\", package: definition.homebrewPackage }\n : null;\n }\n return latest;\n}\n\nfunction isPackageManagerCommandPath(commandPaths: readonly string[]): boolean {\n return (\n commandPaths.some(isBunGlobalCommandPath) ||\n commandPaths.some(isPnpmGlobalCommandPath) ||\n commandPaths.some(isNpmGlobalCommandPath)\n );\n}\n\nfunction resolvePackageManagerUpdateCommand(input: {\n commandPaths: readonly string[];\n packageName: string;\n}): string {\n if (input.commandPaths.some(isBunGlobalCommandPath)) {\n return `bun i -g ${input.packageName}@latest`;\n }\n if (input.commandPaths.some(isPnpmGlobalCommandPath)) {\n return `pnpm add -g ${input.packageName}@latest`;\n }\n return `npm install -g ${input.packageName}@latest`;\n}\n\nasync function resolveHomebrewInstallIdentity(input: {\n commandPaths: readonly string[];\n declaredPackage: NonNullable<\n BuiltinAgentControllerVersionMaintenanceDefinition[\"homebrewPackage\"]\n >;\n}): Promise<HomebrewInstallIdentity | null> {\n for (const commandPath of input.commandPaths) {\n const cellarInstall = parseHomebrewPrefixInstall(commandPath, \"formula\");\n if (cellarInstall) {\n const tap = await readHomebrewReceiptTap(cellarInstall.receiptDir);\n return {\n kind: \"formula\",\n name: cellarInstall.name,\n tap,\n };\n }\n const caskInstall = parseHomebrewPrefixInstall(commandPath, \"cask\");\n if (caskInstall) {\n const tap = await readHomebrewReceiptTap(caskInstall.receiptDir);\n return {\n kind: \"cask\",\n name: caskInstall.name,\n tap: tap ?? \"homebrew/cask\",\n };\n }\n }\n if (!input.commandPaths.some(isHomebrewCommandPath)) {\n return null;\n }\n return {\n kind: input.declaredPackage.kind,\n name: input.declaredPackage.name,\n tap:\n input.declaredPackage.kind === \"cask\" ? \"homebrew/cask\" : \"homebrew/core\",\n };\n}\n\nfunction parseHomebrewPrefixInstall(\n commandPath: string,\n kind: \"cask\" | \"formula\"\n): { name: string; receiptDir: string } | null {\n const normalized = commandPath.replaceAll(\"\\\\\", \"/\");\n const match =\n kind === \"formula\"\n ? HOMEBREW_CELLAR_RE.exec(normalized)\n : HOMEBREW_CASKROOM_RE.exec(normalized);\n const name = match?.[2];\n const version = match?.[3];\n const matchedPrefix = match?.[0];\n if (!(name && version && matchedPrefix)) {\n return null;\n }\n const installDir = normalized.slice(0, matchedPrefix.length - 1);\n return {\n name,\n receiptDir:\n kind === \"cask\"\n ? `${installDir.slice(0, -(version.length + 1))}/.metadata`\n : installDir,\n };\n}\n\nasync function readHomebrewReceiptTap(\n installDir: string\n): Promise<string | null> {\n try {\n const receipt = JSON.parse(\n await readFile(`${installDir}/INSTALL_RECEIPT.json`, \"utf8\")\n ) as unknown;\n if (!receipt || typeof receipt !== \"object\") {\n return null;\n }\n const tap = (receipt as { source?: { tap?: unknown } }).source?.tap;\n return typeof tap === \"string\" && tap.trim().length > 0 ? tap.trim() : null;\n } catch {\n return null;\n }\n}\n\nfunction resolveHomebrewLatestLookup(\n install: HomebrewInstallIdentity\n): ControllerResolvedLatestLookup {\n if (install.tap && isThirdPartyHomebrewTap(install.tap)) {\n return {\n kind: \"homebrew-tap-ruby\",\n name: install.name,\n packageKind: install.kind,\n tap: install.tap,\n };\n }\n return {\n kind: \"homebrew-api\",\n package: { kind: install.kind, name: install.name },\n };\n}\n\nfunction resolveHomebrewUpdateCommand(\n install: HomebrewInstallIdentity\n): string {\n const packageSpec =\n install.tap && isThirdPartyHomebrewTap(install.tap)\n ? `${install.tap}/${install.name}`\n : install.name;\n return install.kind === \"cask\"\n ? `brew upgrade --cask ${packageSpec}`\n : `brew upgrade ${packageSpec}`;\n}\n\nfunction isThirdPartyHomebrewTap(tap: string): boolean {\n return !OFFICIAL_HOMEBREW_TAPS.has(tap);\n}\n\nfunction resolveHomebrewTapGitHubRepository(\n tap: string\n): { owner: string; repo: string } | null {\n const [owner, name] = tap.split(\"/\");\n if (!(owner && name)) {\n return null;\n }\n return {\n owner,\n repo: name.startsWith(\"homebrew-\") ? name : `homebrew-${name}`,\n };\n}\n\nfunction buildLatestCacheKey(latest: ControllerResolvedLatestLookup): string {\n switch (latest.kind) {\n case \"github-release\":\n return `github-release:${latest.repository}`;\n case \"homebrew-api\":\n return `brew-api:${latest.package.kind}:${latest.package.name}`;\n case \"homebrew-tap-ruby\":\n return `brew-tap:${latest.packageKind}:${latest.tap}:${latest.name}`;\n case \"http-json\":\n case \"http-text\":\n return `${latest.kind}:${latest.url}`;\n case \"npm\":\n return `npm:${latest.packageName}`;\n default: {\n const exhaustive: never = latest;\n throw new Error(\n `Unsupported latest lookup: ${JSON.stringify(exhaustive)}`\n );\n }\n }\n}\n\nfunction fetchLatestForLookup(\n latest: ControllerResolvedLatestLookup\n): Promise<LatestVersionLookupResult> {\n switch (latest.kind) {\n case \"github-release\":\n return fetchLatestVersion({\n accept: \"application/vnd.github+json\",\n parse: parseGitHubReleaseTag,\n url: `https://api.github.com/repos/${latest.repository}/releases/latest`,\n userAgent: OPENMELD_VERSION_LOOKUP_USER_AGENT,\n });\n case \"homebrew-api\":\n return fetchLatestVersion({\n accept: \"application/json\",\n parse: (body) => parseHomebrewApiVersion(body, latest.package.kind),\n url: buildHomebrewFormulaeApiUrl(latest.package),\n });\n case \"homebrew-tap-ruby\":\n return fetchFirstSuccessfulLatestVersion(\n buildHomebrewTapPackageUrls({\n kind: latest.packageKind,\n name: latest.name,\n tap: latest.tap,\n }).map((url) => ({\n accept: \"text/plain\",\n parse: parseHomebrewRubyPackageVersion,\n url,\n }))\n );\n case \"http-json\":\n return fetchLatestVersion({\n accept: \"application/json\",\n parse: parseJsonVersionField,\n url: latest.url,\n });\n case \"http-text\":\n return fetchLatestVersion({\n accept: \"text/plain\",\n parse: parsePlainVersion,\n url: latest.url,\n });\n case \"npm\":\n return fetchLatestVersion({\n accept: \"application/json\",\n parse: parseJsonVersionField,\n url: `https://registry.npmjs.org/${encodeURIComponent(latest.packageName)}/latest`,\n });\n default: {\n const exhaustive: never = latest;\n throw new Error(\n `Unsupported latest lookup: ${JSON.stringify(exhaustive)}`\n );\n }\n }\n}\n\nasync function fetchFirstSuccessfulLatestVersion(\n lookups: readonly {\n accept: string;\n parse: (body: string) => string | null;\n url: string;\n }[]\n): Promise<LatestVersionLookupResult> {\n const failureDiagnostics: LatestVersionFetchFailureDiagnostic[] = [];\n for (const lookup of lookups) {\n const lookupResult = await fetchLatestVersion(lookup);\n if (lookupResult.version) {\n return {\n failureDiagnostics: [\n ...failureDiagnostics,\n ...lookupResult.failureDiagnostics,\n ],\n version: lookupResult.version,\n };\n }\n failureDiagnostics.push(...lookupResult.failureDiagnostics);\n }\n return { failureDiagnostics, version: null };\n}\n\nasync function fetchLatestVersion(input: {\n accept: string;\n parse: (body: string) => string | null;\n url: string;\n userAgent?: string;\n}): Promise<LatestVersionLookupResult> {\n const failureDiagnostics: LatestVersionFetchFailureDiagnostic[] = [];\n for (const attempt of [1, 2] as const) {\n const attemptResult = await fetchLatestVersionAttempt({\n ...input,\n attempt,\n });\n if (attemptResult.ok) {\n return {\n failureDiagnostics,\n version: attemptResult.version,\n };\n }\n failureDiagnostics.push(attemptResult.failureDiagnostic);\n }\n return { failureDiagnostics, version: null };\n}\n\nasync function fetchLatestVersionAttempt(input: {\n accept: string;\n attempt: 1 | 2;\n parse: (body: string) => string | null;\n url: string;\n userAgent?: string;\n}): Promise<\n | { failureDiagnostic: LatestVersionFetchFailureDiagnostic; ok: false }\n | { ok: true; version: string }\n> {\n const abortController = new AbortController();\n const timeout = setTimeout(() => {\n abortController.abort();\n }, LATEST_VERSION_TIMEOUT_MS);\n try {\n const response = await fetch(input.url, {\n headers: {\n accept: input.accept,\n ...(input.userAgent ? { \"user-agent\": input.userAgent } : {}),\n },\n signal: abortController.signal,\n });\n if (!response.ok) {\n return {\n failureDiagnostic: {\n attempt: input.attempt,\n errorMessage: null,\n errorName: null,\n reason: \"http_error\",\n statusCode: response.status,\n url: input.url,\n },\n ok: false,\n };\n }\n const version = input.parse(await response.text());\n if (!version) {\n return {\n failureDiagnostic: {\n attempt: input.attempt,\n errorMessage: null,\n errorName: null,\n reason: \"invalid_response\",\n statusCode: response.status,\n url: input.url,\n },\n ok: false,\n };\n }\n return { ok: true, version };\n } catch (error) {\n const errorName = error instanceof Error ? error.name : null;\n return {\n failureDiagnostic: {\n attempt: input.attempt,\n errorMessage: error instanceof Error ? error.message : String(error),\n errorName,\n reason: errorName === \"AbortError\" ? \"timeout\" : \"request_error\",\n statusCode: null,\n url: input.url,\n },\n ok: false,\n };\n } finally {\n clearTimeout(timeout);\n }\n}\n\nfunction parseJsonVersionField(body: string): string | null {\n try {\n const payload: unknown = JSON.parse(body);\n if (!payload || typeof payload !== \"object\") {\n return null;\n }\n const version = (payload as { version?: unknown }).version;\n return typeof version === \"string\" && version.trim().length > 0\n ? version.trim()\n : null;\n } catch {\n return null;\n }\n}\n\nfunction parseGitHubReleaseTag(body: string): string | null {\n try {\n const payload: unknown = JSON.parse(body);\n if (!payload || typeof payload !== \"object\") {\n return null;\n }\n const tagName = (payload as { tag_name?: unknown }).tag_name;\n if (typeof tagName !== \"string\" || tagName.trim().length === 0) {\n return null;\n }\n return tagName.trim().replace(GITHUB_TAG_PREFIX_RE, \"\");\n } catch {\n return null;\n }\n}\n\nfunction parseHomebrewApiVersion(\n body: string,\n kind: \"cask\" | \"formula\"\n): string | null {\n try {\n const payload: unknown = JSON.parse(body);\n if (!payload || typeof payload !== \"object\") {\n return null;\n }\n if (kind === \"cask\") {\n const version = (payload as { version?: unknown }).version;\n return typeof version === \"string\" && version.trim().length > 0\n ? version.trim()\n : null;\n }\n const versions = (payload as { versions?: { stable?: unknown } }).versions;\n const stable = versions?.stable;\n return typeof stable === \"string\" && stable.trim().length > 0\n ? stable.trim()\n : null;\n } catch {\n return null;\n }\n}\n\nfunction parsePlainVersion(body: string): string | null {\n const version = body.split(PLAIN_VERSION_LINE_RE, 1)[0]?.trim() ?? \"\";\n return version.length > 0 ? version : null;\n}\n","import { type ChildProcessByStdio, spawn } from \"node:child_process\";\nimport { readFile } from \"node:fs/promises\";\nimport { createServer } from \"node:net\";\nimport { homedir, loadavg } from \"node:os\";\nimport type { Readable } from \"node:stream\";\nimport {\n createOpencodeClient,\n type ProviderListResponse,\n} from \"@opencode-ai/sdk/v2\";\nimport {\n buildCliLaunchInvocation,\n createProviderOriginalError,\n createUnavailableProviderUsageLimits,\n createUnsupportedProviderUsageLimits,\n type RuntimeAgentControllerLaunchContract,\n} from \"@openmeld/adapter-core\";\nimport { parseOpenCodeGoUsageResponse } from \"@openmeld/adapter-opencode\";\nimport type {\n AgentControllerInterfaceAuthSnapshot,\n AgentControllerInterfaceModel,\n AgentControllerInterfaceStatus,\n AgentControllerUsageLimits,\n} from \"@openmeld/schemas/types\";\nimport { resolveOpenCodeAuthPath } from \"../../agent-activity/opencode-storage\";\n\nconst DEFAULT_PROBE_TIMEOUT_MS = 8000;\nconst SDK_READ_TIMEOUT_MS = 4000;\nconst PROBE_OUTPUT_LIMIT = 32_000;\nconst OPENCODE_MODEL_ID_RE = /^[A-Za-z0-9_.-]+\\/[^\\s/]+$/u;\nconst OPENCODE_PROBE_HOSTNAME = \"127.0.0.1\";\nconst OPENCODE_SERVER_READY_PREFIX = \"opencode server listening\";\nconst OPENCODE_SERVER_URL_RE = /on\\s+(https?:\\/\\/[^\\s]+)/u;\nconst ANSI_ESCAPE = String.fromCharCode(27);\nconst OPENCODE_GO_PROVIDER_ID = \"opencode-go\";\nconst OPENCODE_GO_USAGE_URL = \"https://opencode.ai/zen/go/v1/usage\";\n\nexport type OpenCodeReadinessProbeResult = {\n auth: AgentControllerInterfaceAuthSnapshot;\n message: string | null;\n models: AgentControllerInterfaceModel[];\n // True when the probe reached OpenCode and read a real answer (including a\n // proven not-signed-in answer). False when the check itself failed — server\n // start timeout, spawn error, hung reads — which is load evidence, not\n // controller truth.\n probeCompleted: boolean;\n status: AgentControllerInterfaceStatus;\n usageLimits?: AgentControllerUsageLimits;\n};\n\nexport async function probeOpenCodeReadiness(input: {\n workingDirectory: string;\n launchContract: RuntimeAgentControllerLaunchContract;\n timeoutMs?: number;\n}): Promise<OpenCodeReadinessProbeResult> {\n let server: OpenCodeProbeServer | null = null;\n try {\n server = await startOpenCodeProbeServer({\n workingDirectory: input.workingDirectory,\n launchContract: input.launchContract,\n timeoutMs: input.timeoutMs ?? DEFAULT_PROBE_TIMEOUT_MS,\n });\n const client = createOpencodeClient({\n baseUrl: server.url,\n directory: input.workingDirectory,\n throwOnError: true,\n });\n // The SDK reads have no timeout of their own; without this bound a hung\n // OpenCode server would wedge the whole controller report sync forever.\n const providerListResult = await rejectAfterTimeout(\n client.provider.list(),\n SDK_READ_TIMEOUT_MS,\n `Timed out while reading OpenCode provider status after ${SDK_READ_TIMEOUT_MS}ms.`\n );\n const readiness = resolveOpenCodeReadinessFromProviderList(\n providerListResult.data\n );\n const usageLimits = providerListResult.data\n ? await readOpenCodeProviderUsageLimits({\n observedAt: new Date().toISOString(),\n providerList: providerListResult.data,\n })\n : undefined;\n return { ...readiness, ...(usageLimits ? { usageLimits } : {}) };\n } catch (error: unknown) {\n const auth = resolveOpenCodeAuthSnapshotFromProbeError(error);\n return {\n auth,\n message: `OpenCode is installed, but OpenMeld could not confirm a connected OpenCode provider: ${toErrorMessage(error)}`,\n models: [],\n // A 401/403 is a real answer from a live server: the provider account\n // is proven not signed in. Anything else here means the check died.\n probeCompleted: auth.status === \"unauthenticated\",\n status: auth.status === \"unauthenticated\" ? \"unavailable\" : \"unknown\",\n };\n } finally {\n if (server) {\n await stopOpenCodeProbeServer(server.child);\n }\n }\n}\n\nexport async function readOpenCodeProviderUsageLimits(input: {\n authContent?: string | null;\n fetchFn?: typeof fetch;\n observedAt: string;\n providerList: ProviderListResponse;\n readAuthFile?: (path: string) => Promise<string>;\n}): Promise<AgentControllerUsageLimits> {\n const providersById = new Map<string, { displayName: string; id: string }>();\n for (const connectedProviderId of input.providerList.connected) {\n const id = normalizeOptionalText(connectedProviderId);\n if (!(id && id.length <= 256) || providersById.has(id)) {\n continue;\n }\n const displayName = (\n normalizeOptionalText(\n input.providerList.all.find((provider) => provider.id === id)?.name\n ) ?? id\n ).slice(0, 256);\n providersById.set(id, { displayName, id });\n }\n const providers = [...providersById.values()];\n\n const usageLimits = await Promise.all(\n providers.map(async (provider) => {\n if (provider.id !== OPENCODE_GO_PROVIDER_ID) {\n return createUnsupportedProviderUsageLimits(input.observedAt, provider);\n }\n const apiKey = await resolveOpenCodeProviderApiKey({\n authContent: input.authContent,\n providerId: provider.id,\n readAuthFile: input.readAuthFile,\n });\n if (!apiKey) {\n return createUnavailableProviderUsageLimits(input.observedAt, provider);\n }\n try {\n const response = await (input.fetchFn ?? fetch)(OPENCODE_GO_USAGE_URL, {\n headers: { authorization: `Bearer ${apiKey}` },\n signal: AbortSignal.timeout(SDK_READ_TIMEOUT_MS),\n });\n if (!response.ok) {\n return createUnavailableProviderUsageLimits(\n input.observedAt,\n provider\n );\n }\n return parseOpenCodeGoUsageResponse({\n observedAt: input.observedAt,\n value: await response.json(),\n });\n } catch {\n return createUnavailableProviderUsageLimits(input.observedAt, provider);\n }\n })\n );\n return usageLimits.flat().slice(0, 32);\n}\n\nasync function resolveOpenCodeProviderApiKey(input: {\n authContent?: string | null;\n providerId: string;\n readAuthFile?: (path: string) => Promise<string>;\n}): Promise<string | null> {\n let authContent = input.authContent ?? process.env.OPENCODE_AUTH_CONTENT;\n if (!authContent) {\n try {\n const authPath = resolveOpenCodeAuthPath({\n homeDir: homedir(),\n xdgDataHome: process.env.XDG_DATA_HOME,\n });\n authContent = input.readAuthFile\n ? await input.readAuthFile(authPath)\n : await readFile(authPath, \"utf8\");\n } catch {\n return null;\n }\n }\n try {\n const providerAuth = toRecord(JSON.parse(authContent)?.[input.providerId]);\n return providerAuth?.type === \"api\"\n ? normalizeOptionalText(providerAuth.key)\n : null;\n } catch {\n return null;\n }\n}\n\ntype OpenCodeProbeServer = {\n child: OpenCodeProbeChild;\n url: string;\n};\n\ntype OpenCodeProbeChild = ChildProcessByStdio<null, Readable, Readable>;\n\nasync function startOpenCodeProbeServer(input: {\n workingDirectory: string;\n launchContract: RuntimeAgentControllerLaunchContract;\n timeoutMs: number;\n}): Promise<OpenCodeProbeServer> {\n const port = await findAvailableLocalPort();\n const invocation = buildCliLaunchInvocation({\n args: [\"serve\", `--hostname=${OPENCODE_PROBE_HOSTNAME}`, `--port=${port}`],\n launchContract: input.launchContract,\n });\n\n return new Promise((resolve, reject) => {\n const child = spawn(invocation.bin, invocation.args, {\n cwd: input.workingDirectory,\n detached: process.platform !== \"win32\",\n env: process.env,\n shell: invocation.shell ?? false,\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n windowsHide: true,\n });\n const spawnedAtMs = Date.now();\n let stdout = \"\";\n let stderr = \"\";\n let stdoutBytes = 0;\n let stderrBytes = 0;\n let settled = false;\n const finish = (\n result: { error: Error } | { server: OpenCodeProbeServer }\n ) => {\n if (settled) {\n return;\n }\n settled = true;\n clearTimeout(timeout);\n if (\"server\" in result) {\n resolve(result.server);\n return;\n }\n stopOpenCodeProbeServer(child).finally(() => {\n reject(result.error);\n });\n };\n const timeout = setTimeout(() => {\n finish({\n error: new Error(\n [\n `Timed out waiting for OpenCode server start after ${input.timeoutMs}ms.`,\n `Startup evidence: pid=${child.pid ?? \"unknown\"}, elapsedMs=${Date.now() - spawnedAtMs}, stdoutBytes=${stdoutBytes}, stderrBytes=${stderrBytes}, load1m=${loadavg()[0]?.toFixed(2) ?? \"unavailable\"}.`,\n createProviderOriginalError(stderr) ||\n createProviderOriginalError(stdout),\n ]\n .filter(Boolean)\n .join(\" \")\n ),\n });\n }, input.timeoutMs);\n\n child.stdout.on(\"data\", (chunk) => {\n stdoutBytes += Buffer.byteLength(chunk);\n stdout = appendProbeOutput(stdout, chunk);\n const url = parseOpenCodeServerUrlFromOutput(stdout);\n if (url) {\n finish({ server: { child, url } });\n }\n });\n child.stderr.on(\"data\", (chunk) => {\n stderrBytes += Buffer.byteLength(chunk);\n stderr = appendProbeOutput(stderr, chunk);\n });\n child.on(\"error\", (error) => {\n finish({\n error: new Error(`OpenCode server could not start: ${error.message}`),\n });\n });\n child.on(\"close\", (code) => {\n if (settled) {\n return;\n }\n finish({\n error: new Error(\n [\n `OpenCode server exited before startup completed (code: ${\n typeof code === \"number\" ? code : \"unknown\"\n }).`,\n stdout.trim() ? `stdout: ${stdout.trim()}` : null,\n stderr.trim() ? `stderr: ${stderr.trim()}` : null,\n ]\n .filter(Boolean)\n .join(\" \")\n ),\n });\n });\n });\n}\n\nfunction stopOpenCodeProbeServer(child: OpenCodeProbeChild): Promise<void> {\n if (child.exitCode !== null || child.signalCode !== null) {\n return Promise.resolve();\n }\n return new Promise((resolve) => {\n let settled = false;\n const finish = () => {\n if (settled) {\n return;\n }\n settled = true;\n clearTimeout(forceKillTimer);\n clearTimeout(resolveTimer);\n child.off(\"close\", finish);\n resolve();\n };\n const forceKillTimer = setTimeout(() => {\n killOpenCodeProbeProcess(child, \"SIGKILL\");\n }, 1000);\n const resolveTimer = setTimeout(finish, 1500);\n child.once(\"close\", finish);\n killOpenCodeProbeProcess(child, \"SIGTERM\");\n });\n}\n\nfunction killOpenCodeProbeProcess(\n child: OpenCodeProbeChild,\n signal: NodeJS.Signals\n): void {\n try {\n if (process.platform !== \"win32\" && child.pid) {\n process.kill(-child.pid, signal);\n return;\n }\n child.kill(signal);\n } catch {\n // The probe server may already be gone; cleanup is best-effort here.\n }\n}\n\nfunction rejectAfterTimeout<T>(\n promise: Promise<T>,\n timeoutMs: number,\n timeoutMessage: string\n): Promise<T> {\n return new Promise((resolve, reject) => {\n const timer = setTimeout(() => {\n reject(new Error(timeoutMessage));\n }, timeoutMs);\n promise.then(\n (value) => {\n clearTimeout(timer);\n resolve(value);\n },\n (error: unknown) => {\n clearTimeout(timer);\n reject(error);\n }\n );\n });\n}\n\nfunction findAvailableLocalPort(): Promise<number> {\n return new Promise((resolve, reject) => {\n const server = createServer();\n server.unref();\n server.on(\"error\", reject);\n server.listen(0, OPENCODE_PROBE_HOSTNAME, () => {\n const address = server.address();\n if (!address || typeof address === \"string\") {\n server.close(() => {\n reject(new Error(\"Could not allocate a local OpenCode probe port.\"));\n });\n return;\n }\n const { port } = address;\n server.close((error) => {\n if (error) {\n reject(error);\n return;\n }\n resolve(port);\n });\n });\n });\n}\n\nfunction parseOpenCodeServerUrlFromOutput(output: string): string | null {\n for (const line of stripAnsi(output).split(\"\\n\")) {\n if (!line.startsWith(OPENCODE_SERVER_READY_PREFIX)) {\n continue;\n }\n const match = line.match(OPENCODE_SERVER_URL_RE);\n return match?.[1] ?? null;\n }\n return null;\n}\n\nfunction resolveOpenCodeReadinessFromProviderList(\n providerList: ProviderListResponse | undefined\n): OpenCodeReadinessProbeResult {\n if (!providerList) {\n return {\n auth: { status: \"unknown\" },\n message: \"OpenCode is installed, but its provider list was empty.\",\n models: [],\n probeCompleted: true,\n status: \"error\",\n };\n }\n\n const connectedProviders = new Set(\n providerList.connected\n .map((providerId) => normalizeOptionalText(providerId))\n .filter((providerId): providerId is string => Boolean(providerId))\n );\n if (connectedProviders.size === 0) {\n return {\n auth: { status: \"unauthenticated\", type: \"opencode\" },\n message:\n \"OpenCode is installed, but no connected provider was reported. Open OpenCode and sign in to a provider before OpenMeld can launch it.\",\n models: [],\n probeCompleted: true,\n status: \"unavailable\",\n };\n }\n\n const models = parseOpenCodeProviderModels({\n connectedProviders,\n providerList,\n });\n if (models.length === 0) {\n return {\n auth: {\n label: formatConnectedOpenCodeProviderCount(connectedProviders.size),\n status: \"authenticated\",\n type: \"opencode\",\n },\n message:\n \"OpenCode is installed and has a connected provider, but it did not report any models OpenMeld can use.\",\n models: [],\n probeCompleted: true,\n status: \"error\",\n };\n }\n\n return {\n auth: {\n label: formatConnectedOpenCodeProviderCount(connectedProviders.size),\n status: \"authenticated\",\n type: \"opencode\",\n },\n message: null,\n models,\n probeCompleted: true,\n status: \"ready\",\n };\n}\n\nfunction parseOpenCodeProviderModels(input: {\n connectedProviders: ReadonlySet<string>;\n providerList: ProviderListResponse;\n}): AgentControllerInterfaceModel[] {\n const seen = new Set<string>();\n const models: AgentControllerInterfaceModel[] = [];\n for (const provider of input.providerList.all) {\n if (!input.connectedProviders.has(provider.id)) {\n continue;\n }\n for (const model of Object.values(provider.models)) {\n const modelId = normalizeOptionalText(model.id);\n const providerId =\n normalizeOptionalText(model.providerID) ??\n normalizeOptionalText(provider.id);\n if (!(modelId && providerId)) {\n continue;\n }\n const id = `${providerId}/${modelId}`;\n if (seen.has(id) || !OPENCODE_MODEL_ID_RE.test(id)) {\n continue;\n }\n seen.add(id);\n models.push({\n displayName: normalizeOptionalText(model.name) ?? id,\n id,\n });\n if (models.length >= 256) {\n return models;\n }\n }\n }\n return models;\n}\n\nfunction formatConnectedOpenCodeProviderCount(providerCount: number): string {\n return providerCount === 1\n ? \"1 provider connected\"\n : `${providerCount} providers connected`;\n}\n\nfunction resolveOpenCodeAuthSnapshotFromProbeError(\n error: unknown\n): AgentControllerInterfaceAuthSnapshot {\n const record = toRecord(error);\n const response = toRecord(record?.response);\n const status = response?.status;\n if (status === 401 || status === 403) {\n return {\n status: \"unauthenticated\",\n type: \"opencode\",\n };\n }\n return { status: \"unknown\" };\n}\n\nfunction appendProbeOutput(existing: string, chunk: unknown): string {\n return `${existing}${String(chunk)}`.slice(0, PROBE_OUTPUT_LIMIT);\n}\n\nfunction toRecord(value: unknown): Record<string, unknown> | null {\n return value && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : null;\n}\n\nfunction normalizeOptionalText(value: unknown): string | null {\n if (typeof value !== \"string\") {\n return null;\n }\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : null;\n}\n\nfunction stripAnsi(value: string): string {\n let output = \"\";\n let index = 0;\n while (index < value.length) {\n if (value[index] === ANSI_ESCAPE && value[index + 1] === \"[\") {\n index += 2;\n while (index < value.length && value[index] !== \"m\") {\n index += 1;\n }\n index += 1;\n continue;\n }\n output += value[index] ?? \"\";\n index += 1;\n }\n return output;\n}\n\nfunction toErrorMessage(error: unknown): string {\n if (error instanceof Error) {\n const message = error.message.trim();\n return message.length > 0 ? message : \"unknown error\";\n }\n const message = String(error ?? \"\").trim();\n return message.length > 0 ? message : \"unknown error\";\n}\n","import { mkdtemp, realpath, rm } from \"node:fs/promises\";\nimport { tmpdir } from \"node:os\";\nimport { join } from \"node:path\";\n\n// Device inventory must not discover a Project through the caller's cwd.\nexport async function withProbeWorkingDirectory<T>(\n probe: (workingDirectory: string) => Promise<T>\n): Promise<T> {\n const workingDirectory = await mkdtemp(join(tmpdir(), \"openmeld-inventory-\"));\n try {\n return await probe(await realpath(workingDirectory));\n } finally {\n await rm(workingDirectory, { force: true, recursive: true });\n }\n}\n","import type {\n AgentControllerInterfaceAuthSnapshot,\n AgentControllerUsageLimits,\n RuntimeAgentControllerLaunchContract,\n} from \"@openmeld/schemas/types\";\nimport {\n buildAgentControllerInterfaceKeeperKey,\n recordAgentControllerUsageLimitsObservation,\n resolveAgentControllerCommandFingerprint,\n} from \"./agent-controller-interface-keeper\";\n\nexport async function recordRuntimeProviderUsageLimits(input: {\n agentId: string;\n authSnapshot: AgentControllerInterfaceAuthSnapshot;\n launchContract: RuntimeAgentControllerLaunchContract;\n usageLimits: AgentControllerUsageLimits;\n}): Promise<boolean> {\n const commandPath = resolveLaunchContractCommandPath(input.launchContract);\n const commandFingerprint = await resolveAgentControllerCommandFingerprint({\n commandPath,\n launchContractKind: input.launchContract.kind,\n });\n if (!commandFingerprint) {\n return false;\n }\n return recordAgentControllerUsageLimitsObservation({\n authSnapshot: input.authSnapshot,\n commandFingerprint,\n keeperKey: buildAgentControllerInterfaceKeeperKey({\n agentId: input.agentId,\n commandPath,\n }),\n usageLimits: input.usageLimits,\n });\n}\n\nexport function resolveLaunchContractCommandPath(\n launchContract: RuntimeAgentControllerLaunchContract\n): string {\n return launchContract.kind === \"executable\"\n ? launchContract.commandPath\n : launchContract.scriptPath;\n}\n","import { spawn } from \"node:child_process\";\nimport { realpath } from \"node:fs/promises\";\nimport { parseAntigravityUsageLimits } from \"@openmeld/adapter-antigravity\";\nimport { projectCodexUsageLimits } from \"@openmeld/adapter-codex\";\nimport {\n buildCliLaunchInvocation,\n createUnavailableProviderUsageLimits,\n createUnsupportedProviderUsageLimits,\n materializeCliLaunchCommand,\n type RuntimeAgentControllerLaunchContract,\n} from \"@openmeld/adapter-core\";\nimport {\n GrokBuildAcpTransportError,\n probeGrokBuildAcpInterface,\n} from \"@openmeld/adapter-grok-build\";\nimport { areAgentControllerInterfaceAccountsSame } from \"@openmeld/agent-runtime\";\nimport { resolvePublicAgentAvailabilityCopy } from \"@openmeld/schemas\";\nimport type {\n AgentControllerInterfaceAuthSnapshot,\n AgentControllerInterfaceLaunchSnapshot,\n AgentControllerInterfaceModel,\n AgentControllerInterfaceSkill,\n AgentControllerInterfaceSnapshot,\n AgentControllerInterfaceStatus,\n AgentControllerInterfaceVersionAdvisory,\n AgentControllerUsageLimits,\n} from \"@openmeld/schemas/types\";\nimport {\n type BuiltinAgentControllerUsageLimitSupport,\n EMPTY_AGENT_CONTROLLER_INTERFACE_CAPABILITIES,\n resolveBuiltinAgentControllerDefinition,\n} from \"../../agents/builtin-agent-controller-definitions\";\nimport {\n fetchLatestControllerVersion,\n resolveControllerVersionChannel,\n} from \"../../agents/controller-version-channel\";\nimport type { AgentTargetState } from \"../../agents/registry\";\nimport { warnDaemonEvent } from \"../core/logger\";\nimport {\n buildAgentControllerInterfaceKeeperKey,\n didAgentControllerCommandFingerprintRemainStable,\n readLastKnownAgentControllerAuthSnapshot,\n readLastKnownAgentControllerUsageLimits,\n readLastSuccessfulAgentControllerInterfaceCheckAt,\n readReusableAgentControllerInterfaceSnapshot,\n recordAgentControllerInterfaceProbeFailure,\n recordAgentControllerInterfaceProbeSuccess,\n resolveAgentControllerCommandFingerprint,\n} from \"./agent-controller-interface-keeper\";\nimport { probeOpenCodeReadiness } from \"./opencode-readiness-probe\";\nimport { withProbeWorkingDirectory } from \"./probe-working-directory\";\nimport { resolveLaunchContractCommandPath } from \"./runtime-provider-usage-limits\";\n\nconst PROBE_TIMEOUT_MS = 8000;\nconst CODEX_AUX_INVENTORY_GRACE_MS = 2500;\nconst PROBE_OUTPUT_LIMIT = 32_000;\nconst CODEX_USER_AGENT_VERSION_RE = /\\/([^\\s]+)/u;\nconst CLI_SEMVER_RE = /\\b(\\d+\\.\\d+\\.\\d+(?:[-+][^\\s]+)?)\\b/u;\nconst ANTIGRAVITY_AUTH_FAILURE_RE =\n /auth(?:entication)? required|not signed in|sign in/iu;\nconst SEMVER_CORE_RE = /^v?(\\d+)\\.(\\d+)\\.(\\d+)/u;\nconst WHITESPACE_RE = /\\s+/u;\n\n// \"fresh\" always runs the controller probe and reports its real outcome; it is\n// the default for user-driven paths (setup, prepare, explicit checks).\n// \"background\" is the periodic report-sync policy on machines we do not want\n// to burden: it reuses a completed, reusable snapshot within a TTL. A failed\n// or unauthenticated probe invalidates that reuse so the next pass probes again.\nexport type AgentControllerInterfaceProbePolicy = \"background\" | \"fresh\";\n\ntype AgentControllerInterfaceProbeOutcome = {\n probeCompleted: boolean;\n snapshot: AgentControllerInterfaceSnapshot;\n};\n\ntype InventoryProbeInput = {\n baseSnapshot: AgentControllerInterfaceSnapshot;\n launchContract: RuntimeAgentControllerLaunchContract;\n workingDirectory: string;\n};\n\ntype AgentControllerInterfaceSnapshotResolver = (\n input: InventoryProbeInput\n) => Promise<AgentControllerInterfaceProbeOutcome>;\n\nconst CONTROLLER_INTERFACE_SNAPSHOT_RESOLVERS: Record<\n string,\n AgentControllerInterfaceSnapshotResolver\n> = {\n antigravity: resolveAntigravityInterfaceSnapshot,\n \"claude-code\": resolveClaudeCodeInterfaceSnapshot,\n codex: resolveCodexInterfaceSnapshot,\n cursor: resolveCursorInterfaceSnapshot,\n \"grok-build\": resolveGrokBuildInterfaceSnapshot,\n openclaw: resolveOpenClawInterfaceSnapshot,\n opencode: resolveOpenCodeInterfaceSnapshot,\n};\n\nasync function resolveAntigravityInterfaceSnapshot(\n input: InventoryProbeInput\n): Promise<AgentControllerInterfaceProbeOutcome> {\n const [versionProbe, usageProbe] = await Promise.all([\n runLaunchContractCommand({\n workingDirectory: input.workingDirectory,\n args: [\"--version\"],\n launchContract: input.launchContract,\n }),\n runLaunchContractCommand({\n workingDirectory: input.workingDirectory,\n allowNonZeroExit: true,\n args: [\"--print\", \"/usage\"],\n launchContract: input.launchContract,\n timeoutMs: 15_000,\n }),\n ]);\n const version = versionProbe.ok ? parseCliVersion(versionProbe.stdout) : null;\n const observedAt = new Date().toISOString();\n const providerMessage = `${usageProbe.stdout}\\n${usageProbe.stderr}`.trim();\n const unauthenticated =\n usageProbe.code !== 0 && ANTIGRAVITY_AUTH_FAILURE_RE.test(providerMessage);\n const usageLimits =\n usageProbe.code === 0\n ? parseAntigravityUsageLimits({\n observedAt,\n output: usageProbe.stdout,\n })\n : createUnavailableProviderUsageLimits(observedAt);\n const probeCompleted = usageProbe.code === 0 || unauthenticated;\n let authStatus: AgentControllerInterfaceAuthSnapshot[\"status\"] = \"unknown\";\n let message: string | null =\n \"OpenMeld could not read Antigravity CLI authentication or usage status.\";\n let status: AgentControllerInterfaceStatus = \"warning\";\n if (unauthenticated) {\n authStatus = \"unauthenticated\";\n message = requireControllerSignInInterfaceDescription(\"antigravity\");\n status = \"unavailable\";\n } else if (usageProbe.code === 0) {\n authStatus = \"authenticated\";\n message = null;\n status = \"ready\";\n }\n\n return {\n probeCompleted,\n snapshot: {\n ...input.baseSnapshot,\n auth: {\n ...(usageProbe.code === 0\n ? { label: \"Antigravity account connected\" }\n : {}),\n status: authStatus,\n },\n message,\n status,\n usageLimits,\n version,\n },\n };\n}\n\nexport async function probeAgentControllerUsageObservationAuth(input: {\n agentId: string;\n launchContract: RuntimeAgentControllerLaunchContract;\n}): Promise<AgentControllerInterfaceAuthSnapshot> {\n if (input.agentId !== \"claude-code\") {\n return { status: \"unknown\" };\n }\n // Claude's passive SDK rate-limit event carries no stable account identity.\n // Reuse its native, non-task ACI auth command solely to bind the observation;\n // the auth snapshot never becomes part of a Usage Limit item.\n const authProbe = await withProbeWorkingDirectory((workingDirectory) =>\n runLaunchContractCommand({\n workingDirectory,\n allowNonZeroExit: true,\n args: [\"auth\", \"status\"],\n launchContract: input.launchContract,\n })\n );\n return resolveClaudeAuthSnapshot(authProbe);\n}\n\nexport async function resolveAgentControllerInterfaceSnapshot(input: {\n agentControllerRef: string;\n probePolicy?: AgentControllerInterfaceProbePolicy;\n state: AgentTargetState & { targetKind: \"builtin\" };\n}): Promise<AgentControllerInterfaceSnapshot> {\n const checkedAt = new Date().toISOString();\n const controllerDefinition = resolveBuiltinAgentControllerDefinition(\n input.state.agentId\n );\n const launch = resolveLaunchSnapshot(input.state);\n const initialUsageLimits = resolveInitialProviderUsageLimits({\n checkedAt,\n support: controllerDefinition?.usageLimitSupport ?? \"not_evaluated\",\n });\n const baseSnapshot = withUsageLimits(\n {\n agentControllerRef: input.agentControllerRef,\n auth: { status: \"unknown\" },\n capabilities:\n controllerDefinition?.capabilities ??\n EMPTY_AGENT_CONTROLLER_INTERFACE_CAPABILITIES,\n check: {\n lastSucceededAt: null,\n status: \"not_run\",\n },\n checkedAt,\n controllerId: input.state.agentId,\n displayName: input.state.displayName,\n launch,\n message: input.state.launchStatusDetail ?? null,\n models: [],\n nativeInterface: controllerDefinition?.nativeInterface ?? \"local-cli\",\n schemaVersion: 1,\n skills: [],\n status: resolveBaseStatus(input.state),\n version: null,\n },\n initialUsageLimits\n );\n\n if (input.state.launchStatus !== \"ready\" || !input.state.launchContract) {\n return baseSnapshot;\n }\n\n const snapshotResolver =\n CONTROLLER_INTERFACE_SNAPSHOT_RESOLVERS[input.state.agentId];\n if (!snapshotResolver) {\n return baseSnapshot;\n }\n\n const probePolicy = input.probePolicy ?? \"fresh\";\n const commandPath = resolveLaunchContractCommandPath(\n input.state.launchContract\n );\n const launchContractKind = input.state.launchContract.kind;\n const keeperKey = buildAgentControllerInterfaceKeeperKey({\n agentId: input.state.agentId,\n commandPath,\n });\n const commandFingerprintBeforeProbe =\n await resolveAgentControllerCommandFingerprint({\n commandPath,\n launchContractKind,\n });\n const lastSuccessfulCheckAt =\n readLastSuccessfulAgentControllerInterfaceCheckAt({\n commandFingerprint: commandFingerprintBeforeProbe,\n keeperKey,\n });\n const lastKnownUsageLimits = readLastKnownAgentControllerUsageLimits({\n commandFingerprint: commandFingerprintBeforeProbe,\n keeperKey,\n });\n const lastKnownAuth = readLastKnownAgentControllerAuthSnapshot({\n commandFingerprint: commandFingerprintBeforeProbe,\n keeperKey,\n });\n if (probePolicy === \"background\") {\n const reusableSnapshot = readReusableAgentControllerInterfaceSnapshot({\n commandFingerprint: commandFingerprintBeforeProbe,\n keeperKey,\n nowMs: Date.now(),\n });\n if (reusableSnapshot) {\n return reusableSnapshot;\n }\n }\n\n const launchContract = input.state.launchContract;\n const outcome = await withProbeWorkingDirectory((workingDirectory) =>\n snapshotResolver({\n baseSnapshot,\n launchContract,\n workingDirectory,\n })\n );\n const commandFingerprintAfterProbe =\n await resolveAgentControllerCommandFingerprint({\n commandPath,\n launchContractKind,\n });\n const commandFingerprintRemainedStable =\n didAgentControllerCommandFingerprintRemainStable({\n afterProbe: commandFingerprintAfterProbe,\n beforeProbe: commandFingerprintBeforeProbe,\n });\n if (outcome.probeCompleted) {\n const usageLimits = resolveUsageLimitsAfterCompletedProbe({\n currentAuth: outcome.snapshot.auth,\n current: outcome.snapshot.usageLimits,\n previous: lastKnownUsageLimits,\n previousAuth: lastKnownAuth,\n support: controllerDefinition?.usageLimitSupport ?? \"not_evaluated\",\n });\n const completedSnapshot = withUsageLimits(\n {\n ...outcome.snapshot,\n check: {\n lastSucceededAt: outcome.snapshot.checkedAt,\n status: \"succeeded\",\n },\n },\n usageLimits\n );\n if (commandFingerprintRemainedStable && commandFingerprintAfterProbe) {\n return recordAgentControllerInterfaceProbeSuccess({\n commandFingerprint: commandFingerprintAfterProbe,\n keeperKey,\n nowMs: Date.now(),\n snapshot: completedSnapshot,\n });\n }\n return completedSnapshot;\n }\n\n recordAgentControllerInterfaceProbeFailure({\n keeperKey,\n preserveHistoricalEvidence: commandFingerprintRemainedStable,\n });\n const preservedLastSuccessfulCheckAt = commandFingerprintRemainedStable\n ? lastSuccessfulCheckAt\n : null;\n const usageLimits = resolveUsageLimitsAfterFailedProbe({\n currentAuth: outcome.snapshot.auth,\n current: outcome.snapshot.usageLimits,\n previous: lastKnownUsageLimits,\n previousAuth: lastKnownAuth,\n preserveHistoricalEvidence: commandFingerprintRemainedStable,\n });\n warnDaemonEvent(\"[openmeld.agent_controller_interface.check_failed]\", {\n agentControllerRef: input.agentControllerRef,\n commandFingerprintRemainedStable,\n controllerId: input.state.agentId,\n errorMessage: outcome.snapshot.message,\n lastSucceededAt: preservedLastSuccessfulCheckAt,\n probePolicy,\n reasonCode: isControllerInterfaceProbeTimeout(outcome.snapshot.message)\n ? \"controller_check_timeout\"\n : \"controller_check_failed\",\n });\n return withUsageLimits(\n {\n ...outcome.snapshot,\n check: {\n lastSucceededAt: preservedLastSuccessfulCheckAt,\n status: \"failed\",\n },\n // A failed check is not proof that the controller itself is broken.\n status: \"unknown\",\n },\n usageLimits\n );\n}\n\nfunction isControllerInterfaceProbeTimeout(message: string | null): boolean {\n const normalized = message?.toLowerCase() ?? \"\";\n return normalized.includes(\"timed out\") || normalized.includes(\"timeout\");\n}\n\nfunction withUsageLimits(\n snapshot: AgentControllerInterfaceSnapshot,\n usageLimits: AgentControllerUsageLimits | undefined\n): AgentControllerInterfaceSnapshot {\n return usageLimits ? { ...snapshot, usageLimits } : snapshot;\n}\n\nexport function resolveUsageLimitsAfterCompletedProbe(input: {\n currentAuth: AgentControllerInterfaceAuthSnapshot;\n current: AgentControllerUsageLimits | undefined;\n previous: AgentControllerUsageLimits | null;\n previousAuth: AgentControllerInterfaceAuthSnapshot | null;\n support: BuiltinAgentControllerUsageLimitSupport;\n}): AgentControllerUsageLimits | undefined {\n if (\n !areAgentControllerInterfaceAccountsSame(\n input.previousAuth,\n input.currentAuth\n )\n ) {\n return input.current;\n }\n if (input.support === \"passive\") {\n return input.previous ?? input.current;\n }\n return preserveLastKnownUsageLimitsAfterFailure(input);\n}\n\nfunction preserveLastKnownUsageLimitsAfterFailure(input: {\n current: AgentControllerUsageLimits | undefined;\n previous: AgentControllerUsageLimits | null;\n}): AgentControllerUsageLimits | undefined {\n const currentIsUnavailable =\n input.current?.length === 1 && input.current[0]?.status === \"unavailable\";\n const previousHasKnownCapacity = input.previous?.some(\n (limit) =>\n limit.status === \"available\" ||\n limit.status === \"exhausted\" ||\n limit.status === \"stale\"\n );\n if (!(currentIsUnavailable && previousHasKnownCapacity && input.previous)) {\n return input.current;\n }\n return input.previous.map((limit) =>\n limit.usedPercent === null ? limit : { ...limit, status: \"stale\" }\n );\n}\n\nfunction resolveUsageLimitsAfterFailedProbe(input: {\n currentAuth: AgentControllerInterfaceAuthSnapshot;\n current: AgentControllerUsageLimits | undefined;\n preserveHistoricalEvidence: boolean;\n previous: AgentControllerUsageLimits | null;\n previousAuth: AgentControllerInterfaceAuthSnapshot | null;\n}): AgentControllerUsageLimits | undefined {\n if (\n !(\n input.preserveHistoricalEvidence &&\n areAgentControllerInterfaceAccountsSame(\n input.previousAuth,\n input.currentAuth\n )\n )\n ) {\n return input.current;\n }\n return preserveLastKnownUsageLimitsAfterFailure(input);\n}\n\nfunction resolveInitialProviderUsageLimits(input: {\n checkedAt: string;\n support: BuiltinAgentControllerUsageLimitSupport;\n}): AgentControllerInterfaceSnapshot[\"usageLimits\"] {\n if (input.support === \"native\") {\n return createUnavailableProviderUsageLimits(input.checkedAt);\n }\n if (input.support === \"unsupported\") {\n return createUnsupportedProviderUsageLimits(input.checkedAt);\n }\n return undefined;\n}\n\nfunction resolveLaunchSnapshot(\n state: AgentTargetState & { targetKind: \"builtin\" }\n): AgentControllerInterfaceLaunchSnapshot {\n const launchCommand = state.launchContract\n ? materializeCliLaunchCommand({ launchContract: state.launchContract })\n : null;\n return {\n argsPrefix: launchCommand?.argsPrefix ?? [],\n commandPath: state.launchContract\n ? resolveLaunchContractCommandPath(state.launchContract)\n : null,\n installChoiceCount: state.installChoices.length,\n ...(state.launchFailureReason\n ? { failureReason: state.launchFailureReason }\n : {}),\n status: state.launchStatus,\n };\n}\n\nfunction resolveBaseStatus(\n state: AgentTargetState & { targetKind: \"builtin\" }\n): AgentControllerInterfaceStatus {\n if (!state.enabled) {\n return \"disabled\";\n }\n if (!state.detected) {\n return \"unavailable\";\n }\n if (state.launchStatus === \"ready\") {\n return \"ready\";\n }\n if (\n state.launchStatus === \"needs_choice\" ||\n state.launchStatus === \"needs_repair\"\n ) {\n return \"warning\";\n }\n return \"unknown\";\n}\n\nasync function resolveControllerVersionAdvisory(input: {\n checkedAt: string;\n controllerId: string;\n currentVersion: string | null;\n launchContract: RuntimeAgentControllerLaunchContract;\n}): Promise<AgentControllerInterfaceVersionAdvisory | undefined> {\n const definition = resolveBuiltinAgentControllerDefinition(\n input.controllerId\n )?.versionMaintenance;\n if (!definition) {\n return undefined;\n }\n const commandPath = resolveLaunchContractCommandPath(input.launchContract);\n const realCommandPath = await realpath(commandPath).catch(() => null);\n const commandPaths = [commandPath, realCommandPath].filter(\n (value): value is string => Boolean(value)\n );\n if (\n definition.hostApplicationPath &&\n commandPaths.some(definition.hostApplicationPath)\n ) {\n return undefined;\n }\n const channel = await resolveControllerVersionChannel({\n commandPath,\n commandPaths,\n definition,\n });\n const updateCommand = channel?.updateCommand ?? null;\n if (!input.currentVersion) {\n return {\n checkedAt: input.checkedAt,\n currentVersion: null,\n latestVersion: null,\n message: \"OpenMeld could not read this controller version.\",\n status: \"unknown\",\n updateCommand,\n };\n }\n if (!channel) {\n return {\n checkedAt: input.checkedAt,\n currentVersion: input.currentVersion,\n latestVersion: null,\n message: \"OpenMeld could not check the latest controller version.\",\n status: \"unknown\",\n updateCommand,\n };\n }\n\n const lookupResult = await fetchLatestControllerVersion(channel);\n recordLatestVersionFailureDiagnostics(lookupResult);\n const latestVersion = lookupResult.version;\n if (!latestVersion) {\n return {\n checkedAt: input.checkedAt,\n currentVersion: input.currentVersion,\n latestVersion: null,\n message: \"OpenMeld could not check the latest controller version.\",\n status: \"unknown\",\n updateCommand,\n };\n }\n\n const versionComparison = compareSemverCore(\n input.currentVersion,\n latestVersion\n );\n if (versionComparison === null) {\n return {\n checkedAt: input.checkedAt,\n currentVersion: input.currentVersion,\n latestVersion,\n message: \"OpenMeld could not compare the installed controller version.\",\n status: \"unknown\",\n updateCommand,\n };\n }\n\n if (versionComparison < 0) {\n return {\n checkedAt: input.checkedAt,\n currentVersion: input.currentVersion,\n latestVersion,\n message: \"Update available.\",\n status: \"behind_latest\",\n updateCommand,\n };\n }\n\n return {\n checkedAt: input.checkedAt,\n currentVersion: input.currentVersion,\n latestVersion,\n message: null,\n status: \"current\",\n updateCommand,\n };\n}\n\nfunction recordLatestVersionFailureDiagnostics(\n lookupResult: Awaited<ReturnType<typeof fetchLatestControllerVersion>>\n): void {\n for (const diagnostic of lookupResult.failureDiagnostics) {\n warnDaemonEvent(\n \"[openmeld.agent_controller.latest_version_lookup_attempt_failed]\",\n {\n attempt: diagnostic.attempt,\n errorMessage: diagnostic.errorMessage,\n errorName: diagnostic.errorName,\n reason: diagnostic.reason,\n recovered: lookupResult.version !== null,\n statusCode: diagnostic.statusCode,\n url: diagnostic.url,\n }\n );\n }\n}\n\nfunction compareSemverCore(left: string, right: string): number | null {\n const leftParts = parseSemverCore(left);\n const rightParts = parseSemverCore(right);\n if (!(leftParts && rightParts)) {\n return null;\n }\n for (let index = 0; index < leftParts.length; index += 1) {\n const leftPart = leftParts[index] ?? 0;\n const rightPart = rightParts[index] ?? 0;\n if (leftPart !== rightPart) {\n return leftPart > rightPart ? 1 : -1;\n }\n }\n return 0;\n}\n\nfunction parseSemverCore(value: string): [number, number, number] | null {\n const match = value.trim().match(SEMVER_CORE_RE);\n if (!match) {\n return null;\n }\n const [, major, minor, patch] = match;\n if (!(major && minor && patch)) {\n return null;\n }\n return [Number(major), Number(minor), Number(patch)];\n}\n\nasync function resolveCodexInterfaceSnapshot(\n input: InventoryProbeInput\n): Promise<AgentControllerInterfaceProbeOutcome> {\n const appServerProbe = await probeCodexAppServer(\n input.launchContract,\n input.workingDirectory\n );\n if (appServerProbe.ok) {\n const version = appServerProbe.version ?? input.baseSnapshot.version;\n return {\n probeCompleted: true,\n snapshot: {\n ...input.baseSnapshot,\n auth: appServerProbe.auth,\n message: appServerProbe.message,\n models: appServerProbe.models,\n skills: appServerProbe.skills,\n status: appServerProbe.status,\n usageLimits: appServerProbe.usageLimits,\n version,\n versionAdvisory: await resolveControllerVersionAdvisory({\n checkedAt: input.baseSnapshot.checkedAt,\n controllerId: input.baseSnapshot.controllerId,\n currentVersion: version,\n launchContract: input.launchContract,\n }),\n },\n };\n }\n\n const versionProbe = await runLaunchContractCommand({\n workingDirectory: input.workingDirectory,\n args: [\"--version\"],\n launchContract: input.launchContract,\n });\n\n const version = versionProbe.ok ? parseCliVersion(versionProbe.stdout) : null;\n return {\n probeCompleted: false,\n snapshot: {\n ...input.baseSnapshot,\n message: appServerProbe.message,\n status:\n input.baseSnapshot.status === \"ready\" &&\n appServerProbe.auth.status === \"unknown\"\n ? \"warning\"\n : input.baseSnapshot.status,\n version,\n versionAdvisory: await resolveControllerVersionAdvisory({\n checkedAt: input.baseSnapshot.checkedAt,\n controllerId: input.baseSnapshot.controllerId,\n currentVersion: version,\n launchContract: input.launchContract,\n }),\n },\n };\n}\n\nasync function resolveClaudeCodeInterfaceSnapshot(\n input: InventoryProbeInput\n): Promise<AgentControllerInterfaceProbeOutcome> {\n const [versionProbe, authProbe] = await Promise.all([\n runLaunchContractCommand({\n workingDirectory: input.workingDirectory,\n args: [\"--version\"],\n launchContract: input.launchContract,\n }),\n runLaunchContractCommand({\n workingDirectory: input.workingDirectory,\n allowNonZeroExit: true,\n args: [\"auth\", \"status\", \"--json\"],\n launchContract: input.launchContract,\n }),\n ]);\n\n const auth = resolveClaudeAuthSnapshot(authProbe);\n const version = versionProbe.ok ? parseCliVersion(versionProbe.stdout) : null;\n let message = input.baseSnapshot.message;\n let status = input.baseSnapshot.status;\n if (auth.status === \"unauthenticated\") {\n message =\n \"Claude Code is installed, but this computer is not signed in to Claude Code.\";\n status = \"unavailable\";\n } else if (auth.status === \"unknown\") {\n message = \"OpenMeld could not read Claude Code authentication status.\";\n status = \"warning\";\n }\n return {\n probeCompleted: authProbe.ok && auth.status !== \"unknown\",\n snapshot: {\n ...input.baseSnapshot,\n auth,\n message,\n status,\n version,\n versionAdvisory: await resolveControllerVersionAdvisory({\n checkedAt: input.baseSnapshot.checkedAt,\n controllerId: input.baseSnapshot.controllerId,\n currentVersion: version,\n launchContract: input.launchContract,\n }),\n },\n };\n}\n\nasync function resolveCursorInterfaceSnapshot(\n input: InventoryProbeInput\n): Promise<AgentControllerInterfaceProbeOutcome> {\n const [versionProbe, authProbe] = await Promise.all([\n runLaunchContractCommand({\n workingDirectory: input.workingDirectory,\n args: [\"--version\"],\n launchContract: input.launchContract,\n }),\n runLaunchContractCommand({\n workingDirectory: input.workingDirectory,\n allowNonZeroExit: true,\n args: [\"status\", \"--format\", \"json\"],\n launchContract: input.launchContract,\n }),\n ]);\n const auth = resolveCursorAuthSnapshot(authProbe);\n const version = versionProbe.ok ? parseCliVersion(versionProbe.stdout) : null;\n let message = input.baseSnapshot.message;\n let status = input.baseSnapshot.status;\n if (auth.status === \"unauthenticated\") {\n message = requireControllerSignInInterfaceDescription(\"cursor\");\n status = \"unavailable\";\n } else if (auth.status === \"unknown\") {\n message = \"OpenMeld could not read Cursor CLI authentication status.\";\n status = \"warning\";\n }\n return {\n probeCompleted: authProbe.ok && auth.status !== \"unknown\",\n snapshot: {\n ...input.baseSnapshot,\n auth,\n message,\n status,\n version,\n versionAdvisory: await resolveControllerVersionAdvisory({\n checkedAt: input.baseSnapshot.checkedAt,\n controllerId: input.baseSnapshot.controllerId,\n currentVersion: version,\n launchContract: input.launchContract,\n }),\n },\n };\n}\n\nasync function resolveGrokBuildInterfaceSnapshot(\n input: InventoryProbeInput\n): Promise<AgentControllerInterfaceProbeOutcome> {\n const [versionProbe, interfaceProbe] = await Promise.all([\n runLaunchContractCommand({\n workingDirectory: input.workingDirectory,\n args: [\"--no-auto-update\", \"version\"],\n launchContract: input.launchContract,\n }),\n probeGrokBuildAcpInterface({\n grokBuildTimeoutMs: PROBE_TIMEOUT_MS,\n grokBuildWorkdir: input.workingDirectory,\n launchContract: input.launchContract,\n }).then(\n (result) => ({ ok: true as const, result }),\n (error: unknown) => ({ error, ok: false as const })\n ),\n ]);\n const version = versionProbe.ok ? parseCliVersion(versionProbe.stdout) : null;\n if (interfaceProbe.ok) {\n return {\n probeCompleted: true,\n snapshot: {\n ...input.baseSnapshot,\n auth: {\n label: \"Grok account connected\",\n status: \"authenticated\",\n type: interfaceProbe.result.authMethodId,\n },\n message: null,\n models: interfaceProbe.result.models,\n status: \"ready\",\n usageLimits: interfaceProbe.result.usageLimits,\n version,\n versionAdvisory: await resolveControllerVersionAdvisory({\n checkedAt: input.baseSnapshot.checkedAt,\n controllerId: input.baseSnapshot.controllerId,\n currentVersion: version,\n launchContract: input.launchContract,\n }),\n },\n };\n }\n\n const unauthenticated =\n interfaceProbe.error instanceof GrokBuildAcpTransportError &&\n (interfaceProbe.error.code === \"auth.required\" ||\n interfaceProbe.error.code === \"auth.failed\");\n return {\n probeCompleted: unauthenticated,\n snapshot: {\n ...input.baseSnapshot,\n auth: { status: unauthenticated ? \"unauthenticated\" : \"unknown\" },\n message: unauthenticated\n ? requireControllerSignInInterfaceDescription(\"grok-build\")\n : `OpenMeld could not read Grok Build's ACP status: ${toErrorMessage(\n interfaceProbe.error\n )}`,\n status: unauthenticated ? \"unavailable\" : \"warning\",\n version,\n versionAdvisory: await resolveControllerVersionAdvisory({\n checkedAt: input.baseSnapshot.checkedAt,\n controllerId: input.baseSnapshot.controllerId,\n currentVersion: version,\n launchContract: input.launchContract,\n }),\n },\n };\n}\n\nasync function resolveOpenClawInterfaceSnapshot(\n input: InventoryProbeInput\n): Promise<AgentControllerInterfaceProbeOutcome> {\n const [versionProbe, authProbe] = await Promise.all([\n runLaunchContractCommand({\n workingDirectory: input.workingDirectory,\n args: [\"--version\"],\n launchContract: input.launchContract,\n }),\n runLaunchContractCommand({\n workingDirectory: input.workingDirectory,\n allowNonZeroExit: true,\n args: [\"models\", \"status\", \"--check\", \"--json\"],\n launchContract: input.launchContract,\n }),\n ]);\n\n const authResult = resolveOpenClawAuthProbe(authProbe);\n const version = versionProbe.ok ? parseCliVersion(versionProbe.stdout) : null;\n let message = input.baseSnapshot.message;\n if (!authResult.probeCompleted) {\n message =\n \"OpenMeld could not read OpenClaw model provider authentication status. Check OpenClaw configuration and update OpenClaw if this command is unavailable.\";\n }\n if (authResult.auth.status === \"unauthenticated\") {\n message =\n \"OpenClaw is installed, but its model provider credentials are missing or expired. Re-authenticate the model provider in OpenClaw before OpenMeld can launch it.\";\n }\n let status = input.baseSnapshot.status;\n if (!authResult.probeCompleted) {\n status = \"unknown\";\n }\n if (authResult.auth.status === \"unauthenticated\") {\n status = \"unavailable\";\n }\n return {\n probeCompleted: authResult.probeCompleted,\n snapshot: {\n ...input.baseSnapshot,\n auth: authResult.auth,\n message,\n status,\n version,\n },\n };\n}\n\nasync function resolveOpenCodeInterfaceSnapshot(\n input: InventoryProbeInput\n): Promise<AgentControllerInterfaceProbeOutcome> {\n const [versionProbe, readinessProbe] = await Promise.all([\n runLaunchContractCommand({\n workingDirectory: input.workingDirectory,\n args: [\"--version\"],\n launchContract: input.launchContract,\n }),\n probeOpenCodeReadiness({\n workingDirectory: input.workingDirectory,\n launchContract: input.launchContract,\n timeoutMs: PROBE_TIMEOUT_MS,\n }),\n ]);\n\n const version = versionProbe.ok ? parseCliVersion(versionProbe.stdout) : null;\n return {\n probeCompleted: readinessProbe.probeCompleted,\n snapshot: {\n ...input.baseSnapshot,\n auth: readinessProbe.auth,\n message: readinessProbe.message ?? input.baseSnapshot.message,\n models: readinessProbe.models,\n status: readinessProbe.status,\n ...(readinessProbe.usageLimits\n ? { usageLimits: readinessProbe.usageLimits }\n : {}),\n version,\n versionAdvisory: await resolveControllerVersionAdvisory({\n checkedAt: input.baseSnapshot.checkedAt,\n controllerId: input.baseSnapshot.controllerId,\n currentVersion: version,\n launchContract: input.launchContract,\n }),\n },\n };\n}\n\ntype CommandProbeResult =\n | {\n code: number;\n ok: true;\n stderr: string;\n stdout: string;\n }\n | {\n code: number | null;\n errorMessage: string;\n ok: false;\n stderr: string;\n stdout: string;\n };\n\nfunction runLaunchContractCommand(input: {\n workingDirectory: string;\n allowNonZeroExit?: boolean;\n args: string[];\n launchContract: RuntimeAgentControllerLaunchContract;\n timeoutMs?: number;\n}): Promise<CommandProbeResult> {\n const invocation = buildCliLaunchInvocation({\n args: input.args,\n launchContract: input.launchContract,\n });\n return runCommand({\n workingDirectory: input.workingDirectory,\n allowNonZeroExit: input.allowNonZeroExit,\n args: invocation.args,\n bin: invocation.bin,\n shell: invocation.shell,\n timeoutMs: input.timeoutMs,\n });\n}\n\nfunction runCommand(input: {\n workingDirectory: string;\n allowNonZeroExit?: boolean;\n args: string[];\n bin: string;\n shell?: boolean;\n timeoutMs?: number;\n}): Promise<CommandProbeResult> {\n return new Promise((resolve) => {\n const child = spawn(input.bin, input.args, {\n cwd: input.workingDirectory,\n env: process.env,\n shell: input.shell ?? false,\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n windowsHide: true,\n });\n let stdout = \"\";\n let stderr = \"\";\n let settled = false;\n const timeout = setTimeout(() => {\n if (settled) {\n return;\n }\n settled = true;\n child.kill(\"SIGTERM\");\n resolve({\n code: null,\n errorMessage: `Timed out after ${input.timeoutMs ?? PROBE_TIMEOUT_MS}ms.`,\n ok: false,\n stderr,\n stdout,\n });\n }, input.timeoutMs ?? PROBE_TIMEOUT_MS);\n\n child.stdout.on(\"data\", (chunk) => {\n stdout = appendProbeOutput(stdout, chunk);\n });\n child.stderr.on(\"data\", (chunk) => {\n stderr = appendProbeOutput(stderr, chunk);\n });\n child.on(\"error\", (error) => {\n if (settled) {\n return;\n }\n settled = true;\n clearTimeout(timeout);\n resolve({\n code: null,\n errorMessage: error.message,\n ok: false,\n stderr,\n stdout,\n });\n });\n child.on(\"close\", (code) => {\n if (settled) {\n return;\n }\n settled = true;\n clearTimeout(timeout);\n const exitCode = typeof code === \"number\" ? code : null;\n if (exitCode === 0 || input.allowNonZeroExit === true) {\n resolve({\n code: exitCode ?? 0,\n ok: true,\n stderr,\n stdout,\n });\n return;\n }\n resolve({\n code: exitCode,\n errorMessage: `Command exited with code ${exitCode ?? \"unknown\"}.`,\n ok: false,\n stderr,\n stdout,\n });\n });\n });\n}\n\ntype JsonRpcMessage = {\n error?: { message?: string };\n id?: number | string | null;\n jsonrpc?: string;\n method?: string;\n params?: unknown;\n result?: unknown;\n};\n\ntype CodexAppServerProbeResult =\n | {\n auth: AgentControllerInterfaceAuthSnapshot;\n message: string | null;\n models: AgentControllerInterfaceModel[];\n ok: true;\n skills: AgentControllerInterfaceSkill[];\n status: AgentControllerInterfaceStatus;\n usageLimits: NonNullable<AgentControllerInterfaceSnapshot[\"usageLimits\"]>;\n version: string | null;\n }\n | {\n auth: AgentControllerInterfaceAuthSnapshot;\n message: string;\n ok: false;\n };\n\nfunction probeCodexAppServer(\n launchContract: RuntimeAgentControllerLaunchContract,\n workingDirectory: string\n): Promise<CodexAppServerProbeResult> {\n const invocation = buildCliLaunchInvocation({\n args: [\"app-server\", \"--listen\", \"stdio://\"],\n launchContract,\n });\n\n return new Promise((resolve) => {\n const child = spawn(invocation.bin, invocation.args, {\n cwd: workingDirectory,\n env: process.env,\n shell: invocation.shell ?? false,\n stdio: [\"pipe\", \"pipe\", \"pipe\"],\n windowsHide: true,\n });\n const pending = new Map<\n number,\n {\n reject: (error: unknown) => void;\n resolve: (value: unknown) => void;\n }\n >();\n let nextId = 1;\n let lineBuffer = \"\";\n let stderr = \"\";\n let settled = false;\n const finish = (result: CodexAppServerProbeResult) => {\n if (settled) {\n return;\n }\n settled = true;\n clearTimeout(timeout);\n for (const entry of pending.values()) {\n entry.reject(new Error(\"Codex app-server probe closed.\"));\n }\n pending.clear();\n child.kill(\"SIGTERM\");\n resolve(result);\n };\n const timeout = setTimeout(() => {\n finish({\n auth: { status: \"unknown\" },\n message: \"Timed out while checking Codex app-server status.\",\n ok: false,\n });\n }, PROBE_TIMEOUT_MS);\n\n const request = (method: string, params: unknown): Promise<unknown> => {\n const id = nextId;\n nextId += 1;\n const promise = new Promise<unknown>((requestResolve, requestReject) => {\n pending.set(id, {\n reject: requestReject,\n resolve: requestResolve,\n });\n });\n child.stdin.write(\n `${JSON.stringify({ id, jsonrpc: \"2.0\", method, params })}\\n`\n );\n return promise;\n };\n const notify = (method: string, params: unknown): void => {\n child.stdin.write(\n `${JSON.stringify({ jsonrpc: \"2.0\", method, params })}\\n`\n );\n };\n\n child.stdout.setEncoding(\"utf8\");\n child.stdout.on(\"data\", (chunk) => {\n lineBuffer = consumeJsonRpcMessagesFromChunk({\n chunk,\n lineBuffer,\n onMessage: (message) =>\n handleCodexProbeMessage({\n message,\n pending,\n stdin: child.stdin,\n }),\n });\n });\n child.stderr.on(\"data\", (chunk) => {\n stderr = appendProbeOutput(stderr, chunk);\n });\n child.stdin.on(\"error\", (error) => {\n finish({\n auth: { status: \"unknown\" },\n message: `Codex app-server input closed before status could be read: ${toErrorMessage(error)}`,\n ok: false,\n });\n });\n child.on(\"error\", (error) => {\n finish({\n auth: { status: \"unknown\" },\n message: `Codex app-server could not start: ${error.message}`,\n ok: false,\n });\n });\n child.on(\"close\", () => {\n if (!settled) {\n finish({\n auth: { status: \"unknown\" },\n message: `Codex app-server exited before status could be read${\n stderr ? `: ${stderr.trim()}` : \".\"\n }`,\n ok: false,\n });\n }\n });\n\n runCodexAppServerProbeRequests({\n workingDirectory,\n clearProbeTimeout: () => {\n clearTimeout(timeout);\n },\n finish,\n notify,\n request,\n }).catch((error: unknown) => {\n finish({\n auth: { status: \"unknown\" },\n message: `Codex app-server status check failed: ${toErrorMessage(error)}`,\n ok: false,\n });\n });\n });\n}\n\nasync function runCodexAppServerProbeRequests(input: {\n workingDirectory: string;\n clearProbeTimeout: () => void;\n finish: (result: CodexAppServerProbeResult) => void;\n notify: (method: string, params: unknown) => void;\n request: (method: string, params: unknown) => Promise<unknown>;\n}): Promise<void> {\n const initialized = await input.request(\"initialize\", {\n capabilities: { experimentalApi: true },\n clientInfo: {\n name: \"openmeld\",\n version: \"0.0.0\",\n },\n });\n input.notify(\"initialized\", {});\n // Fire auxiliary inventory first so it overlaps the account read.\n const skillsPromise = input\n .request(\"skills/list\", { cwds: [input.workingDirectory] })\n .catch(() => null);\n const modelsPromise = requestAllCodexModels(input.request).catch(() => []);\n const usageLimitsPromise = input\n .request(\"account/rateLimits/read\", null)\n .then((response) =>\n projectCodexUsageLimits({\n observedAt: new Date().toISOString(),\n response,\n })\n )\n .catch(() =>\n createUnavailableProviderUsageLimits(new Date().toISOString())\n );\n const account = await input.request(\"account/read\", {});\n // The account verdict is the core probe fact. Once it arrives the probe can\n // no longer time out; auxiliary model/skill inventory only gets a bounded\n // grace so a slow listing cannot turn a healthy controller into a timeout.\n input.clearProbeTimeout();\n const [skills, models, usageLimits] = await Promise.all([\n resolveWithinGrace(skillsPromise, CODEX_AUX_INVENTORY_GRACE_MS, null),\n resolveWithinGrace(modelsPromise, CODEX_AUX_INVENTORY_GRACE_MS, []),\n resolveWithinGrace(\n usageLimitsPromise,\n CODEX_AUX_INVENTORY_GRACE_MS,\n createUnavailableProviderUsageLimits(new Date().toISOString())\n ),\n ]);\n const auth = resolveCodexAuthSnapshot(account);\n input.finish({\n auth,\n message:\n auth.status === \"unauthenticated\"\n ? requireControllerSignInInterfaceDescription(\"codex\")\n : null,\n models: parseCodexModels(models),\n ok: true,\n skills: parseCodexSkills(skills),\n status: auth.status === \"unauthenticated\" ? \"unavailable\" : \"ready\",\n usageLimits,\n version: parseCodexUserAgentVersion(initialized),\n });\n}\n\nfunction requireControllerSignInInterfaceDescription(\n agentControllerId: string\n): string {\n const description = resolvePublicAgentAvailabilityCopy(\n \"controller.auth.unauthenticated\",\n { agentControllerId }\n )?.controllerInterfaceDescription;\n if (!description) {\n throw new Error(\n `Shared ${agentControllerId} controller sign-in description is missing`\n );\n }\n return description;\n}\n\nfunction resolveWithinGrace<T>(\n promise: Promise<T>,\n graceMs: number,\n fallback: T\n): Promise<T> {\n return new Promise((resolve) => {\n const timer = setTimeout(() => {\n resolve(fallback);\n }, graceMs);\n promise.then(\n (value) => {\n clearTimeout(timer);\n resolve(value);\n },\n () => {\n clearTimeout(timer);\n resolve(fallback);\n }\n );\n });\n}\n\nfunction consumeJsonRpcMessagesFromChunk(input: {\n chunk: unknown;\n lineBuffer: string;\n onMessage: (message: JsonRpcMessage) => void;\n}): string {\n let lineBuffer = `${input.lineBuffer}${String(input.chunk)}`;\n while (true) {\n const nextLineIndex = lineBuffer.indexOf(\"\\n\");\n if (nextLineIndex < 0) {\n return lineBuffer;\n }\n const line = lineBuffer.slice(0, nextLineIndex).trim();\n lineBuffer = lineBuffer.slice(nextLineIndex + 1);\n if (!line) {\n continue;\n }\n const parsed = parseJsonRpcMessage(line);\n if (parsed) {\n input.onMessage(parsed);\n }\n }\n}\n\nfunction handleCodexProbeMessage(input: {\n message: JsonRpcMessage;\n pending: Map<\n number,\n {\n reject: (error: unknown) => void;\n resolve: (value: unknown) => void;\n }\n >;\n stdin: NodeJS.WritableStream;\n}): void {\n const id = input.message.id;\n if (typeof id === \"number\") {\n const entry = input.pending.get(id);\n if (!entry) {\n return;\n }\n input.pending.delete(id);\n if (input.message.error) {\n entry.reject(new Error(input.message.error.message ?? \"JSON-RPC error\"));\n return;\n }\n entry.resolve(input.message.result);\n return;\n }\n respondToCodexServerRequest(input.message, input.stdin);\n}\n\nasync function requestAllCodexModels(\n request: (method: string, params: unknown) => Promise<unknown>\n): Promise<unknown[]> {\n const models: unknown[] = [];\n let cursor: string | null = null;\n do {\n const response = await request(\"model/list\", cursor ? { cursor } : {});\n const record = toRecord(response);\n const data = Array.isArray(record?.data) ? record.data : [];\n models.push(...data);\n cursor = normalizeOptionalText(record?.nextCursor);\n } while (cursor);\n return models;\n}\n\nfunction respondToCodexServerRequest(\n message: JsonRpcMessage,\n stdin: NodeJS.WritableStream\n): void {\n if (\n message.id === undefined ||\n message.id === null ||\n !(typeof message.id === \"number\" || typeof message.id === \"string\")\n ) {\n return;\n }\n const result = buildCodexServerRequestProbeResponse(message.method);\n if (result === null) {\n stdin.write(\n `${JSON.stringify({\n error: {\n code: -32_601,\n message: `OpenMeld Codex App Server probe does not handle server request '${message.method}'.`,\n },\n id: message.id,\n jsonrpc: \"2.0\",\n })}\\n`\n );\n return;\n }\n stdin.write(\n `${JSON.stringify({\n id: message.id,\n jsonrpc: \"2.0\",\n result,\n })}\\n`\n );\n}\n\nfunction buildCodexServerRequestProbeResponse(method: string | undefined):\n | {\n [key: string]: unknown;\n }\n | string\n | null {\n switch (method) {\n case \"item/commandExecution/requestApproval\":\n return { decision: \"decline\" };\n case \"item/fileChange/requestApproval\":\n return { decision: \"decline\" };\n case \"execCommandApproval\":\n return { decision: \"denied\" };\n case \"applyPatchApproval\":\n return { decision: \"denied\" };\n case \"item/tool/requestUserInput\":\n return { answers: {} };\n case \"mcpServer/elicitation/request\":\n return { _meta: null, action: \"decline\", content: null };\n case \"item/tool/call\":\n return { contentItems: [], success: false };\n case \"item/permissions/requestApproval\":\n return {\n permissions: {},\n scope: \"turn\",\n strictAutoReview: true,\n };\n default:\n return null;\n }\n}\n\nfunction resolveCodexAuthSnapshot(\n response: unknown\n): AgentControllerInterfaceAuthSnapshot {\n const record = toRecord(response);\n const account = toRecord(record?.account);\n if (!account) {\n return record?.requiresOpenaiAuth === true\n ? { status: \"unauthenticated\" }\n : { status: \"unknown\" };\n }\n const email = normalizeOptionalText(account.email);\n const type = normalizeOptionalText(account.type);\n const planType = normalizeOptionalText(account.planType);\n return {\n ...(email ? { email } : {}),\n label: email ?? planType ?? type ?? \"Signed in\",\n status: \"authenticated\",\n ...(type ? { type } : {}),\n };\n}\n\nfunction resolveClaudeAuthSnapshot(\n probe: CommandProbeResult\n): AgentControllerInterfaceAuthSnapshot {\n if (!probe.ok) {\n return { status: \"unknown\" };\n }\n const payload = parseJsonRecord(probe.stdout);\n if (typeof payload?.loggedIn !== \"boolean\") {\n return { status: \"unknown\" };\n }\n if (!payload.loggedIn) {\n return { status: \"unauthenticated\" };\n }\n const email = normalizeOptionalText(payload.email);\n return {\n ...(email ? { email } : {}),\n label: email ?? \"Signed in\",\n status: \"authenticated\",\n type: \"claude\",\n };\n}\n\nfunction resolveCursorAuthSnapshot(\n probe: CommandProbeResult\n): AgentControllerInterfaceAuthSnapshot {\n if (!probe.ok) {\n return { status: \"unknown\" };\n }\n const payload = parseJsonRecord(probe.stdout);\n if (payload?.status === \"unauthenticated\") {\n return { status: \"unauthenticated\" };\n }\n if (payload?.status === \"authenticated\") {\n return {\n label: \"Signed in\",\n status: \"authenticated\",\n type: \"cursor_login\",\n };\n }\n return { status: \"unknown\" };\n}\n\nfunction resolveOpenClawAuthProbe(probe: CommandProbeResult): {\n auth: AgentControllerInterfaceAuthSnapshot;\n probeCompleted: boolean;\n} {\n if (!(probe.ok && [0, 1, 2].includes(probe.code))) {\n return { auth: { status: \"unknown\" }, probeCompleted: false };\n }\n const payload = parseJsonRecord(probe.stdout);\n if (!toRecord(payload?.auth)) {\n return { auth: { status: \"unknown\" }, probeCompleted: false };\n }\n if (probe.code === 1) {\n return { auth: { status: \"unauthenticated\" }, probeCompleted: true };\n }\n return {\n auth: {\n label:\n probe.code === 2\n ? \"Provider credentials expire soon\"\n : \"Provider credentials ready\",\n status: \"authenticated\",\n type: \"openclaw\",\n },\n probeCompleted: true,\n };\n}\n\nfunction parseJsonRecord(value: string): Record<string, unknown> | null {\n try {\n return toRecord(JSON.parse(value) as unknown);\n } catch {\n return null;\n }\n}\n\nfunction parseCodexUserAgentVersion(response: unknown): string | null {\n const userAgent = normalizeOptionalText(toRecord(response)?.userAgent);\n const match = userAgent?.match(CODEX_USER_AGENT_VERSION_RE);\n return match?.[1] ?? null;\n}\n\nfunction parseCodexModels(models: unknown): AgentControllerInterfaceModel[] {\n if (!Array.isArray(models)) {\n return [];\n }\n return models.flatMap((model) => {\n const record = toRecord(model);\n const id = normalizeOptionalText(record?.model);\n if (!id) {\n return [];\n }\n return [\n {\n displayName: normalizeOptionalText(record?.displayName) ?? id,\n id,\n },\n ];\n });\n}\n\nfunction parseCodexSkills(skills: unknown): AgentControllerInterfaceSkill[] {\n const record = toRecord(skills);\n const rawSkills = Array.isArray(record?.skills) ? record.skills : [];\n return rawSkills.flatMap((skill) => {\n const skillRecord = toRecord(skill);\n const id =\n normalizeOptionalText(skillRecord?.name) ??\n normalizeOptionalText(skillRecord?.id);\n if (!id) {\n return [];\n }\n return [\n {\n description:\n normalizeOptionalText(skillRecord?.description) ?? undefined,\n displayName:\n normalizeOptionalText(\n toRecord(skillRecord?.interface)?.displayName\n ) ?? undefined,\n id,\n },\n ];\n });\n}\n\nfunction parseCliVersion(output: string): string | null {\n const normalized = normalizeOptionalText(output);\n if (!normalized) {\n return null;\n }\n const semver = normalized.match(CLI_SEMVER_RE);\n return semver?.[1] ?? normalized.split(WHITESPACE_RE).at(-1) ?? normalized;\n}\n\nfunction parseJsonRpcMessage(line: string): JsonRpcMessage | null {\n try {\n const parsed = JSON.parse(line) as unknown;\n return toRecord(parsed) as JsonRpcMessage | null;\n } catch {\n return null;\n }\n}\n\nfunction appendProbeOutput(existing: string, chunk: unknown): string {\n return `${existing}${String(chunk)}`.slice(0, PROBE_OUTPUT_LIMIT);\n}\n\nfunction toRecord(value: unknown): Record<string, unknown> | null {\n return value && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : null;\n}\n\nfunction normalizeOptionalText(value: unknown): string | null {\n if (typeof value !== \"string\") {\n return null;\n }\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : null;\n}\n\nfunction toErrorMessage(error: unknown): string {\n if (error instanceof Error) {\n const message = error.message.trim();\n return message.length > 0 ? message : \"unknown error\";\n }\n const message = String(error ?? \"\").trim();\n return message.length > 0 ? message : \"unknown error\";\n}\n","import { buildAgentControllerRef } from \"@openmeld/agent-runtime\";\nimport type { LocalDaemonAdapterContainer } from \"@openmeld/local-service\";\nimport type { AgentControllerInterfaceSnapshot } from \"@openmeld/schemas/types\";\nimport type { LocalControllerInstallStatus } from \"../../agents/local-controller-install\";\nimport type {\n AgentTargetSelectableReason,\n AgentTargetState,\n} from \"../../agents/registry\";\nimport { listAgentTargetStates } from \"../../agents/registry\";\nimport type { LocalParticipationState } from \"../../system/action-participation-planner\";\nimport { resolveLocalRuntimeControllerSupport } from \"../routing/resolve-controller-support\";\nimport {\n type AgentControllerInterfaceProbePolicy,\n resolveAgentControllerInterfaceSnapshot,\n} from \"./agent-controller-interface\";\n\nexport type LocalAgentControllerLaunchability =\n | \"blocked\"\n | \"launchable\"\n | \"needs_choice\"\n | \"needs_repair\"\n | \"not_detected\"\n | \"not_supported\";\n\nexport type LocalAgentControllerInventoryItem = {\n agentId: string;\n blockerReasonCodes: readonly string[];\n agentControllerRef: string;\n agentControllerInterface?: AgentControllerInterfaceSnapshot;\n detected: boolean;\n displayName: string;\n enabled: boolean;\n launchability: LocalAgentControllerLaunchability;\n launchStatus: LocalControllerInstallStatus;\n launchStatusDetail: string | null;\n lifecycleStatus: AgentTargetState[\"lifecycleStatus\"];\n registered: boolean;\n selectable: boolean;\n selectableReason: AgentTargetSelectableReason | null;\n};\n\nexport type LocalAgentControllerInventory = {\n capabilities: LocalAgentControllerInventoryItem[];\n};\n\nexport type LocalAgentControllerReportDecision = {\n localParticipationState: LocalParticipationState;\n reasonCodes: readonly string[];\n};\n\ntype LocalAgentControllerReportDecisionCapability = Pick<\n LocalAgentControllerInventoryItem,\n | \"agentControllerInterface\"\n | \"blockerReasonCodes\"\n | \"enabled\"\n | \"launchability\"\n | \"selectable\"\n | \"selectableReason\"\n>;\n\nconst CONTROLLER_AUTH_UNAUTHENTICATED_REASON_CODES = [\n \"provider_account.access_required\",\n \"controller.auth.unauthenticated\",\n] as const;\n\nconst CONTROLLER_INTERFACE_ERROR_REASON_CODES = [\n \"controller.interface.error\",\n] as const;\nconst CONTROLLER_INTERFACE_CHECK_FAILED_REASON_CODES = [\n \"controller.interface.check_failed\",\n] as const;\n\nexport async function collectLocalAgentControllerInventory(\n input: {\n includeControllerInterface?: boolean;\n localAdapterContainer?: LocalDaemonAdapterContainer;\n probePolicy?: AgentControllerInterfaceProbePolicy;\n } = {}\n): Promise<LocalAgentControllerInventory> {\n // OPENMELD_SERVICE_THIN_CORE: LocalAgentControllerInventory fact source.\n // This is local computer evidence only: detected controllers, launchability,\n // and local blockers. It must not become Profile, Binding, Space, Wake, or\n // final outcome truth.\n const states = await listAgentTargetStates();\n const builtinStates = states.filter(\n (state): state is AgentTargetState & { targetKind: \"builtin\" } =>\n state.targetKind === \"builtin\"\n );\n\n if (input.probePolicy === \"background\") {\n // Eligible background probes cold-start real controller processes. Run\n // them one at a time so a periodic sync never stacks several controller\n // launches into one CPU spike on the user's machine.\n const capabilities: LocalAgentControllerInventoryItem[] = [];\n for (const state of builtinStates) {\n capabilities.push(\n await resolveLocalAgentControllerInventoryItem({\n includeControllerInterface: input.includeControllerInterface === true,\n localAdapterContainer: input.localAdapterContainer,\n probePolicy: input.probePolicy,\n state,\n })\n );\n }\n return { capabilities };\n }\n\n const capabilities = await Promise.all(\n builtinStates.map((state) =>\n resolveLocalAgentControllerInventoryItem({\n includeControllerInterface: input.includeControllerInterface === true,\n localAdapterContainer: input.localAdapterContainer,\n probePolicy: input.probePolicy,\n state,\n })\n )\n );\n\n return { capabilities };\n}\n\nexport async function resolveLocalAgentControllerInventoryItem(input: {\n includeControllerInterface?: boolean;\n localAdapterContainer?: LocalDaemonAdapterContainer;\n probePolicy?: AgentControllerInterfaceProbePolicy;\n state: AgentTargetState & { targetKind: \"builtin\" };\n}): Promise<LocalAgentControllerInventoryItem> {\n const item = resolveLocalAgentControllerInventoryItemBase(input);\n if (\n input.includeControllerInterface !== true ||\n !input.state.registered ||\n !input.state.enabled\n ) {\n return item;\n }\n return {\n ...item,\n agentControllerInterface: await resolveAgentControllerInterfaceSnapshot({\n agentControllerRef: item.agentControllerRef,\n probePolicy: input.probePolicy,\n state: input.state,\n }),\n };\n}\n\nexport function resolveLocalAgentControllerInventoryItemBase(input: {\n localAdapterContainer?: LocalDaemonAdapterContainer;\n state: AgentTargetState & { targetKind: \"builtin\" };\n}): LocalAgentControllerInventoryItem {\n const agentControllerRef = buildAgentControllerRef({\n kind: \"builtin\",\n id: input.state.agentId,\n });\n const adapterSupport = input.localAdapterContainer\n ? resolveLocalRuntimeControllerSupport({\n agentControllerRef,\n localAdapterContainer: input.localAdapterContainer,\n })\n : null;\n const launchStatus =\n input.state.launchStatus ??\n (input.state.selectable ? \"ready\" : \"not_available\");\n const launchability = resolveLocalAgentControllerLaunchability({\n adapterSupported: adapterSupport?.supported ?? true,\n detected: input.state.detected,\n launchStatus,\n runtimeSupported: input.state.runtimeSupported,\n selectable: input.state.selectable,\n selectableReason: input.state.selectableReason,\n });\n\n return {\n agentId: input.state.agentId,\n blockerReasonCodes: resolveLocalAgentControllerBlockerReasonCodes({\n launchability,\n selectableReason: input.state.selectableReason,\n }),\n agentControllerRef,\n detected: input.state.detected,\n displayName: input.state.displayName,\n enabled: input.state.enabled,\n launchability,\n launchStatus,\n launchStatusDetail: input.state.launchStatusDetail ?? null,\n lifecycleStatus: input.state.lifecycleStatus,\n registered: input.state.registered,\n selectable: input.state.selectable,\n selectableReason: input.state.selectableReason,\n };\n}\n\nexport function resolveLocalAgentControllerReportDecision(\n capability: LocalAgentControllerReportDecisionCapability,\n input: {\n requireEnabled: boolean;\n }\n): LocalAgentControllerReportDecision {\n if (input.requireEnabled && !capability.enabled) {\n return {\n localParticipationState: \"needs_agent_prepare\",\n reasonCodes: [\"local_agent_preparation.not_enabled\"],\n };\n }\n\n if (capability.launchability !== \"launchable\" || !capability.selectable) {\n return {\n localParticipationState: \"needs_agent_prepare\",\n reasonCodes:\n capability.blockerReasonCodes.length > 0\n ? capability.blockerReasonCodes\n : [\n capability.selectableReason\n ? `local_agent_preparation.${capability.selectableReason}`\n : \"local_agent_preparation.not_selectable\",\n ],\n };\n }\n\n const interfaceReasonCodes = resolveAgentControllerInterfaceReasonCodes(\n capability.agentControllerInterface\n );\n if (interfaceReasonCodes.length > 0) {\n return {\n localParticipationState: \"needs_agent_prepare\",\n reasonCodes: interfaceReasonCodes,\n };\n }\n\n return {\n localParticipationState: \"ready\",\n reasonCodes: [],\n };\n}\n\nfunction resolveAgentControllerInterfaceReasonCodes(\n agentControllerInterface: AgentControllerInterfaceSnapshot | undefined\n): readonly string[] {\n if (!agentControllerInterface) {\n return [];\n }\n if (agentControllerInterface.check?.status === \"failed\") {\n return CONTROLLER_INTERFACE_CHECK_FAILED_REASON_CODES;\n }\n if (agentControllerInterface.auth.status === \"unauthenticated\") {\n return CONTROLLER_AUTH_UNAUTHENTICATED_REASON_CODES;\n }\n if (agentControllerInterface.status === \"error\") {\n return CONTROLLER_INTERFACE_ERROR_REASON_CODES;\n }\n return [];\n}\n\nexport function resolveLocalAgentControllerLaunchability(input: {\n adapterSupported?: boolean;\n detected: boolean;\n launchStatus: LocalControllerInstallStatus;\n runtimeSupported: boolean;\n selectable: boolean;\n selectableReason: AgentTargetSelectableReason | null;\n}): LocalAgentControllerLaunchability {\n if (!input.detected) {\n return \"not_detected\";\n }\n if (\n !input.runtimeSupported ||\n input.selectableReason === \"not_supported_yet\"\n ) {\n return \"not_supported\";\n }\n if (input.launchStatus === \"needs_choice\") {\n return \"needs_choice\";\n }\n if (input.launchStatus === \"needs_repair\") {\n return \"needs_repair\";\n }\n if (\n input.launchStatus === \"ready\" &&\n input.selectable &&\n input.adapterSupported !== false\n ) {\n return \"launchable\";\n }\n return \"blocked\";\n}\n\nexport function resolveLocalAgentControllerBlockerReasonCodes(input: {\n launchability: LocalAgentControllerLaunchability;\n selectableReason: AgentTargetSelectableReason | null;\n}): readonly string[] {\n if (input.launchability === \"launchable\") {\n return [];\n }\n if (input.launchability === \"needs_choice\") {\n return [\"controller.launch.choice_required\"];\n }\n if (input.launchability === \"needs_repair\") {\n return [\"controller.launch.needs_repair\"];\n }\n if (input.launchability === \"not_detected\") {\n return [\"local_agent_preparation.not_detected\"];\n }\n if (input.launchability === \"not_supported\") {\n return [\"local_agent_preparation.not_supported_yet\"];\n }\n if (input.selectableReason) {\n return [`local_agent_preparation.${input.selectableReason}`];\n }\n return [\"local_agent_preparation.not_enabled\"];\n}\n","import { AGENT_CONTROLLER_USAGE_LIMIT_SUPPORT_MATRIX_VERSION } from \"@openmeld/agent-runtime\";\nimport type { AgentControllerInterfaceSnapshot } from \"@openmeld/schemas/types\";\n\nexport function projectAgentControllerInterfaceForCloud(\n snapshot: AgentControllerInterfaceSnapshot\n): AgentControllerInterfaceSnapshot {\n return {\n agentControllerRef: snapshot.agentControllerRef,\n auth: {\n ...(snapshot.auth.email ? { email: snapshot.auth.email } : {}),\n ...(snapshot.auth.label ? { label: snapshot.auth.label } : {}),\n status: snapshot.auth.status,\n ...(snapshot.auth.type ? { type: snapshot.auth.type } : {}),\n },\n capabilities: {\n approvals: snapshot.capabilities.approvals,\n cancel: snapshot.capabilities.cancel,\n interrupt: snapshot.capabilities.interrupt,\n modelSelection: snapshot.capabilities.modelSelection,\n nativeEventStream: snapshot.capabilities.nativeEventStream,\n permissionModes: snapshot.capabilities.permissionModes,\n structuredUserInput: snapshot.capabilities.structuredUserInput,\n },\n ...(snapshot.check\n ? {\n check: snapshot.check,\n }\n : {}),\n checkedAt: snapshot.checkedAt,\n controllerId: snapshot.controllerId,\n displayName: snapshot.displayName,\n launch: {\n argsPrefix: [],\n commandPath: null,\n installChoiceCount: snapshot.launch.installChoiceCount,\n status: snapshot.launch.status,\n ...(snapshot.launch.failureReason\n ? { failureReason: snapshot.launch.failureReason }\n : {}),\n },\n message: null,\n models: snapshot.models.map((model) => ({ ...model })),\n nativeInterface: snapshot.nativeInterface,\n schemaVersion: snapshot.schemaVersion,\n skills: [],\n status: snapshot.status,\n ...(snapshot.usageLimits\n ? {\n usageLimits: snapshot.usageLimits.map((limit) => ({\n ...limit,\n ...(limit.provider ? { provider: { ...limit.provider } } : {}),\n })),\n }\n : {}),\n usageLimitsSupportMatrixVersion:\n AGENT_CONTROLLER_USAGE_LIMIT_SUPPORT_MATRIX_VERSION,\n version: snapshot.version,\n ...(snapshot.versionAdvisory\n ? {\n versionAdvisory: {\n checkedAt: snapshot.versionAdvisory.checkedAt,\n currentVersion: snapshot.versionAdvisory.currentVersion,\n latestVersion: snapshot.versionAdvisory.latestVersion,\n message: null,\n status: snapshot.versionAdvisory.status,\n updateCommand: snapshot.versionAdvisory.updateCommand,\n },\n }\n : {}),\n };\n}\n","import {\n createRuntimeReportingApi,\n type SubmitRuntimeAgentControllerReportsInput,\n toStructuredApiClientFailure,\n} from \"@openmeld/api-client\";\nimport type { AgentControllerInterfaceSnapshot } from \"@openmeld/schemas/types\";\nimport { getAuthSessionState } from \"../../config/auth-session\";\nimport { readDaemonServiceContract } from \"../../config/daemon-service-contract\";\nimport type { OpenMeldProfile } from \"../../config/openmeld-profiles-api\";\nimport {\n canAttachAuthTokenToRequest,\n fingerprintRequestAuthorization,\n} from \"../../config/request-headers\";\nimport { createCliApiClientFoundation } from \"../../space/api-client-foundation\";\nimport type { LocalParticipationState } from \"../../system/action-participation-planner\";\nimport { resolveAgentProfilePrimaryAgentControllerReport } from \"../../system/agent-profile-primary-binding\";\nimport { warnDaemonEvent } from \"../core/logger\";\nimport { projectAgentControllerInterfaceForCloud } from \"./agent-controller-interface-cloud-projection\";\n\nexport type RuntimeReportingAttempt = {\n credentialFingerprint?: string;\n authenticationRejected: boolean;\n family: \"provider_conversation_proof\" | \"runtime_agent_controller\";\n message: string | null;\n reasonCode: string | null;\n status: \"failed\" | \"not_applicable\" | \"succeeded\";\n};\n\nexport type RuntimeReportingAttemptObserver = (\n attempt: RuntimeReportingAttempt\n) => Promise<void> | void;\n\nexport type RuntimeAgentControllerReportSubmission = {\n source: \"runtime_reporting_api\";\n status: \"failed\" | \"submitted\" | \"unavailable\";\n agentControllerRef?: string;\n agentControllerReportStatus?: \"accepted\" | \"partial\" | \"rejected\";\n deviceId?: string;\n lane?: string;\n reason?:\n | \"auth_gateway_mismatch\"\n | \"auth_unavailable\"\n | \"agent_controller_ref_unavailable\"\n | \"registration_rejected\"\n | \"report_rejected\"\n | \"service_contract_unavailable\"\n | \"write_failed\";\n reasonCodes: string[];\n authBaseUrl?: string;\n registrationStatus?: \"created\" | \"reused\";\n gatewayUrl?: string;\n guidanceReason?: \"mismatch\";\n openMeldServiceRuntimeId?: string;\n};\n\nexport type RuntimeProviderConversationProofSubmission = {\n source: \"runtime_reporting_api\";\n status: \"failed\" | \"submitted\" | \"unavailable\";\n agentProfileId?: string;\n bindingId?: string;\n providerConversationProofStatus?: \"accepted\" | \"partial\" | \"rejected\";\n deviceId?: string;\n lane?: string;\n reason?:\n | \"auth_gateway_mismatch\"\n | \"auth_unavailable\"\n | \"proof_rejected\"\n | \"registration_rejected\"\n | \"service_contract_unavailable\"\n | \"write_failed\";\n reasonCodes: string[];\n authBaseUrl?: string;\n registrationStatus?: \"created\" | \"reused\";\n gatewayUrl?: string;\n guidanceReason?: \"mismatch\";\n openMeldServiceRuntimeId?: string;\n};\n\nexport type RuntimeAgentControllerReportInput = {\n agentControllerRef: string;\n agentControllerInterface?: AgentControllerInterfaceSnapshot;\n diagnosticProfileId?: string;\n enabled?: boolean;\n localParticipationState: LocalParticipationState;\n reasonCodes: readonly string[];\n};\n\nexport type RuntimeProviderConversationProofInput = {\n agentProfileId: string;\n bindingId: string;\n agentControllerRef: string;\n agentControllerConversationId: string;\n transportMode: \"codex-app-server\";\n provider: \"codex\";\n method: \"codex_app_server_thread_resume\";\n intrusive: false;\n observedAtMs: number;\n expiresAtMs: number;\n status: \"failed\" | \"passed\";\n errorCode?: string;\n errorMessage?: string;\n errorType?: string;\n};\n\nconst MIN_REPORT_TTL_MS = 10 * 60_000;\n\nexport async function submitProfileRuntimeAgentControllerReport(input: {\n localParticipationState: LocalParticipationState;\n profile: OpenMeldProfile;\n reasonCodes: readonly string[];\n}): Promise<RuntimeAgentControllerReportSubmission> {\n const agentControllerRef = await resolveProfileAgentControllerRef(\n input.profile\n );\n if (!agentControllerRef) {\n return unavailableSubmission({\n reason: \"agent_controller_ref_unavailable\",\n reasonCode: \"runtime.reporting.agent_controller_ref_unavailable\",\n });\n }\n\n return await submitRuntimeAgentControllerReport({\n agentControllerRef,\n diagnosticProfileId: input.profile.openMeldProfileId,\n localParticipationState: input.localParticipationState,\n reasonCodes: input.reasonCodes,\n });\n}\n\nexport async function submitRuntimeAgentControllerReport(input: {\n agentControllerRef: string;\n agentControllerInterface?: AgentControllerInterfaceSnapshot;\n diagnosticProfileId?: string;\n localParticipationState: LocalParticipationState;\n reasonCodes: readonly string[];\n}): Promise<RuntimeAgentControllerReportSubmission> {\n const [result] = await submitRuntimeAgentControllerReports({\n reports: [input],\n });\n if (!result) {\n throw new Error(\n \"OpenMeld runtime reporting did not return a submission result.\"\n );\n }\n return result;\n}\n\nexport async function submitRuntimeAgentControllerReports(input: {\n onAttempt?: RuntimeReportingAttemptObserver;\n reports: readonly RuntimeAgentControllerReportInput[];\n}): Promise<RuntimeAgentControllerReportSubmission[]> {\n // OPENMELD_SERVICE_THIN_CORE: Runtime Agent Controller reporting evidence.\n // This reports local controller availability for the current local service\n // identity; it does not own Profile, Binding, Space, Wake, or final outcome\n // truth.\n if (input.reports.length === 0) {\n return [];\n }\n\n const serviceContract = await readDaemonServiceContract().catch(() => null);\n if (\n !(\n serviceContract?.deviceId &&\n serviceContract.gatewayUrl &&\n serviceContract.lane &&\n isFinitePositiveNumber(serviceContract.heartbeatMs)\n )\n ) {\n return await finishRuntimeAgentControllerReportingAttempt({\n failure: {\n authenticationRejected: false,\n message: \"OpenMeld Service contract is unavailable.\",\n reasonCode: \"runtime.reporting.service_contract_unavailable\",\n },\n onAttempt: input.onAttempt,\n submissions: unavailableSubmissions({\n reports: input.reports,\n reason: \"service_contract_unavailable\",\n reasonCode: \"runtime.reporting.service_contract_unavailable\",\n }),\n });\n }\n\n const authCompatibility = await resolveRuntimeReportingAuthCompatibility(\n serviceContract.gatewayUrl\n );\n if (authCompatibility.status === \"unavailable\") {\n const reasonCode = `runtime.reporting.${authCompatibility.reasonCode ?? `auth_${authCompatibility.authState}`}`;\n return await finishRuntimeAgentControllerReportingAttempt({\n failure: {\n authenticationRejected: false,\n message: `Local authentication is ${authCompatibility.authState}.`,\n reasonCode,\n },\n onAttempt: input.onAttempt,\n submissions: failedSubmissions({\n gatewayUrl: serviceContract.gatewayUrl,\n reports: input.reports,\n reason: \"auth_unavailable\",\n reasonCode,\n }),\n });\n }\n if (authCompatibility.status === \"mismatch\") {\n return await finishRuntimeAgentControllerReportingAttempt({\n failure: {\n authenticationRejected: false,\n message:\n \"The local authentication session does not match the reporting Gateway.\",\n reasonCode: \"runtime.reporting.auth_gateway_mismatch\",\n },\n onAttempt: input.onAttempt,\n submissions: failedSubmissions({\n authBaseUrl: authCompatibility.authBaseUrl,\n gatewayUrl: serviceContract.gatewayUrl,\n guidanceReason: \"mismatch\",\n reports: input.reports,\n reason: \"auth_gateway_mismatch\",\n reasonCode: \"runtime.reporting.auth_gateway_mismatch\",\n }),\n });\n }\n\n let credentialFingerprint: string | undefined;\n try {\n const api = createRuntimeReportingApi(\n createCliApiClientFoundation(serviceContract.gatewayUrl, {\n onAuthHeadersResolved: (headers) => {\n credentialFingerprint = headers.Authorization\n ? fingerprintRequestAuthorization(headers.Authorization)\n : undefined;\n },\n })\n );\n const registration = await api.submitRegistration({\n deviceId: serviceContract.deviceId,\n lane: serviceContract.lane,\n });\n if (\n !(\n registration.status !== \"rejected\" &&\n registration.openMeldServiceRuntimeId\n )\n ) {\n const reasonCode = `runtime.registration.${registration.reason ?? \"rejected\"}`;\n return await finishRuntimeAgentControllerReportingAttempt({\n failure: {\n authenticationRejected: false,\n message: `Runtime registration was rejected: ${registration.reason ?? \"rejected\"}.`,\n reasonCode,\n },\n onAttempt: input.onAttempt,\n submissions: failedSubmissions({\n reports: input.reports,\n reason: \"registration_rejected\",\n reasonCode,\n }),\n });\n }\n\n const observedAtMs = Date.now();\n const reportInput = buildRuntimeAgentControllerReportsInput({\n openMeldServiceRuntimeId: registration.openMeldServiceRuntimeId,\n deviceId: serviceContract.deviceId,\n heartbeatMs: serviceContract.heartbeatMs,\n includeAgentControllerInterface: true,\n lane: serviceContract.lane,\n observedAtMs,\n reports: input.reports,\n });\n const report = await submitAgentControllerReportsWithCompatibilityRetry({\n api,\n initialInput: reportInput,\n requestedReports: input.reports,\n });\n\n return await finishRuntimeAgentControllerReportingAttempt({\n onAttempt: input.onAttempt,\n submissions: resolveAgentControllerReportSubmissionResults({\n deviceId: serviceContract.deviceId,\n lane: serviceContract.lane,\n registrationStatus: registration.status,\n reports: input.reports,\n openMeldServiceRuntimeId: registration.openMeldServiceRuntimeId.value,\n submission: report,\n }),\n });\n } catch (error) {\n const failure = resolveRuntimeReportingWriteFailure({\n credentialFingerprint,\n error,\n reasonCodePrefix: \"runtime.reporting\",\n });\n warnDaemonEvent(\"[openmeld.runtime_reporting.write_failed]\", {\n error: failure.message,\n event: \"cli.runtime_reporting.write_failed\",\n profileIds: input.reports\n .map((report) => report.diagnosticProfileId)\n .filter((profileId): profileId is string => Boolean(profileId)),\n reportCount: input.reports.length,\n });\n return await finishRuntimeAgentControllerReportingAttempt({\n failure,\n onAttempt: input.onAttempt,\n submissions: failedSubmissions({\n reports: input.reports,\n reason: \"write_failed\",\n reasonCode: failure.reasonCode,\n }),\n });\n }\n}\n\nexport async function submitRuntimeProviderConversationProofs(input: {\n onAttempt?: RuntimeReportingAttemptObserver;\n proofs: readonly RuntimeProviderConversationProofInput[];\n}): Promise<RuntimeProviderConversationProofSubmission[]> {\n if (input.proofs.length === 0) {\n return [];\n }\n\n const serviceContract = await readDaemonServiceContract().catch(() => null);\n if (\n !(\n serviceContract?.deviceId &&\n serviceContract.gatewayUrl &&\n serviceContract.lane &&\n isFinitePositiveNumber(serviceContract.heartbeatMs)\n )\n ) {\n const reasonCode =\n \"provider_conversation.runtime_reporting.service_contract_unavailable\";\n return await finishProviderConversationProofReportingAttempt({\n failure: {\n authenticationRejected: false,\n message: \"OpenMeld Service contract is unavailable.\",\n reasonCode,\n },\n onAttempt: input.onAttempt,\n submissions: unavailableProviderConversationProofSubmissions({\n proofs: input.proofs,\n reason: \"service_contract_unavailable\",\n reasonCode,\n }),\n });\n }\n\n const authCompatibility = await resolveRuntimeReportingAuthCompatibility(\n serviceContract.gatewayUrl\n );\n if (authCompatibility.status === \"unavailable\") {\n const reasonCode = `provider_conversation.runtime_reporting.${authCompatibility.reasonCode ?? `auth_${authCompatibility.authState}`}`;\n return await finishProviderConversationProofReportingAttempt({\n failure: {\n authenticationRejected: false,\n message: `Local authentication is ${authCompatibility.authState}.`,\n reasonCode,\n },\n onAttempt: input.onAttempt,\n submissions: failedProviderConversationProofSubmissions({\n gatewayUrl: serviceContract.gatewayUrl,\n proofs: input.proofs,\n reason: \"auth_unavailable\",\n reasonCode,\n }),\n });\n }\n if (authCompatibility.status === \"mismatch\") {\n const reasonCode =\n \"provider_conversation.runtime_reporting.auth_gateway_mismatch\";\n return await finishProviderConversationProofReportingAttempt({\n failure: {\n authenticationRejected: false,\n message:\n \"The local authentication session does not match the reporting Gateway.\",\n reasonCode,\n },\n onAttempt: input.onAttempt,\n submissions: failedProviderConversationProofSubmissions({\n authBaseUrl: authCompatibility.authBaseUrl,\n gatewayUrl: serviceContract.gatewayUrl,\n guidanceReason: \"mismatch\",\n proofs: input.proofs,\n reason: \"auth_gateway_mismatch\",\n reasonCode,\n }),\n });\n }\n\n let credentialFingerprint: string | undefined;\n try {\n const api = createRuntimeReportingApi(\n createCliApiClientFoundation(serviceContract.gatewayUrl, {\n onAuthHeadersResolved: (headers) => {\n credentialFingerprint = headers.Authorization\n ? fingerprintRequestAuthorization(headers.Authorization)\n : undefined;\n },\n })\n );\n const registration = await api.submitRegistration({\n deviceId: serviceContract.deviceId,\n lane: serviceContract.lane,\n });\n if (\n !(\n registration.status !== \"rejected\" &&\n registration.openMeldServiceRuntimeId\n )\n ) {\n const reasonCode = `provider_conversation.runtime_registration.${\n registration.reason ?? \"rejected\"\n }`;\n return await finishProviderConversationProofReportingAttempt({\n failure: {\n authenticationRejected: false,\n message: `Runtime registration was rejected: ${registration.reason ?? \"rejected\"}.`,\n reasonCode,\n },\n onAttempt: input.onAttempt,\n submissions: failedProviderConversationProofSubmissions({\n proofs: input.proofs,\n reason: \"registration_rejected\",\n reasonCode,\n }),\n });\n }\n\n const submission = await api.submitProviderConversationProofs({\n deviceId: serviceContract.deviceId,\n lane: serviceContract.lane,\n proofs: input.proofs.map((proof) => ({\n ...proof,\n })),\n openMeldServiceRuntimeId: registration.openMeldServiceRuntimeId,\n });\n\n return await finishProviderConversationProofReportingAttempt({\n onAttempt: input.onAttempt,\n submissions: resolveProviderConversationProofSubmissionResults({\n deviceId: serviceContract.deviceId,\n lane: serviceContract.lane,\n registrationStatus: registration.status,\n proofs: input.proofs,\n openMeldServiceRuntimeId: registration.openMeldServiceRuntimeId.value,\n submission,\n }),\n });\n } catch (error) {\n const failure = resolveRuntimeReportingWriteFailure({\n credentialFingerprint,\n error,\n reasonCodePrefix: \"provider_conversation.runtime_reporting\",\n });\n warnDaemonEvent(\"[openmeld.provider_conversation_proof.write_failed]\", {\n error: failure.message,\n event: \"cli.provider_conversation_proof.write_failed\",\n profileIds: input.proofs.map((proof) => proof.agentProfileId),\n proofCount: input.proofs.length,\n });\n return await finishProviderConversationProofReportingAttempt({\n failure,\n onAttempt: input.onAttempt,\n submissions: failedProviderConversationProofSubmissions({\n proofs: input.proofs,\n reason: \"write_failed\",\n reasonCode: failure.reasonCode,\n }),\n });\n }\n}\n\ntype RuntimeReportingFailure = {\n credentialFingerprint?: string;\n authenticationRejected: boolean;\n message: string;\n reasonCode: string;\n};\n\nasync function finishRuntimeAgentControllerReportingAttempt(input: {\n failure?: RuntimeReportingFailure;\n onAttempt?: RuntimeReportingAttemptObserver;\n submissions: RuntimeAgentControllerReportSubmission[];\n}): Promise<RuntimeAgentControllerReportSubmission[]> {\n const failedSubmission = input.submissions.find(\n (submission) =>\n submission.status !== \"submitted\" ||\n submission.agentControllerReportStatus !== \"accepted\"\n );\n const failure =\n input.failure ??\n (failedSubmission\n ? buildSubmissionFailure({\n fallbackReasonCode: \"runtime.reporting.failed\",\n reasonCodes: failedSubmission.reasonCodes,\n })\n : null);\n await notifyRuntimeReportingAttemptObserver(input.onAttempt, {\n ...(failure?.credentialFingerprint\n ? { credentialFingerprint: failure.credentialFingerprint }\n : {}),\n authenticationRejected: failure?.authenticationRejected ?? false,\n family: \"runtime_agent_controller\",\n message: failure?.message ?? null,\n reasonCode: failure?.reasonCode ?? null,\n status: failure ? \"failed\" : \"succeeded\",\n });\n return input.submissions;\n}\n\nasync function finishProviderConversationProofReportingAttempt(input: {\n failure?: RuntimeReportingFailure;\n onAttempt?: RuntimeReportingAttemptObserver;\n submissions: RuntimeProviderConversationProofSubmission[];\n}): Promise<RuntimeProviderConversationProofSubmission[]> {\n const failedSubmission = input.submissions.find(\n (submission) =>\n submission.status !== \"submitted\" ||\n submission.providerConversationProofStatus !== \"accepted\"\n );\n const failure =\n input.failure ??\n (failedSubmission\n ? buildSubmissionFailure({\n fallbackReasonCode: \"provider_conversation.runtime_reporting.failed\",\n reasonCodes: failedSubmission.reasonCodes,\n })\n : null);\n await notifyRuntimeReportingAttemptObserver(input.onAttempt, {\n ...(failure?.credentialFingerprint\n ? { credentialFingerprint: failure.credentialFingerprint }\n : {}),\n authenticationRejected: failure?.authenticationRejected ?? false,\n family: \"provider_conversation_proof\",\n message: failure?.message ?? null,\n reasonCode: failure?.reasonCode ?? null,\n status: failure ? \"failed\" : \"succeeded\",\n });\n return input.submissions;\n}\n\nfunction buildSubmissionFailure(input: {\n fallbackReasonCode: string;\n reasonCodes: readonly string[];\n}): RuntimeReportingFailure {\n const reasonCode = input.reasonCodes[0] ?? input.fallbackReasonCode;\n return {\n authenticationRejected: false,\n message: `Runtime reporting failed: ${reasonCode}.`,\n reasonCode,\n };\n}\n\nfunction resolveRuntimeReportingWriteFailure(input: {\n credentialFingerprint?: string;\n error: unknown;\n reasonCodePrefix: string;\n}): RuntimeReportingFailure {\n const failure = toStructuredApiClientFailure(input.error);\n const authenticationRejected =\n failure.status === 401 ||\n (failure.status === null && failure.code === \"auth.unauthenticated\");\n return {\n ...(authenticationRejected && input.credentialFingerprint\n ? { credentialFingerprint: input.credentialFingerprint }\n : {}),\n authenticationRejected,\n message: resolveSafeRuntimeReportingFailureMessage({\n authenticationRejected,\n message: failure.message,\n status: failure.status,\n }),\n reasonCode: `${input.reasonCodePrefix}.${\n authenticationRejected ? \"authentication_required\" : \"write_failed\"\n }`,\n };\n}\n\nfunction resolveSafeRuntimeReportingFailureMessage(input: {\n authenticationRejected: boolean;\n message: string;\n status: number | null;\n}): string {\n if (input.authenticationRejected) {\n return \"OpenMeld rejected the local authentication session.\";\n }\n if (input.status !== null) {\n return `OpenMeld reporting request failed with HTTP ${String(input.status)}.`;\n }\n const normalizedMessage = input.message.toLowerCase();\n if (\n normalizedMessage.includes(\"timed out\") ||\n normalizedMessage.includes(\"timeout\")\n ) {\n return \"OpenMeld reporting request timed out.\";\n }\n if (\n normalizedMessage.includes(\"certificate\") ||\n normalizedMessage.includes(\"tls\")\n ) {\n return \"OpenMeld reporting request failed TLS verification.\";\n }\n return \"OpenMeld reporting request failed.\";\n}\n\nexport async function notifyRuntimeReportingAttemptObserver(\n observer: RuntimeReportingAttemptObserver | undefined,\n attempt: RuntimeReportingAttempt\n): Promise<void> {\n if (!observer) {\n return;\n }\n try {\n await observer(attempt);\n } catch (error) {\n warnDaemonEvent(\"[openmeld.runtime_reporting.attempt_observer_failed]\", {\n authenticationRejected: attempt.authenticationRejected,\n error: toErrorMessage(error),\n event: \"cli.runtime_reporting.attempt_observer_failed\",\n family: attempt.family,\n reasonCode: attempt.reasonCode,\n status: attempt.status,\n });\n }\n}\n\nfunction isFinitePositiveNumber(value: unknown): value is number {\n return typeof value === \"number\" && Number.isFinite(value) && value > 0;\n}\n\nasync function resolveProfileAgentControllerRef(\n profile: OpenMeldProfile\n): Promise<string | null> {\n const capability = await resolveAgentProfilePrimaryAgentControllerReport({\n profile,\n }).catch(() => null);\n return capability?.agentControllerRef ?? null;\n}\n\nfunction resolveReportStatus(input: {\n enabled?: boolean;\n localParticipationState: LocalParticipationState;\n}): \"disabled\" | \"ready\" | \"unavailable\" | \"unknown\" {\n if (input.enabled === false) {\n return \"disabled\";\n }\n if (input.localParticipationState === \"ready\") {\n return \"ready\";\n }\n if (input.localParticipationState === \"membership_only\") {\n return \"unknown\";\n }\n return \"unavailable\";\n}\n\nfunction resolveReportReasonCodes(input: {\n enabled?: boolean;\n localParticipationState: LocalParticipationState;\n reasonCodes: readonly string[];\n}): string[] {\n if (input.reasonCodes.length > 0) {\n return Array.from(new Set(input.reasonCodes));\n }\n return [\n `runtime.agent_controller_report.${resolveReportStatus({\n enabled: input.enabled,\n localParticipationState: input.localParticipationState,\n })}`,\n ];\n}\n\nfunction buildRuntimeAgentControllerReportsInput(input: {\n openMeldServiceRuntimeId: SubmitRuntimeAgentControllerReportsInput[\"openMeldServiceRuntimeId\"];\n deviceId: string;\n heartbeatMs: number;\n includeAgentControllerInterface: boolean;\n lane: string;\n observedAtMs: number;\n reports: readonly RuntimeAgentControllerReportInput[];\n}): SubmitRuntimeAgentControllerReportsInput {\n return {\n deviceId: input.deviceId,\n lane: input.lane,\n reports: input.reports.map((runtimeReport) => ({\n agentControllerRef: runtimeReport.agentControllerRef,\n ...(input.includeAgentControllerInterface &&\n runtimeReport.agentControllerInterface\n ? {\n agentControllerInterface: projectAgentControllerInterfaceForCloud(\n runtimeReport.agentControllerInterface\n ),\n }\n : {}),\n expiresAtMs:\n input.observedAtMs + Math.max(input.heartbeatMs * 3, MIN_REPORT_TTL_MS),\n observedAtMs: input.observedAtMs,\n reasonCodes: resolveReportReasonCodes({\n enabled: runtimeReport.enabled,\n localParticipationState: runtimeReport.localParticipationState,\n reasonCodes: runtimeReport.reasonCodes,\n }),\n status: resolveReportStatus({\n enabled: runtimeReport.enabled,\n localParticipationState: runtimeReport.localParticipationState,\n }),\n })),\n openMeldServiceRuntimeId: input.openMeldServiceRuntimeId,\n };\n}\n\nasync function submitAgentControllerReportsWithCompatibilityRetry(input: {\n api: ReturnType<typeof createRuntimeReportingApi>;\n initialInput: SubmitRuntimeAgentControllerReportsInput;\n requestedReports: readonly RuntimeAgentControllerReportInput[];\n}): Promise<RuntimeAgentControllerReportsSubmission> {\n try {\n return await input.api.submitAgentControllerReports(input.initialInput);\n } catch (error) {\n let retryInput = input.initialInput;\n let compatibilityError = error;\n if (\n shouldRetryWithoutUsageLimits({\n error,\n submittedReports: input.initialInput.reports,\n })\n ) {\n warnDaemonEvent(\"[openmeld.runtime_reporting.usage_limits_downgraded]\", {\n error: toErrorMessage(error),\n event: \"cli.runtime_reporting.usage_limits_downgraded\",\n reportCount: input.requestedReports.length,\n });\n retryInput = omitUsageLimitsFromReports(input.initialInput);\n try {\n return await input.api.submitAgentControllerReports(retryInput);\n } catch (retryError) {\n compatibilityError = retryError;\n }\n }\n if (\n !shouldRetryWithoutAgentControllerInterface({\n error: compatibilityError,\n requestedReports: input.requestedReports,\n })\n ) {\n throw compatibilityError;\n }\n\n warnDaemonEvent(\n \"[openmeld.runtime_reporting.agent_controller_interface_downgraded]\",\n {\n error: toErrorMessage(compatibilityError),\n event: \"cli.runtime_reporting.agent_controller_interface_downgraded\",\n profileIds: input.requestedReports\n .map((report) => report.diagnosticProfileId)\n .filter((profileId): profileId is string => Boolean(profileId)),\n reportCount: input.requestedReports.length,\n }\n );\n\n return await input.api.submitAgentControllerReports({\n ...retryInput,\n reports: retryInput.reports.map(\n ({ agentControllerInterface: _agentControllerInterface, ...report }) =>\n report\n ),\n });\n }\n}\n\nfunction omitUsageLimitsFromReports(\n input: SubmitRuntimeAgentControllerReportsInput\n): SubmitRuntimeAgentControllerReportsInput {\n return {\n ...input,\n reports: input.reports.map((report) => {\n if (\n !(\n report.agentControllerInterface?.usageLimits ||\n report.agentControllerInterface?.usageLimitsSupportMatrixVersion\n )\n ) {\n return report;\n }\n const {\n usageLimits: _usageLimits,\n usageLimitsSupportMatrixVersion: _usageLimitsSupportMatrixVersion,\n ...agentControllerInterface\n } = report.agentControllerInterface;\n return { ...report, agentControllerInterface };\n }),\n };\n}\n\nfunction shouldRetryWithoutUsageLimits(input: {\n error: unknown;\n submittedReports: SubmitRuntimeAgentControllerReportsInput[\"reports\"];\n}): boolean {\n if (\n !input.submittedReports.some(\n (report) =>\n report.agentControllerInterface?.usageLimits ||\n report.agentControllerInterface?.usageLimitsSupportMatrixVersion\n )\n ) {\n return false;\n }\n const failure = toStructuredApiClientFailure(input.error);\n if (failure.status !== 400) {\n return false;\n }\n const diagnosticText = collectCompatibilityDiagnosticText(failure);\n if (diagnosticText.includes(\"usagelimits\")) {\n return true;\n }\n return (\n diagnosticText.includes(\"provider\") &&\n input.submittedReports.some((report) =>\n report.agentControllerInterface?.usageLimits?.some(\n (limit) => limit.provider\n )\n )\n );\n}\n\nfunction shouldRetryWithoutAgentControllerInterface(input: {\n error: unknown;\n requestedReports: readonly RuntimeAgentControllerReportInput[];\n}): boolean {\n if (\n !input.requestedReports.some((report) => report.agentControllerInterface)\n ) {\n return false;\n }\n\n const failure = toStructuredApiClientFailure(input.error);\n if (failure.status !== 400) {\n return false;\n }\n\n return collectCompatibilityDiagnosticText(failure).includes(\n \"agentcontrollerinterface\"\n );\n}\n\nfunction collectCompatibilityDiagnosticText(\n failure: ReturnType<typeof toStructuredApiClientFailure>\n): string {\n return [\n failure.message,\n failure.schemaIssueMessage,\n failure.schemaIssuePath,\n failure.upstreamCode,\n ]\n .filter((value): value is string => Boolean(value))\n .join(\" \")\n .toLowerCase();\n}\n\ntype RuntimeAgentControllerReportsSubmission = {\n reason?: string;\n reports: readonly {\n agentControllerRef: string;\n reason?: string;\n status: \"accepted\" | \"rejected\";\n }[];\n status: \"accepted\" | \"partial\" | \"rejected\";\n};\n\nfunction resolveAgentControllerReportSubmissionResults(input: {\n deviceId: string;\n lane: string;\n registrationStatus: \"created\" | \"reused\";\n reports: readonly RuntimeAgentControllerReportInput[];\n openMeldServiceRuntimeId: string;\n submission: RuntimeAgentControllerReportsSubmission;\n}): RuntimeAgentControllerReportSubmission[] {\n const submittedReportByAgentControllerRef = new Map(\n input.submission.reports.map((report) => [\n report.agentControllerRef,\n report,\n ])\n );\n\n return input.reports.map((requestedReport) => {\n const submittedReport = submittedReportByAgentControllerRef.get(\n requestedReport.agentControllerRef\n );\n if (\n input.submission.status === \"rejected\" ||\n !submittedReport ||\n submittedReport.status === \"rejected\"\n ) {\n return failedSubmission({\n agentControllerRef: requestedReport.agentControllerRef,\n reason: \"report_rejected\",\n reasonCode: resolveRejectedReportReasonCode({\n report: submittedReport,\n submission: input.submission,\n }),\n openMeldServiceRuntimeId: input.openMeldServiceRuntimeId,\n });\n }\n\n return {\n agentControllerRef: requestedReport.agentControllerRef,\n agentControllerReportStatus: submittedReport.status,\n deviceId: input.deviceId,\n lane: input.lane,\n reasonCodes: [],\n registrationStatus: input.registrationStatus,\n openMeldServiceRuntimeId: input.openMeldServiceRuntimeId,\n source: \"runtime_reporting_api\",\n status: \"submitted\",\n };\n });\n}\n\nfunction resolveRejectedReportReasonCode(input: {\n report:\n | {\n reason?: string;\n status: \"accepted\" | \"rejected\";\n }\n | undefined;\n submission: {\n reason?: string;\n status: \"accepted\" | \"partial\" | \"rejected\";\n };\n}): string {\n if (!input.report) {\n return `runtime.agent_controller_report.${\n input.submission.reason ?? \"result_missing\"\n }`;\n }\n return `runtime.agent_controller_report.${\n input.report.reason ?? input.submission.reason ?? \"rejected\"\n }`;\n}\n\ntype RuntimeProviderConversationProofsSubmission = {\n reason?: string;\n proofs: readonly {\n agentProfileId: string;\n bindingId: string;\n reason?: string;\n status: \"accepted\" | \"rejected\";\n }[];\n status: \"accepted\" | \"partial\" | \"rejected\";\n};\n\nfunction resolveProviderConversationProofSubmissionResults(input: {\n deviceId: string;\n lane: string;\n registrationStatus: \"created\" | \"reused\";\n proofs: readonly RuntimeProviderConversationProofInput[];\n openMeldServiceRuntimeId: string;\n submission: RuntimeProviderConversationProofsSubmission;\n}): RuntimeProviderConversationProofSubmission[] {\n const submittedProofByIdentity = new Map(\n input.submission.proofs.map((proof) => [\n buildProviderConversationProofSubmissionKey(proof),\n proof,\n ])\n );\n\n return input.proofs.map((requestedProof) => {\n const submittedProof = submittedProofByIdentity.get(\n buildProviderConversationProofSubmissionKey(requestedProof)\n );\n if (\n input.submission.status === \"rejected\" ||\n !submittedProof ||\n submittedProof.status === \"rejected\"\n ) {\n return failedProviderConversationProofSubmission({\n agentProfileId: requestedProof.agentProfileId,\n bindingId: requestedProof.bindingId,\n reason: \"proof_rejected\",\n reasonCode: resolveRejectedProviderConversationProofReasonCode({\n proof: submittedProof,\n submission: input.submission,\n }),\n openMeldServiceRuntimeId: input.openMeldServiceRuntimeId,\n });\n }\n\n return {\n agentProfileId: requestedProof.agentProfileId,\n bindingId: requestedProof.bindingId,\n providerConversationProofStatus: submittedProof.status,\n deviceId: input.deviceId,\n lane: input.lane,\n reasonCodes: [],\n registrationStatus: input.registrationStatus,\n openMeldServiceRuntimeId: input.openMeldServiceRuntimeId,\n source: \"runtime_reporting_api\",\n status: \"submitted\",\n };\n });\n}\n\nfunction resolveRejectedProviderConversationProofReasonCode(input: {\n proof:\n | {\n reason?: string;\n status: \"accepted\" | \"rejected\";\n }\n | undefined;\n submission: {\n reason?: string;\n status: \"accepted\" | \"partial\" | \"rejected\";\n };\n}): string {\n if (!input.proof) {\n return `provider_conversation.proof.${\n input.submission.reason ?? \"result_missing\"\n }`;\n }\n return `provider_conversation.proof.${\n input.proof.reason ?? input.submission.reason ?? \"rejected\"\n }`;\n}\n\nfunction buildProviderConversationProofSubmissionKey(input: {\n agentProfileId: string;\n bindingId: string;\n}): string {\n return `${input.agentProfileId}:${input.bindingId}`;\n}\n\nfunction unavailableSubmissions(input: {\n reports: readonly RuntimeAgentControllerReportInput[];\n reason: Extract<\n RuntimeAgentControllerReportSubmission[\"reason\"],\n \"service_contract_unavailable\"\n >;\n reasonCode: string;\n}): RuntimeAgentControllerReportSubmission[] {\n return input.reports.map((report) =>\n unavailableSubmission({\n agentControllerRef: report.agentControllerRef,\n reason: input.reason,\n reasonCode: input.reasonCode,\n })\n );\n}\n\nfunction failedSubmissions(input: {\n authBaseUrl?: string;\n gatewayUrl?: string;\n guidanceReason?: \"mismatch\";\n reports: readonly RuntimeAgentControllerReportInput[];\n reason: Extract<\n RuntimeAgentControllerReportSubmission[\"reason\"],\n | \"auth_gateway_mismatch\"\n | \"auth_unavailable\"\n | \"registration_rejected\"\n | \"report_rejected\"\n | \"write_failed\"\n >;\n reasonCode: string;\n openMeldServiceRuntimeId?: string;\n}): RuntimeAgentControllerReportSubmission[] {\n return input.reports.map((report) =>\n failedSubmission({\n agentControllerRef: report.agentControllerRef,\n ...(input.authBaseUrl ? { authBaseUrl: input.authBaseUrl } : {}),\n ...(input.gatewayUrl ? { gatewayUrl: input.gatewayUrl } : {}),\n ...(input.guidanceReason ? { guidanceReason: input.guidanceReason } : {}),\n reason: input.reason,\n reasonCode: input.reasonCode,\n ...(input.openMeldServiceRuntimeId\n ? { openMeldServiceRuntimeId: input.openMeldServiceRuntimeId }\n : {}),\n })\n );\n}\n\nfunction unavailableProviderConversationProofSubmissions(input: {\n proofs: readonly RuntimeProviderConversationProofInput[];\n reason: Extract<\n RuntimeProviderConversationProofSubmission[\"reason\"],\n \"service_contract_unavailable\"\n >;\n reasonCode: string;\n}): RuntimeProviderConversationProofSubmission[] {\n return input.proofs.map((proof) =>\n unavailableProviderConversationProofSubmission({\n agentProfileId: proof.agentProfileId,\n bindingId: proof.bindingId,\n reason: input.reason,\n reasonCode: input.reasonCode,\n })\n );\n}\n\nfunction failedProviderConversationProofSubmissions(input: {\n authBaseUrl?: string;\n gatewayUrl?: string;\n guidanceReason?: \"mismatch\";\n proofs: readonly RuntimeProviderConversationProofInput[];\n reason: Extract<\n RuntimeProviderConversationProofSubmission[\"reason\"],\n | \"auth_gateway_mismatch\"\n | \"auth_unavailable\"\n | \"proof_rejected\"\n | \"registration_rejected\"\n | \"write_failed\"\n >;\n reasonCode: string;\n openMeldServiceRuntimeId?: string;\n}): RuntimeProviderConversationProofSubmission[] {\n return input.proofs.map((proof) =>\n failedProviderConversationProofSubmission({\n agentProfileId: proof.agentProfileId,\n bindingId: proof.bindingId,\n ...(input.authBaseUrl ? { authBaseUrl: input.authBaseUrl } : {}),\n ...(input.gatewayUrl ? { gatewayUrl: input.gatewayUrl } : {}),\n ...(input.guidanceReason ? { guidanceReason: input.guidanceReason } : {}),\n reason: input.reason,\n reasonCode: input.reasonCode,\n ...(input.openMeldServiceRuntimeId\n ? { openMeldServiceRuntimeId: input.openMeldServiceRuntimeId }\n : {}),\n })\n );\n}\n\nasync function resolveRuntimeReportingAuthCompatibility(\n gatewayUrl: string\n): Promise<\n | {\n status: \"compatible\";\n }\n | {\n status: \"mismatch\";\n authBaseUrl: string;\n }\n | {\n status: \"unavailable\";\n authState: \"error\" | \"expired\" | \"invalid\" | \"missing\";\n reasonCode?: string;\n }\n> {\n const authState = await getAuthSessionState({ refreshExpired: true }).catch(\n () => null\n );\n if (!authState) {\n return { authState: \"error\", status: \"unavailable\" };\n }\n if (!(authState.state === \"valid\" && authState.session)) {\n // A request sent without credentials is a guaranteed gateway 401 that\n // surfaces as a bare \"authentication required\" with no cause. Refuse to\n // submit instead, so the failure carries the local auth state.\n return {\n reasonCode: authState.reasonCode,\n authState:\n authState.state === \"expired\" || authState.state === \"invalid\"\n ? authState.state\n : \"missing\",\n status: \"unavailable\",\n };\n }\n if (canAttachAuthTokenToRequest(authState.session, gatewayUrl)) {\n return { status: \"compatible\" };\n }\n return {\n authBaseUrl: authState.session.authBaseUrl,\n status: \"mismatch\",\n };\n}\n\nfunction unavailableSubmission(input: {\n agentControllerRef?: string;\n reason: Extract<\n RuntimeAgentControllerReportSubmission[\"reason\"],\n \"agent_controller_ref_unavailable\" | \"service_contract_unavailable\"\n >;\n reasonCode: string;\n}): RuntimeAgentControllerReportSubmission {\n return {\n ...(input.agentControllerRef\n ? { agentControllerRef: input.agentControllerRef }\n : {}),\n reason: input.reason,\n reasonCodes: [input.reasonCode],\n source: \"runtime_reporting_api\",\n status: \"unavailable\",\n };\n}\n\nfunction failedSubmission(input: {\n authBaseUrl?: string;\n agentControllerRef?: string;\n gatewayUrl?: string;\n guidanceReason?: \"mismatch\";\n reason: Extract<\n RuntimeAgentControllerReportSubmission[\"reason\"],\n | \"auth_gateway_mismatch\"\n | \"auth_unavailable\"\n | \"registration_rejected\"\n | \"report_rejected\"\n | \"write_failed\"\n >;\n reasonCode: string;\n openMeldServiceRuntimeId?: string;\n}): RuntimeAgentControllerReportSubmission {\n return {\n ...(input.authBaseUrl ? { authBaseUrl: input.authBaseUrl } : {}),\n ...(input.agentControllerRef\n ? { agentControllerRef: input.agentControllerRef }\n : {}),\n ...(input.gatewayUrl ? { gatewayUrl: input.gatewayUrl } : {}),\n ...(input.guidanceReason ? { guidanceReason: input.guidanceReason } : {}),\n ...(input.openMeldServiceRuntimeId\n ? { openMeldServiceRuntimeId: input.openMeldServiceRuntimeId }\n : {}),\n reason: input.reason,\n reasonCodes: [input.reasonCode],\n source: \"runtime_reporting_api\",\n status: \"failed\",\n };\n}\n\nfunction unavailableProviderConversationProofSubmission(input: {\n agentProfileId: string;\n bindingId: string;\n reason: Extract<\n RuntimeProviderConversationProofSubmission[\"reason\"],\n \"service_contract_unavailable\"\n >;\n reasonCode: string;\n}): RuntimeProviderConversationProofSubmission {\n return {\n agentProfileId: input.agentProfileId,\n bindingId: input.bindingId,\n reason: input.reason,\n reasonCodes: [input.reasonCode],\n source: \"runtime_reporting_api\",\n status: \"unavailable\",\n };\n}\n\nfunction failedProviderConversationProofSubmission(input: {\n authBaseUrl?: string;\n agentProfileId: string;\n bindingId: string;\n gatewayUrl?: string;\n guidanceReason?: \"mismatch\";\n reason: Extract<\n RuntimeProviderConversationProofSubmission[\"reason\"],\n | \"auth_gateway_mismatch\"\n | \"auth_unavailable\"\n | \"proof_rejected\"\n | \"registration_rejected\"\n | \"write_failed\"\n >;\n reasonCode: string;\n openMeldServiceRuntimeId?: string;\n}): RuntimeProviderConversationProofSubmission {\n return {\n ...(input.authBaseUrl ? { authBaseUrl: input.authBaseUrl } : {}),\n agentProfileId: input.agentProfileId,\n bindingId: input.bindingId,\n ...(input.gatewayUrl ? { gatewayUrl: input.gatewayUrl } : {}),\n ...(input.guidanceReason ? { guidanceReason: input.guidanceReason } : {}),\n ...(input.openMeldServiceRuntimeId\n ? { openMeldServiceRuntimeId: input.openMeldServiceRuntimeId }\n : {}),\n reason: input.reason,\n reasonCodes: [input.reasonCode],\n source: \"runtime_reporting_api\",\n status: \"failed\",\n };\n}\n\nfunction toErrorMessage(error: unknown): string {\n if (error instanceof Error) {\n const message = error.message.trim();\n return message.length > 0 ? message : \"unknown error\";\n }\n const message = String(error ?? \"\").trim();\n return message.length > 0 ? message : \"unknown error\";\n}\n"],"mappings":"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"}