unbrowse 3.1.0-experiments.93cfad2 → 3.1.0-experiments.9b17005

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 (108) hide show
  1. package/dist/cli.js +44 -30
  2. package/dist/index.js +2 -6
  3. package/dist/mcp.js +25 -21
  4. package/dist/server.js +25794 -0
  5. package/package.json +1 -2
  6. package/vendor/kuri/darwin-x64/kuri +0 -0
  7. package/vendor/kuri/linux-arm64/kuri +0 -0
  8. package/vendor/kuri/linux-x64/kuri +0 -0
  9. package/vendor/kuri/manifest.json +4 -4
  10. package/runtime-src/agent-outcome.ts +0 -166
  11. package/runtime-src/analytics-session.ts +0 -55
  12. package/runtime-src/api/browse-index.ts +0 -347
  13. package/runtime-src/api/browse-session.ts +0 -572
  14. package/runtime-src/api/browse-submit-prereqs.ts +0 -48
  15. package/runtime-src/api/browse-submit.ts +0 -1184
  16. package/runtime-src/api/routes.ts +0 -1845
  17. package/runtime-src/auth/browser-cookies.ts +0 -423
  18. package/runtime-src/auth/index.ts +0 -535
  19. package/runtime-src/auth/runtime.ts +0 -116
  20. package/runtime-src/browser/index.ts +0 -659
  21. package/runtime-src/browser/types.ts +0 -41
  22. package/runtime-src/build-info.generated.ts +0 -6
  23. package/runtime-src/capture/index.ts +0 -1929
  24. package/runtime-src/capture/prefetch.ts +0 -95
  25. package/runtime-src/capture/rsc.ts +0 -45
  26. package/runtime-src/cli/shortcuts.ts +0 -273
  27. package/runtime-src/cli.ts +0 -1734
  28. package/runtime-src/client/graph-client.ts +0 -100
  29. package/runtime-src/client/index.ts +0 -1437
  30. package/runtime-src/debug-trace.ts +0 -18
  31. package/runtime-src/domain.ts +0 -38
  32. package/runtime-src/execution/index.ts +0 -3408
  33. package/runtime-src/execution/retry.ts +0 -46
  34. package/runtime-src/execution/robots.ts +0 -167
  35. package/runtime-src/execution/search-forms.ts +0 -188
  36. package/runtime-src/execution/token-resolver.ts +0 -174
  37. package/runtime-src/extraction/index.ts +0 -1507
  38. package/runtime-src/foundry/publish-bundle.ts +0 -392
  39. package/runtime-src/graph/agent-augment.ts +0 -315
  40. package/runtime-src/graph/index.ts +0 -1532
  41. package/runtime-src/graph/local-fixtures.ts +0 -393
  42. package/runtime-src/graph/local-harness.ts +0 -646
  43. package/runtime-src/graph/planner.ts +0 -411
  44. package/runtime-src/graph/session.ts +0 -294
  45. package/runtime-src/graph/trace-store.ts +0 -136
  46. package/runtime-src/impact-log.ts +0 -227
  47. package/runtime-src/index.ts +0 -24
  48. package/runtime-src/indexer/index.ts +0 -465
  49. package/runtime-src/intent-match.ts +0 -1515
  50. package/runtime-src/kuri/client.ts +0 -1839
  51. package/runtime-src/logger.ts +0 -30
  52. package/runtime-src/marketplace/index.ts +0 -111
  53. package/runtime-src/mcp.ts +0 -1911
  54. package/runtime-src/orchestrator/browser-agent.ts +0 -374
  55. package/runtime-src/orchestrator/dag-advisor.ts +0 -59
  56. package/runtime-src/orchestrator/dag-feedback.ts +0 -257
  57. package/runtime-src/orchestrator/first-pass-action.ts +0 -403
  58. package/runtime-src/orchestrator/index.ts +0 -4480
  59. package/runtime-src/orchestrator/passive-publish.ts +0 -187
  60. package/runtime-src/orchestrator/timing-economics.ts +0 -80
  61. package/runtime-src/payments/cascade.ts +0 -137
  62. package/runtime-src/payments/index.ts +0 -270
  63. package/runtime-src/payments/lobster-pay.ts +0 -182
  64. package/runtime-src/payments/wallet.ts +0 -98
  65. package/runtime-src/publish/review-context.ts +0 -93
  66. package/runtime-src/publish/sanitize.ts +0 -197
  67. package/runtime-src/publish/schema-review.ts +0 -192
  68. package/runtime-src/publish-admission.ts +0 -388
  69. package/runtime-src/ratelimit/index.ts +0 -23
  70. package/runtime-src/reverse-engineer/bundle-scanner.ts +0 -127
  71. package/runtime-src/reverse-engineer/description-prompt.ts +0 -213
  72. package/runtime-src/reverse-engineer/index.ts +0 -1551
  73. package/runtime-src/reverse-engineer/token-sources.ts +0 -379
  74. package/runtime-src/router.ts +0 -17
  75. package/runtime-src/routing-telemetry.ts +0 -395
  76. package/runtime-src/runtime/browser-access.ts +0 -11
  77. package/runtime-src/runtime/browser-auth.ts +0 -12
  78. package/runtime-src/runtime/browser-host.ts +0 -48
  79. package/runtime-src/runtime/lifecycle.ts +0 -17
  80. package/runtime-src/runtime/local-server.ts +0 -311
  81. package/runtime-src/runtime/paths.ts +0 -99
  82. package/runtime-src/runtime/setup.ts +0 -251
  83. package/runtime-src/runtime/supervisor.ts +0 -69
  84. package/runtime-src/runtime/update-hints.ts +0 -351
  85. package/runtime-src/server.ts +0 -100
  86. package/runtime-src/session-logs.ts +0 -142
  87. package/runtime-src/settings.ts +0 -221
  88. package/runtime-src/single-binary.ts +0 -143
  89. package/runtime-src/site-policy.ts +0 -54
  90. package/runtime-src/stale-cleanup-runner.ts +0 -144
  91. package/runtime-src/stale-cleanup.ts +0 -133
  92. package/runtime-src/telemetry-attribution.ts +0 -120
  93. package/runtime-src/telemetry.ts +0 -253
  94. package/runtime-src/template-params.ts +0 -141
  95. package/runtime-src/transform/drift.ts +0 -60
  96. package/runtime-src/transform/index.ts +0 -277
  97. package/runtime-src/types/index.ts +0 -1
  98. package/runtime-src/types/skill.ts +0 -931
  99. package/runtime-src/vault/index.ts +0 -196
  100. package/runtime-src/verification/auth-gate.ts +0 -8
  101. package/runtime-src/verification/candidates.ts +0 -27
  102. package/runtime-src/verification/index.ts +0 -120
  103. package/runtime-src/verification/matrix.ts +0 -30
  104. package/runtime-src/version.ts +0 -148
  105. package/runtime-src/workflow/artifact.ts +0 -161
  106. package/runtime-src/workflow/compile.ts +0 -808
  107. package/runtime-src/workflow/publish.ts +0 -225
  108. package/runtime-src/workflow/runtime.ts +0 -213
