unbrowse 3.1.0-experiments.995f8bb → 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.
- package/dist/cli.js +57 -33
- package/dist/index.js +2 -6
- package/dist/mcp.js +26 -22
- package/dist/server.js +25794 -0
- package/package.json +1 -2
- package/vendor/kuri/darwin-arm64/kuri +0 -0
- package/vendor/kuri/darwin-x64/kuri +0 -0
- package/vendor/kuri/linux-arm64/kuri +0 -0
- package/vendor/kuri/linux-x64/kuri +0 -0
- package/vendor/kuri/manifest.json +7 -10
- package/runtime-src/agent-outcome.ts +0 -166
- package/runtime-src/analytics-session.ts +0 -55
- package/runtime-src/api/browse-index.ts +0 -343
- package/runtime-src/api/browse-session.ts +0 -572
- package/runtime-src/api/browse-submit-prereqs.ts +0 -48
- package/runtime-src/api/browse-submit.ts +0 -1184
- package/runtime-src/api/routes.ts +0 -1833
- package/runtime-src/auth/browser-cookies.ts +0 -423
- package/runtime-src/auth/index.ts +0 -535
- package/runtime-src/auth/runtime.ts +0 -116
- package/runtime-src/browser/index.ts +0 -659
- package/runtime-src/browser/types.ts +0 -41
- package/runtime-src/build-info.generated.ts +0 -6
- package/runtime-src/capture/index.ts +0 -1929
- package/runtime-src/capture/prefetch.ts +0 -95
- package/runtime-src/capture/rsc.ts +0 -45
- package/runtime-src/cli/shortcuts.ts +0 -273
- package/runtime-src/cli.ts +0 -1734
- package/runtime-src/client/graph-client.ts +0 -100
- package/runtime-src/client/index.ts +0 -1425
- package/runtime-src/debug-trace.ts +0 -18
- package/runtime-src/domain.ts +0 -38
- package/runtime-src/execution/index.ts +0 -3407
- package/runtime-src/execution/retry.ts +0 -46
- package/runtime-src/execution/robots.ts +0 -167
- package/runtime-src/execution/search-forms.ts +0 -188
- package/runtime-src/execution/token-resolver.ts +0 -135
- package/runtime-src/extraction/index.ts +0 -1507
- package/runtime-src/foundry/publish-bundle.ts +0 -392
- package/runtime-src/graph/agent-augment.ts +0 -315
- package/runtime-src/graph/index.ts +0 -1532
- package/runtime-src/graph/local-fixtures.ts +0 -393
- package/runtime-src/graph/local-harness.ts +0 -646
- package/runtime-src/graph/planner.ts +0 -411
- package/runtime-src/graph/session.ts +0 -294
- package/runtime-src/graph/trace-store.ts +0 -136
- package/runtime-src/impact-log.ts +0 -227
- package/runtime-src/index.ts +0 -24
- package/runtime-src/indexer/index.ts +0 -465
- package/runtime-src/intent-match.ts +0 -1515
- package/runtime-src/kuri/client.ts +0 -1839
- package/runtime-src/logger.ts +0 -30
- package/runtime-src/marketplace/index.ts +0 -111
- package/runtime-src/mcp.ts +0 -1911
- package/runtime-src/orchestrator/browser-agent.ts +0 -374
- package/runtime-src/orchestrator/dag-advisor.ts +0 -59
- package/runtime-src/orchestrator/dag-feedback.ts +0 -257
- package/runtime-src/orchestrator/first-pass-action.ts +0 -403
- package/runtime-src/orchestrator/index.ts +0 -4480
- package/runtime-src/orchestrator/passive-publish.ts +0 -187
- package/runtime-src/orchestrator/timing-economics.ts +0 -80
- package/runtime-src/payments/cascade.ts +0 -137
- package/runtime-src/payments/index.ts +0 -270
- package/runtime-src/payments/lobster-pay.ts +0 -182
- package/runtime-src/payments/wallet.ts +0 -98
- package/runtime-src/publish/review-context.ts +0 -93
- package/runtime-src/publish/sanitize.ts +0 -197
- package/runtime-src/publish/schema-review.ts +0 -192
- package/runtime-src/publish-admission.ts +0 -388
- package/runtime-src/ratelimit/index.ts +0 -23
- package/runtime-src/reverse-engineer/bundle-scanner.ts +0 -127
- package/runtime-src/reverse-engineer/description-prompt.ts +0 -213
- package/runtime-src/reverse-engineer/index.ts +0 -1551
- package/runtime-src/reverse-engineer/token-sources.ts +0 -379
- package/runtime-src/router.ts +0 -17
- package/runtime-src/routing-telemetry.ts +0 -395
- package/runtime-src/runtime/browser-access.ts +0 -11
- package/runtime-src/runtime/browser-auth.ts +0 -12
- package/runtime-src/runtime/browser-host.ts +0 -48
- package/runtime-src/runtime/lifecycle.ts +0 -17
- package/runtime-src/runtime/local-server.ts +0 -311
- package/runtime-src/runtime/paths.ts +0 -99
- package/runtime-src/runtime/setup.ts +0 -251
- package/runtime-src/runtime/supervisor.ts +0 -69
- package/runtime-src/runtime/update-hints.ts +0 -351
- package/runtime-src/server.ts +0 -100
- package/runtime-src/session-logs.ts +0 -142
- package/runtime-src/settings.ts +0 -221
- package/runtime-src/single-binary.ts +0 -143
- package/runtime-src/site-policy.ts +0 -54
- package/runtime-src/stale-cleanup-runner.ts +0 -144
- package/runtime-src/stale-cleanup.ts +0 -133
- package/runtime-src/telemetry-attribution.ts +0 -120
- package/runtime-src/telemetry.ts +0 -253
- package/runtime-src/template-params.ts +0 -141
- package/runtime-src/transform/drift.ts +0 -60
- package/runtime-src/transform/index.ts +0 -277
- package/runtime-src/types/index.ts +0 -1
- package/runtime-src/types/skill.ts +0 -931
- package/runtime-src/vault/index.ts +0 -196
- package/runtime-src/verification/auth-gate.ts +0 -8
- package/runtime-src/verification/candidates.ts +0 -27
- package/runtime-src/verification/index.ts +0 -120
- package/runtime-src/verification/matrix.ts +0 -30
- package/runtime-src/version.ts +0 -148
- package/runtime-src/workflow/artifact.ts +0 -161
- package/runtime-src/workflow/compile.ts +0 -808
- package/runtime-src/workflow/publish.ts +0 -225
- package/runtime-src/workflow/runtime.ts +0 -213
- package/vendor/kuri/win-x64/kuri.exe +0 -0
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.
|
|
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
|
|
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) =>
|
|
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
|
|
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 (
|
|
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 (!
|
|
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 (
|
|
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
|
|
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 (!
|
|
1331
|
+
if (!existsSync14(agentsPath))
|
|
1322
1332
|
return;
|
|
1323
1333
|
try {
|
|
1324
1334
|
const raw = JSON.parse(readFileSync9(agentsPath, "utf8"));
|
|
@@ -1369,7 +1379,7 @@ init_wallet();
|
|
|
1369
1379
|
init_telemetry_attribution();
|
|
1370
1380
|
import { readFileSync as readFileSync3, writeFileSync, existsSync as existsSync4, mkdirSync, readdirSync as readdirSync2 } from "fs";
|
|
1371
1381
|
import { join as join4 } from "path";
|
|
1372
|
-
import { homedir as homedir3, hostname } from "os";
|
|
1382
|
+
import { homedir as homedir3, hostname, release as osRelease } from "os";
|
|
1373
1383
|
import { randomBytes, createHash as createHash2 } from "crypto";
|
|
1374
1384
|
import { createInterface } from "readline";
|
|
1375
1385
|
var API_URL = process.env.UNBROWSE_BACKEND_URL || DEFAULT_BACKEND_URL;
|
|
@@ -1562,9 +1572,19 @@ async function recordInstallTelemetryEvent(source, options) {
|
|
|
1562
1572
|
skill_version: options?.skillVersion,
|
|
1563
1573
|
status: options?.status ?? "installed",
|
|
1564
1574
|
created_at: createdAt,
|
|
1565
|
-
properties: mergeTelemetryProperties(options?.properties, getTelemetryAttribution())
|
|
1575
|
+
properties: mergeTelemetryProperties({ ...getRuntimeContext(), ...options?.properties }, getTelemetryAttribution())
|
|
1566
1576
|
});
|
|
1567
1577
|
}
|
|
1578
|
+
function getRuntimeContext() {
|
|
1579
|
+
return {
|
|
1580
|
+
cli_version: PACKAGE_VERSION,
|
|
1581
|
+
code_hash: CODE_HASH,
|
|
1582
|
+
node_version: process.version,
|
|
1583
|
+
platform: process.platform,
|
|
1584
|
+
arch: process.arch,
|
|
1585
|
+
os_release: osRelease()
|
|
1586
|
+
};
|
|
1587
|
+
}
|
|
1568
1588
|
async function recordFunnelTelemetryEvent(name, options) {
|
|
1569
1589
|
const createdAt = options?.createdAt ?? new Date().toISOString();
|
|
1570
1590
|
const landingToken = getLandingToken();
|
|
@@ -1576,7 +1596,7 @@ async function recordFunnelTelemetryEvent(name, options) {
|
|
|
1576
1596
|
source: options?.source ?? "cli",
|
|
1577
1597
|
host_type: options?.hostType ?? detectTelemetryHostType(),
|
|
1578
1598
|
created_at: createdAt,
|
|
1579
|
-
properties: mergeTelemetryProperties(options?.properties, getTelemetryAttribution())
|
|
1599
|
+
properties: mergeTelemetryProperties({ ...getRuntimeContext(), ...options?.properties }, getTelemetryAttribution())
|
|
1580
1600
|
});
|
|
1581
1601
|
}
|
|
1582
1602
|
var EMAIL_RE = /^[^\s@]+@[^\s@]+\.[^\s@]+$/i;
|
|
@@ -2287,7 +2307,7 @@ function buildDepsMetadata(pack, taskName) {
|
|
|
2287
2307
|
init_paths();
|
|
2288
2308
|
init_supervisor();
|
|
2289
2309
|
init_version();
|
|
2290
|
-
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";
|
|
2291
2311
|
import path2 from "node:path";
|
|
2292
2312
|
import { spawn } from "node:child_process";
|
|
2293
2313
|
function isServerVersionMismatch(runningVersion, installedVersion, runningCodeHash, installedCodeHash) {
|
|
@@ -2353,6 +2373,10 @@ function getServerSpawnSpec(metaUrl, entrypoint = resolveSiblingEntrypoint(metaU
|
|
|
2353
2373
|
recordedEntrypoint: `${process.execPath} serve`
|
|
2354
2374
|
};
|
|
2355
2375
|
}
|
|
2376
|
+
const serverJs = path2.join(path2.dirname(entrypoint), "server.js");
|
|
2377
|
+
if (existsSync7(serverJs) && path2.basename(entrypoint) !== "server.js") {
|
|
2378
|
+
entrypoint = serverJs;
|
|
2379
|
+
}
|
|
2356
2380
|
return {
|
|
2357
2381
|
command: process.execPath,
|
|
2358
2382
|
args: runtimeArgsForEntrypoint(metaUrl, entrypoint),
|
|
@@ -2498,7 +2522,7 @@ async function restartServer(baseUrl, metaUrl) {
|
|
|
2498
2522
|
}
|
|
2499
2523
|
|
|
2500
2524
|
// ../../src/runtime/paths.ts
|
|
2501
|
-
import { existsSync as
|
|
2525
|
+
import { existsSync as existsSync8, mkdirSync as mkdirSync4, realpathSync as realpathSync2 } from "node:fs";
|
|
2502
2526
|
import path3 from "node:path";
|
|
2503
2527
|
import { createRequire as createRequire3 } from "node:module";
|
|
2504
2528
|
import { fileURLToPath as fileURLToPath3, pathToFileURL as pathToFileURL2 } from "node:url";
|
|
@@ -2518,7 +2542,7 @@ function runtimeArgsForEntrypoint2(metaUrl, entrypoint) {
|
|
|
2518
2542
|
const req = createRequire3(metaUrl);
|
|
2519
2543
|
const tsxPkg = req.resolve("tsx/package.json");
|
|
2520
2544
|
const tsxLoader = path3.join(path3.dirname(tsxPkg), "dist", "loader.mjs");
|
|
2521
|
-
if (
|
|
2545
|
+
if (existsSync8(tsxLoader))
|
|
2522
2546
|
return ["--import", pathToFileURL2(tsxLoader).href, entrypoint];
|
|
2523
2547
|
} catch {}
|
|
2524
2548
|
return ["--import", "tsx", entrypoint];
|
|
@@ -2587,13 +2611,13 @@ init_client2();
|
|
|
2587
2611
|
init_logger();
|
|
2588
2612
|
init_wallet();
|
|
2589
2613
|
import { execFileSync as execFileSync3 } from "node:child_process";
|
|
2590
|
-
import { existsSync as
|
|
2614
|
+
import { existsSync as existsSync12, mkdirSync as mkdirSync7, writeFileSync as writeFileSync5 } from "node:fs";
|
|
2591
2615
|
import os4 from "node:os";
|
|
2592
2616
|
import path7 from "node:path";
|
|
2593
2617
|
|
|
2594
2618
|
// ../../src/runtime/update-hints.ts
|
|
2595
2619
|
init_paths();
|
|
2596
|
-
import { existsSync as
|
|
2620
|
+
import { existsSync as existsSync11, mkdirSync as mkdirSync6, readFileSync as readFileSync7, writeFileSync as writeFileSync4 } from "node:fs";
|
|
2597
2621
|
import os3 from "node:os";
|
|
2598
2622
|
import path6 from "node:path";
|
|
2599
2623
|
var DEFAULT_INTERVAL_MS = 12 * 60 * 60 * 1000;
|
|
@@ -2607,7 +2631,7 @@ function getConfigDir2() {
|
|
|
2607
2631
|
return path6.join(getHomeDir(), ".unbrowse");
|
|
2608
2632
|
}
|
|
2609
2633
|
function ensureDir3(dir) {
|
|
2610
|
-
if (!
|
|
2634
|
+
if (!existsSync11(dir))
|
|
2611
2635
|
mkdirSync6(dir, { recursive: true });
|
|
2612
2636
|
return dir;
|
|
2613
2637
|
}
|
|
@@ -2630,7 +2654,7 @@ function detectRepoRoot(start2) {
|
|
|
2630
2654
|
let dir = path6.resolve(start2);
|
|
2631
2655
|
const root = path6.parse(dir).root;
|
|
2632
2656
|
while (dir !== root) {
|
|
2633
|
-
if (
|
|
2657
|
+
if (existsSync11(path6.join(dir, ".git")))
|
|
2634
2658
|
return dir;
|
|
2635
2659
|
dir = path6.dirname(dir);
|
|
2636
2660
|
}
|
|
@@ -2709,12 +2733,12 @@ codex_hooks = true
|
|
|
2709
2733
|
}
|
|
2710
2734
|
function writeCodexHook(metaUrl) {
|
|
2711
2735
|
const configPath = getCodexConfigPath();
|
|
2712
|
-
if (!
|
|
2736
|
+
if (!existsSync11(path6.dirname(configPath))) {
|
|
2713
2737
|
return { host: "codex", action: "not-detected", config_file: configPath };
|
|
2714
2738
|
}
|
|
2715
2739
|
try {
|
|
2716
2740
|
const hookScript = getHookScriptPath(metaUrl).replace(/\\/g, "/");
|
|
2717
|
-
const fileExistsBefore =
|
|
2741
|
+
const fileExistsBefore = existsSync11(configPath);
|
|
2718
2742
|
let content = fileExistsBefore ? readFileSync7(configPath, "utf8") : "";
|
|
2719
2743
|
const previous = content;
|
|
2720
2744
|
content = ensureCodexHooksFeature(content);
|
|
@@ -2749,13 +2773,13 @@ command = ${JSON.stringify(command)}
|
|
|
2749
2773
|
}
|
|
2750
2774
|
function writeClaudeHook(metaUrl) {
|
|
2751
2775
|
const settingsPath = getClaudeSettingsPath();
|
|
2752
|
-
if (!
|
|
2776
|
+
if (!existsSync11(path6.dirname(settingsPath))) {
|
|
2753
2777
|
return { host: "claude", action: "not-detected", config_file: settingsPath };
|
|
2754
2778
|
}
|
|
2755
2779
|
try {
|
|
2756
2780
|
const hookScript = getHookScriptPath(metaUrl).replace(/\\/g, "/");
|
|
2757
2781
|
const command = `node "${hookScript}"`;
|
|
2758
|
-
const fileExistsBefore =
|
|
2782
|
+
const fileExistsBefore = existsSync11(settingsPath);
|
|
2759
2783
|
const settings = readJsonFile(settingsPath) ?? {};
|
|
2760
2784
|
settings.hooks ??= {};
|
|
2761
2785
|
settings.hooks.SessionStart ??= [];
|
|
@@ -2820,7 +2844,7 @@ function getOpenCodeProjectCommandsDir(cwd) {
|
|
|
2820
2844
|
return path7.join(cwd, ".opencode", "commands");
|
|
2821
2845
|
}
|
|
2822
2846
|
function detectOpenCode(cwd) {
|
|
2823
|
-
return hasBinary("opencode") ||
|
|
2847
|
+
return hasBinary("opencode") || existsSync12(path7.join(resolveConfigHome(), "opencode")) || existsSync12(path7.join(cwd, ".opencode"));
|
|
2824
2848
|
}
|
|
2825
2849
|
function renderOpenCodeCommand() {
|
|
2826
2850
|
return `---
|
|
@@ -2848,11 +2872,11 @@ function writeOpenCodeCommand(scope, cwd) {
|
|
|
2848
2872
|
if (scope === "auto" && !detected) {
|
|
2849
2873
|
return { detected: false, action: "not-detected", scope: "off" };
|
|
2850
2874
|
}
|
|
2851
|
-
const resolvedScope = scope === "project" ? "project" : scope === "global" ? "global" :
|
|
2875
|
+
const resolvedScope = scope === "project" ? "project" : scope === "global" ? "global" : existsSync12(path7.join(cwd, ".opencode")) ? "project" : "global";
|
|
2852
2876
|
const commandsDir = resolvedScope === "project" ? getOpenCodeProjectCommandsDir(cwd) : getOpenCodeGlobalCommandsDir();
|
|
2853
2877
|
const commandFile = path7.join(ensureDir2(commandsDir), "unbrowse.md");
|
|
2854
2878
|
const content = renderOpenCodeCommand();
|
|
2855
|
-
const action2 =
|
|
2879
|
+
const action2 = existsSync12(commandFile) ? "updated" : "installed";
|
|
2856
2880
|
mkdirSync7(path7.dirname(commandFile), { recursive: true });
|
|
2857
2881
|
writeFileSync5(commandFile, content);
|
|
2858
2882
|
return {
|
|
@@ -2864,10 +2888,10 @@ function writeOpenCodeCommand(scope, cwd) {
|
|
|
2864
2888
|
}
|
|
2865
2889
|
async function ensureBrowserEngineInstalled() {
|
|
2866
2890
|
const binary = findKuriBinary();
|
|
2867
|
-
if (
|
|
2891
|
+
if (existsSync12(binary)) {
|
|
2868
2892
|
return { installed: true, action: "already-installed" };
|
|
2869
2893
|
}
|
|
2870
|
-
const sourceDir = getKuriSourceCandidates().find((candidate) =>
|
|
2894
|
+
const sourceDir = getKuriSourceCandidates().find((candidate) => existsSync12(path7.join(candidate, "build.zig")));
|
|
2871
2895
|
if (!sourceDir) {
|
|
2872
2896
|
return {
|
|
2873
2897
|
installed: false,
|
|
@@ -2889,7 +2913,7 @@ async function ensureBrowserEngineInstalled() {
|
|
|
2889
2913
|
timeout: 300000
|
|
2890
2914
|
});
|
|
2891
2915
|
const builtBinary = findKuriBinary();
|
|
2892
|
-
if (
|
|
2916
|
+
if (existsSync12(builtBinary)) {
|
|
2893
2917
|
return {
|
|
2894
2918
|
installed: true,
|
|
2895
2919
|
action: "installed",
|
|
@@ -2914,7 +2938,7 @@ async function runSetup(options) {
|
|
|
2914
2938
|
const browser = options?.installBrowser === false ? { installed: false, action: "skipped" } : await ensureBrowserEngineInstalled();
|
|
2915
2939
|
const walletCheck = checkWalletConfigured();
|
|
2916
2940
|
const skipWalletSetup = process.env.UNBROWSE_SKIP_WALLET_SETUP === "1";
|
|
2917
|
-
const lobsterInstalled = hasBinary("lobstercash") ||
|
|
2941
|
+
const lobsterInstalled = hasBinary("lobstercash") || existsSync12(path7.join(os4.homedir(), ".agents", "skills", "lobstercash", "SKILL.md"));
|
|
2918
2942
|
if (!skipWalletSetup && !walletCheck.configured && lobsterInstalled) {
|
|
2919
2943
|
console.log("[unbrowse] Crossmint lobster.cash detected but wallet not configured — running wallet setup...");
|
|
2920
2944
|
try {
|
|
@@ -2954,7 +2978,7 @@ async function runSetup(options) {
|
|
|
2954
2978
|
|
|
2955
2979
|
// ../../src/runtime/update-hints.ts
|
|
2956
2980
|
init_paths();
|
|
2957
|
-
import { existsSync as
|
|
2981
|
+
import { existsSync as existsSync13, mkdirSync as mkdirSync8, readFileSync as readFileSync8, writeFileSync as writeFileSync6 } from "node:fs";
|
|
2958
2982
|
import os5 from "node:os";
|
|
2959
2983
|
import path8 from "node:path";
|
|
2960
2984
|
var INSTALL_SCRIPT_URL = "https://unbrowse.ai/install.sh";
|
|
@@ -2968,7 +2992,7 @@ function getConfigDir3() {
|
|
|
2968
2992
|
return path8.join(getHomeDir2(), ".unbrowse");
|
|
2969
2993
|
}
|
|
2970
2994
|
function ensureDir4(dir) {
|
|
2971
|
-
if (!
|
|
2995
|
+
if (!existsSync13(dir))
|
|
2972
2996
|
mkdirSync8(dir, { recursive: true });
|
|
2973
2997
|
return dir;
|
|
2974
2998
|
}
|
|
@@ -2994,7 +3018,7 @@ function detectRepoRoot2(start2) {
|
|
|
2994
3018
|
let dir = path8.resolve(start2);
|
|
2995
3019
|
const root = path8.parse(dir).root;
|
|
2996
3020
|
while (dir !== root) {
|
|
2997
|
-
if (
|
|
3021
|
+
if (existsSync13(path8.join(dir, ".git")))
|
|
2998
3022
|
return dir;
|
|
2999
3023
|
dir = path8.dirname(dir);
|
|
3000
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, "
|
|
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, [
|
|
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
|
|
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 (
|
|
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
|
|
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
|
|
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.
|
|
229
|
-
var BUILD_GIT_SHA = "
|
|
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 = "
|
|
232
|
-
var BUILD_RELEASE_MANIFEST_SIGNATURE = "
|
|
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
|
|
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 (!
|
|
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 (!
|
|
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
|
|
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 (!
|
|
606
|
+
if (!existsSync5(dir))
|
|
603
607
|
mkdirSync3(dir, { recursive: true });
|
|
604
608
|
}
|
|
605
609
|
function rotateIfNeeded(path4) {
|
|
606
610
|
try {
|
|
607
|
-
if (!
|
|
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 (!
|
|
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 (
|
|
688
|
+
if (existsSync5(rotated))
|
|
685
689
|
files.push(rotated);
|
|
686
690
|
}
|
|
687
|
-
if (
|
|
691
|
+
if (existsSync5(path4))
|
|
688
692
|
files.push(path4);
|
|
689
693
|
if (files.length === 0)
|
|
690
694
|
return summary;
|
|
@@ -741,9 +745,9 @@ function readImpactSummary() {
|
|
|
741
745
|
}
|
|
742
746
|
|
|
743
747
|
// ../../src/client/index.ts
|
|
744
|
-
import { readFileSync as readFileSync5, writeFileSync as writeFileSync3, existsSync as
|
|
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
|
-
import { homedir as homedir4, hostname } from "os";
|
|
750
|
+
import { homedir as homedir4, hostname, release as osRelease } from "os";
|
|
747
751
|
|
|
748
752
|
// ../../src/payments/cascade.ts
|
|
749
753
|
import bs58 from "bs58";
|
|
@@ -792,7 +796,7 @@ function sanitizeProfileName2(value) {
|
|
|
792
796
|
function loadConfig() {
|
|
793
797
|
try {
|
|
794
798
|
const configPath = getConfigPath();
|
|
795
|
-
if (
|
|
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" &&
|
|
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 {
|