opendevbrowser 0.0.25 → 0.0.26
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/README.md +1 -1
- package/dist/{chunk-Z6ENAZUN.js → chunk-AVQL6WAS.js} +9 -2
- package/dist/chunk-AVQL6WAS.js.map +1 -0
- package/dist/{chunk-7U63PZ4W.js → chunk-GTTYIAI7.js} +369 -175
- package/dist/chunk-GTTYIAI7.js.map +1 -0
- package/dist/cli/commands/daemon.d.ts +25 -0
- package/dist/cli/commands/daemon.d.ts.map +1 -1
- package/dist/cli/commands/serve.d.ts +10 -13
- package/dist/cli/commands/serve.d.ts.map +1 -1
- package/dist/cli/commands/status.d.ts.map +1 -1
- package/dist/cli/daemon-client.d.ts.map +1 -1
- package/dist/cli/daemon-status-policy.d.ts +6 -0
- package/dist/cli/daemon-status-policy.d.ts.map +1 -0
- package/dist/cli/daemon-status.d.ts +1 -0
- package/dist/cli/daemon-status.d.ts.map +1 -1
- package/dist/cli/daemon.d.ts +5 -0
- package/dist/cli/daemon.d.ts.map +1 -1
- package/dist/cli/index.js +175 -96
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/utils/http.d.ts.map +1 -1
- package/dist/daemon-fingerprint.json +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +109 -28
- package/dist/index.js.map +1 -1
- package/dist/opendevbrowser.d.ts.map +1 -1
- package/dist/opendevbrowser.js +109 -28
- package/dist/opendevbrowser.js.map +1 -1
- package/dist/providers/inspiredesign-capture.d.ts.map +1 -1
- package/dist/providers/workflows.d.ts.map +1 -1
- package/dist/{providers-CYEJZVXB.js → providers-T2FQJCF6.js} +2 -2
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/status.d.ts.map +1 -1
- package/extension/manifest.json +1 -1
- package/package.json +1 -1
- package/dist/chunk-7U63PZ4W.js.map +0 -1
- package/dist/chunk-Z6ENAZUN.js.map +0 -1
- /package/dist/{providers-CYEJZVXB.js.map → providers-T2FQJCF6.js.map} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AA8ClD,QAAA,MAAM,oBAAoB,EAAE,MAmW3B,CAAC;AAEF,eAAe,oBAAoB,CAAC"}
|
package/dist/opendevbrowser.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
AGENT_INBOX_SYSTEM_MARKER,
|
|
3
|
+
DEFAULT_DAEMON_STATUS_FETCH_OPTIONS,
|
|
3
4
|
DEFAULT_WORKFLOW_TRANSPORT_TIMEOUT_MS,
|
|
4
5
|
DaemonClient,
|
|
5
6
|
ScriptRunner,
|
|
@@ -11,19 +12,22 @@ import {
|
|
|
11
12
|
classifySessionRelayEndpoint,
|
|
12
13
|
createAutomationCoordinator,
|
|
13
14
|
createCoreRuntimeAssemblies,
|
|
15
|
+
createDaemonStopHeaders,
|
|
14
16
|
createOpenDevBrowserCore,
|
|
15
17
|
executeMacroWithRuntime,
|
|
16
18
|
extractExtension,
|
|
19
|
+
fetchDaemonStatus,
|
|
17
20
|
fetchDaemonStatusFromMetadata,
|
|
18
|
-
|
|
21
|
+
fetchWithTimeout,
|
|
19
22
|
inspectSession,
|
|
23
|
+
isCurrentDaemonFingerprint,
|
|
20
24
|
onboarding_metadata_default,
|
|
21
25
|
readDaemonMetadata,
|
|
22
26
|
requireChallengeOrchestrationConfig,
|
|
23
27
|
resolveBundledProviderRuntime,
|
|
24
28
|
resolveSessionRelayRoute,
|
|
25
29
|
startDaemon
|
|
26
|
-
} from "./chunk-
|
|
30
|
+
} from "./chunk-GTTYIAI7.js";
|
|
27
31
|
import "./chunk-STGGGVYT.js";
|
|
28
32
|
import "./chunk-3ILXPKSJ.js";
|
|
29
33
|
import "./chunk-TBUCZX4A.js";
|
|
@@ -35,7 +39,7 @@ import {
|
|
|
35
39
|
classifyBlockerSignal,
|
|
36
40
|
createRequestId,
|
|
37
41
|
resolveInspiredesignCaptureMode
|
|
38
|
-
} from "./chunk-
|
|
42
|
+
} from "./chunk-AVQL6WAS.js";
|
|
39
43
|
import "./chunk-FUSXMW3G.js";
|
|
40
44
|
|
|
41
45
|
// src/cli/remote-manager.ts
|
|
@@ -1075,7 +1079,7 @@ function createStatusTool(deps) {
|
|
|
1075
1079
|
let updateHint;
|
|
1076
1080
|
let sessionStatus = null;
|
|
1077
1081
|
if (hubEnabled) {
|
|
1078
|
-
const daemonStatus = await fetchDaemonStatusFromMetadata();
|
|
1082
|
+
const daemonStatus = await fetchDaemonStatusFromMetadata(config, DEFAULT_DAEMON_STATUS_FETCH_OPTIONS);
|
|
1079
1083
|
if (!daemonStatus) {
|
|
1080
1084
|
return failure("Daemon not running. Start with `npx opendevbrowser serve`.", "status_failed");
|
|
1081
1085
|
}
|
|
@@ -3188,7 +3192,7 @@ function createResearchRunTool(deps) {
|
|
|
3188
3192
|
async execute(args) {
|
|
3189
3193
|
try {
|
|
3190
3194
|
const runtime = await resolveProviderRuntime(deps);
|
|
3191
|
-
const { runResearchWorkflow } = await import("./providers-
|
|
3195
|
+
const { runResearchWorkflow } = await import("./providers-T2FQJCF6.js");
|
|
3192
3196
|
const result = await runResearchWorkflow(runtime, {
|
|
3193
3197
|
topic: args.topic,
|
|
3194
3198
|
days: args.days,
|
|
@@ -3239,7 +3243,7 @@ function createShoppingRunTool(deps) {
|
|
|
3239
3243
|
async execute(args) {
|
|
3240
3244
|
try {
|
|
3241
3245
|
const runtime = await resolveProviderRuntime(deps);
|
|
3242
|
-
const { runShoppingWorkflow } = await import("./providers-
|
|
3246
|
+
const { runShoppingWorkflow } = await import("./providers-T2FQJCF6.js");
|
|
3243
3247
|
const result = await runShoppingWorkflow(runtime, {
|
|
3244
3248
|
query: args.query,
|
|
3245
3249
|
providers: args.providers,
|
|
@@ -3308,7 +3312,7 @@ function createProductVideoRunTool(deps) {
|
|
|
3308
3312
|
async execute(args) {
|
|
3309
3313
|
try {
|
|
3310
3314
|
const runtime = await resolveProviderRuntime(deps);
|
|
3311
|
-
const { runProductVideoWorkflow } = await import("./providers-
|
|
3315
|
+
const { runProductVideoWorkflow } = await import("./providers-T2FQJCF6.js");
|
|
3312
3316
|
const includeScreenshots = args.include_screenshots ?? true;
|
|
3313
3317
|
const result = await runProductVideoWorkflow(runtime, {
|
|
3314
3318
|
product_url: args.product_url,
|
|
@@ -3360,7 +3364,7 @@ function createInspiredesignRunTool(deps) {
|
|
|
3360
3364
|
async execute(args) {
|
|
3361
3365
|
try {
|
|
3362
3366
|
const runtime = await resolveProviderRuntime(deps);
|
|
3363
|
-
const { runInspiredesignWorkflow } = await import("./providers-
|
|
3367
|
+
const { runInspiredesignWorkflow } = await import("./providers-T2FQJCF6.js");
|
|
3364
3368
|
const captureMode = resolveInspiredesignCaptureMode(args.captureMode, args.urls);
|
|
3365
3369
|
const cookieSource = deps.config.get().providers?.cookieSource;
|
|
3366
3370
|
const result = await runInspiredesignWorkflow(runtime, {
|
|
@@ -3473,7 +3477,9 @@ function createTools(deps) {
|
|
|
3473
3477
|
execute: async (args, context) => {
|
|
3474
3478
|
try {
|
|
3475
3479
|
await deps.ensureHub?.();
|
|
3476
|
-
} catch {
|
|
3480
|
+
} catch (error) {
|
|
3481
|
+
const serialized = serializeError(error);
|
|
3482
|
+
return failure(serialized.message, serialized.code ?? "hub_unavailable", serialized.details);
|
|
3477
3483
|
}
|
|
3478
3484
|
return definition.execute(args, context);
|
|
3479
3485
|
}
|
|
@@ -3643,6 +3649,69 @@ var OpenDevBrowserPlugin = async ({ directory, worktree }) => {
|
|
|
3643
3649
|
toolDeps.providerRuntime = providerRuntime;
|
|
3644
3650
|
toolDeps.browserFallbackPort = browserFallbackPort;
|
|
3645
3651
|
};
|
|
3652
|
+
const readEnsureHubBudgetMs = (deadlineMs) => {
|
|
3653
|
+
const remainingMs = deadlineMs - Date.now();
|
|
3654
|
+
return remainingMs > 0 ? remainingMs : null;
|
|
3655
|
+
};
|
|
3656
|
+
const stopTimeoutMs = (deadlineMs) => {
|
|
3657
|
+
return Math.max(1, Math.min(500, readEnsureHubBudgetMs(deadlineMs) ?? 1));
|
|
3658
|
+
};
|
|
3659
|
+
const resolveHubStopConnection = (currentConfig, status) => {
|
|
3660
|
+
const metadata = readDaemonMetadata();
|
|
3661
|
+
if (metadata?.pid === status.pid) {
|
|
3662
|
+
return { port: metadata.port, token: metadata.token };
|
|
3663
|
+
}
|
|
3664
|
+
return { port: currentConfig.daemonPort, token: currentConfig.daemonToken };
|
|
3665
|
+
};
|
|
3666
|
+
const isConfiguredHubConnection = (currentConfig, connection) => {
|
|
3667
|
+
return connection.port === currentConfig.daemonPort && connection.token === currentConfig.daemonToken;
|
|
3668
|
+
};
|
|
3669
|
+
const waitForHubDaemonShutdown = async (connection, deadlineMs) => {
|
|
3670
|
+
while (readEnsureHubBudgetMs(deadlineMs)) {
|
|
3671
|
+
const status = await fetchDaemonStatus(connection.port, connection.token, {
|
|
3672
|
+
timeoutMs: stopTimeoutMs(deadlineMs)
|
|
3673
|
+
});
|
|
3674
|
+
if (!status?.ok) {
|
|
3675
|
+
return true;
|
|
3676
|
+
}
|
|
3677
|
+
await new Promise((resolve) => setTimeout(resolve, Math.min(100, stopTimeoutMs(deadlineMs))));
|
|
3678
|
+
}
|
|
3679
|
+
return false;
|
|
3680
|
+
};
|
|
3681
|
+
const stopMismatchedHubDaemon = async (currentConfig, status, deadlineMs) => {
|
|
3682
|
+
const connection = resolveHubStopConnection(currentConfig, status);
|
|
3683
|
+
const configuredConnection = isConfiguredHubConnection(currentConfig, connection);
|
|
3684
|
+
let response;
|
|
3685
|
+
try {
|
|
3686
|
+
response = await fetchWithTimeout(`http://127.0.0.1:${connection.port}/stop`, {
|
|
3687
|
+
method: "POST",
|
|
3688
|
+
headers: createDaemonStopHeaders(connection.token, "plugin.ensureHub.upgrade")
|
|
3689
|
+
}, stopTimeoutMs(deadlineMs));
|
|
3690
|
+
} catch (error) {
|
|
3691
|
+
if (!configuredConnection) {
|
|
3692
|
+
return;
|
|
3693
|
+
}
|
|
3694
|
+
throw error instanceof Error ? error : new Error(String(error));
|
|
3695
|
+
}
|
|
3696
|
+
if (response.status === 409) {
|
|
3697
|
+
if (!configuredConnection) {
|
|
3698
|
+
return;
|
|
3699
|
+
}
|
|
3700
|
+
throw new Error(`Hub daemon on 127.0.0.1:${connection.port} pid=${status.pid} is protected by a different opendevbrowser build.`);
|
|
3701
|
+
}
|
|
3702
|
+
if (!response.ok) {
|
|
3703
|
+
if (!configuredConnection) {
|
|
3704
|
+
return;
|
|
3705
|
+
}
|
|
3706
|
+
throw new Error(`Hub daemon stop failed with status ${response.status}.`);
|
|
3707
|
+
}
|
|
3708
|
+
if (!await waitForHubDaemonShutdown(connection, deadlineMs)) {
|
|
3709
|
+
if (!configuredConnection) {
|
|
3710
|
+
return;
|
|
3711
|
+
}
|
|
3712
|
+
throw new Error(`Timed out waiting for hub daemon on 127.0.0.1:${connection.port} to stop.`);
|
|
3713
|
+
}
|
|
3714
|
+
};
|
|
3646
3715
|
const ensureHub = async () => {
|
|
3647
3716
|
const currentConfig = configStore.get();
|
|
3648
3717
|
if (!isHubEnabled(currentConfig)) {
|
|
@@ -3654,29 +3723,26 @@ var OpenDevBrowserPlugin = async ({ directory, worktree }) => {
|
|
|
3654
3723
|
const deadline = Date.now() + 2e3;
|
|
3655
3724
|
let attempt = 0;
|
|
3656
3725
|
let lastError = null;
|
|
3657
|
-
const currentFingerprint = getCurrentDaemonFingerprint();
|
|
3658
3726
|
while (attempt < 2 && Date.now() < deadline) {
|
|
3659
3727
|
attempt += 1;
|
|
3660
|
-
const
|
|
3661
|
-
if (
|
|
3662
|
-
|
|
3663
|
-
await relay?.refresh?.();
|
|
3664
|
-
return;
|
|
3728
|
+
const statusTimeoutMs = readEnsureHubBudgetMs(deadline);
|
|
3729
|
+
if (!statusTimeoutMs) {
|
|
3730
|
+
break;
|
|
3665
3731
|
}
|
|
3732
|
+
const status = await fetchDaemonStatusFromMetadata(currentConfig, {
|
|
3733
|
+
...DEFAULT_DAEMON_STATUS_FETCH_OPTIONS,
|
|
3734
|
+
timeoutMs: statusTimeoutMs
|
|
3735
|
+
});
|
|
3666
3736
|
if (status?.ok) {
|
|
3667
|
-
|
|
3668
|
-
|
|
3669
|
-
|
|
3670
|
-
|
|
3671
|
-
try {
|
|
3672
|
-
await fetch(`http://127.0.0.1:${daemonPort}/stop`, {
|
|
3673
|
-
method: "POST",
|
|
3674
|
-
headers: { Authorization: `Bearer ${daemonToken}` }
|
|
3675
|
-
});
|
|
3676
|
-
} catch (error) {
|
|
3677
|
-
lastError = error instanceof Error ? error : new Error(String(error));
|
|
3678
|
-
}
|
|
3737
|
+
if (isCurrentDaemonFingerprint(status.fingerprint)) {
|
|
3738
|
+
bindRemote();
|
|
3739
|
+
await relay?.refresh?.();
|
|
3740
|
+
return;
|
|
3679
3741
|
}
|
|
3742
|
+
await stopMismatchedHubDaemon(currentConfig, status, deadline);
|
|
3743
|
+
}
|
|
3744
|
+
if (!readEnsureHubBudgetMs(deadline)) {
|
|
3745
|
+
break;
|
|
3680
3746
|
}
|
|
3681
3747
|
try {
|
|
3682
3748
|
const { stop } = await startDaemon({ config: currentConfig, directory, worktree });
|
|
@@ -3684,6 +3750,22 @@ var OpenDevBrowserPlugin = async ({ directory, worktree }) => {
|
|
|
3684
3750
|
} catch (error) {
|
|
3685
3751
|
lastError = error instanceof Error ? error : new Error(String(error));
|
|
3686
3752
|
}
|
|
3753
|
+
const refreshedTimeoutMs = readEnsureHubBudgetMs(deadline);
|
|
3754
|
+
if (!refreshedTimeoutMs) {
|
|
3755
|
+
break;
|
|
3756
|
+
}
|
|
3757
|
+
const refreshedStatus = await fetchDaemonStatusFromMetadata(currentConfig, {
|
|
3758
|
+
...DEFAULT_DAEMON_STATUS_FETCH_OPTIONS,
|
|
3759
|
+
timeoutMs: refreshedTimeoutMs
|
|
3760
|
+
});
|
|
3761
|
+
if (refreshedStatus?.ok) {
|
|
3762
|
+
if (isCurrentDaemonFingerprint(refreshedStatus.fingerprint)) {
|
|
3763
|
+
bindRemote();
|
|
3764
|
+
await relay?.refresh?.();
|
|
3765
|
+
return;
|
|
3766
|
+
}
|
|
3767
|
+
await stopMismatchedHubDaemon(currentConfig, refreshedStatus, deadline);
|
|
3768
|
+
}
|
|
3687
3769
|
if (Date.now() < deadline) {
|
|
3688
3770
|
await new Promise((resolve) => setTimeout(resolve, 500));
|
|
3689
3771
|
}
|
|
@@ -3696,7 +3778,6 @@ var OpenDevBrowserPlugin = async ({ directory, worktree }) => {
|
|
|
3696
3778
|
toolDeps.ensureHub = ensureHub;
|
|
3697
3779
|
const hubEnabled = isHubEnabled(config);
|
|
3698
3780
|
if (hubEnabled) {
|
|
3699
|
-
bindRemote();
|
|
3700
3781
|
try {
|
|
3701
3782
|
await ensureHub();
|
|
3702
3783
|
} catch (error) {
|