package/dist/cli.js CHANGED
@@ -31,7 +31,7 @@ var __promiseAll = (args) => Promise.all(args);
31
31
  var __require = /* @__PURE__ */ createRequire(import.meta.url);
32
32
 
33
33
  // ../../src/build-info.generated.ts
34
- var BUILD_RELEASE_VERSION = "3.1.0-experiments.93cfad2", BUILD_GIT_SHA = "93cfad23737e", BUILD_CODE_HASH = "1488fc1d92b7", BUILD_RELEASE_MANIFEST_BASE64 = "eyJzY2hlbWFfdmVyc2lvbiI6MSwicmVsZWFzZV92ZXJzaW9uIjoiMy4xLjAtZXhwZXJpbWVudHMuOTNjZmFkMiIsImdpdF9zaGEiOiI5M2NmYWQyMzczN2UiLCJjb2RlX2hhc2giOiIxNDg4ZmMxZDkyYjciLCJ0cmFjZV92ZXJzaW9uIjoiMTQ4OGZjMWQ5MmI3QDkzY2ZhZDIzNzM3ZSIsImlzc3VlZF9hdCI6IjIwMjYtMDQtMDZUMDM6MDM6MDAuODk5WiJ9", BUILD_RELEASE_MANIFEST_SIGNATURE = "dL8-FjofQKein9ZtjuzUMwrPbZIaUz9s46uyyRqj9Jo", BUILD_DEFAULT_BACKEND_URL = "https://unbrowse-backend-experiments.lewis-6d8.workers.dev";
34
+ var BUILD_RELEASE_VERSION = "3.1.0-experiments.9b17005", BUILD_GIT_SHA = "9b17005b5aae", BUILD_CODE_HASH = "1488fc1d92b7", BUILD_RELEASE_MANIFEST_BASE64 = "eyJzY2hlbWFfdmVyc2lvbiI6MSwicmVsZWFzZV92ZXJzaW9uIjoiMy4xLjAtZXhwZXJpbWVudHMuOWIxNzAwNSIsImdpdF9zaGEiOiI5YjE3MDA1YjVhYWUiLCJjb2RlX2hhc2giOiIxNDg4ZmMxZDkyYjciLCJ0cmFjZV92ZXJzaW9uIjoiMTQ4OGZjMWQ5MmI3QDliMTcwMDViNWFhZSIsImlzc3VlZF9hdCI6IjIwMjYtMDQtMDZUMDQ6MDA6NTkuNTM0WiJ9", BUILD_RELEASE_MANIFEST_SIGNATURE = "hkh9PmEQoF8Xxv8n8F-gxqI6nusA4RIZ0FNIoMEOgRg", BUILD_DEFAULT_BACKEND_URL = "https://unbrowse-backend-experiments.lewis-6d8.workers.dev";
35
35
 
36
36
  // ../../src/version.ts
37
37
  import { createHash } from "crypto";
