openmeld 0.3.117 → 0.3.119

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.
@@ -35,8 +35,8 @@ import { Box, Container, Editor, Key, ProcessTerminal, TUI, Text, getEditorKeybi
35
35
  var package_default = {
36
36
  $schema: "https://www.schemastore.org/package.json",
37
37
  name: "openmeld",
38
- version: "0.3.117",
39
- openMeldReleaseDate: "2026-08-26",
38
+ version: "0.3.119",
39
+ openMeldReleaseDate: "2026-08-27",
40
40
  description: "OpenMeld CLI - https://openmeld.ai",
41
41
  license: "MIT",
42
42
  type: "module",
@@ -6757,6 +6757,7 @@ const resolveControlReasonDetail = (error, reasonCode) => reasonCode === "adapte
6757
6757
  const DEFAULT_CLAUDE_CODE_COMMAND = "claude";
6758
6758
  async function resolveInstalledClaudeCodeLaunchCandidates(input) {
6759
6759
  const installedCandidates = await resolveInstalledNodeScriptLaunchCandidates({
6760
+ additionalCommandDirectories: resolveClaudeCodeCommandDirectories(),
6760
6761
  commandName: DEFAULT_CLAUDE_CODE_COMMAND,
6761
6762
  configuredCommand: normalizeOptionalText$67(process.env.OPENMELD_DAEMON_RUNTIME_CLAUDE_CODE_BIN),
6762
6763
  displayName: "Claude Code",
@@ -6796,6 +6797,9 @@ function resolveClaudeCodeTimeoutMs() {
6796
6797
  if (!Number.isFinite(parsed) || parsed <= 0) return null;
6797
6798
  return parsed;
6798
6799
  }
6800
+ function resolveClaudeCodeCommandDirectories() {
6801
+ return [join(normalizeOptionalText$67(process.env.HOME) ?? homedir(), ".local", "bin")];
6802
+ }
6799
6803
  function normalizeOptionalText$67(value) {
6800
6804
  const normalized = String(value ?? "").trim();
6801
6805
  return normalized.length > 0 ? normalized : null;
@@ -13048,6 +13052,7 @@ function toErrorMessage$33(error) {
13048
13052
  const DEFAULT_OPENCODE_COMMAND = "opencode";
13049
13053
  async function resolveInstalledOpenCodeLaunchCandidates(input) {
13050
13054
  const installedCandidates = await resolveInstalledNodeScriptLaunchCandidates({
13055
+ additionalCommandDirectories: resolveOpenCodeCommandDirectories(),
13051
13056
  commandName: DEFAULT_OPENCODE_COMMAND,
13052
13057
  configuredCommand: normalizeOptionalText$49(process.env.OPENMELD_DAEMON_RUNTIME_OPENCODE_BIN),
13053
13058
  displayName: "OpenCode",
@@ -13087,6 +13092,9 @@ function resolveOpenCodeTimeoutMs() {
13087
13092
  if (!Number.isFinite(parsed) || parsed <= 0) return null;
13088
13093
  return parsed;
13089
13094
  }
13095
+ function resolveOpenCodeCommandDirectories() {
13096
+ return [join(normalizeOptionalText$49(process.env.HOME) ?? homedir(), ".opencode", "bin")];
13097
+ }
13090
13098
  function normalizeOptionalText$49(value) {
13091
13099
  const normalized = String(value ?? "").trim();
13092
13100
  return normalized.length > 0 ? normalized : null;
@@ -32811,9 +32819,6 @@ function resolveLocalRegistryAgentIdFromAgentControllerRef(input) {
32811
32819
  }
32812
32820
  //#endregion
32813
32821
  //#region src/agents/controller-command-paths.ts
32814
- function hasPathSeparator(value) {
32815
- return value.includes("/") || value.includes("\\");
32816
- }
32817
32822
  function normalizeControllerCommandPath(commandPath) {
32818
32823
  return commandPath.replaceAll("\\", "/").toLowerCase();
32819
32824
  }
@@ -32842,7 +32847,11 @@ function isCursorNativeCommandPath(commandPath) {
32842
32847
  }
32843
32848
  function isGrokBuildNativeCommandPath(commandPath) {
32844
32849
  const normalized = normalizeControllerCommandPath(commandPath);
32845
- return normalized.endsWith("/.grok/bin/grok") || normalized.endsWith("/.grok/bin/grok.exe");
32850
+ return normalized.endsWith("/.grok/bin/grok") || normalized.endsWith("/.grok/bin/grok.exe") || normalized.endsWith("/.local/bin/grok") || normalized.endsWith("/.local/bin/grok.exe") || normalized.includes("/.grok/downloads/");
32851
+ }
32852
+ function isOpenCodeNativeCommandPath(commandPath) {
32853
+ const normalized = normalizeControllerCommandPath(commandPath);
32854
+ return normalized.includes("/.opencode/bin/") && (normalized.endsWith("/opencode") || normalized.endsWith("/opencode.exe"));
32846
32855
  }
32847
32856
  //#endregion
32848
32857
  //#region src/agents/builtin-agent-controller-definitions.ts
@@ -32880,8 +32889,11 @@ const BUILTIN_AGENT_CONTROLLER_DEFINITIONS = [
32880
32889
  name: "claude-code"
32881
32890
  },
32882
32891
  npmPackageName: "@anthropic-ai/claude-code",
32883
- officialUpdateCommand: "claude update",
32884
- officialUpdatePath: isClaudeNativeCommandPath
32892
+ officialChannels: [{
32893
+ latest: { kind: "npm" },
32894
+ matchesPath: isClaudeNativeCommandPath,
32895
+ updateCommand: "claude update"
32896
+ }]
32885
32897
  }
32886
32898
  },
32887
32899
  {
@@ -32908,8 +32920,7 @@ const BUILTIN_AGENT_CONTROLLER_DEFINITIONS = [
32908
32920
  name: "codex"
32909
32921
  },
32910
32922
  hostApplicationPath: isCodexHostApplicationCommandPath,
32911
- npmPackageName: "@openai/codex",
32912
- officialUpdatePath: () => false
32923
+ npmPackageName: "@openai/codex"
32913
32924
  }
32914
32925
  },
32915
32926
  {
@@ -32947,8 +32958,11 @@ const BUILTIN_AGENT_CONTROLLER_DEFINITIONS = [
32947
32958
  kind: "cask",
32948
32959
  name: "cursor-cli"
32949
32960
  },
32950
- officialUpdateCommand: "cursor-agent update",
32951
- officialUpdatePath: isCursorNativeCommandPath
32961
+ officialChannels: [{
32962
+ latest: { kind: "homebrew" },
32963
+ matchesPath: isCursorNativeCommandPath,
32964
+ updateCommand: "cursor-agent update"
32965
+ }]
32952
32966
  }
32953
32967
  },
32954
32968
  {
@@ -32969,10 +32983,14 @@ const BUILTIN_AGENT_CONTROLLER_DEFINITIONS = [
32969
32983
  },
32970
32984
  nativeInterface: "acp",
32971
32985
  usageLimitSupport: "native",
32972
- versionMaintenance: {
32973
- officialUpdateCommand: "grok update",
32974
- officialUpdatePath: isGrokBuildNativeCommandPath
32975
- }
32986
+ versionMaintenance: { officialChannels: [{
32987
+ latest: {
32988
+ kind: "http-text",
32989
+ url: "https://x.ai/cli/stable"
32990
+ },
32991
+ matchesPath: isGrokBuildNativeCommandPath,
32992
+ updateCommand: "grok update"
32993
+ }] }
32976
32994
  },
32977
32995
  {
32978
32996
  adapterId: "opencode",
@@ -32998,8 +33016,14 @@ const BUILTIN_AGENT_CONTROLLER_DEFINITIONS = [
32998
33016
  name: "opencode"
32999
33017
  },
33000
33018
  npmPackageName: "opencode-ai",
33001
- officialUpdateCommand: "opencode upgrade",
33002
- officialUpdatePath: () => true
33019
+ officialChannels: [{
33020
+ latest: {
33021
+ kind: "github-release",
33022
+ repository: "anomalyco/opencode"
33023
+ },
33024
+ matchesPath: isOpenCodeNativeCommandPath,
33025
+ updateCommand: "opencode upgrade"
33026
+ }]
33003
33027
  }
33004
33028
  }
33005
33029
  ];
@@ -34252,7 +34276,7 @@ var registry_default = {
34252
34276
  //#region ../../release/vendor-models.json
34253
34277
  var vendor_models_default = {
34254
34278
  schemaVersion: 1,
34255
- updatedAt: "2026-08-23T09:35:00.000Z",
34279
+ updatedAt: "2026-08-27T00:00:00.000Z",
34256
34280
  agentControllers: {
34257
34281
  "codex": {
34258
34282
  "defaultModelId": "gpt-5.5",
@@ -34686,65 +34710,142 @@ var vendor_models_default = {
34686
34710
  ]
34687
34711
  },
34688
34712
  "opencode": {
34689
- "defaultModelId": "opencode/north-mini-code-free",
34713
+ "defaultModelId": "opencode/mimo-v2.5-free",
34690
34714
  "models": [
34691
34715
  {
34692
- "id": "opencode/x-preview-f-free",
34693
- "displayName": "OpenCode Ox Alpha Free",
34716
+ "id": "opencode/big-pickle",
34717
+ "displayName": "OpenCode Big Pickle",
34718
+ "unavailable": false,
34719
+ "supportedReasoningLevels": [],
34720
+ "minCliVersion": null
34721
+ },
34722
+ {
34723
+ "id": "opencode/hy3-free",
34724
+ "displayName": "OpenCode Hy3 Free",
34725
+ "unavailable": false,
34726
+ "supportedReasoningLevels": [
34727
+ "low",
34728
+ "medium",
34729
+ "high"
34730
+ ],
34731
+ "minCliVersion": null
34732
+ },
34733
+ {
34734
+ "id": "opencode/mimo-v2.5-free",
34735
+ "displayName": "OpenCode MiMo V2.5 Free",
34736
+ "unavailable": false,
34737
+ "supportedReasoningLevels": [],
34738
+ "minCliVersion": null
34739
+ },
34740
+ {
34741
+ "id": "opencode/muse-spark-1.2-contributor-free",
34742
+ "displayName": "OpenCode Muse Spark 1.2 Free",
34694
34743
  "unavailable": false,
34695
34744
  "supportedReasoningLevels": [
34745
+ "minimal",
34696
34746
  "low",
34747
+ "medium",
34697
34748
  "high",
34749
+ "xhigh"
34750
+ ],
34751
+ "minCliVersion": null
34752
+ },
34753
+ {
34754
+ "id": "opencode/nemotron-3-ultra-free",
34755
+ "displayName": "OpenCode Nemotron 3 Ultra Free",
34756
+ "unavailable": false,
34757
+ "supportedReasoningLevels": [],
34758
+ "minCliVersion": null
34759
+ },
34760
+ {
34761
+ "id": "opencode/nemotron-3.5-lightning-free",
34762
+ "displayName": "OpenCode Nemotron 3.5 Lightning Free",
34763
+ "unavailable": false,
34764
+ "supportedReasoningLevels": [],
34765
+ "minCliVersion": null
34766
+ },
34767
+ {
34768
+ "id": "openai/gpt-5.6-luna",
34769
+ "displayName": "GPT-5.6 Luna",
34770
+ "unavailable": false,
34771
+ "supportedReasoningLevels": [
34772
+ "none",
34773
+ "low",
34774
+ "medium",
34775
+ "high",
34776
+ "xhigh",
34698
34777
  "max"
34699
34778
  ],
34700
34779
  "minCliVersion": null
34701
34780
  },
34702
34781
  {
34703
- "id": "opencode/north-mini-code-free",
34704
- "displayName": "OpenCode North Mini Code Free",
34782
+ "id": "openai/gpt-5.6-luna-fast",
34783
+ "displayName": "GPT-5.6 Luna Fast",
34705
34784
  "unavailable": false,
34706
- "supportedReasoningLevels": ["none", "high"],
34785
+ "supportedReasoningLevels": [
34786
+ "none",
34787
+ "low",
34788
+ "medium",
34789
+ "high",
34790
+ "xhigh",
34791
+ "max"
34792
+ ],
34707
34793
  "minCliVersion": null
34708
34794
  },
34709
34795
  {
34710
- "id": "opencode/deepseek-v4-flash-free",
34711
- "displayName": "OpenCode DeepSeek V4 Flash Free",
34796
+ "id": "openai/gpt-5.6-sol",
34797
+ "displayName": "GPT-5.6 Sol",
34712
34798
  "unavailable": false,
34713
34799
  "supportedReasoningLevels": [
34800
+ "none",
34714
34801
  "low",
34715
34802
  "medium",
34716
34803
  "high",
34804
+ "xhigh",
34717
34805
  "max"
34718
34806
  ],
34719
34807
  "minCliVersion": null
34720
34808
  },
34721
34809
  {
34722
- "id": "opencode/mimo-v2.5-free",
34723
- "displayName": "OpenCode Mimo V2.5 Free",
34810
+ "id": "openai/gpt-5.6-sol-fast",
34811
+ "displayName": "GPT-5.6 Sol Fast",
34724
34812
  "unavailable": false,
34725
34813
  "supportedReasoningLevels": [
34814
+ "none",
34726
34815
  "low",
34727
34816
  "medium",
34728
- "high"
34817
+ "high",
34818
+ "xhigh",
34819
+ "max"
34729
34820
  ],
34730
34821
  "minCliVersion": null
34731
34822
  },
34732
34823
  {
34733
- "id": "opencode/nemotron-3-ultra-free",
34734
- "displayName": "OpenCode Nemotron 3 Ultra Free",
34824
+ "id": "openai/gpt-5.6-terra",
34825
+ "displayName": "GPT-5.6 Terra",
34735
34826
  "unavailable": false,
34736
34827
  "supportedReasoningLevels": [
34828
+ "none",
34737
34829
  "low",
34738
34830
  "medium",
34739
- "high"
34831
+ "high",
34832
+ "xhigh",
34833
+ "max"
34740
34834
  ],
34741
34835
  "minCliVersion": null
34742
34836
  },
34743
34837
  {
34744
- "id": "opencode/big-pickle",
34745
- "displayName": "OpenCode Big Pickle",
34838
+ "id": "openai/gpt-5.6-terra-fast",
34839
+ "displayName": "GPT-5.6 Terra Fast",
34746
34840
  "unavailable": false,
34747
- "supportedReasoningLevels": [],
34841
+ "supportedReasoningLevels": [
34842
+ "none",
34843
+ "low",
34844
+ "medium",
34845
+ "high",
34846
+ "xhigh",
34847
+ "max"
34848
+ ],
34748
34849
  "minCliVersion": null
34749
34850
  },
34750
34851
  {
@@ -34837,20 +34938,237 @@ var vendor_models_default = {
34837
34938
  "xhigh"
34838
34939
  ],
34839
34940
  "minCliVersion": null
34941
+ },
34942
+ {
34943
+ "id": "opencode-go/deepseek-v4-flash",
34944
+ "displayName": "DeepSeek V4 Flash",
34945
+ "unavailable": false,
34946
+ "supportedReasoningLevels": [
34947
+ "low",
34948
+ "high",
34949
+ "max"
34950
+ ],
34951
+ "minCliVersion": null
34952
+ },
34953
+ {
34954
+ "id": "opencode-go/deepseek-v4-flash-vision-exp",
34955
+ "displayName": "DeepSeek V4 Flash Vision",
34956
+ "unavailable": false,
34957
+ "supportedReasoningLevels": [
34958
+ "low",
34959
+ "high",
34960
+ "max"
34961
+ ],
34962
+ "minCliVersion": null
34963
+ },
34964
+ {
34965
+ "id": "opencode-go/deepseek-v4-pro",
34966
+ "displayName": "DeepSeek V4 Pro",
34967
+ "unavailable": false,
34968
+ "supportedReasoningLevels": ["high", "max"],
34969
+ "minCliVersion": null
34970
+ },
34971
+ {
34972
+ "id": "opencode-go/glm-5.1",
34973
+ "displayName": "GLM 5.1",
34974
+ "unavailable": false,
34975
+ "supportedReasoningLevels": [],
34976
+ "minCliVersion": null
34977
+ },
34978
+ {
34979
+ "id": "opencode-go/glm-5.2",
34980
+ "displayName": "GLM 5.2",
34981
+ "unavailable": false,
34982
+ "supportedReasoningLevels": ["high", "max"],
34983
+ "minCliVersion": null
34984
+ },
34985
+ {
34986
+ "id": "opencode-go/glm-5.3",
34987
+ "displayName": "GLM 5.3",
34988
+ "unavailable": false,
34989
+ "supportedReasoningLevels": [
34990
+ "low",
34991
+ "high",
34992
+ "max"
34993
+ ],
34994
+ "minCliVersion": null
34995
+ },
34996
+ {
34997
+ "id": "opencode-go/glm-5.3-flash",
34998
+ "displayName": "GLM 5.3 Flash",
34999
+ "unavailable": false,
35000
+ "supportedReasoningLevels": [
35001
+ "low",
35002
+ "high",
35003
+ "max"
35004
+ ],
35005
+ "minCliVersion": null
35006
+ },
35007
+ {
35008
+ "id": "opencode-go/gpt-5.6-luna",
35009
+ "displayName": "GPT-5.6 Luna",
35010
+ "unavailable": false,
35011
+ "supportedReasoningLevels": [
35012
+ "none",
35013
+ "low",
35014
+ "medium",
35015
+ "high",
35016
+ "xhigh",
35017
+ "max"
35018
+ ],
35019
+ "minCliVersion": null
35020
+ },
35021
+ {
35022
+ "id": "opencode-go/grok-4.6",
35023
+ "displayName": "Grok 4.6",
35024
+ "unavailable": false,
35025
+ "supportedReasoningLevels": [
35026
+ "low",
35027
+ "medium",
35028
+ "high",
35029
+ "xhigh"
35030
+ ],
35031
+ "minCliVersion": null
35032
+ },
35033
+ {
35034
+ "id": "opencode-go/hy3",
35035
+ "displayName": "Hy3",
35036
+ "unavailable": false,
35037
+ "supportedReasoningLevels": [
35038
+ "none",
35039
+ "low",
35040
+ "high"
35041
+ ],
35042
+ "minCliVersion": null
35043
+ },
35044
+ {
35045
+ "id": "opencode-go/kimi-k2.6",
35046
+ "displayName": "Kimi K2.6",
35047
+ "unavailable": false,
35048
+ "supportedReasoningLevels": [],
35049
+ "minCliVersion": null
35050
+ },
35051
+ {
35052
+ "id": "opencode-go/kimi-k2.7-code",
35053
+ "displayName": "Kimi K2.7 Code",
35054
+ "unavailable": false,
35055
+ "supportedReasoningLevels": [],
35056
+ "minCliVersion": null
35057
+ },
35058
+ {
35059
+ "id": "opencode-go/kimi-k3",
35060
+ "displayName": "Kimi K3",
35061
+ "unavailable": false,
35062
+ "supportedReasoningLevels": ["max"],
35063
+ "minCliVersion": null
35064
+ },
35065
+ {
35066
+ "id": "opencode-go/longcat-2.0",
35067
+ "displayName": "LongCat-2.0",
35068
+ "unavailable": false,
35069
+ "supportedReasoningLevels": [
35070
+ "low",
35071
+ "medium",
35072
+ "high"
35073
+ ],
35074
+ "minCliVersion": null
35075
+ },
35076
+ {
35077
+ "id": "opencode-go/mimo-v2.5",
35078
+ "displayName": "MiMo V2.5",
35079
+ "unavailable": false,
35080
+ "supportedReasoningLevels": [],
35081
+ "minCliVersion": null
35082
+ },
35083
+ {
35084
+ "id": "opencode-go/mimo-v2.5-pro",
35085
+ "displayName": "MiMo V2.5 Pro",
35086
+ "unavailable": false,
35087
+ "supportedReasoningLevels": [],
35088
+ "minCliVersion": null
35089
+ },
35090
+ {
35091
+ "id": "opencode-go/minimax-m2.7",
35092
+ "displayName": "MiniMax M2.7",
35093
+ "unavailable": false,
35094
+ "supportedReasoningLevels": [],
35095
+ "minCliVersion": null
35096
+ },
35097
+ {
35098
+ "id": "opencode-go/minimax-m3",
35099
+ "displayName": "MiniMax M3",
35100
+ "unavailable": false,
35101
+ "supportedReasoningLevels": ["none", "thinking"],
35102
+ "minCliVersion": null
35103
+ },
35104
+ {
35105
+ "id": "opencode-go/muse-spark-1.2-contributor",
35106
+ "displayName": "Muse Spark 1.2 Contributor",
35107
+ "unavailable": false,
35108
+ "supportedReasoningLevels": [
35109
+ "minimal",
35110
+ "low",
35111
+ "medium",
35112
+ "high",
35113
+ "xhigh"
35114
+ ],
35115
+ "minCliVersion": null
35116
+ },
35117
+ {
35118
+ "id": "opencode-go/qwen3.6-plus",
35119
+ "displayName": "Qwen3.6 Plus",
35120
+ "unavailable": false,
35121
+ "supportedReasoningLevels": [],
35122
+ "minCliVersion": null
35123
+ },
35124
+ {
35125
+ "id": "opencode-go/qwen3.7-max",
35126
+ "displayName": "Qwen3.7 Max",
35127
+ "unavailable": false,
35128
+ "supportedReasoningLevels": [],
35129
+ "minCliVersion": null
35130
+ },
35131
+ {
35132
+ "id": "opencode-go/qwen3.7-plus",
35133
+ "displayName": "Qwen3.7 Plus",
35134
+ "unavailable": false,
35135
+ "supportedReasoningLevels": [],
35136
+ "minCliVersion": null
35137
+ },
35138
+ {
35139
+ "id": "opencode-go/qwen3.8-max",
35140
+ "displayName": "Qwen3.8 Max",
35141
+ "unavailable": false,
35142
+ "supportedReasoningLevels": [],
35143
+ "minCliVersion": null
34840
35144
  }
34841
35145
  ]
34842
35146
  },
34843
35147
  "center-agent": {
34844
- "defaultModelId": "x-ai/grok-4.6",
35148
+ "defaultModelId": "z-ai/glm-5.3-flash",
34845
35149
  "hostedRuntimePolicy": {
34846
35150
  "automaticModelFallback": false,
34847
35151
  "imageUnderstandingModelId": "x-ai/grok-4.6"
34848
35152
  },
34849
35153
  "models": [
35154
+ {
35155
+ "id": "z-ai/glm-5.3-flash",
35156
+ "displayName": "GLM 5.3 Flash",
35157
+ "badgeLabel": "New",
35158
+ "hostedRuntime": {
35159
+ "provider": "openrouter",
35160
+ "inputModalities": ["text", "image"],
35161
+ "contextWindow": 1048576,
35162
+ "maxOutputTokens": 16384,
35163
+ "reasoningLevel": "high"
35164
+ },
35165
+ "unavailable": false,
35166
+ "supportedReasoningLevels": ["high"],
35167
+ "minCliVersion": null
35168
+ },
34850
35169
  {
34851
35170
  "id": "x-ai/grok-4.6",
34852
35171
  "displayName": "Grok 4.6",
34853
- "badgeLabel": "New",
34854
35172
  "hostedRuntime": {
34855
35173
  "provider": "openrouter",
34856
35174
  "inputModalities": ["text", "image"],
@@ -51907,6 +52225,384 @@ function pruneSpaceCacheDeletionNoticeState(state, nowTs) {
51907
52225
  };
51908
52226
  }
51909
52227
  //#endregion
52228
+ //#region src/agents/controller-version-channel.ts
52229
+ const LATEST_VERSION_TIMEOUT_MS = 4e3;
52230
+ const LATEST_VERSION_CACHE_TTL_MS = 3600 * 1e3;
52231
+ const FAILED_LATEST_VERSION_CACHE_TTL_MS = 300 * 1e3;
52232
+ const HOMEBREW_CELLAR_RE = /^(.*)\/[Cc]ellar\/([^/]+)\/([^/]+)\//u;
52233
+ const HOMEBREW_CASKROOM_RE = /^(.*)\/[Cc]askroom\/([^/]+)\/([^/]+)\//u;
52234
+ const HOMEBREW_FORMULA_VERSION_RE = /^\s*version\s+"([^"]+)"/mu;
52235
+ const HOMEBREW_RELEASE_URL_VERSION_RE = /releases\/download\/v?([^/]+)(?:\/|$)/u;
52236
+ const GITHUB_TAG_PREFIX_RE = /^v/u;
52237
+ const PLAIN_VERSION_LINE_RE = /\r?\n/u;
52238
+ const OFFICIAL_HOMEBREW_TAPS = /* @__PURE__ */ new Set([
52239
+ "homebrew/core",
52240
+ "homebrew/cask",
52241
+ "homebrew/homebrew-core",
52242
+ "homebrew/homebrew-cask"
52243
+ ]);
52244
+ const OPENMELD_VERSION_LOOKUP_USER_AGENT = "OpenMeld";
52245
+ const latestControllerVersionCache = /* @__PURE__ */ new Map();
52246
+ async function resolveControllerVersionChannel(input) {
52247
+ const officialChannel = findOfficialChannel(input.commandPath, input.commandPaths, input.definition.officialChannels);
52248
+ if (officialChannel) {
52249
+ const latest = resolveDeclaredLatestLookup(officialChannel.latest, input.definition);
52250
+ if (!latest) return null;
52251
+ return {
52252
+ cacheKey: buildLatestCacheKey(latest),
52253
+ latest,
52254
+ updateCommand: officialChannel.updateCommand
52255
+ };
52256
+ }
52257
+ if (isPackageManagerCommandPath(input.commandPaths)) {
52258
+ if (input.definition.npmPackageName) return {
52259
+ cacheKey: `npm:${input.definition.npmPackageName}`,
52260
+ latest: {
52261
+ kind: "npm",
52262
+ packageName: input.definition.npmPackageName
52263
+ },
52264
+ updateCommand: resolvePackageManagerUpdateCommand({
52265
+ commandPaths: input.commandPaths,
52266
+ packageName: input.definition.npmPackageName
52267
+ })
52268
+ };
52269
+ return null;
52270
+ }
52271
+ if (input.definition.homebrewPackage && input.commandPaths.some(isHomebrewCommandPath)) {
52272
+ const homebrewInstall = await resolveHomebrewInstallIdentity({
52273
+ commandPaths: input.commandPaths,
52274
+ declaredPackage: input.definition.homebrewPackage
52275
+ });
52276
+ if (!homebrewInstall) return null;
52277
+ const latest = resolveHomebrewLatestLookup(homebrewInstall);
52278
+ return {
52279
+ cacheKey: buildLatestCacheKey(latest),
52280
+ latest,
52281
+ updateCommand: resolveHomebrewUpdateCommand(homebrewInstall)
52282
+ };
52283
+ }
52284
+ if (input.definition.npmPackageName) return {
52285
+ cacheKey: `npm:${input.definition.npmPackageName}`,
52286
+ latest: {
52287
+ kind: "npm",
52288
+ packageName: input.definition.npmPackageName
52289
+ },
52290
+ updateCommand: `npm install -g ${input.definition.npmPackageName}@latest`
52291
+ };
52292
+ return null;
52293
+ }
52294
+ async function fetchLatestControllerVersion(channel) {
52295
+ const nowMs = Date.now();
52296
+ const cached = latestControllerVersionCache.get(channel.cacheKey);
52297
+ if (cached && cached.expiresAtMs > nowMs) return {
52298
+ failureDiagnostics: [],
52299
+ version: cached.version
52300
+ };
52301
+ const lookupResult = await fetchLatestForLookup(channel.latest);
52302
+ latestControllerVersionCache.set(channel.cacheKey, {
52303
+ expiresAtMs: nowMs + (lookupResult.version ? LATEST_VERSION_CACHE_TTL_MS : FAILED_LATEST_VERSION_CACHE_TTL_MS),
52304
+ version: lookupResult.version
52305
+ });
52306
+ return lookupResult;
52307
+ }
52308
+ function buildHomebrewFormulaeApiUrl(input) {
52309
+ return `https://formulae.brew.sh/api/${input.kind}/${encodeURIComponent(input.name)}.json`;
52310
+ }
52311
+ function buildHomebrewTapFormulaUrls(input) {
52312
+ const repository = resolveHomebrewTapGitHubRepository(input.tap);
52313
+ if (!repository) return [];
52314
+ const base = `https://raw.githubusercontent.com/${repository.owner}/${repository.repo}/HEAD`;
52315
+ return [`${base}/${input.name}.rb`, `${base}/Formula/${input.name}.rb`];
52316
+ }
52317
+ function parseHomebrewFormulaVersion(source) {
52318
+ const declaredVersion = source.match(HOMEBREW_FORMULA_VERSION_RE)?.[1];
52319
+ if (declaredVersion) return declaredVersion.trim();
52320
+ const releaseVersion = source.match(HOMEBREW_RELEASE_URL_VERSION_RE)?.[1];
52321
+ return releaseVersion ? releaseVersion.trim() : null;
52322
+ }
52323
+ function findOfficialChannel(commandPath, commandPaths, channels) {
52324
+ if (!channels) return null;
52325
+ for (const channel of channels) if (channel.matchesPath(commandPath)) return channel;
52326
+ for (const path of commandPaths) {
52327
+ if (path === commandPath) continue;
52328
+ for (const channel of channels) if (channel.matchesPath(path)) return channel;
52329
+ }
52330
+ return null;
52331
+ }
52332
+ function resolveDeclaredLatestLookup(latest, definition) {
52333
+ if (latest.kind === "npm") return definition.npmPackageName ? {
52334
+ kind: "npm",
52335
+ packageName: definition.npmPackageName
52336
+ } : null;
52337
+ if (latest.kind === "homebrew") return definition.homebrewPackage ? {
52338
+ kind: "homebrew-api",
52339
+ package: definition.homebrewPackage
52340
+ } : null;
52341
+ return latest;
52342
+ }
52343
+ function isPackageManagerCommandPath(commandPaths) {
52344
+ return commandPaths.some(isBunGlobalCommandPath) || commandPaths.some(isPnpmGlobalCommandPath) || commandPaths.some(isNpmGlobalCommandPath);
52345
+ }
52346
+ function resolvePackageManagerUpdateCommand(input) {
52347
+ if (input.commandPaths.some(isBunGlobalCommandPath)) return `bun i -g ${input.packageName}@latest`;
52348
+ if (input.commandPaths.some(isPnpmGlobalCommandPath)) return `pnpm add -g ${input.packageName}@latest`;
52349
+ return `npm install -g ${input.packageName}@latest`;
52350
+ }
52351
+ async function resolveHomebrewInstallIdentity(input) {
52352
+ for (const commandPath of input.commandPaths) {
52353
+ const cellarInstall = parseHomebrewPrefixInstall(commandPath, "formula");
52354
+ if (cellarInstall) {
52355
+ const tap = await readHomebrewReceiptTap(cellarInstall.installDir);
52356
+ return {
52357
+ kind: "formula",
52358
+ name: cellarInstall.name,
52359
+ tap
52360
+ };
52361
+ }
52362
+ const caskInstall = parseHomebrewPrefixInstall(commandPath, "cask");
52363
+ if (caskInstall) {
52364
+ const tap = await readHomebrewReceiptTap(caskInstall.installDir);
52365
+ return {
52366
+ kind: "cask",
52367
+ name: caskInstall.name,
52368
+ tap: tap ?? "homebrew/cask"
52369
+ };
52370
+ }
52371
+ }
52372
+ if (!input.commandPaths.some(isHomebrewCommandPath)) return null;
52373
+ return {
52374
+ kind: input.declaredPackage.kind,
52375
+ name: input.declaredPackage.name,
52376
+ tap: input.declaredPackage.kind === "cask" ? "homebrew/cask" : "homebrew/core"
52377
+ };
52378
+ }
52379
+ function parseHomebrewPrefixInstall(commandPath, kind) {
52380
+ const normalized = commandPath.replaceAll("\\", "/");
52381
+ const match = kind === "formula" ? HOMEBREW_CELLAR_RE.exec(normalized) : HOMEBREW_CASKROOM_RE.exec(normalized);
52382
+ const name = match?.[2];
52383
+ const matchedPrefix = match?.[0];
52384
+ if (!(name && matchedPrefix)) return null;
52385
+ return {
52386
+ installDir: normalized.slice(0, matchedPrefix.length - 1),
52387
+ name
52388
+ };
52389
+ }
52390
+ async function readHomebrewReceiptTap(installDir) {
52391
+ try {
52392
+ const receipt = JSON.parse(await readFile(`${installDir}/INSTALL_RECEIPT.json`, "utf8"));
52393
+ if (!receipt || typeof receipt !== "object") return null;
52394
+ const tap = receipt.source?.tap;
52395
+ return typeof tap === "string" && tap.trim().length > 0 ? tap.trim() : null;
52396
+ } catch {
52397
+ return null;
52398
+ }
52399
+ }
52400
+ function resolveHomebrewLatestLookup(install) {
52401
+ if (install.tap && isThirdPartyHomebrewTap(install.tap)) return {
52402
+ kind: "homebrew-tap-formula",
52403
+ name: install.name,
52404
+ tap: install.tap
52405
+ };
52406
+ return {
52407
+ kind: "homebrew-api",
52408
+ package: {
52409
+ kind: install.kind,
52410
+ name: install.name
52411
+ }
52412
+ };
52413
+ }
52414
+ function resolveHomebrewUpdateCommand(install) {
52415
+ const packageSpec = install.tap && isThirdPartyHomebrewTap(install.tap) ? `${install.tap}/${install.name}` : install.name;
52416
+ return install.kind === "cask" ? `brew upgrade --cask ${packageSpec}` : `brew upgrade ${packageSpec}`;
52417
+ }
52418
+ function isThirdPartyHomebrewTap(tap) {
52419
+ return !OFFICIAL_HOMEBREW_TAPS.has(tap);
52420
+ }
52421
+ function resolveHomebrewTapGitHubRepository(tap) {
52422
+ const [owner, name] = tap.split("/");
52423
+ if (!(owner && name)) return null;
52424
+ return {
52425
+ owner,
52426
+ repo: name.startsWith("homebrew-") ? name : `homebrew-${name}`
52427
+ };
52428
+ }
52429
+ function buildLatestCacheKey(latest) {
52430
+ switch (latest.kind) {
52431
+ case "github-release": return `github-release:${latest.repository}`;
52432
+ case "homebrew-api": return `brew-api:${latest.package.kind}:${latest.package.name}`;
52433
+ case "homebrew-tap-formula": return `brew-tap:${latest.tap}:${latest.name}`;
52434
+ case "http-json":
52435
+ case "http-text": return `${latest.kind}:${latest.url}`;
52436
+ case "npm": return `npm:${latest.packageName}`;
52437
+ default: throw new Error(`Unsupported latest lookup: ${JSON.stringify(latest)}`);
52438
+ }
52439
+ }
52440
+ function fetchLatestForLookup(latest) {
52441
+ switch (latest.kind) {
52442
+ case "github-release": return fetchLatestVersion({
52443
+ accept: "application/vnd.github+json",
52444
+ parse: parseGitHubReleaseTag,
52445
+ url: `https://api.github.com/repos/${latest.repository}/releases/latest`,
52446
+ userAgent: OPENMELD_VERSION_LOOKUP_USER_AGENT
52447
+ });
52448
+ case "homebrew-api": return fetchLatestVersion({
52449
+ accept: "application/json",
52450
+ parse: (body) => parseHomebrewApiVersion(body, latest.package.kind),
52451
+ url: buildHomebrewFormulaeApiUrl(latest.package)
52452
+ });
52453
+ case "homebrew-tap-formula": return fetchFirstSuccessfulLatestVersion(buildHomebrewTapFormulaUrls(latest).map((url) => ({
52454
+ accept: "text/plain",
52455
+ parse: parseHomebrewFormulaVersion,
52456
+ url
52457
+ })));
52458
+ case "http-json": return fetchLatestVersion({
52459
+ accept: "application/json",
52460
+ parse: parseJsonVersionField,
52461
+ url: latest.url
52462
+ });
52463
+ case "http-text": return fetchLatestVersion({
52464
+ accept: "text/plain",
52465
+ parse: parsePlainVersion,
52466
+ url: latest.url
52467
+ });
52468
+ case "npm": return fetchLatestVersion({
52469
+ accept: "application/json",
52470
+ parse: parseJsonVersionField,
52471
+ url: `https://registry.npmjs.org/${encodeURIComponent(latest.packageName)}/latest`
52472
+ });
52473
+ default: throw new Error(`Unsupported latest lookup: ${JSON.stringify(latest)}`);
52474
+ }
52475
+ }
52476
+ async function fetchFirstSuccessfulLatestVersion(lookups) {
52477
+ const failureDiagnostics = [];
52478
+ for (const lookup of lookups) {
52479
+ const lookupResult = await fetchLatestVersion(lookup);
52480
+ if (lookupResult.version) return {
52481
+ failureDiagnostics: [...failureDiagnostics, ...lookupResult.failureDiagnostics],
52482
+ version: lookupResult.version
52483
+ };
52484
+ failureDiagnostics.push(...lookupResult.failureDiagnostics);
52485
+ }
52486
+ return {
52487
+ failureDiagnostics,
52488
+ version: null
52489
+ };
52490
+ }
52491
+ async function fetchLatestVersion(input) {
52492
+ const failureDiagnostics = [];
52493
+ for (const attempt of [1, 2]) {
52494
+ const attemptResult = await fetchLatestVersionAttempt({
52495
+ ...input,
52496
+ attempt
52497
+ });
52498
+ if (attemptResult.ok) return {
52499
+ failureDiagnostics,
52500
+ version: attemptResult.version
52501
+ };
52502
+ failureDiagnostics.push(attemptResult.failureDiagnostic);
52503
+ }
52504
+ return {
52505
+ failureDiagnostics,
52506
+ version: null
52507
+ };
52508
+ }
52509
+ async function fetchLatestVersionAttempt(input) {
52510
+ const abortController = new AbortController();
52511
+ const timeout = setTimeout(() => {
52512
+ abortController.abort();
52513
+ }, LATEST_VERSION_TIMEOUT_MS);
52514
+ try {
52515
+ const response = await fetch(input.url, {
52516
+ headers: {
52517
+ accept: input.accept,
52518
+ ...input.userAgent ? { "user-agent": input.userAgent } : {}
52519
+ },
52520
+ signal: abortController.signal
52521
+ });
52522
+ if (!response.ok) return {
52523
+ failureDiagnostic: {
52524
+ attempt: input.attempt,
52525
+ errorMessage: null,
52526
+ errorName: null,
52527
+ reason: "http_error",
52528
+ statusCode: response.status,
52529
+ url: input.url
52530
+ },
52531
+ ok: false
52532
+ };
52533
+ const version = input.parse(await response.text());
52534
+ if (!version) return {
52535
+ failureDiagnostic: {
52536
+ attempt: input.attempt,
52537
+ errorMessage: null,
52538
+ errorName: null,
52539
+ reason: "invalid_response",
52540
+ statusCode: response.status,
52541
+ url: input.url
52542
+ },
52543
+ ok: false
52544
+ };
52545
+ return {
52546
+ ok: true,
52547
+ version
52548
+ };
52549
+ } catch (error) {
52550
+ const errorName = error instanceof Error ? error.name : null;
52551
+ return {
52552
+ failureDiagnostic: {
52553
+ attempt: input.attempt,
52554
+ errorMessage: error instanceof Error ? error.message : String(error),
52555
+ errorName,
52556
+ reason: errorName === "AbortError" ? "timeout" : "request_error",
52557
+ statusCode: null,
52558
+ url: input.url
52559
+ },
52560
+ ok: false
52561
+ };
52562
+ } finally {
52563
+ clearTimeout(timeout);
52564
+ }
52565
+ }
52566
+ function parseJsonVersionField(body) {
52567
+ try {
52568
+ const payload = JSON.parse(body);
52569
+ if (!payload || typeof payload !== "object") return null;
52570
+ const version = payload.version;
52571
+ return typeof version === "string" && version.trim().length > 0 ? version.trim() : null;
52572
+ } catch {
52573
+ return null;
52574
+ }
52575
+ }
52576
+ function parseGitHubReleaseTag(body) {
52577
+ try {
52578
+ const payload = JSON.parse(body);
52579
+ if (!payload || typeof payload !== "object") return null;
52580
+ const tagName = payload.tag_name;
52581
+ if (typeof tagName !== "string" || tagName.trim().length === 0) return null;
52582
+ return tagName.trim().replace(GITHUB_TAG_PREFIX_RE, "");
52583
+ } catch {
52584
+ return null;
52585
+ }
52586
+ }
52587
+ function parseHomebrewApiVersion(body, kind) {
52588
+ try {
52589
+ const payload = JSON.parse(body);
52590
+ if (!payload || typeof payload !== "object") return null;
52591
+ if (kind === "cask") {
52592
+ const version = payload.version;
52593
+ return typeof version === "string" && version.trim().length > 0 ? version.trim() : null;
52594
+ }
52595
+ const stable = payload.versions?.stable;
52596
+ return typeof stable === "string" && stable.trim().length > 0 ? stable.trim() : null;
52597
+ } catch {
52598
+ return null;
52599
+ }
52600
+ }
52601
+ function parsePlainVersion(body) {
52602
+ const version = body.split(PLAIN_VERSION_LINE_RE, 1)[0]?.trim() ?? "";
52603
+ return version.length > 0 ? version : null;
52604
+ }
52605
+ //#endregion
51910
52606
  //#region src/local-service/inventory/agent-controller-interface-keeper.ts
51911
52607
  const LAST_GOOD_REUSE_TTL_MS = 15 * 6e4;
51912
52608
  const AGENT_CONTROLLER_INTERFACE_REPROBE_DELAY_MS = 45e3;
@@ -52397,15 +53093,11 @@ function resolveLaunchContractCommandPath(launchContract) {
52397
53093
  //#region src/local-service/inventory/agent-controller-interface.ts
52398
53094
  const PROBE_TIMEOUT_MS = 8e3;
52399
53095
  const CODEX_AUX_INVENTORY_GRACE_MS = 2500;
52400
- const LATEST_VERSION_TIMEOUT_MS = 4e3;
52401
- const LATEST_VERSION_CACHE_TTL_MS = 3600 * 1e3;
52402
- const FAILED_LATEST_VERSION_CACHE_TTL_MS = 300 * 1e3;
52403
53096
  const PROBE_OUTPUT_LIMIT = 32e3;
52404
53097
  const CODEX_USER_AGENT_VERSION_RE = /\/([^\s]+)/u;
52405
53098
  const CLI_SEMVER_RE = /\b(\d+\.\d+\.\d+(?:[-+][^\s]+)?)\b/u;
52406
53099
  const SEMVER_CORE_RE = /^v?(\d+)\.(\d+)\.(\d+)/u;
52407
53100
  const WHITESPACE_RE = /\s+/u;
52408
- const latestControllerVersionCache = /* @__PURE__ */ new Map();
52409
53101
  const CONTROLLER_INTERFACE_SNAPSHOT_RESOLVERS = {
52410
53102
  "claude-code": resolveClaudeCodeInterfaceSnapshot,
52411
53103
  codex: resolveCodexInterfaceSnapshot,
@@ -52597,11 +53289,12 @@ async function resolveControllerVersionAdvisory(input) {
52597
53289
  const commandPath = resolveLaunchContractCommandPath(input.launchContract);
52598
53290
  const commandPaths = [commandPath, await realpath(commandPath).catch(() => null)].filter((value) => Boolean(value));
52599
53291
  if (definition.hostApplicationPath && commandPaths.some(definition.hostApplicationPath)) return;
52600
- const updateCommand = resolveControllerUpdateCommand({
53292
+ const channel = await resolveControllerVersionChannel({
52601
53293
  commandPath,
52602
53294
  commandPaths,
52603
53295
  definition
52604
53296
  });
53297
+ const updateCommand = channel?.updateCommand ?? null;
52605
53298
  if (!input.currentVersion) return {
52606
53299
  checkedAt: input.checkedAt,
52607
53300
  currentVersion: null,
@@ -52610,10 +53303,17 @@ async function resolveControllerVersionAdvisory(input) {
52610
53303
  status: "unknown",
52611
53304
  updateCommand
52612
53305
  };
52613
- const latestVersion = await resolveLatestControllerVersion(resolveControllerVersionBaseline({
52614
- commandPaths,
52615
- definition
52616
- }));
53306
+ if (!channel) return {
53307
+ checkedAt: input.checkedAt,
53308
+ currentVersion: input.currentVersion,
53309
+ latestVersion: null,
53310
+ message: "OpenMeld could not check the latest controller version.",
53311
+ status: "unknown",
53312
+ updateCommand
53313
+ };
53314
+ const lookupResult = await fetchLatestControllerVersion(channel);
53315
+ recordLatestVersionFailureDiagnostics(lookupResult);
53316
+ const latestVersion = lookupResult.version;
52617
53317
  if (!latestVersion) return {
52618
53318
  checkedAt: input.checkedAt,
52619
53319
  currentVersion: input.currentVersion,
@@ -52648,54 +53348,6 @@ async function resolveControllerVersionAdvisory(input) {
52648
53348
  updateCommand
52649
53349
  };
52650
53350
  }
52651
- function resolveControllerUpdateCommand(input) {
52652
- if (input.definition.officialUpdateCommand && input.commandPaths.some(input.definition.officialUpdatePath)) return input.definition.officialUpdateCommand;
52653
- if (input.commandPaths.some(isBunGlobalCommandPath)) return input.definition.npmPackageName ? `bun i -g ${input.definition.npmPackageName}@latest` : null;
52654
- if (input.commandPaths.some(isPnpmGlobalCommandPath)) return input.definition.npmPackageName ? `pnpm add -g ${input.definition.npmPackageName}@latest` : null;
52655
- if (input.commandPaths.some(isNpmGlobalCommandPath)) return input.definition.npmPackageName ? `npm install -g ${input.definition.npmPackageName}@latest` : null;
52656
- if (input.definition.homebrewPackage && input.commandPaths.some(isHomebrewCommandPath)) return `brew upgrade${input.definition.homebrewPackage.kind === "cask" ? " --cask" : ""} ${input.definition.homebrewPackage.name}`;
52657
- if (!hasPathSeparator(input.commandPath)) return input.definition.npmPackageName ? `npm install -g ${input.definition.npmPackageName}@latest` : null;
52658
- return null;
52659
- }
52660
- function resolveControllerVersionBaseline(input) {
52661
- if (input.commandPaths.some(isBunGlobalCommandPath) || input.commandPaths.some(isPnpmGlobalCommandPath) || input.commandPaths.some(isNpmGlobalCommandPath)) {
52662
- if (input.definition.npmPackageName) return {
52663
- kind: "npm",
52664
- packageName: input.definition.npmPackageName
52665
- };
52666
- if (input.definition.homebrewPackage) return {
52667
- kind: "homebrew",
52668
- package: input.definition.homebrewPackage
52669
- };
52670
- return null;
52671
- }
52672
- if (input.commandPaths.some(isHomebrewCommandPath)) return input.definition.homebrewPackage ? {
52673
- kind: "homebrew",
52674
- package: input.definition.homebrewPackage
52675
- } : null;
52676
- if (input.definition.npmPackageName) return {
52677
- kind: "npm",
52678
- packageName: input.definition.npmPackageName
52679
- };
52680
- return input.definition.homebrewPackage ? {
52681
- kind: "homebrew",
52682
- package: input.definition.homebrewPackage
52683
- } : null;
52684
- }
52685
- async function resolveLatestControllerVersion(baseline) {
52686
- if (!baseline) return null;
52687
- const cacheKey = baseline.kind === "npm" ? `npm:${baseline.packageName}` : `brew-${baseline.package.kind}:${baseline.package.name}`;
52688
- const nowMs = Date.now();
52689
- const cached = latestControllerVersionCache.get(cacheKey);
52690
- if (cached && cached.expiresAtMs > nowMs) return cached.version;
52691
- const lookupResult = baseline.kind === "npm" ? await fetchLatestNpmVersion(baseline.packageName) : await fetchLatestHomebrewVersion(baseline.package);
52692
- recordLatestVersionFailureDiagnostics(lookupResult);
52693
- latestControllerVersionCache.set(cacheKey, {
52694
- expiresAtMs: nowMs + (lookupResult.version ? LATEST_VERSION_CACHE_TTL_MS : FAILED_LATEST_VERSION_CACHE_TTL_MS),
52695
- version: lookupResult.version
52696
- });
52697
- return lookupResult.version;
52698
- }
52699
53351
  function recordLatestVersionFailureDiagnostics(lookupResult) {
52700
53352
  for (const diagnostic of lookupResult.failureDiagnostics) warnDaemonEvent("[openmeld.agent_controller.latest_version_lookup_attempt_failed]", {
52701
53353
  attempt: diagnostic.attempt,
@@ -52707,91 +53359,6 @@ function recordLatestVersionFailureDiagnostics(lookupResult) {
52707
53359
  url: diagnostic.url
52708
53360
  });
52709
53361
  }
52710
- function fetchLatestHomebrewVersion(homebrewPackage) {
52711
- return fetchLatestVersion({
52712
- resolveVersion: (payload) => homebrewPackage.kind === "cask" ? normalizeOptionalText$15(payload?.version) : normalizeOptionalText$15(toRecord$1(payload?.versions)?.stable),
52713
- url: `https://formulae.brew.sh/api/${homebrewPackage.kind}/${encodeURIComponent(homebrewPackage.name)}.json`
52714
- });
52715
- }
52716
- function fetchLatestNpmVersion(npmPackageName) {
52717
- return fetchLatestVersion({
52718
- resolveVersion: (payload) => normalizeOptionalText$15(payload?.version),
52719
- url: `https://registry.npmjs.org/${encodeURIComponent(npmPackageName)}/latest`
52720
- });
52721
- }
52722
- async function fetchLatestVersion(input) {
52723
- const failureDiagnostics = [];
52724
- for (const attempt of [1, 2]) {
52725
- const attemptResult = await fetchLatestVersionAttempt({
52726
- ...input,
52727
- attempt
52728
- });
52729
- if (attemptResult.ok) return {
52730
- failureDiagnostics,
52731
- version: attemptResult.version
52732
- };
52733
- failureDiagnostics.push(attemptResult.failureDiagnostic);
52734
- }
52735
- return {
52736
- failureDiagnostics,
52737
- version: null
52738
- };
52739
- }
52740
- async function fetchLatestVersionAttempt(input) {
52741
- const abortController = new AbortController();
52742
- const timeout = setTimeout(() => {
52743
- abortController.abort();
52744
- }, LATEST_VERSION_TIMEOUT_MS);
52745
- try {
52746
- const response = await fetch(input.url, {
52747
- headers: { accept: "application/json" },
52748
- signal: abortController.signal
52749
- });
52750
- if (!response.ok) return {
52751
- failureDiagnostic: {
52752
- attempt: input.attempt,
52753
- errorMessage: null,
52754
- errorName: null,
52755
- reason: "http_error",
52756
- statusCode: response.status,
52757
- url: input.url
52758
- },
52759
- ok: false
52760
- };
52761
- const payload = toRecord$1(await response.json());
52762
- const version = input.resolveVersion(payload);
52763
- if (!version) return {
52764
- failureDiagnostic: {
52765
- attempt: input.attempt,
52766
- errorMessage: null,
52767
- errorName: null,
52768
- reason: "invalid_response",
52769
- statusCode: response.status,
52770
- url: input.url
52771
- },
52772
- ok: false
52773
- };
52774
- return {
52775
- ok: true,
52776
- version
52777
- };
52778
- } catch (error) {
52779
- const errorName = error instanceof Error ? error.name : null;
52780
- return {
52781
- failureDiagnostic: {
52782
- attempt: input.attempt,
52783
- errorMessage: error instanceof Error ? error.message : String(error),
52784
- errorName,
52785
- reason: errorName === "AbortError" ? "timeout" : "request_error",
52786
- statusCode: null,
52787
- url: input.url
52788
- },
52789
- ok: false
52790
- };
52791
- } finally {
52792
- clearTimeout(timeout);
52793
- }
52794
- }
52795
53362
  function compareSemverCore(left, right) {
52796
53363
  const leftParts = parseSemverCore(left);
52797
53364
  const rightParts = parseSemverCore(right);
@@ -108369,4 +108936,4 @@ function isHumanInteractiveSpaceRuntime(runtime) {
108369
108936
  //#endregion
108370
108937
  export { runAgentsRepair as $, installAgentActivityIntegrations as $a, readDaemonServiceJobCrashExitCode as $i, formatDaemonServiceMissingRecommendation as $n, resolveOpenClawLocalDiagnosticsValue as $r, readBundledOpenMeldCliSkillDocumentByPath as $t, assertFullSignalIdArgument as A, updateOpenMeldProfile as Aa, resolveNativeAgentControllerPermissionModeForController as Ai, upsertSpaceConfig as An, setDefaultProjectConnection as Ao, DualViewGuideError as Ar, shouldEmitAgentOverview as At, persistAgentTransportSelection as B, resolveAuthenticationGuidanceFromMessage as Ba, assessServerRequiredVersion as Bi, promptSearchMultiselect as Bn, outJsonLine as Bo, runPendingDaemonServiceUpdate as Br, parseJsonResponse$1 as Bt, toSpaceMetaUpsertInput as C, resolveOpenMeldProfileOrNull as Ca, getAgentControllerPermissionModeFieldLabel as Ci, submitRuntimeAgentControllerReport as Cn, removeProjectOutbox as Co, SPACE_ADD_MEMBERS_PROGRESS_HEARTBEAT_MS as Cr, runDaemonTeardownStrict as Ct, formatHumanReadTargetList as D, listOpenMeldProfiles as Da, resolveAgentExecutionStatus as Di, resolveLocalAgentControllerLaunchability as Dn, migrateProjectBindingStore as Do, registerAuthLoginRequestOptions as Dr, reconcileCliVersionView as Dt, buildHumanReplyContextSummary as E, deleteOpenMeldProfile as Ea, resolveAgentControllerPermissionModeForController as Ei, resolveLocalAgentControllerBlockerReasonCodes as En, listProjectConnectionsWithStatus as Eo, registerDaemonControlTargetOptions as Er, buildProfileWorkspaceRows as Et, emitSpaceAgentOverview as F, buildAgentAuthenticationGuide as Fa, buildDaemonServiceTargetSpec as Fi, buildSignalMessageReadProjection as Fn, renderInfoCard as Fo, SPACE_CONTRACT_ALLOWED_ACTION_ORDER as Fr, fetchSpaceMeta as Ft, runAgentsCustomList as G, LocalDaemonControlPlaneClientError as Ga, resetCurrentCommandCheckState as Gi, isCliUpdateCheckApplicable as Gn, cliJsonSkillsLoadEnvelopeSchema as Go, resolveServiceReadinessFromServiceStatus as Gr, runDaemonStartDecisionPrompt as Gt, runAgents as H, setProfileDefaultView as Ha, finishCurrentCommandCheckScope as Hi, isReturnKeypress as Hn, cliBinaryDeltaPatchSchema as Ho, ensureDaemonRuntimePaths as Hr, writeInstalledLocalComponentsSnapshot as Ht, emitSpaceCliAgentOverview as I, buildHumanAuthenticationCard as Ia, resolveDaemonServiceAlignmentDecision as Ii, buildSpaceRoundReadProjection as In, renderTextInfoCard as Io, areAllowedActionsEquivalent as Ir, updateSpaceMeta as It, runAgentsDetect as J, registerAgentActivityRoute as Ja, resolveVersionChangeDirection as Ji, readDispatchSpaceActionContextFromEnv as Jn, organizationJoinLinkErrorResponseSchema as Jo, formatAgentReplyReadinessLabel as Jr, runSkillsEnsure as Jt, runAgentsCustomRemove as K, requestLocalAgentActivitySync as Ka, startCurrentCommandCheckScope as Ki, assertDispatchOwnedRuntimePublicWriteAllowed as Kn, cliJsonSkillsShowEnvelopeSchema as Ko, resolveDaemonServiceFreshnessWarning as Kr, collectSkillsReadinessSnapshot as Kt, prepareLocalAgentReadiness as L, createAuthenticationError as La, classifyDaemonServiceRunStartability as Li, buildUpdatesReplyWorkflowProjection as Ln, sanitizeTerminalDisplayText as Lo, buildAgentFacingPublicationModeGuideLines as Lr, readGatewayJsonResponse as Lt, prepareAuthenticatedSpaceCommandContext as M, clearSelectedOpenMeldProfileId as Ma, buildDaemonRouteObservationPresentation as Mi, buildDispatchResultMessageReadProjection as Mn, canonicalizeLocalProjectPath as Mo, buildDualViewGuideMessage as Mr, readDaemonStartFailureLogTailLines as Mt, resolveOpenMeldProfileForSpaceCommand as N, getSelectedOpenMeldProfileId as Na, buildOnboardingPlan as Ni, buildDispatchResultReplyWorkflowProjection as Nn, enqueueControllerTaskLifecycleEventWhileLocked as No, formatAgentOverviewPayload as Nr, fetchSpaceUpdates as Nt, parseEnvelope as O, primeOpenMeldProfilesSessionCache as Oa, resolveAgentProfileEditCapabilities as Oi, resolveLocalAgentControllerReportDecision as On, removeProjectConnection as Oo, registerBuiltinAgentSelectionOptions as Or, emitDaemonAgentOverview as Ot, resolveSpaceAccessLabel as P, setSelectedOpenMeldProfileId as Pa, getSetupFlowCopy as Pi, buildSignalIndex as Pn, readControllerTaskLifecycleOutboxHealth as Po, OPENMELD_AGENT_MENTAL_MODEL_LINES as Pr, createCliSpaceApi as Pt, runAgentsManage as Q, defaultManagedIntegrationPaths as Qa, isDaemonServiceJobNeverSpawned as Qi, formatDaemonServiceDowngradeBlockedRecommendation as Qn, resolveGatewayChainReadiness as Qr, ensureLocalSkills as Qt, buildReplyReadinessGuidance as R, resolveAuthenticationGuidance as Ra, classifyDaemonServiceWakeability as Ri, createSpaceMemberIdentityIndex as Rn, emitCliJsonEnvelope as Ro, canonicalizeAllowedActions as Rr, readGatewayTextResponse as Rt, loadSpaceSignalIndexOrNull as S, requireOpenMeldProfile as Sa, getAgentControllerPermissionModeDisplayMetadata as Si, submitProfileRuntimeAgentControllerReport as Sn, readAgentActivityOutboxHealth as So, registerSpaceMemberSelectionOptions as Sr, runDaemonStop as St, buildFormalSignalReadPayload as T, createOpenMeldHumanProfile as Ta, parseAgentControllerRef as Ti, collectLocalAgentControllerInventory as Tn, listProjectBindings as To, getCliVersionInfo as Tr, buildProfileWorkspacePresentation as Tt, runAgentsConfig as U, LocalProjectConnectionError as Ua, getCurrentCommandCheckState as Ui, runInteractivePrompt as Un, cliJsonOutputEnvelopeSchema as Uo, resolveDaemonDeviceId as Ur, resolveDaemonServiceParticipationStatus as Ut, resolveAgentProfileSetup as V, getProfileDefaultView as Va, resolveOpenMeldEnvironmentTarget as Vi, promptSearchSelect as Vn, outLine as Vo, scheduleDaemonServiceUpdate as Vr, resolveLocalComponentsStatus as Vt, runAgentsCustomAdd as W, validateLocalProjectConnectionPath as Wa, isCurrentCommandCheckScopeActive as Wi, assessCliUpdate as Wn, cliJsonSkillsListEnvelopeSchema as Wo, formatDaemonFailureContextText as Wr, runDaemonServiceParticipationGate as Wt, runAgentsEnable as X, unregisterAgentActivityRoute as Xa, readCurrentObservedDaemonRuntimeStatus as Xi, formatElapsedTime as Xn, compareAgentControllerRefsForDisplay as Xo, formatHumanReplyReadinessReason as Xr, runSkillsUninstall as Xt, runAgentsDisable as Y, resolveAgentActivityRouteForPath as Ya, readCurrentDaemonRuntimeContext as Yi, writeDispatchSpaceActionRecord as Yn, revokeOrganizationJoinLinkResponseSchema as Yo, formatDeviceReplyReadinessLabel as Yr, runSkillsInstall as Yt, runAgentsList as Z, AGENT_ACTIVITY_INTEGRATION_OWNER as Za, getDaemonSystemServiceLogPath as Zi, resolveElapsedTimeMs as Zn, package_default as Zo, mapAgentReplyReadinessToLegacyAutoReply as Zr, runSkillsUpdate as Zt, runSpaceWriteWithPasswordRetry as _, formatMessage as _a, listBuiltinAgentsRegistryEntries as _i, ensureAgentProfileRuntimeBinding as _n, resolveObservedAgentActivityBinding as _o, createStartAgentIdentityGuideError as _r, runDaemonInterrupt as _t, runSpaceDelete as a, ensureVersionStateReady as aa, normalizeCustomProfileWorkspacePath as ai, evaluateCommandAuthentication as an, formatOpenMeldCliCommands as ao, createResetConfirmationGuideError as ar, printOpenMeldBanner as at, buildIdentityOnlyMembersSnapshotForReadProjection as b, resolveViewProfileKey as ba, buildAgentControllerRef as bi, assessActionParticipationCandidate as bn, enqueueAgentActivityHookEvent as bo, getCommandEntryContract as br, runDaemonSnapshot as bt, runSpaceLeave as c, readVersionState as ca, setCustomProfileWorkspace as ci, runAuthMenu as cn, formatProfileAwareOpenMeldCliCommands as co, createSpaceContractSetGuideError as cr, renderOpenMeldLogo as ct, runSpaceRemoveMembers as d, toStartBackgroundHelperExecutionCompatibility as da, describeProfileWorkspacePathValidationFailure as di, buildAuthStatusSnapshot as dn, syncLocalAgentActivity as do, createSpacePublicationSetGuideError as dr, resolveSpaceSendText as dt, resolveDaemonServiceManager as ea, readRecentDaemonLifecycleEvents as ei, readRuntimeReportingHealthState as en, readAgentActivityIntegrationStatus as eo, canUseInteractivePrompts as er, runAgentsShow as et, runSpaceSend as f, resolveCurrentDaemonExpectedVersion as fa, syncDeviceRuntimeStateProjection as fi, formatActiveOrganizationLabel as fn, readDaemonServiceContract as fo, createSpaceRemoveMembersGuideError as fr, runDaemon as ft, runSpaceReadWithPasswordRetry as g, createPresenter as ga, reconcileNewRunnableBuiltinAgentsForSetup as gi, promptTextEntry as gn, buildAgentActivityEvent as go, createSpaceUpdatesGuideError as gr, runDaemonInstall as gt, uploadPreparedSpaceFiles as h, renderHumanTextErrorCard as ha, listAgentTargetStates as hi, resolveCreateProfileName as hn, removeAgentActivityContextCache as ho, createSpaceTargetGuideError as hr, runDaemonCancel as ht, runSpaceCreate as i, compareSemver as ia, ensureOpenMeldManagedProfileWorkspace as ii, ensureCommandAuthenticationOrCancel as in, formatOpenMeldCliCommand as io, createProfileMenuGuideError as ir, colorizeDisplayProfileLabel as it, assertValidSpaceIdTarget as j, alignSelectedOpenMeldProfileStorage as ja, PREPARE_SESSION_RECONNECT_GRACE_MS as ji, assertNoRemovedCcSpaceAddressingSyntax as jn, unbindProject as jo, formatDualViewGuideForDisplay as jr, runDaemonStartupPreflight as jt, isSpaceCommandOutputHandledError as k, resolveOpenMeldProfile as ka, resolveEvidenceSyncHealth as ki, inspectSpaceCacheFile as kn, runIfAgentActivityBindingGenerationIsCurrent as ko, buildAgentOverviewFromContract as kr, createDelayedSpinner as kt, runSpaceList as l, writeVersionState as la, setOpenMeldManagedProfileWorkspace as li, runAuthStatus as ln, resolveSetupFollowUpCliEntryCommand as lo, createSpaceLeaveGuideError as lr, renderOpenMeldTagline as lt, prepareRequestedSpaceSendFiles as m, renderHumanErrorCard as ma, resolveAgentProfilePrimaryAgentControllerReport as mi, resolveCreateProfileKind as mn, readAgentActivityContextForPath as mo, createSpaceSubcommandTargetGuideError as mr, runDaemonBackgroundStartForDecision as mt, promptAndConfirmSpacePassword as n, performManagedInstall as na, createModelCatalogReadSession as ni, connectWebSocket as nn, uninstallAgentActivityIntegrations as no, createProfileActionGuideError as nr, postLocalParticipationMutationReconcile as nt, runSpaceHistory as o, fetchLatestCliBinaryRelease as oa, readProfileWorkspaceConfig as oi, runAuthLogin as on, formatOpenMeldCliLine as oo, createSpaceAddMembersGuideError as or, renderOpenMeldBrandBlockLines as ot, runSpaceWatch as p, buildHumanErrorCopy as pa, createPrimaryBindingReadSession as pi, createProfileByKind as pn, upsertDaemonServiceContract as po, createSpaceResultGuideError as pr, runDaemonAutostart as pt, runAgentsCustomUpdate as q, isAgentActivityRouteRegistered as qa, inspectDaemonServiceInventory as qi, readDispatchOwnedRuntimeGuard as qn, getOrganizationJoinLinkResponseSchema as qo, resolveCurrentReplyReadinessSnapshot as qr, runSkillsCheck as qt, runSpaceAddMembers as r, buildNextVersionState as ra, resolveProfileWorkspaceRuntime as ri, buildCommandAuthenticationPromptMessage as rn, formatInlineOpenMeldCliCommands as ro, createProfileCreateGuideError as rr, colorizeAgentLabel as rt, runSpaceJoin as s, fetchLatestPackageInfo as sa, resolveConfiguredProfileWorkspacePath as si, runAuthLogout as sn, formatOpenMeldCliTextBlock as so, createSpaceAliasTargetGuideError as sr, renderOpenMeldHeader as st, buildCreateSpacePasswordPromptConfig as t, buildInstallSelfJsonPayload as ta, syncProfileWorkspaceState as ti, readRecentDaemonDispatchJournalEvents as tn, resolveAgentActivityDispatcherCommand as to, createDoctorFailedGuideError as tr, formatTransportModeDisplay as tt, runSpacePassword as u, resolveDaemonRuntimeContractCompatibility as ua, validateCustomProfileWorkspacePath as ui, buildAuthStatusRows as un, resolveUserFacingCliEntryCommand as uo, createSpaceMenuGuideError as ur, resolveGatewayWebOrigin as ut, buildHumanReadSignalsTranscriptItems as v, parseCliViewMode as va, notifyDaemonRouteCatalogChanged as vi, formatServiceParticipationReadinessLabel as vn, normalizeSharedSessionTitle as vo, createStartAuthenticationGuideError as vr, runDaemonReinstall as vt, buildFormalDispatchResultReadPayload as w, createOpenMeldAgentProfile as wa, listAgentControllerPermissionModeOptions as wi, submitRuntimeAgentControllerReports as wn, bindProject as wo, registerSkillsTargetSelectionOptions as wr, runDaemonUninstall as wt, loadSpaceIdentityDirectoryOrNull as x, isSelectedOpenMeldProfileRequiredError as xa, createAgentExecutionStatusDisplayRows as xi, computeRetryDelayMs as xn, removeProjectInbox as xo, getCommandHintsFromContract as xr, runDaemonStatusFlow as xt, emitHumanReadSignalsTextProjection as y, resolveRuntimeContext as ya, resolveLocalRegistryAgentIdFromAgentControllerRef as yi, resolveServiceParticipationReadiness as yn, readCodexSessionTitles as yo, createUpgradeConfirmationGuideError as yr, runDaemonRunAfterEntryChecks as yt, resolveHumanControllerDisplayName as z, resolveAuthenticationGuidanceFromError as za, resolveServiceUpdateUrgency as zi, formatRemovedCcRelationMessage as zn, errLine as zo, readOpenMeldToolsUpdateContextFromEnv as zr, toStructuredGatewayFailure as zt };
108371
108938
 
108372
- //# sourceMappingURL=command-BQ6GyZ0i.js.map
108939
+ //# sourceMappingURL=command-D2_ZR7Cj.js.map