@elizaos/plugin-browser 2.0.0-alpha.9 → 2.0.11-beta.7

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 (256) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +98 -83
  3. package/auto-enable.ts +24 -0
  4. package/dist/actions/browser-autofill-login.d.ts +43 -0
  5. package/dist/actions/browser-autofill-login.d.ts.map +1 -0
  6. package/dist/actions/browser-autofill-login.js +278 -0
  7. package/dist/actions/browser-autofill-login.js.map +1 -0
  8. package/dist/actions/browser.d.ts +11 -0
  9. package/dist/actions/browser.d.ts.map +1 -0
  10. package/dist/actions/browser.js +412 -0
  11. package/dist/actions/browser.js.map +1 -0
  12. package/dist/actions/manage-browser-bridge.d.ts +34 -0
  13. package/dist/actions/manage-browser-bridge.d.ts.map +1 -0
  14. package/dist/actions/manage-browser-bridge.js +572 -0
  15. package/dist/actions/manage-browser-bridge.js.map +1 -0
  16. package/dist/bridge-policy.d.ts +10 -0
  17. package/dist/bridge-policy.d.ts.map +1 -0
  18. package/dist/bridge-policy.js +37 -0
  19. package/dist/bridge-policy.js.map +1 -0
  20. package/dist/bridge-readiness.d.ts +16 -0
  21. package/dist/bridge-readiness.d.ts.map +1 -0
  22. package/dist/bridge-readiness.js +82 -0
  23. package/dist/bridge-readiness.js.map +1 -0
  24. package/dist/bridge-records.d.ts +9 -0
  25. package/dist/bridge-records.d.ts.map +1 -0
  26. package/dist/bridge-records.js +37 -0
  27. package/dist/bridge-records.js.map +1 -0
  28. package/dist/browser-capture-hooks.d.ts +9 -0
  29. package/dist/browser-capture-hooks.d.ts.map +1 -0
  30. package/dist/browser-capture-hooks.js +15 -0
  31. package/dist/browser-capture-hooks.js.map +1 -0
  32. package/dist/browser-service.d.ts +103 -0
  33. package/dist/browser-service.d.ts.map +1 -0
  34. package/dist/browser-service.js +186 -0
  35. package/dist/browser-service.js.map +1 -0
  36. package/dist/browser-workspace-hooks.d.ts +14 -0
  37. package/dist/browser-workspace-hooks.d.ts.map +1 -0
  38. package/dist/browser-workspace-hooks.js +15 -0
  39. package/dist/browser-workspace-hooks.js.map +1 -0
  40. package/dist/companion-auth.d.ts +34 -0
  41. package/dist/companion-auth.d.ts.map +1 -0
  42. package/dist/companion-auth.js +98 -0
  43. package/dist/companion-auth.js.map +1 -0
  44. package/dist/contracts.d.ts +284 -0
  45. package/dist/contracts.d.ts.map +1 -0
  46. package/dist/contracts.js +56 -0
  47. package/dist/contracts.js.map +1 -0
  48. package/dist/index.d.ts +30 -16
  49. package/dist/index.d.ts.map +1 -1
  50. package/dist/index.js +76 -90
  51. package/dist/index.js.map +1 -1
  52. package/dist/lifeops-session-contracts.d.ts +46 -0
  53. package/dist/lifeops-session-contracts.d.ts.map +1 -0
  54. package/dist/lifeops-session-contracts.js +1 -0
  55. package/dist/lifeops-session-contracts.js.map +1 -0
  56. package/dist/message-adapter.d.ts +9 -0
  57. package/dist/message-adapter.d.ts.map +1 -0
  58. package/dist/message-adapter.js +104 -0
  59. package/dist/message-adapter.js.map +1 -0
  60. package/dist/packaging.d.ts +27 -0
  61. package/dist/packaging.d.ts.map +1 -0
  62. package/dist/packaging.js +571 -0
  63. package/dist/packaging.js.map +1 -0
  64. package/dist/password-manager-bridge.d.ts +50 -0
  65. package/dist/password-manager-bridge.d.ts.map +1 -0
  66. package/dist/password-manager-bridge.js +437 -0
  67. package/dist/password-manager-bridge.js.map +1 -0
  68. package/dist/plugin.d.ts +10 -0
  69. package/dist/plugin.d.ts.map +1 -0
  70. package/dist/plugin.js +168 -0
  71. package/dist/plugin.js.map +1 -0
  72. package/dist/providers/workspace.d.ts +13 -0
  73. package/dist/providers/workspace.d.ts.map +1 -0
  74. package/dist/providers/workspace.js +64 -0
  75. package/dist/providers/workspace.js.map +1 -0
  76. package/dist/routes/bridge.d.ts +37 -0
  77. package/dist/routes/bridge.d.ts.map +1 -0
  78. package/dist/routes/bridge.js +844 -0
  79. package/dist/routes/bridge.js.map +1 -0
  80. package/dist/routes/workspace-account-gate.d.ts +29 -0
  81. package/dist/routes/workspace-account-gate.d.ts.map +1 -0
  82. package/dist/routes/workspace-account-gate.js +147 -0
  83. package/dist/routes/workspace-account-gate.js.map +1 -0
  84. package/dist/routes/workspace-setup.d.ts +10 -0
  85. package/dist/routes/workspace-setup.d.ts.map +1 -0
  86. package/dist/routes/workspace-setup.js +65 -0
  87. package/dist/routes/workspace-setup.js.map +1 -0
  88. package/dist/routes/workspace.d.ts +20 -0
  89. package/dist/routes/workspace.d.ts.map +1 -0
  90. package/dist/routes/workspace.js +276 -0
  91. package/dist/routes/workspace.js.map +1 -0
  92. package/dist/schema.d.ts +2326 -0
  93. package/dist/schema.d.ts.map +1 -0
  94. package/dist/schema.js +133 -0
  95. package/dist/schema.js.map +1 -0
  96. package/dist/service.d.ts +30 -0
  97. package/dist/service.d.ts.map +1 -0
  98. package/dist/service.js +5 -0
  99. package/dist/service.js.map +1 -0
  100. package/dist/targets/bridge-target.d.ts +31 -0
  101. package/dist/targets/bridge-target.d.ts.map +1 -0
  102. package/dist/targets/bridge-target.js +98 -0
  103. package/dist/targets/bridge-target.js.map +1 -0
  104. package/dist/targets/stagehand-target.d.ts +3 -0
  105. package/dist/targets/stagehand-target.d.ts.map +1 -0
  106. package/dist/targets/stagehand-target.js +187 -0
  107. package/dist/targets/stagehand-target.js.map +1 -0
  108. package/dist/workspace/browser-capture.d.ts +41 -0
  109. package/dist/workspace/browser-capture.d.ts.map +1 -0
  110. package/dist/workspace/browser-capture.js +159 -0
  111. package/dist/workspace/browser-capture.js.map +1 -0
  112. package/dist/workspace/browser-workspace-desktop.d.ts +19 -0
  113. package/dist/workspace/browser-workspace-desktop.d.ts.map +1 -0
  114. package/dist/workspace/browser-workspace-desktop.js +1578 -0
  115. package/dist/workspace/browser-workspace-desktop.js.map +1 -0
  116. package/dist/workspace/browser-workspace-elements.d.ts +42 -0
  117. package/dist/workspace/browser-workspace-elements.d.ts.map +1 -0
  118. package/dist/workspace/browser-workspace-elements.js +547 -0
  119. package/dist/workspace/browser-workspace-elements.js.map +1 -0
  120. package/dist/workspace/browser-workspace-forms.d.ts +19 -0
  121. package/dist/workspace/browser-workspace-forms.d.ts.map +1 -0
  122. package/dist/workspace/browser-workspace-forms.js +277 -0
  123. package/dist/workspace/browser-workspace-forms.js.map +1 -0
  124. package/dist/workspace/browser-workspace-helpers.d.ts +32 -0
  125. package/dist/workspace/browser-workspace-helpers.d.ts.map +1 -0
  126. package/dist/workspace/browser-workspace-helpers.js +232 -0
  127. package/dist/workspace/browser-workspace-helpers.js.map +1 -0
  128. package/dist/workspace/browser-workspace-jsdom.d.ts +16 -0
  129. package/dist/workspace/browser-workspace-jsdom.d.ts.map +1 -0
  130. package/dist/workspace/browser-workspace-jsdom.js +233 -0
  131. package/dist/workspace/browser-workspace-jsdom.js.map +1 -0
  132. package/dist/workspace/browser-workspace-network.d.ts +7 -0
  133. package/dist/workspace/browser-workspace-network.d.ts.map +1 -0
  134. package/dist/workspace/browser-workspace-network.js +145 -0
  135. package/dist/workspace/browser-workspace-network.js.map +1 -0
  136. package/dist/workspace/browser-workspace-snapshots.d.ts +14 -0
  137. package/dist/workspace/browser-workspace-snapshots.d.ts.map +1 -0
  138. package/dist/workspace/browser-workspace-snapshots.js +144 -0
  139. package/dist/workspace/browser-workspace-snapshots.js.map +1 -0
  140. package/dist/workspace/browser-workspace-state.d.ts +24 -0
  141. package/dist/workspace/browser-workspace-state.d.ts.map +1 -0
  142. package/dist/workspace/browser-workspace-state.js +155 -0
  143. package/dist/workspace/browser-workspace-state.js.map +1 -0
  144. package/dist/workspace/browser-workspace-types.d.ts +345 -0
  145. package/dist/workspace/browser-workspace-types.d.ts.map +1 -0
  146. package/dist/workspace/browser-workspace-types.js +11 -0
  147. package/dist/workspace/browser-workspace-types.js.map +1 -0
  148. package/dist/workspace/browser-workspace-web.d.ts +8 -0
  149. package/dist/workspace/browser-workspace-web.d.ts.map +1 -0
  150. package/dist/workspace/browser-workspace-web.js +1342 -0
  151. package/dist/workspace/browser-workspace-web.js.map +1 -0
  152. package/dist/workspace/browser-workspace.d.ts +39 -0
  153. package/dist/workspace/browser-workspace.d.ts.map +1 -0
  154. package/dist/workspace/browser-workspace.js +958 -0
  155. package/dist/workspace/browser-workspace.js.map +1 -0
  156. package/dist/workspace/index.d.ts +26 -0
  157. package/dist/workspace/index.d.ts.map +1 -0
  158. package/dist/workspace/index.js +3 -0
  159. package/dist/workspace/index.js.map +1 -0
  160. package/dist/workspace.d.ts +2 -0
  161. package/dist/workspace.d.ts.map +1 -0
  162. package/dist/workspace.js +2 -0
  163. package/dist/workspace.js.map +1 -0
  164. package/package.json +71 -110
  165. package/dist/actions/click.d.ts +0 -3
  166. package/dist/actions/click.d.ts.map +0 -1
  167. package/dist/actions/click.js +0 -158
  168. package/dist/actions/click.js.map +0 -1
  169. package/dist/actions/extract.d.ts +0 -3
  170. package/dist/actions/extract.d.ts.map +0 -1
  171. package/dist/actions/extract.js +0 -168
  172. package/dist/actions/extract.js.map +0 -1
  173. package/dist/actions/index.d.ts +0 -7
  174. package/dist/actions/index.d.ts.map +0 -1
  175. package/dist/actions/index.js +0 -7
  176. package/dist/actions/index.js.map +0 -1
  177. package/dist/actions/navigate.d.ts +0 -3
  178. package/dist/actions/navigate.d.ts.map +0 -1
  179. package/dist/actions/navigate.js +0 -187
  180. package/dist/actions/navigate.js.map +0 -1
  181. package/dist/actions/screenshot.d.ts +0 -3
  182. package/dist/actions/screenshot.d.ts.map +0 -1
  183. package/dist/actions/screenshot.js +0 -167
  184. package/dist/actions/screenshot.js.map +0 -1
  185. package/dist/actions/select.d.ts +0 -3
  186. package/dist/actions/select.d.ts.map +0 -1
  187. package/dist/actions/select.js +0 -167
  188. package/dist/actions/select.js.map +0 -1
  189. package/dist/actions/type.d.ts +0 -3
  190. package/dist/actions/type.d.ts.map +0 -1
  191. package/dist/actions/type.js +0 -167
  192. package/dist/actions/type.js.map +0 -1
  193. package/dist/cli/index.d.ts +0 -8
  194. package/dist/cli/index.d.ts.map +0 -1
  195. package/dist/cli/index.js +0 -13
  196. package/dist/cli/index.js.map +0 -1
  197. package/dist/cli/register.d.ts +0 -20
  198. package/dist/cli/register.d.ts.map +0 -1
  199. package/dist/cli/register.js +0 -403
  200. package/dist/cli/register.js.map +0 -1
  201. package/dist/providerRelevance.d.ts +0 -4
  202. package/dist/providerRelevance.d.ts.map +0 -1
  203. package/dist/providerRelevance.js +0 -33
  204. package/dist/providerRelevance.js.map +0 -1
  205. package/dist/providers/browser-state.d.ts +0 -3
  206. package/dist/providers/browser-state.d.ts.map +0 -1
  207. package/dist/providers/browser-state.js +0 -72
  208. package/dist/providers/browser-state.js.map +0 -1
  209. package/dist/providers/index.d.ts +0 -2
  210. package/dist/providers/index.d.ts.map +0 -1
  211. package/dist/providers/index.js +0 -2
  212. package/dist/providers/index.js.map +0 -1
  213. package/dist/services/browser-service.d.ts +0 -32
  214. package/dist/services/browser-service.d.ts.map +0 -1
  215. package/dist/services/browser-service.js +0 -213
  216. package/dist/services/browser-service.js.map +0 -1
  217. package/dist/services/index.d.ts +0 -4
  218. package/dist/services/index.d.ts.map +0 -1
  219. package/dist/services/index.js +0 -4
  220. package/dist/services/index.js.map +0 -1
  221. package/dist/services/process-manager.d.ts +0 -24
  222. package/dist/services/process-manager.d.ts.map +0 -1
  223. package/dist/services/process-manager.js +0 -270
  224. package/dist/services/process-manager.js.map +0 -1
  225. package/dist/services/websocket-client.d.ts +0 -35
  226. package/dist/services/websocket-client.d.ts.map +0 -1
  227. package/dist/services/websocket-client.js +0 -221
  228. package/dist/services/websocket-client.js.map +0 -1
  229. package/dist/types.d.ts +0 -101
  230. package/dist/types.d.ts.map +0 -1
  231. package/dist/types.js +0 -2
  232. package/dist/types.js.map +0 -1
  233. package/dist/utils/captcha.d.ts +0 -33
  234. package/dist/utils/captcha.d.ts.map +0 -1
  235. package/dist/utils/captcha.js +0 -219
  236. package/dist/utils/captcha.js.map +0 -1
  237. package/dist/utils/errors.d.ts +0 -37
  238. package/dist/utils/errors.d.ts.map +0 -1
  239. package/dist/utils/errors.js +0 -81
  240. package/dist/utils/errors.js.map +0 -1
  241. package/dist/utils/index.d.ts +0 -5
  242. package/dist/utils/index.d.ts.map +0 -1
  243. package/dist/utils/index.js +0 -5
  244. package/dist/utils/index.js.map +0 -1
  245. package/dist/utils/retry.d.ts +0 -26
  246. package/dist/utils/retry.d.ts.map +0 -1
  247. package/dist/utils/retry.js +0 -55
  248. package/dist/utils/retry.js.map +0 -1
  249. package/dist/utils/security.d.ts +0 -27
  250. package/dist/utils/security.d.ts.map +0 -1
  251. package/dist/utils/security.js +0 -139
  252. package/dist/utils/security.js.map +0 -1
  253. package/dist/utils/url.d.ts +0 -12
  254. package/dist/utils/url.d.ts.map +0 -1
  255. package/dist/utils/url.js +0 -39
  256. package/dist/utils/url.js.map +0 -1