@@ -586,7 +586,7 @@ var init_logger = __esm(() => {
586
586
 
587
587
  // ../../src/kuri/client.ts
588
588
  import { execFileSync as execFileSync2, spawn as spawn2 } from "node:child_process";
589
- import { existsSync as existsSync8 } from "node:fs";
589
+ import { existsSync as existsSync9 } from "node:fs";
590
590
  import path5 from "node:path";
591
591
  function createBrokerState(port = KURI_DEFAULT_PORT) {
592
592
  return {
@@ -661,7 +661,7 @@ function findKuriBinary() {
661
661
  if (process.env.KURI_BIN)
662
662
  return process.env.KURI_BIN;
663
663
  const candidates = getKuriBinaryCandidates();
664
- return candidates.find((candidate) => existsSync8(candidate)) ?? candidates[0] ?? kuriBinaryName();
664
+ return candidates.find((candidate) => existsSync9(candidate)) ?? candidates[0] ?? kuriBinaryName();
665
665
  }
666
666
  var KURI_DEFAULT_PORT = 7700, defaultBrokerState, brokerClients;
667
667
  var init_client2 = __esm(() => {
@@ -796,6 +796,15 @@ var init_bundle_scanner = __esm(() => {
796
796
  init_logger();
797
797
  });
798
798
 
799
+ // ../../src/reverse-engineer/token-sources.ts
800
+ var init_token_sources = () => {};
801
+
802
+ // ../../src/execution/token-resolver.ts
803
+ var init_token_resolver = __esm(() => {
804
+ init_token_sources();
805
+ init_client2();
806
+ });
807
+
799
808
  // ../../src/vault/index.ts
800
809
  import { join as join7 } from "path";
801
810
  import { homedir as homedir5 } from "os";
@@ -1014,6 +1023,7 @@ var init_execution = __esm(async () => {
1014
1023
  init_capture();
1015
1024
  init_reverse_engineer();
1016
1025
  init_bundle_scanner();
1026
+ init_token_resolver();
1017
1027
  init_marketplace();
1018
1028
  init_runtime();
1019
1029
  init_transform();
@@ -1152,7 +1162,7 @@ var init_routing_telemetry = __esm(() => {
1152
1162
  });
1153
1163
  // ../../src/orchestrator/index.ts
1154
1164
  import { nanoid as nanoid9 } from "nanoid";
1155
- import { existsSync as existsSync9, writeFileSync as writeFileSync3, readFileSync as readFileSync6, mkdirSync as mkdirSync5, readdirSync as readdirSync3 } from "node:fs";
1165
+ import { existsSync as existsSync10, writeFileSync as writeFileSync3, readFileSync as readFileSync6, mkdirSync as mkdirSync5, readdirSync as readdirSync3 } from "node:fs";
1156
1166
  import { dirname as dirname3, join as join9 } from "node:path";
1157
1167
  var LIVE_CAPTURE_TIMEOUT_MS, capturedDomainCache, captureInFlight, captureDomainLocks, skillRouteCache, ROUTE_CACHE_FILE, SKILL_SNAPSHOT_DIR2, domainSkillCache, DOMAIN_CACHE_FILE, _routeCacheDirty = false, routeCacheFlushTimer, routeResultCache, ROUTE_CACHE_TTL, MARKETPLACE_HYDRATE_LIMIT, MARKETPLACE_GET_SKILL_TIMEOUT_MS, MARKETPLACE_DOMAIN_SEARCH_K, MARKETPLACE_GLOBAL_SEARCH_K, SEARCH_INTENT_STOPWORDS;
1158
1168
  var init_orchestrator = __esm(async () => {
@@ -1188,7 +1198,7 @@ var init_orchestrator = __esm(async () => {
1188
1198
  domainSkillCache = new Map;
1189
1199
  DOMAIN_CACHE_FILE = join9(process.env.HOME ?? "/tmp", ".unbrowse", "domain-skill-cache.json");
1190
1200
  try {
1191
- if (existsSync9(DOMAIN_CACHE_FILE)) {
1201
+ if (existsSync10(DOMAIN_CACHE_FILE)) {
1192
1202
  const data = JSON.parse(readFileSync6(DOMAIN_CACHE_FILE, "utf-8"));
1193
1203
  for (const [k, v] of Object.entries(data)) {
1194
1204
  const entry = v;
@@ -1205,7 +1215,7 @@ var init_orchestrator = __esm(async () => {
1205
1215
  _routeCacheDirty = false;
1206
1216
  try {
1207
1217
  const dir = dirname3(ROUTE_CACHE_FILE);
1208
- if (!existsSync9(dir))
1218
+ if (!existsSync10(dir))
1209
1219
  mkdirSync5(dir, { recursive: true });
1210
1220
  const entries = Object.fromEntries(skillRouteCache);
1211
1221
  writeFileSync3(ROUTE_CACHE_FILE, JSON.stringify(entries), "utf-8");
@@ -1213,7 +1223,7 @@ var init_orchestrator = __esm(async () => {
1213
1223
  }, 5000);
1214
1224
  routeCacheFlushTimer.unref?.();
1215
1225
  try {
1216
- if (existsSync9(ROUTE_CACHE_FILE)) {
1226
+ if (existsSync10(ROUTE_CACHE_FILE)) {
1217
1227
  const data = JSON.parse(readFileSync6(ROUTE_CACHE_FILE, "utf-8"));
1218
1228
  for (const [k, v] of Object.entries(data)) {
1219
1229
  const entry = v;
@@ -1310,7 +1320,7 @@ __export(exports_wallet, {
1310
1320
  getWalletContext: () => getWalletContext2,
1311
1321
  checkWalletConfigured: () => checkWalletConfigured2
1312
1322
  });
1313
- import { existsSync as existsSync13, readFileSync as readFileSync9 } from "node:fs";
1323
+ import { existsSync as existsSync14, readFileSync as readFileSync9 } from "node:fs";
1314
1324
  import { homedir as homedir6 } from "node:os";
1315
1325
  import { join as join11 } from "node:path";
1316
1326
  function asNonEmptyString2(value) {
@@ -1318,7 +1328,7 @@ function asNonEmptyString2(value) {
1318
1328
  }
1319
1329
  function getLobsterWalletFromLocalConfig2() {
1320
1330
  const agentsPath = join11(process.env.HOME || homedir6(), ".lobster", "agents.json");
1321
- if (!existsSync13(agentsPath))
1331
+ if (!existsSync14(agentsPath))
1322
1332
  return;
1323
1333
  try {
1324
1334
  const raw = JSON.parse(readFileSync9(agentsPath, "utf8"));
@@ -2297,7 +2307,7 @@ function buildDepsMetadata(pack, taskName) {
2297
2307
  init_paths();
2298
2308
  init_supervisor();
2299
2309
  init_version();
2300
- import { openSync, readFileSync as readFileSync5, unlinkSync as unlinkSync2, writeFileSync as writeFileSync2 } from "node:fs";
2310
+ import { existsSync as existsSync7, openSync, readFileSync as readFileSync5, unlinkSync as unlinkSync2, writeFileSync as writeFileSync2 } from "node:fs";
2301
2311
  import path2 from "node:path";
2302
2312
  import { spawn } from "node:child_process";
2303
2313
  function isServerVersionMismatch(runningVersion, installedVersion, runningCodeHash, installedCodeHash) {
@@ -2363,6 +2373,10 @@ function getServerSpawnSpec(metaUrl, entrypoint = resolveSiblingEntrypoint(metaU
2363
2373
  recordedEntrypoint: `${process.execPath} serve`
2364
2374
  };
2365
2375
  }
2376
+ const serverJs = path2.join(path2.dirname(entrypoint), "server.js");
2377
+ if (existsSync7(serverJs) && path2.basename(entrypoint) !== "server.js") {
2378
+ entrypoint = serverJs;
2379
+ }
2366
2380
  return {
2367
2381
  command: process.execPath,
2368
2382
  args: runtimeArgsForEntrypoint(metaUrl, entrypoint),
@@ -2508,7 +2522,7 @@ async function restartServer(baseUrl, metaUrl) {
2508
2522
  }
2509
2523
 
2510
2524
  // ../../src/runtime/paths.ts
2511
- import { existsSync as existsSync7, mkdirSync as mkdirSync4, realpathSync as realpathSync2 } from "node:fs";
2525
+ import { existsSync as existsSync8, mkdirSync as mkdirSync4, realpathSync as realpathSync2 } from "node:fs";
2512
2526
  import path3 from "node:path";
2513
2527
  import { createRequire as createRequire3 } from "node:module";
2514
2528
  import { fileURLToPath as fileURLToPath3, pathToFileURL as pathToFileURL2 } from "node:url";
@@ -2528,7 +2542,7 @@ function runtimeArgsForEntrypoint2(metaUrl, entrypoint) {
2528
2542
  const req = createRequire3(metaUrl);
2529
2543
  const tsxPkg = req.resolve("tsx/package.json");
2530
2544
  const tsxLoader = path3.join(path3.dirname(tsxPkg), "dist", "loader.mjs");
2531
- if (existsSync7(tsxLoader))
2545
+ if (existsSync8(tsxLoader))
2532
2546
  return ["--import", pathToFileURL2(tsxLoader).href, entrypoint];
2533
2547
  } catch {}
2534
2548
  return ["--import", "tsx", entrypoint];
@@ -2597,13 +2611,13 @@ init_client2();
2597
2611
  init_logger();
2598
2612
  init_wallet();
2599
2613
  import { execFileSync as execFileSync3 } from "node:child_process";
2600
- import { existsSync as existsSync11, mkdirSync as mkdirSync7, writeFileSync as writeFileSync5 } from "node:fs";
2614
+ import { existsSync as existsSync12, mkdirSync as mkdirSync7, writeFileSync as writeFileSync5 } from "node:fs";
2601
2615
  import os4 from "node:os";
2602
2616
  import path7 from "node:path";
2603
2617
 
2604
2618
  // ../../src/runtime/update-hints.ts
2605
2619
  init_paths();
2606
- import { existsSync as existsSync10, mkdirSync as mkdirSync6, readFileSync as readFileSync7, writeFileSync as writeFileSync4 } from "node:fs";
2620
+ import { existsSync as existsSync11, mkdirSync as mkdirSync6, readFileSync as readFileSync7, writeFileSync as writeFileSync4 } from "node:fs";
2607
2621
  import os3 from "node:os";
2608
2622
  import path6 from "node:path";
2609
2623
  var DEFAULT_INTERVAL_MS = 12 * 60 * 60 * 1000;
@@ -2617,7 +2631,7 @@ function getConfigDir2() {
2617
2631
  return path6.join(getHomeDir(), ".unbrowse");
2618
2632
  }
2619
2633
  function ensureDir3(dir) {
2620
- if (!existsSync10(dir))
2634
+ if (!existsSync11(dir))
2621
2635
  mkdirSync6(dir, { recursive: true });
2622
2636
  return dir;
2623
2637
  }
@@ -2640,7 +2654,7 @@ function detectRepoRoot(start2) {
2640
2654
  let dir = path6.resolve(start2);
2641
2655
  const root = path6.parse(dir).root;
2642
2656
  while (dir !== root) {
2643
- if (existsSync10(path6.join(dir, ".git")))
2657
+ if (existsSync11(path6.join(dir, ".git")))
2644
2658
  return dir;
2645
2659
  dir = path6.dirname(dir);
2646
2660
  }
@@ -2719,12 +2733,12 @@ codex_hooks = true
2719
2733
  }
2720
2734
  function writeCodexHook(metaUrl) {
2721
2735
  const configPath = getCodexConfigPath();
2722
- if (!existsSync10(path6.dirname(configPath))) {
2736
+ if (!existsSync11(path6.dirname(configPath))) {
2723
2737
  return { host: "codex", action: "not-detected", config_file: configPath };
2724
2738
  }
2725
2739
  try {
2726
2740
  const hookScript = getHookScriptPath(metaUrl).replace(/\\/g, "/");
2727
- const fileExistsBefore = existsSync10(configPath);
2741
+ const fileExistsBefore = existsSync11(configPath);
2728
2742
  let content = fileExistsBefore ? readFileSync7(configPath, "utf8") : "";
2729
2743
  const previous = content;
2730
2744
  content = ensureCodexHooksFeature(content);
@@ -2759,13 +2773,13 @@ command = ${JSON.stringify(command)}
2759
2773
  }
2760
2774
  function writeClaudeHook(metaUrl) {
2761
2775
  const settingsPath = getClaudeSettingsPath();
2762
- if (!existsSync10(path6.dirname(settingsPath))) {
2776
+ if (!existsSync11(path6.dirname(settingsPath))) {
2763
2777
  return { host: "claude", action: "not-detected", config_file: settingsPath };
2764
2778
  }
2765
2779
  try {
2766
2780
  const hookScript = getHookScriptPath(metaUrl).replace(/\\/g, "/");
2767
2781
  const command = `node "${hookScript}"`;
2768
- const fileExistsBefore = existsSync10(settingsPath);
2782
+ const fileExistsBefore = existsSync11(settingsPath);
2769
2783
  const settings = readJsonFile(settingsPath) ?? {};
2770
2784
  settings.hooks ??= {};
2771
2785
  settings.hooks.SessionStart ??= [];
@@ -2830,7 +2844,7 @@ function getOpenCodeProjectCommandsDir(cwd) {
2830
2844
  return path7.join(cwd, ".opencode", "commands");
2831
2845
  }
2832
2846
  function detectOpenCode(cwd) {
2833
- return hasBinary("opencode") || existsSync11(path7.join(resolveConfigHome(), "opencode")) || existsSync11(path7.join(cwd, ".opencode"));
2847
+ return hasBinary("opencode") || existsSync12(path7.join(resolveConfigHome(), "opencode")) || existsSync12(path7.join(cwd, ".opencode"));
2834
2848
  }
2835
2849
  function renderOpenCodeCommand() {
2836
2850
  return `---
@@ -2858,11 +2872,11 @@ function writeOpenCodeCommand(scope, cwd) {
2858
2872
  if (scope === "auto" && !detected) {
2859
2873
  return { detected: false, action: "not-detected", scope: "off" };
2860
2874
  }
2861
- const resolvedScope = scope === "project" ? "project" : scope === "global" ? "global" : existsSync11(path7.join(cwd, ".opencode")) ? "project" : "global";
2875
+ const resolvedScope = scope === "project" ? "project" : scope === "global" ? "global" : existsSync12(path7.join(cwd, ".opencode")) ? "project" : "global";
2862
2876
  const commandsDir = resolvedScope === "project" ? getOpenCodeProjectCommandsDir(cwd) : getOpenCodeGlobalCommandsDir();
2863
2877
  const commandFile = path7.join(ensureDir2(commandsDir), "unbrowse.md");
2864
2878
  const content = renderOpenCodeCommand();
2865
- const action2 = existsSync11(commandFile) ? "updated" : "installed";
2879
+ const action2 = existsSync12(commandFile) ? "updated" : "installed";
2866
2880
  mkdirSync7(path7.dirname(commandFile), { recursive: true });
2867
2881
  writeFileSync5(commandFile, content);
2868
2882
  return {
@@ -2874,10 +2888,10 @@ function writeOpenCodeCommand(scope, cwd) {
2874
2888
  }
2875
2889
  async function ensureBrowserEngineInstalled() {
2876
2890
  const binary = findKuriBinary();
2877
- if (existsSync11(binary)) {
2891
+ if (existsSync12(binary)) {
2878
2892
  return { installed: true, action: "already-installed" };
2879
2893
  }
2880
- const sourceDir = getKuriSourceCandidates().find((candidate) => existsSync11(path7.join(candidate, "build.zig")));
2894
+ const sourceDir = getKuriSourceCandidates().find((candidate) => existsSync12(path7.join(candidate, "build.zig")));
2881
2895
  if (!sourceDir) {
2882
2896
  return {
2883
2897
  installed: false,
@@ -2899,7 +2913,7 @@ async function ensureBrowserEngineInstalled() {
2899
2913
  timeout: 300000
2900
2914
  });
2901
2915
  const builtBinary = findKuriBinary();
2902
- if (existsSync11(builtBinary)) {
2916
+ if (existsSync12(builtBinary)) {
2903
2917
  return {
2904
2918
  installed: true,
2905
2919
  action: "installed",
@@ -2924,7 +2938,7 @@ async function runSetup(options) {
2924
2938
  const browser = options?.installBrowser === false ? { installed: false, action: "skipped" } : await ensureBrowserEngineInstalled();
2925
2939
  const walletCheck = checkWalletConfigured();
2926
2940
  const skipWalletSetup = process.env.UNBROWSE_SKIP_WALLET_SETUP === "1";
2927
- const lobsterInstalled = hasBinary("lobstercash") || existsSync11(path7.join(os4.homedir(), ".agents", "skills", "lobstercash", "SKILL.md"));
2941
+ const lobsterInstalled = hasBinary("lobstercash") || existsSync12(path7.join(os4.homedir(), ".agents", "skills", "lobstercash", "SKILL.md"));
2928
2942
  if (!skipWalletSetup && !walletCheck.configured && lobsterInstalled) {
2929
2943
  console.log("[unbrowse] Crossmint lobster.cash detected but wallet not configured — running wallet setup...");
2930
2944
  try {
@@ -2964,7 +2978,7 @@ async function runSetup(options) {
2964
2978
 
2965
2979
  // ../../src/runtime/update-hints.ts
2966
2980
  init_paths();
2967
- import { existsSync as existsSync12, mkdirSync as mkdirSync8, readFileSync as readFileSync8, writeFileSync as writeFileSync6 } from "node:fs";
2981
+ import { existsSync as existsSync13, mkdirSync as mkdirSync8, readFileSync as readFileSync8, writeFileSync as writeFileSync6 } from "node:fs";
2968
2982
  import os5 from "node:os";
2969
2983
  import path8 from "node:path";
2970
2984
  var INSTALL_SCRIPT_URL = "https://unbrowse.ai/install.sh";
@@ -2978,7 +2992,7 @@ function getConfigDir3() {
2978
2992
  return path8.join(getHomeDir2(), ".unbrowse");
2979
2993
  }
2980
2994
  function ensureDir4(dir) {
2981
- if (!existsSync12(dir))
2995
+ if (!existsSync13(dir))
2982
2996
  mkdirSync8(dir, { recursive: true });
2983
2997
  return dir;
2984
2998
  }
@@ -3004,7 +3018,7 @@ function detectRepoRoot2(start2) {
3004
3018
  let dir = path8.resolve(start2);
3005
3019
  const root = path8.parse(dir).root;
3006
3020
  while (dir !== root) {
3007
- if (existsSync12(path8.join(dir, ".git")))
3021
+ if (existsSync13(path8.join(dir, ".git")))
3008
3022
  return dir;
3009
3023
  dir = path8.dirname(dir);
3010
3024
  }
package/dist/index.js CHANGED
@@ -1,16 +1,12 @@
1
1
  #!/usr/bin/env node
2
2
  import { spawn } from "node:child_process";
3
- import { createRequire } from "node:module";
4
3
  import path from "node:path";
5
4
  import { fileURLToPath } from "node:url";
6
5
 
7
6
  const packageRoot = path.dirname(path.dirname(fileURLToPath(import.meta.url)));
8
- const serverEntrypoint = path.join(packageRoot, "runtime-src", "index.ts");
9
- const req = createRequire(import.meta.url);
10
- const tsxPkg = req.resolve("tsx/package.json");
11
- const tsxLoader = path.join(path.dirname(tsxPkg), "dist", "loader.mjs");
7
+ const serverEntrypoint = path.join(packageRoot, "dist", "server.js");
12
8
 
13
- const child = spawn(process.execPath, ["--import", tsxLoader, serverEntrypoint, ...process.argv.slice(2)], {
9
+ const child = spawn(process.execPath, [serverEntrypoint, ...process.argv.slice(2)], {
14
10
  stdio: "inherit",
15
11
  cwd: process.cwd(),
16
12
  env: {
package/dist/mcp.js CHANGED
@@ -20,7 +20,7 @@ __export(exports_lobster_pay, {
20
20
  isLobsterAvailable: () => isLobsterAvailable
21
21
  });
22
22
  import { execFile, execFileSync } from "node:child_process";
23
- import { existsSync as existsSync5 } from "node:fs";
23
+ import { existsSync as existsSync6 } from "node:fs";
24
24
  import { homedir as homedir3 } from "node:os";
25
25
  import { join as join4 } from "node:path";
26
26
  function getLobsterCommand() {
@@ -31,7 +31,7 @@ function getLobsterCommand() {
31
31
  try {
32
32
  const npmPrefix = execFileSync("npm", ["config", "get", "prefix"], { encoding: "utf8", timeout: 5000 }).trim();
33
33
  const lobsterPath = join4(npmPrefix, "bin", "lobstercash");
34
- if (existsSync5(lobsterPath)) {
34
+ if (existsSync6(lobsterPath)) {
35
35
  execFileSync(lobsterPath, ["--version"], { stdio: "ignore", timeout: 3000 });
36
36
  return { cmd: lobsterPath, prefix: [] };
37
37
  }
@@ -45,7 +45,7 @@ function lobsterCmd() {
45
45
  }
46
46
  function isLobsterAvailable() {
47
47
  const agentsPath = join4(process.env.HOME || homedir3(), ".lobster", "agents.json");
48
- return existsSync5(agentsPath);
48
+ return existsSync6(agentsPath);
49
49
  }
50
50
  function lobsterX402Fetch(url, options) {
51
51
  return new Promise((resolve) => {
@@ -121,12 +121,12 @@ var init_lobster_pay = () => {};
121
121
  // ../../src/mcp.ts
122
122
  import { config as loadEnv } from "dotenv";
123
123
  import { createInterface } from "readline";
124
- import { existsSync as existsSync7, readFileSync as readFileSync6 } from "fs";
124
+ import { existsSync as existsSync8, readFileSync as readFileSync6 } from "fs";
125
125
  import path4 from "path";
126
126
  import { fileURLToPath as fileURLToPath3 } from "url";
127
127
 
128
128
  // ../../src/runtime/local-server.ts
129
- import { openSync, readFileSync as readFileSync2, unlinkSync, writeFileSync } from "node:fs";
129
+ import { existsSync as existsSync3, openSync, readFileSync as readFileSync2, unlinkSync, writeFileSync } from "node:fs";
130
130
  import path2 from "node:path";
131
131
  import { spawn } from "node:child_process";
132
132
 
@@ -225,11 +225,11 @@ import { dirname, join, parse } from "path";
225
225
  import { fileURLToPath as fileURLToPath2 } from "url";
226
226
 
227
227
  // ../../src/build-info.generated.ts
228
- var BUILD_RELEASE_VERSION = "3.1.0-experiments.93cfad2";
229
- var BUILD_GIT_SHA = "93cfad23737e";
228
+ var BUILD_RELEASE_VERSION = "3.1.0-experiments.9b17005";
229
+ var BUILD_GIT_SHA = "9b17005b5aae";
230
230
  var BUILD_CODE_HASH = "1488fc1d92b7";
231
- var BUILD_RELEASE_MANIFEST_BASE64 = "eyJzY2hlbWFfdmVyc2lvbiI6MSwicmVsZWFzZV92ZXJzaW9uIjoiMy4xLjAtZXhwZXJpbWVudHMuOTNjZmFkMiIsImdpdF9zaGEiOiI5M2NmYWQyMzczN2UiLCJjb2RlX2hhc2giOiIxNDg4ZmMxZDkyYjciLCJ0cmFjZV92ZXJzaW9uIjoiMTQ4OGZjMWQ5MmI3QDkzY2ZhZDIzNzM3ZSIsImlzc3VlZF9hdCI6IjIwMjYtMDQtMDZUMDM6MDM6MDAuODk5WiJ9";
232
- var BUILD_RELEASE_MANIFEST_SIGNATURE = "dL8-FjofQKein9ZtjuzUMwrPbZIaUz9s46uyyRqj9Jo";
231
+ var BUILD_RELEASE_MANIFEST_BASE64 = "eyJzY2hlbWFfdmVyc2lvbiI6MSwicmVsZWFzZV92ZXJzaW9uIjoiMy4xLjAtZXhwZXJpbWVudHMuOWIxNzAwNSIsImdpdF9zaGEiOiI5YjE3MDA1YjVhYWUiLCJjb2RlX2hhc2giOiIxNDg4ZmMxZDkyYjciLCJ0cmFjZV92ZXJzaW9uIjoiMTQ4OGZjMWQ5MmI3QDliMTcwMDViNWFhZSIsImlzc3VlZF9hdCI6IjIwMjYtMDQtMDZUMDQ6MDA6NTkuNTM0WiJ9";
232
+ var BUILD_RELEASE_MANIFEST_SIGNATURE = "hkh9PmEQoF8Xxv8n8F-gxqI6nusA4RIZ0FNIoMEOgRg";
233
233
  var BUILD_DEFAULT_BACKEND_URL = "https://unbrowse-backend-experiments.lewis-6d8.workers.dev";
234
234
 
235
235
  // ../../src/version.ts
@@ -400,6 +400,10 @@ function getServerSpawnSpec(metaUrl, entrypoint = resolveSiblingEntrypoint(metaU
400
400
  recordedEntrypoint: `${process.execPath} serve`
401
401
  };
402
402
  }
403
+ const serverJs = path2.join(path2.dirname(entrypoint), "server.js");
404
+ if (existsSync3(serverJs) && path2.basename(entrypoint) !== "server.js") {
405
+ entrypoint = serverJs;
406
+ }
403
407
  return {
404
408
  command: process.execPath,
405
409
  args: runtimeArgsForEntrypoint(metaUrl, entrypoint),
@@ -540,7 +544,7 @@ function stopServer(baseUrl) {
540
544
  }
541
545
 
542
546
  // ../../src/workflow/publish.ts
543
- import { existsSync as existsSync3, mkdirSync as mkdirSync2, readFileSync as readFileSync3, readdirSync as readdirSync2, writeFileSync as writeFileSync2 } from "node:fs";
547
+ import { existsSync as existsSync4, mkdirSync as mkdirSync2, readFileSync as readFileSync3, readdirSync as readdirSync2, writeFileSync as writeFileSync2 } from "node:fs";
544
548
  import { homedir } from "node:os";
545
549
  import { join as join2 } from "node:path";
546
550
 
@@ -567,7 +571,7 @@ function workflowPublishArtifactPathForSkill(skillId) {
567
571
  }
568
572
  function readWorkflowPublishArtifact(skillId) {
569
573
  const target = workflowPublishArtifactPathForSkill(skillId);
570
- if (!existsSync3(target))
574
+ if (!existsSync4(target))
571
575
  return null;
572
576
  try {
573
577
  return JSON.parse(readFileSync3(target, "utf-8"));
@@ -577,13 +581,13 @@ function readWorkflowPublishArtifact(skillId) {
577
581
  }
578
582
  function listWorkflowPublishArtifacts() {
579
583
  const dir = getWorkflowExportDir();
580
- if (!existsSync3(dir))
584
+ if (!existsSync4(dir))
581
585
  return [];
582
586
  return readdirSync2(dir).filter((entry) => entry.endsWith(".json")).map((entry) => join2(dir, entry));
583
587
  }
584
588
 
585
589
  // ../../src/impact-log.ts
586
- import { existsSync as existsSync4, mkdirSync as mkdirSync3, appendFileSync, statSync, readFileSync as readFileSync4, renameSync, unlinkSync as unlinkSync2 } from "node:fs";
590
+ import { existsSync as existsSync5, mkdirSync as mkdirSync3, appendFileSync, statSync, readFileSync as readFileSync4, renameSync, unlinkSync as unlinkSync2 } from "node:fs";
587
591
  import { homedir as homedir2 } from "node:os";
588
592
  import { dirname as dirname2, join as join3 } from "node:path";
589
593
  var MAX_LOG_BYTES = 5 * 1024 * 1024;
@@ -599,19 +603,19 @@ function getImpactLogPath() {
599
603
  }
600
604
  function ensureDir2(path4) {
601
605
  const dir = dirname2(path4);
602
- if (!existsSync4(dir))
606
+ if (!existsSync5(dir))
603
607
  mkdirSync3(dir, { recursive: true });
604
608
  }
605
609
  function rotateIfNeeded(path4) {
606
610
  try {
607
- if (!existsSync4(path4))
611
+ if (!existsSync5(path4))
608
612
  return;
609
613
  const size = statSync(path4).size;
610
614
  if (size < MAX_LOG_BYTES)
611
615
  return;
612
616
  for (let i = MAX_ROTATIONS;i >= 1; i--) {
613
617
  const older = `${path4}.${i}`;
614
- if (!existsSync4(older))
618
+ if (!existsSync5(older))
615
619
  continue;
616
620
  if (i === MAX_ROTATIONS) {
617
621
  try {
@@ -681,10 +685,10 @@ function readImpactSummary() {
681
685
  const files = [];
682
686
  for (let i = MAX_ROTATIONS;i >= 1; i--) {
683
687
  const rotated = `${path4}.${i}`;
684
- if (existsSync4(rotated))
688
+ if (existsSync5(rotated))
685
689
  files.push(rotated);
686
690
  }
687
- if (existsSync4(path4))
691
+ if (existsSync5(path4))
688
692
  files.push(path4);
689
693
  if (files.length === 0)
690
694
  return summary;
@@ -741,7 +745,7 @@ function readImpactSummary() {
741
745
  }
742
746
 
743
747
  // ../../src/client/index.ts
744
- import { readFileSync as readFileSync5, writeFileSync as writeFileSync3, existsSync as existsSync6, mkdirSync as mkdirSync4, readdirSync as readdirSync3 } from "fs";
748
+ import { readFileSync as readFileSync5, writeFileSync as writeFileSync3, existsSync as existsSync7, mkdirSync as mkdirSync4, readdirSync as readdirSync3 } from "fs";
745
749
  import { join as join5 } from "path";
746
750
  import { homedir as homedir4, hostname, release as osRelease } from "os";
747
751
 
@@ -792,7 +796,7 @@ function sanitizeProfileName2(value) {
792
796
  function loadConfig() {
793
797
  try {
794
798
  const configPath = getConfigPath();
795
- if (existsSync6(configPath)) {
799
+ if (existsSync7(configPath)) {
796
800
  return JSON.parse(readFileSync5(configPath, "utf-8"));
797
801
  }
798
802
  } catch {}
@@ -1312,7 +1316,7 @@ function getPackageRoot2() {
1312
1316
  let dir = path4.dirname(fileURLToPath3(import.meta.url));
1313
1317
  const root = path4.parse(dir).root;
1314
1318
  while (dir !== root) {
1315
- if (path4.basename(dir) === "src" && existsSync7(path4.join(path4.dirname(dir), "package.json"))) {
1319
+ if (path4.basename(dir) === "src" && existsSync8(path4.join(path4.dirname(dir), "package.json"))) {
1316
1320
  return path4.dirname(dir);
1317
1321
  }
1318
1322
  try {