@@ -0,0 +1,571 @@
1
+ import { spawn } from "node:child_process";
2
+ import fs from "node:fs";
3
+ import path from "node:path";
4
+ import { fileURLToPath } from "node:url";
5
+ const pluginSrcDir = path.dirname(fileURLToPath(import.meta.url));
6
+ const elizaRoot = path.resolve(pluginSrcDir, "../../../");
7
+ const outerRepoRoot = path.resolve(elizaRoot, "../");
8
+ function uniquePaths(paths) {
9
+ return [...new Set(paths.map((candidate) => path.resolve(candidate)))];
10
+ }
11
+ function ancestorPaths(start) {
12
+ const ancestors = [];
13
+ let current = path.resolve(start);
14
+ while (true) {
15
+ ancestors.push(current);
16
+ const parent = path.dirname(current);
17
+ if (parent === current) {
18
+ return ancestors;
19
+ }
20
+ current = parent;
21
+ }
22
+ }
23
+ const workspaceRootCandidates = uniquePaths([
24
+ process.cwd(),
25
+ outerRepoRoot,
26
+ elizaRoot,
27
+ ...ancestorPaths(pluginSrcDir),
28
+ ...ancestorPaths(process.cwd())
29
+ ]);
30
+ const extensionRootCandidates = workspaceRootCandidates.flatMap((root) => [
31
+ path.join(root, "packages", "browser-bridge-extension"),
32
+ path.join(root, "eliza", "packages", "browser-bridge-extension"),
33
+ path.join(root, "eliza", "apps", "browser-bridge"),
34
+ path.join(root, "apps", "browser-bridge"),
35
+ path.join(root, "apps", "app-lifeops", "extensions", "lifeops-browser"),
36
+ path.join(
37
+ root,
38
+ "eliza",
39
+ "apps",
40
+ "app-lifeops",
41
+ "extensions",
42
+ "lifeops-browser"
43
+ ),
44
+ path.join(root, "apps", "extensions", "lifeops-browser"),
45
+ path.join(root, "eliza", "apps", "extensions", "lifeops-browser")
46
+ ]);
47
+ const packageJsonCandidates = workspaceRootCandidates.flatMap((root) => [
48
+ path.join(root, "package.json"),
49
+ path.join(root, "eliza", "package.json")
50
+ ]);
51
+ const extensionPackageJsonCandidates = uniquePaths(
52
+ extensionRootCandidates.map(
53
+ (candidate) => path.join(candidate, "package.json")
54
+ )
55
+ );
56
+ const buildInfoCandidates = workspaceRootCandidates.flatMap((root) => [
57
+ path.join(root, "dist", "build-info.json"),
58
+ path.join(root, "eliza", "dist", "build-info.json")
59
+ ]);
60
+ const NIGHTLY_EPOCH_UTC_MS = Date.UTC(2020, 0, 1);
61
+ const DEFAULT_REPOSITORY = "elizaos/eliza";
62
+ function existingPath(candidate) {
63
+ return fs.existsSync(candidate) ? candidate : null;
64
+ }
65
+ function firstExisting(candidates) {
66
+ for (const candidate of candidates) {
67
+ const resolved = existingPath(candidate);
68
+ if (resolved) {
69
+ return resolved;
70
+ }
71
+ }
72
+ return null;
73
+ }
74
+ function readVersionField(filePath) {
75
+ if (!fs.existsSync(filePath)) {
76
+ return null;
77
+ }
78
+ const parsed = JSON.parse(fs.readFileSync(filePath, "utf8"));
79
+ return typeof parsed.version === "string" && parsed.version.trim() ? parsed.version.trim() : null;
80
+ }
81
+ function normalizeRepositoryIdentifier(value) {
82
+ if (typeof value === "string") {
83
+ const trimmed = value.trim().replace(/^git\+/, "");
84
+ if (!trimmed) {
85
+ return null;
86
+ }
87
+ const shorthandMatch = trimmed.match(/^([^/\s]+)\/([^/\s]+)$/);
88
+ if (shorthandMatch) {
89
+ return `${shorthandMatch[1]}/${shorthandMatch[2]}`;
90
+ }
91
+ const githubMatch = trimmed.match(
92
+ /github\.com[/:]([^/]+)\/([^/]+?)(?:\.git)?$/i
93
+ );
94
+ if (githubMatch) {
95
+ return `${githubMatch[1]}/${githubMatch[2]}`;
96
+ }
97
+ return null;
98
+ }
99
+ if (value && typeof value === "object" && !Array.isArray(value)) {
100
+ const repositoryRecord = value;
101
+ return normalizeRepositoryIdentifier(repositoryRecord.url);
102
+ }
103
+ return null;
104
+ }
105
+ function readRepositoryField(filePath) {
106
+ if (!fs.existsSync(filePath)) {
107
+ return null;
108
+ }
109
+ const parsed = JSON.parse(fs.readFileSync(filePath, "utf8"));
110
+ return normalizeRepositoryIdentifier(parsed.repository);
111
+ }
112
+ function resolveBrowserBridgeReleaseVersion() {
113
+ for (const candidate of extensionPackageJsonCandidates) {
114
+ const value = readVersionField(candidate);
115
+ if (value) {
116
+ return value;
117
+ }
118
+ }
119
+ for (const candidate of packageJsonCandidates) {
120
+ const value = readVersionField(candidate);
121
+ if (value) {
122
+ return value;
123
+ }
124
+ }
125
+ for (const candidate of buildInfoCandidates) {
126
+ const value = readVersionField(candidate);
127
+ if (value) {
128
+ return value;
129
+ }
130
+ }
131
+ return "0.0.0";
132
+ }
133
+ function resolveBrowserBridgeReleaseRepository(env = process.env) {
134
+ const configuredRepository = typeof env.GITHUB_REPOSITORY === "string" && env.GITHUB_REPOSITORY.trim() ? env.GITHUB_REPOSITORY.trim() : null;
135
+ if (configuredRepository) {
136
+ return configuredRepository;
137
+ }
138
+ for (const candidate of extensionPackageJsonCandidates) {
139
+ const repository = readRepositoryField(candidate);
140
+ if (repository) {
141
+ return repository;
142
+ }
143
+ }
144
+ for (const candidate of packageJsonCandidates) {
145
+ const repository = readRepositoryField(candidate);
146
+ if (repository) {
147
+ return repository;
148
+ }
149
+ }
150
+ return DEFAULT_REPOSITORY;
151
+ }
152
+ function normalizeReleaseVersionCandidate(raw) {
153
+ const trimmed = raw.trim();
154
+ if (!trimmed) {
155
+ return null;
156
+ }
157
+ return trimmed.startsWith("v") ? trimmed.slice(1) : trimmed;
158
+ }
159
+ function parseReleaseVersion(raw) {
160
+ const normalized = normalizeReleaseVersionCandidate(raw);
161
+ if (!normalized) {
162
+ return null;
163
+ }
164
+ const match = normalized.match(
165
+ /^(\d+)\.(\d+)\.(\d+)(?:-(beta|rc|nightly)\.([0-9A-Za-z.-]+))?$/
166
+ );
167
+ if (!match) {
168
+ return null;
169
+ }
170
+ const majorRaw = match[1];
171
+ const minorRaw = match[2];
172
+ const patchRaw = match[3];
173
+ if (!majorRaw || !minorRaw || !patchRaw) {
174
+ return null;
175
+ }
176
+ const major = Number.parseInt(majorRaw, 10);
177
+ const minor = Number.parseInt(minorRaw, 10);
178
+ const patch = Number.parseInt(patchRaw, 10);
179
+ const prereleaseLabel = match[4] ?? null;
180
+ const prereleaseValue = match[5] ?? null;
181
+ return {
182
+ raw: normalized,
183
+ tag: `v${normalized}`,
184
+ major,
185
+ minor,
186
+ patch,
187
+ prereleaseLabel,
188
+ prereleaseValue,
189
+ baseVersion: `${major}.${minor}.${patch}`,
190
+ hasPrerelease: prereleaseLabel !== null
191
+ };
192
+ }
193
+ function clamp(value, minimum, maximum) {
194
+ return Math.min(maximum, Math.max(minimum, value));
195
+ }
196
+ function parseNumericPrereleaseValue(value) {
197
+ if (!value) {
198
+ return 0;
199
+ }
200
+ const parsed = Number.parseInt(value, 10);
201
+ return Number.isFinite(parsed) ? parsed : 0;
202
+ }
203
+ function deriveNightlyOrdinal(value) {
204
+ if (typeof value === "string" && /^\d{8}$/.test(value)) {
205
+ const year = Number.parseInt(value.slice(0, 4), 10);
206
+ const month = Number.parseInt(value.slice(4, 6), 10);
207
+ const day = Number.parseInt(value.slice(6, 8), 10);
208
+ const utcMs = Date.UTC(year, month - 1, day);
209
+ if (Number.isFinite(utcMs)) {
210
+ return clamp(
211
+ Math.floor((utcMs - NIGHTLY_EPOCH_UTC_MS) / 864e5) + 1,
212
+ 1,
213
+ 9999
214
+ );
215
+ }
216
+ }
217
+ const parsed = parseNumericPrereleaseValue(value);
218
+ if (parsed > 0) {
219
+ return clamp(parsed, 1, 9999);
220
+ }
221
+ let hash = 0;
222
+ for (const character of String(value ?? "")) {
223
+ hash = (hash * 33 + character.charCodeAt(0)) % 9999;
224
+ }
225
+ return clamp(hash, 1, 9999);
226
+ }
227
+ function derivePrereleaseOrdinal(release) {
228
+ if (!release.hasPrerelease || !release.prereleaseLabel) {
229
+ return 0;
230
+ }
231
+ if (release.prereleaseLabel === "nightly") {
232
+ return deriveNightlyOrdinal(release.prereleaseValue);
233
+ }
234
+ return clamp(parseNumericPrereleaseValue(release.prereleaseValue), 0, 9999);
235
+ }
236
+ function buildChromeExtensionVersion(release) {
237
+ let buildSegment = 6e4;
238
+ if (release.hasPrerelease && release.prereleaseLabel) {
239
+ const ordinal = derivePrereleaseOrdinal(release);
240
+ buildSegment = release.prereleaseLabel === "rc" ? 5e4 + ordinal : release.prereleaseLabel === "beta" ? 4e4 + ordinal : 1e4 + ordinal;
241
+ }
242
+ return [release.major, release.minor, release.patch, buildSegment].join(".");
243
+ }
244
+ function buildSafariExtensionVersions(release) {
245
+ const ordinal = derivePrereleaseOrdinal(release);
246
+ const suffix = !release.hasPrerelease || !release.prereleaseLabel ? 9e3 : release.prereleaseLabel === "rc" ? 8e3 + ordinal : release.prereleaseLabel === "beta" ? 7e3 + ordinal : 5e3 + ordinal;
247
+ return {
248
+ marketingVersion: release.baseVersion,
249
+ buildVersion: String(
250
+ release.major * 1e8 + release.minor * 1e6 + release.patch * 1e4 + suffix
251
+ )
252
+ };
253
+ }
254
+ function versionedArtifactName(prefix, extension, release) {
255
+ return `${prefix}-${release.tag}.${extension.replace(/^\./, "")}`;
256
+ }
257
+ function buildGitHubReleasePageUrl(repository, release) {
258
+ return `https://github.com/${repository}/releases/tag/${release.tag}`;
259
+ }
260
+ function buildGitHubReleaseAssetDownloadUrl(repository, release, assetName) {
261
+ return `https://github.com/${repository}/releases/download/${release.tag}/${assetName}`;
262
+ }
263
+ function resolveBrowserBridgeStoreUrls(env = process.env) {
264
+ const chromeWebStoreUrl = typeof env.ELIZA_BROWSER_BRIDGE_CHROME_STORE_URL === "string" && env.ELIZA_BROWSER_BRIDGE_CHROME_STORE_URL.trim() ? env.ELIZA_BROWSER_BRIDGE_CHROME_STORE_URL.trim() : null;
265
+ const safariAppStoreUrl = typeof env.ELIZA_BROWSER_BRIDGE_SAFARI_STORE_URL === "string" && env.ELIZA_BROWSER_BRIDGE_SAFARI_STORE_URL.trim() ? env.ELIZA_BROWSER_BRIDGE_SAFARI_STORE_URL.trim() : null;
266
+ return {
267
+ chromeWebStoreUrl,
268
+ safariAppStoreUrl
269
+ };
270
+ }
271
+ function buildBrowserBridgeReleaseManifestForVersion(rawVersion, env = process.env) {
272
+ const release = parseReleaseVersion(rawVersion);
273
+ if (!release) {
274
+ return null;
275
+ }
276
+ const repository = resolveBrowserBridgeReleaseRepository(env);
277
+ const storeUrls = resolveBrowserBridgeStoreUrls(env);
278
+ const chromeAssetName = versionedArtifactName(
279
+ "browser-bridge-chrome",
280
+ "zip",
281
+ release
282
+ );
283
+ const safariAssetName = versionedArtifactName(
284
+ "browser-bridge-safari",
285
+ "zip",
286
+ release
287
+ );
288
+ const safariVersions = buildSafariExtensionVersions(release);
289
+ return {
290
+ schema: "browser_bridge_release_v2",
291
+ releaseTag: release.tag,
292
+ releaseVersion: release.raw,
293
+ repository,
294
+ releasePageUrl: buildGitHubReleasePageUrl(repository, release),
295
+ chromeVersion: buildChromeExtensionVersion(release),
296
+ chromeVersionName: release.raw,
297
+ safariMarketingVersion: safariVersions.marketingVersion,
298
+ safariBuildVersion: safariVersions.buildVersion,
299
+ chrome: {
300
+ installKind: storeUrls.chromeWebStoreUrl ? "chrome_web_store" : "github_release",
301
+ installUrl: storeUrls.chromeWebStoreUrl ?? buildGitHubReleaseAssetDownloadUrl(
302
+ repository,
303
+ release,
304
+ chromeAssetName
305
+ ),
306
+ storeListingUrl: storeUrls.chromeWebStoreUrl,
307
+ asset: {
308
+ fileName: chromeAssetName,
309
+ downloadUrl: buildGitHubReleaseAssetDownloadUrl(
310
+ repository,
311
+ release,
312
+ chromeAssetName
313
+ )
314
+ }
315
+ },
316
+ safari: {
317
+ installKind: storeUrls.safariAppStoreUrl ? "apple_app_store" : "github_release",
318
+ installUrl: storeUrls.safariAppStoreUrl ?? buildGitHubReleaseAssetDownloadUrl(
319
+ repository,
320
+ release,
321
+ safariAssetName
322
+ ),
323
+ storeListingUrl: storeUrls.safariAppStoreUrl,
324
+ asset: {
325
+ fileName: safariAssetName,
326
+ downloadUrl: buildGitHubReleaseAssetDownloadUrl(
327
+ repository,
328
+ release,
329
+ safariAssetName
330
+ )
331
+ }
332
+ },
333
+ generatedAt: (/* @__PURE__ */ new Date()).toISOString()
334
+ };
335
+ }
336
+ function readReleaseManifest(artifactsDir) {
337
+ const manifestPath = path.join(
338
+ artifactsDir,
339
+ "browser-bridge-release-manifest.json"
340
+ );
341
+ if (!fs.existsSync(manifestPath)) {
342
+ return null;
343
+ }
344
+ try {
345
+ return JSON.parse(
346
+ fs.readFileSync(manifestPath, "utf8")
347
+ );
348
+ } catch {
349
+ return null;
350
+ }
351
+ }
352
+ function resolveBrowserBridgeReleaseManifest(artifactsDir, options) {
353
+ if (artifactsDir) {
354
+ const releaseManifest = readReleaseManifest(artifactsDir);
355
+ if (releaseManifest) {
356
+ return releaseManifest;
357
+ }
358
+ }
359
+ if (!options?.allowSynthesis) {
360
+ return null;
361
+ }
362
+ return buildBrowserBridgeReleaseManifestForVersion(
363
+ options.version ?? resolveBrowserBridgeReleaseVersion(),
364
+ options.env
365
+ );
366
+ }
367
+ function resolveBrowserBridgeExtensionRoot() {
368
+ return firstExisting(extensionRootCandidates);
369
+ }
370
+ function packageScriptName(browser) {
371
+ return browser === "safari" ? "package-safari.mjs" : "package-chrome.mjs";
372
+ }
373
+ function runCommand(command, args, cwd) {
374
+ return new Promise((resolve, reject) => {
375
+ const child = spawn(command, args, {
376
+ cwd,
377
+ stdio: ["ignore", "pipe", "pipe"],
378
+ env: process.env
379
+ });
380
+ let stderr = "";
381
+ child.stderr.on("data", (chunk) => {
382
+ stderr += String(chunk);
383
+ });
384
+ child.on("error", reject);
385
+ child.on("exit", (code) => {
386
+ if (code === 0) {
387
+ resolve();
388
+ return;
389
+ }
390
+ reject(
391
+ new Error(
392
+ stderr.trim() || `${command} ${args.join(" ")} exited with code ${code ?? "unknown"}`
393
+ )
394
+ );
395
+ });
396
+ });
397
+ }
398
+ function resolveBrowserBridgeExtensionPath() {
399
+ return resolveBrowserBridgeExtensionRoot();
400
+ }
401
+ function resolveBrowserBridgeCompanionPackagePath(status, target) {
402
+ switch (target) {
403
+ case "extension_root":
404
+ return status.extensionPath;
405
+ case "chrome_build":
406
+ return status.chromeBuildPath;
407
+ case "chrome_package":
408
+ return status.chromePackagePath;
409
+ case "safari_web_extension":
410
+ return status.safariWebExtensionPath;
411
+ case "safari_app":
412
+ return status.safariAppPath;
413
+ case "safari_package":
414
+ return status.safariPackagePath;
415
+ default:
416
+ return null;
417
+ }
418
+ }
419
+ async function openPathInHost(pathValue, revealOnly) {
420
+ const revealDirectory = revealOnly && fs.existsSync(pathValue) && fs.statSync(pathValue).isDirectory() ? pathValue : path.dirname(pathValue);
421
+ const cwd = outerRepoRoot;
422
+ switch (process.platform) {
423
+ case "darwin":
424
+ await runCommand(
425
+ "open",
426
+ revealOnly ? ["-R", pathValue] : [pathValue],
427
+ cwd
428
+ );
429
+ return;
430
+ case "win32":
431
+ await runCommand(
432
+ revealOnly ? "explorer.exe" : "cmd",
433
+ revealOnly ? [`/select,${pathValue}`] : ["/c", "start", "", pathValue],
434
+ cwd
435
+ );
436
+ return;
437
+ case "linux":
438
+ await runCommand(
439
+ "xdg-open",
440
+ [revealOnly ? revealDirectory : pathValue],
441
+ cwd
442
+ );
443
+ return;
444
+ default:
445
+ throw new Error(
446
+ `Opening local paths is not supported on ${process.platform}`
447
+ );
448
+ }
449
+ }
450
+ async function openChromeExtensionsManager() {
451
+ const cwd = outerRepoRoot;
452
+ switch (process.platform) {
453
+ case "darwin":
454
+ await runCommand(
455
+ "open",
456
+ ["-a", "Google Chrome", "chrome://extensions/"],
457
+ cwd
458
+ );
459
+ return;
460
+ case "win32":
461
+ await runCommand(
462
+ "cmd",
463
+ ["/c", "start", "", "chrome", "chrome://extensions/"],
464
+ cwd
465
+ );
466
+ return;
467
+ case "linux":
468
+ await runCommand("xdg-open", ["chrome://extensions/"], cwd);
469
+ return;
470
+ default:
471
+ throw new Error(
472
+ `Opening the Chrome extensions manager is not supported on ${process.platform}`
473
+ );
474
+ }
475
+ }
476
+ function getBrowserBridgeCompanionPackageStatus() {
477
+ const resolvedExtensionPath = resolveBrowserBridgeExtensionPath();
478
+ if (!resolvedExtensionPath) {
479
+ return {
480
+ extensionPath: null,
481
+ chromeBuildPath: null,
482
+ chromePackagePath: null,
483
+ safariWebExtensionPath: null,
484
+ safariAppPath: null,
485
+ safariPackagePath: null,
486
+ releaseManifest: resolveBrowserBridgeReleaseManifest(null, {
487
+ allowSynthesis: true
488
+ })
489
+ };
490
+ }
491
+ const distDir = path.join(resolvedExtensionPath, "dist");
492
+ const artifactsDir = path.join(distDir, "artifacts");
493
+ return {
494
+ extensionPath: resolvedExtensionPath,
495
+ chromeBuildPath: existingPath(path.join(distDir, "chrome")),
496
+ chromePackagePath: existingPath(
497
+ path.join(artifactsDir, "browser-bridge-chrome.zip")
498
+ ),
499
+ safariWebExtensionPath: existingPath(path.join(distDir, "safari")),
500
+ safariAppPath: existingPath(
501
+ path.join(artifactsDir, "Agent Browser Bridge.app")
502
+ ),
503
+ safariPackagePath: existingPath(
504
+ path.join(artifactsDir, "browser-bridge-safari.zip")
505
+ ),
506
+ releaseManifest: resolveBrowserBridgeReleaseManifest(artifactsDir, {
507
+ allowSynthesis: true
508
+ })
509
+ };
510
+ }
511
+ function getBrowserBridgeCompanionDownloadFile(browser) {
512
+ const status = getBrowserBridgeCompanionPackageStatus();
513
+ const filePath = browser === "safari" ? status.safariPackagePath : status.chromePackagePath;
514
+ if (!filePath) {
515
+ throw new Error(
516
+ `${browser === "safari" ? "Safari" : "Chrome"} package has not been built yet`
517
+ );
518
+ }
519
+ return {
520
+ path: filePath,
521
+ filename: path.basename(filePath),
522
+ contentType: "application/zip"
523
+ };
524
+ }
525
+ async function openBrowserBridgeCompanionPackagePath(target, options) {
526
+ const revealOnly = options?.revealOnly ?? false;
527
+ const status = getBrowserBridgeCompanionPackageStatus();
528
+ const resolvedPath = resolveBrowserBridgeCompanionPackagePath(status, target);
529
+ if (!resolvedPath) {
530
+ throw new Error(`Browser Bridge path is not available for ${target}`);
531
+ }
532
+ await openPathInHost(resolvedPath, revealOnly);
533
+ return {
534
+ target,
535
+ path: resolvedPath,
536
+ revealOnly
537
+ };
538
+ }
539
+ async function openBrowserBridgeCompanionManager(browser) {
540
+ if (browser !== "chrome") {
541
+ throw new Error(
542
+ "Only Chrome exposes a local extensions manager for unpacked install"
543
+ );
544
+ }
545
+ await openChromeExtensionsManager();
546
+ return { browser };
547
+ }
548
+ async function buildBrowserBridgeCompanionPackage(browser) {
549
+ const resolvedExtensionPath = resolveBrowserBridgeExtensionPath();
550
+ if (!resolvedExtensionPath) {
551
+ throw new Error("Browser Bridge extension workspace is not available");
552
+ }
553
+ await runCommand(
554
+ "bun",
555
+ [path.join(resolvedExtensionPath, "scripts", packageScriptName(browser))],
556
+ resolvedExtensionPath
557
+ );
558
+ return getBrowserBridgeCompanionPackageStatus();
559
+ }
560
+ export {
561
+ buildBrowserBridgeCompanionPackage,
562
+ buildBrowserBridgeReleaseManifestForVersion,
563
+ getBrowserBridgeCompanionDownloadFile,
564
+ getBrowserBridgeCompanionPackageStatus,
565
+ openBrowserBridgeCompanionManager,
566
+ openBrowserBridgeCompanionPackagePath,
567
+ resolveBrowserBridgeCompanionPackagePath,
568
+ resolveBrowserBridgeExtensionPath,
569
+ resolveBrowserBridgeReleaseManifest
570
+ };
571
+ //# sourceMappingURL=packaging.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/packaging.ts"],"sourcesContent":["import { spawn } from \"node:child_process\";\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport type {\n BrowserBridgeCompanionPackageStatus,\n BrowserBridgeCompanionReleaseManifest,\n BrowserBridgeKind,\n BrowserBridgePackagePathTarget,\n} from \"./contracts.js\";\n\nconst pluginSrcDir = path.dirname(fileURLToPath(import.meta.url));\nconst elizaRoot = path.resolve(pluginSrcDir, \"../../../\");\nconst outerRepoRoot = path.resolve(elizaRoot, \"../\");\n\nfunction uniquePaths(paths: string[]): string[] {\n return [...new Set(paths.map((candidate) => path.resolve(candidate)))];\n}\n\nfunction ancestorPaths(start: string): string[] {\n const ancestors: string[] = [];\n let current = path.resolve(start);\n while (true) {\n ancestors.push(current);\n const parent = path.dirname(current);\n if (parent === current) {\n return ancestors;\n }\n current = parent;\n }\n}\n\nconst workspaceRootCandidates = uniquePaths([\n process.cwd(),\n outerRepoRoot,\n elizaRoot,\n ...ancestorPaths(pluginSrcDir),\n ...ancestorPaths(process.cwd()),\n]);\n\nconst extensionRootCandidates = workspaceRootCandidates.flatMap((root) => [\n path.join(root, \"packages\", \"browser-bridge-extension\"),\n path.join(root, \"eliza\", \"packages\", \"browser-bridge-extension\"),\n path.join(root, \"eliza\", \"apps\", \"browser-bridge\"),\n path.join(root, \"apps\", \"browser-bridge\"),\n path.join(root, \"apps\", \"app-lifeops\", \"extensions\", \"lifeops-browser\"),\n path.join(\n root,\n \"eliza\",\n \"apps\",\n \"app-lifeops\",\n \"extensions\",\n \"lifeops-browser\",\n ),\n path.join(root, \"apps\", \"extensions\", \"lifeops-browser\"),\n path.join(root, \"eliza\", \"apps\", \"extensions\", \"lifeops-browser\"),\n]);\nconst packageJsonCandidates = workspaceRootCandidates.flatMap((root) => [\n path.join(root, \"package.json\"),\n path.join(root, \"eliza\", \"package.json\"),\n]);\nconst extensionPackageJsonCandidates = uniquePaths(\n extensionRootCandidates.map((candidate) =>\n path.join(candidate, \"package.json\"),\n ),\n);\nconst buildInfoCandidates = workspaceRootCandidates.flatMap((root) => [\n path.join(root, \"dist\", \"build-info.json\"),\n path.join(root, \"eliza\", \"dist\", \"build-info.json\"),\n]);\nconst NIGHTLY_EPOCH_UTC_MS = Date.UTC(2020, 0, 1);\nconst DEFAULT_REPOSITORY = \"elizaos/eliza\";\n\nfunction existingPath(candidate: string): string | null {\n return fs.existsSync(candidate) ? candidate : null;\n}\n\nfunction firstExisting(candidates: readonly string[]): string | null {\n for (const candidate of candidates) {\n const resolved = existingPath(candidate);\n if (resolved) {\n return resolved;\n }\n }\n return null;\n}\n\nfunction readVersionField(filePath: string): string | null {\n if (!fs.existsSync(filePath)) {\n return null;\n }\n const parsed = JSON.parse(fs.readFileSync(filePath, \"utf8\")) as {\n version?: unknown;\n };\n return typeof parsed.version === \"string\" && parsed.version.trim()\n ? parsed.version.trim()\n : null;\n}\n\nfunction normalizeRepositoryIdentifier(value: unknown): string | null {\n if (typeof value === \"string\") {\n const trimmed = value.trim().replace(/^git\\+/, \"\");\n if (!trimmed) {\n return null;\n }\n const shorthandMatch = trimmed.match(/^([^/\\s]+)\\/([^/\\s]+)$/);\n if (shorthandMatch) {\n return `${shorthandMatch[1]}/${shorthandMatch[2]}`;\n }\n const githubMatch = trimmed.match(\n /github\\.com[/:]([^/]+)\\/([^/]+?)(?:\\.git)?$/i,\n );\n if (githubMatch) {\n return `${githubMatch[1]}/${githubMatch[2]}`;\n }\n return null;\n }\n\n if (value && typeof value === \"object\" && !Array.isArray(value)) {\n const repositoryRecord = value as { url?: unknown };\n return normalizeRepositoryIdentifier(repositoryRecord.url);\n }\n\n return null;\n}\n\nfunction readRepositoryField(filePath: string): string | null {\n if (!fs.existsSync(filePath)) {\n return null;\n }\n const parsed = JSON.parse(fs.readFileSync(filePath, \"utf8\")) as {\n repository?: unknown;\n };\n return normalizeRepositoryIdentifier(parsed.repository);\n}\n\nfunction resolveBrowserBridgeReleaseVersion(): string {\n for (const candidate of extensionPackageJsonCandidates) {\n const value = readVersionField(candidate);\n if (value) {\n return value;\n }\n }\n for (const candidate of packageJsonCandidates) {\n const value = readVersionField(candidate);\n if (value) {\n return value;\n }\n }\n for (const candidate of buildInfoCandidates) {\n const value = readVersionField(candidate);\n if (value) {\n return value;\n }\n }\n return \"0.0.0\";\n}\n\nfunction resolveBrowserBridgeReleaseRepository(\n env: NodeJS.ProcessEnv = process.env,\n): string {\n const configuredRepository =\n typeof env.GITHUB_REPOSITORY === \"string\" && env.GITHUB_REPOSITORY.trim()\n ? env.GITHUB_REPOSITORY.trim()\n : null;\n if (configuredRepository) {\n return configuredRepository;\n }\n\n for (const candidate of extensionPackageJsonCandidates) {\n const repository = readRepositoryField(candidate);\n if (repository) {\n return repository;\n }\n }\n\n for (const candidate of packageJsonCandidates) {\n const repository = readRepositoryField(candidate);\n if (repository) {\n return repository;\n }\n }\n\n return DEFAULT_REPOSITORY;\n}\n\ntype ReleaseVersion = {\n raw: string;\n tag: string;\n major: number;\n minor: number;\n patch: number;\n prereleaseLabel: string | null;\n prereleaseValue: string | null;\n baseVersion: string;\n hasPrerelease: boolean;\n};\n\nfunction normalizeReleaseVersionCandidate(raw: string): string | null {\n const trimmed = raw.trim();\n if (!trimmed) {\n return null;\n }\n return trimmed.startsWith(\"v\") ? trimmed.slice(1) : trimmed;\n}\n\nfunction parseReleaseVersion(raw: string): ReleaseVersion | null {\n const normalized = normalizeReleaseVersionCandidate(raw);\n if (!normalized) {\n return null;\n }\n const match = normalized.match(\n /^(\\d+)\\.(\\d+)\\.(\\d+)(?:-(beta|rc|nightly)\\.([0-9A-Za-z.-]+))?$/,\n );\n if (!match) {\n return null;\n }\n const majorRaw = match[1];\n const minorRaw = match[2];\n const patchRaw = match[3];\n if (!majorRaw || !minorRaw || !patchRaw) {\n return null;\n }\n const major = Number.parseInt(majorRaw, 10);\n const minor = Number.parseInt(minorRaw, 10);\n const patch = Number.parseInt(patchRaw, 10);\n const prereleaseLabel = match[4] ?? null;\n const prereleaseValue = match[5] ?? null;\n return {\n raw: normalized,\n tag: `v${normalized}`,\n major,\n minor,\n patch,\n prereleaseLabel,\n prereleaseValue,\n baseVersion: `${major}.${minor}.${patch}`,\n hasPrerelease: prereleaseLabel !== null,\n };\n}\n\nfunction clamp(value: number, minimum: number, maximum: number): number {\n return Math.min(maximum, Math.max(minimum, value));\n}\n\nfunction parseNumericPrereleaseValue(value: string | null): number {\n if (!value) {\n return 0;\n }\n const parsed = Number.parseInt(value, 10);\n return Number.isFinite(parsed) ? parsed : 0;\n}\n\nfunction deriveNightlyOrdinal(value: string | null): number {\n if (typeof value === \"string\" && /^\\d{8}$/.test(value)) {\n const year = Number.parseInt(value.slice(0, 4), 10);\n const month = Number.parseInt(value.slice(4, 6), 10);\n const day = Number.parseInt(value.slice(6, 8), 10);\n const utcMs = Date.UTC(year, month - 1, day);\n if (Number.isFinite(utcMs)) {\n return clamp(\n Math.floor((utcMs - NIGHTLY_EPOCH_UTC_MS) / 86_400_000) + 1,\n 1,\n 9999,\n );\n }\n }\n\n const parsed = parseNumericPrereleaseValue(value);\n if (parsed > 0) {\n return clamp(parsed, 1, 9999);\n }\n\n let hash = 0;\n for (const character of String(value ?? \"\")) {\n hash = (hash * 33 + character.charCodeAt(0)) % 9999;\n }\n return clamp(hash, 1, 9999);\n}\n\nfunction derivePrereleaseOrdinal(release: ReleaseVersion): number {\n if (!release.hasPrerelease || !release.prereleaseLabel) {\n return 0;\n }\n if (release.prereleaseLabel === \"nightly\") {\n return deriveNightlyOrdinal(release.prereleaseValue);\n }\n return clamp(parseNumericPrereleaseValue(release.prereleaseValue), 0, 9999);\n}\n\nfunction buildChromeExtensionVersion(release: ReleaseVersion): string {\n let buildSegment = 60000;\n if (release.hasPrerelease && release.prereleaseLabel) {\n const ordinal = derivePrereleaseOrdinal(release);\n buildSegment =\n release.prereleaseLabel === \"rc\"\n ? 50000 + ordinal\n : release.prereleaseLabel === \"beta\"\n ? 40000 + ordinal\n : 10000 + ordinal;\n }\n return [release.major, release.minor, release.patch, buildSegment].join(\".\");\n}\n\nfunction buildSafariExtensionVersions(release: ReleaseVersion): {\n marketingVersion: string;\n buildVersion: string;\n} {\n const ordinal = derivePrereleaseOrdinal(release);\n const suffix =\n !release.hasPrerelease || !release.prereleaseLabel\n ? 9000\n : release.prereleaseLabel === \"rc\"\n ? 8000 + ordinal\n : release.prereleaseLabel === \"beta\"\n ? 7000 + ordinal\n : 5000 + ordinal;\n\n return {\n marketingVersion: release.baseVersion,\n buildVersion: String(\n release.major * 100_000_000 +\n release.minor * 1_000_000 +\n release.patch * 10_000 +\n suffix,\n ),\n };\n}\n\nfunction versionedArtifactName(\n prefix: string,\n extension: string,\n release: ReleaseVersion,\n): string {\n return `${prefix}-${release.tag}.${extension.replace(/^\\./, \"\")}`;\n}\n\nfunction buildGitHubReleasePageUrl(\n repository: string,\n release: ReleaseVersion,\n): string {\n return `https://github.com/${repository}/releases/tag/${release.tag}`;\n}\n\nfunction buildGitHubReleaseAssetDownloadUrl(\n repository: string,\n release: ReleaseVersion,\n assetName: string,\n): string {\n return `https://github.com/${repository}/releases/download/${release.tag}/${assetName}`;\n}\n\nfunction resolveBrowserBridgeStoreUrls(env = process.env): {\n chromeWebStoreUrl: string | null;\n safariAppStoreUrl: string | null;\n} {\n const chromeWebStoreUrl =\n typeof env.ELIZA_BROWSER_BRIDGE_CHROME_STORE_URL === \"string\" &&\n env.ELIZA_BROWSER_BRIDGE_CHROME_STORE_URL.trim()\n ? env.ELIZA_BROWSER_BRIDGE_CHROME_STORE_URL.trim()\n : null;\n const safariAppStoreUrl =\n typeof env.ELIZA_BROWSER_BRIDGE_SAFARI_STORE_URL === \"string\" &&\n env.ELIZA_BROWSER_BRIDGE_SAFARI_STORE_URL.trim()\n ? env.ELIZA_BROWSER_BRIDGE_SAFARI_STORE_URL.trim()\n : null;\n return {\n chromeWebStoreUrl,\n safariAppStoreUrl,\n };\n}\n\nexport function buildBrowserBridgeReleaseManifestForVersion(\n rawVersion: string,\n env = process.env,\n): BrowserBridgeCompanionReleaseManifest | null {\n const release = parseReleaseVersion(rawVersion);\n if (!release) {\n return null;\n }\n const repository = resolveBrowserBridgeReleaseRepository(env);\n const storeUrls = resolveBrowserBridgeStoreUrls(env);\n const chromeAssetName = versionedArtifactName(\n \"browser-bridge-chrome\",\n \"zip\",\n release,\n );\n const safariAssetName = versionedArtifactName(\n \"browser-bridge-safari\",\n \"zip\",\n release,\n );\n const safariVersions = buildSafariExtensionVersions(release);\n return {\n schema: \"browser_bridge_release_v2\",\n releaseTag: release.tag,\n releaseVersion: release.raw,\n repository,\n releasePageUrl: buildGitHubReleasePageUrl(repository, release),\n chromeVersion: buildChromeExtensionVersion(release),\n chromeVersionName: release.raw,\n safariMarketingVersion: safariVersions.marketingVersion,\n safariBuildVersion: safariVersions.buildVersion,\n chrome: {\n installKind: storeUrls.chromeWebStoreUrl\n ? \"chrome_web_store\"\n : \"github_release\",\n installUrl:\n storeUrls.chromeWebStoreUrl ??\n buildGitHubReleaseAssetDownloadUrl(\n repository,\n release,\n chromeAssetName,\n ),\n storeListingUrl: storeUrls.chromeWebStoreUrl,\n asset: {\n fileName: chromeAssetName,\n downloadUrl: buildGitHubReleaseAssetDownloadUrl(\n repository,\n release,\n chromeAssetName,\n ),\n },\n },\n safari: {\n installKind: storeUrls.safariAppStoreUrl\n ? \"apple_app_store\"\n : \"github_release\",\n installUrl:\n storeUrls.safariAppStoreUrl ??\n buildGitHubReleaseAssetDownloadUrl(\n repository,\n release,\n safariAssetName,\n ),\n storeListingUrl: storeUrls.safariAppStoreUrl,\n asset: {\n fileName: safariAssetName,\n downloadUrl: buildGitHubReleaseAssetDownloadUrl(\n repository,\n release,\n safariAssetName,\n ),\n },\n },\n generatedAt: new Date().toISOString(),\n };\n}\n\nfunction readReleaseManifest(\n artifactsDir: string,\n): BrowserBridgeCompanionReleaseManifest | null {\n const manifestPath = path.join(\n artifactsDir,\n \"browser-bridge-release-manifest.json\",\n );\n if (!fs.existsSync(manifestPath)) {\n return null;\n }\n try {\n return JSON.parse(\n fs.readFileSync(manifestPath, \"utf8\"),\n ) as BrowserBridgeCompanionReleaseManifest;\n } catch {\n return null;\n }\n}\n\nexport function resolveBrowserBridgeReleaseManifest(\n artifactsDir: string | null,\n options?: {\n allowSynthesis?: boolean;\n version?: string;\n env?: NodeJS.ProcessEnv;\n },\n): BrowserBridgeCompanionReleaseManifest | null {\n if (artifactsDir) {\n const releaseManifest = readReleaseManifest(artifactsDir);\n if (releaseManifest) {\n return releaseManifest;\n }\n }\n if (!options?.allowSynthesis) {\n return null;\n }\n return buildBrowserBridgeReleaseManifestForVersion(\n options.version ?? resolveBrowserBridgeReleaseVersion(),\n options.env,\n );\n}\n\nfunction resolveBrowserBridgeExtensionRoot(): string | null {\n return firstExisting(extensionRootCandidates);\n}\n\nfunction packageScriptName(browser: BrowserBridgeKind): string {\n return browser === \"safari\" ? \"package-safari.mjs\" : \"package-chrome.mjs\";\n}\n\nfunction runCommand(\n command: string,\n args: string[],\n cwd: string,\n): Promise<void> {\n return new Promise((resolve, reject) => {\n const child = spawn(command, args, {\n cwd,\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n env: process.env,\n });\n let stderr = \"\";\n child.stderr.on(\"data\", (chunk) => {\n stderr += String(chunk);\n });\n child.on(\"error\", reject);\n child.on(\"exit\", (code) => {\n if (code === 0) {\n resolve();\n return;\n }\n reject(\n new Error(\n stderr.trim() ||\n `${command} ${args.join(\" \")} exited with code ${code ?? \"unknown\"}`,\n ),\n );\n });\n });\n}\n\nexport function resolveBrowserBridgeExtensionPath(): string | null {\n return resolveBrowserBridgeExtensionRoot();\n}\n\nexport function resolveBrowserBridgeCompanionPackagePath(\n status: BrowserBridgeCompanionPackageStatus,\n target: BrowserBridgePackagePathTarget,\n): string | null {\n switch (target) {\n case \"extension_root\":\n return status.extensionPath;\n case \"chrome_build\":\n return status.chromeBuildPath;\n case \"chrome_package\":\n return status.chromePackagePath;\n case \"safari_web_extension\":\n return status.safariWebExtensionPath;\n case \"safari_app\":\n return status.safariAppPath;\n case \"safari_package\":\n return status.safariPackagePath;\n default:\n return null;\n }\n}\n\nasync function openPathInHost(\n pathValue: string,\n revealOnly: boolean,\n): Promise<void> {\n const revealDirectory =\n revealOnly &&\n fs.existsSync(pathValue) &&\n fs.statSync(pathValue).isDirectory()\n ? pathValue\n : path.dirname(pathValue);\n const cwd = outerRepoRoot;\n switch (process.platform) {\n case \"darwin\":\n await runCommand(\n \"open\",\n revealOnly ? [\"-R\", pathValue] : [pathValue],\n cwd,\n );\n return;\n case \"win32\":\n await runCommand(\n revealOnly ? \"explorer.exe\" : \"cmd\",\n revealOnly ? [`/select,${pathValue}`] : [\"/c\", \"start\", \"\", pathValue],\n cwd,\n );\n return;\n case \"linux\":\n await runCommand(\n \"xdg-open\",\n [revealOnly ? revealDirectory : pathValue],\n cwd,\n );\n return;\n default:\n throw new Error(\n `Opening local paths is not supported on ${process.platform}`,\n );\n }\n}\n\nasync function openChromeExtensionsManager(): Promise<void> {\n const cwd = outerRepoRoot;\n switch (process.platform) {\n case \"darwin\":\n await runCommand(\n \"open\",\n [\"-a\", \"Google Chrome\", \"chrome://extensions/\"],\n cwd,\n );\n return;\n case \"win32\":\n await runCommand(\n \"cmd\",\n [\"/c\", \"start\", \"\", \"chrome\", \"chrome://extensions/\"],\n cwd,\n );\n return;\n case \"linux\":\n await runCommand(\"xdg-open\", [\"chrome://extensions/\"], cwd);\n return;\n default:\n throw new Error(\n `Opening the Chrome extensions manager is not supported on ${process.platform}`,\n );\n }\n}\n\nexport function getBrowserBridgeCompanionPackageStatus(): BrowserBridgeCompanionPackageStatus {\n const resolvedExtensionPath = resolveBrowserBridgeExtensionPath();\n if (!resolvedExtensionPath) {\n return {\n extensionPath: null,\n chromeBuildPath: null,\n chromePackagePath: null,\n safariWebExtensionPath: null,\n safariAppPath: null,\n safariPackagePath: null,\n releaseManifest: resolveBrowserBridgeReleaseManifest(null, {\n allowSynthesis: true,\n }),\n };\n }\n\n const distDir = path.join(resolvedExtensionPath, \"dist\");\n const artifactsDir = path.join(distDir, \"artifacts\");\n\n return {\n extensionPath: resolvedExtensionPath,\n chromeBuildPath: existingPath(path.join(distDir, \"chrome\")),\n chromePackagePath: existingPath(\n path.join(artifactsDir, \"browser-bridge-chrome.zip\"),\n ),\n safariWebExtensionPath: existingPath(path.join(distDir, \"safari\")),\n safariAppPath: existingPath(\n path.join(artifactsDir, \"Agent Browser Bridge.app\"),\n ),\n safariPackagePath: existingPath(\n path.join(artifactsDir, \"browser-bridge-safari.zip\"),\n ),\n releaseManifest: resolveBrowserBridgeReleaseManifest(artifactsDir, {\n allowSynthesis: true,\n }),\n };\n}\n\nexport function getBrowserBridgeCompanionDownloadFile(\n browser: BrowserBridgeKind,\n): { path: string; filename: string; contentType: string } {\n const status = getBrowserBridgeCompanionPackageStatus();\n const filePath =\n browser === \"safari\" ? status.safariPackagePath : status.chromePackagePath;\n if (!filePath) {\n throw new Error(\n `${browser === \"safari\" ? \"Safari\" : \"Chrome\"} package has not been built yet`,\n );\n }\n return {\n path: filePath,\n filename: path.basename(filePath),\n contentType: \"application/zip\",\n };\n}\n\nexport async function openBrowserBridgeCompanionPackagePath(\n target: BrowserBridgePackagePathTarget,\n options?: { revealOnly?: boolean },\n): Promise<{\n target: BrowserBridgePackagePathTarget;\n path: string;\n revealOnly: boolean;\n}> {\n const revealOnly = options?.revealOnly ?? false;\n const status = getBrowserBridgeCompanionPackageStatus();\n const resolvedPath = resolveBrowserBridgeCompanionPackagePath(status, target);\n if (!resolvedPath) {\n throw new Error(`Browser Bridge path is not available for ${target}`);\n }\n await openPathInHost(resolvedPath, revealOnly);\n return {\n target,\n path: resolvedPath,\n revealOnly,\n };\n}\n\nexport async function openBrowserBridgeCompanionManager(\n browser: BrowserBridgeKind,\n): Promise<{ browser: BrowserBridgeKind }> {\n if (browser !== \"chrome\") {\n throw new Error(\n \"Only Chrome exposes a local extensions manager for unpacked install\",\n );\n }\n await openChromeExtensionsManager();\n return { browser };\n}\n\nexport async function buildBrowserBridgeCompanionPackage(\n browser: BrowserBridgeKind,\n): Promise<BrowserBridgeCompanionPackageStatus> {\n const resolvedExtensionPath = resolveBrowserBridgeExtensionPath();\n if (!resolvedExtensionPath) {\n throw new Error(\"Browser Bridge extension workspace is not available\");\n }\n\n await runCommand(\n \"bun\",\n [path.join(resolvedExtensionPath, \"scripts\", packageScriptName(browser))],\n resolvedExtensionPath,\n );\n\n return getBrowserBridgeCompanionPackageStatus();\n}\n"],"mappings":"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","names":[]}