opendevbrowser 0.0.27 → 0.0.28
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/browser/canvas-manager.d.ts.map +1 -1
- package/dist/canvas/document-store.d.ts.map +1 -1
- package/dist/canvas/guidance.d.ts +22 -0
- package/dist/canvas/guidance.d.ts.map +1 -0
- package/dist/{chunk-MWBDO2L5.js → chunk-I5ZCOZZV.js} +224 -80
- package/dist/chunk-I5ZCOZZV.js.map +1 -0
- package/dist/{chunk-V5DJUSPV.js → chunk-T3VVHJTK.js} +1381 -318
- package/dist/chunk-T3VVHJTK.js.map +1 -0
- package/dist/cli/commands/inspiredesign.d.ts +2 -0
- package/dist/cli/commands/inspiredesign.d.ts.map +1 -1
- package/dist/cli/commands/macro-resolve.d.ts +2 -0
- package/dist/cli/commands/macro-resolve.d.ts.map +1 -1
- package/dist/cli/commands/product-video.d.ts +2 -0
- package/dist/cli/commands/product-video.d.ts.map +1 -1
- package/dist/cli/commands/research.d.ts +2 -0
- package/dist/cli/commands/research.d.ts.map +1 -1
- package/dist/cli/daemon-commands.d.ts.map +1 -1
- package/dist/cli/help.d.ts.map +1 -1
- package/dist/cli/index.js +125 -28
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/utils/workflow-message.d.ts +3 -0
- package/dist/cli/utils/workflow-message.d.ts.map +1 -1
- package/dist/daemon-fingerprint.json +1 -1
- package/dist/index.js +39 -15
- package/dist/index.js.map +1 -1
- package/dist/inspiredesign/contract.d.ts +52 -1
- package/dist/inspiredesign/contract.d.ts.map +1 -1
- package/dist/inspiredesign/handoff.d.ts +12 -0
- package/dist/inspiredesign/handoff.d.ts.map +1 -1
- package/dist/inspiredesign/reference-pattern-board.d.ts +1 -0
- package/dist/inspiredesign/reference-pattern-board.d.ts.map +1 -1
- package/dist/macros/execute-runtime.d.ts +2 -1
- package/dist/macros/execute-runtime.d.ts.map +1 -1
- package/dist/macros/execute.d.ts +4 -2
- package/dist/macros/execute.d.ts.map +1 -1
- package/dist/opendevbrowser.js +39 -15
- package/dist/opendevbrowser.js.map +1 -1
- package/dist/providers/browser-fallback.d.ts +7 -0
- package/dist/providers/browser-fallback.d.ts.map +1 -1
- package/dist/providers/community/index.d.ts.map +1 -1
- package/dist/providers/index.d.ts.map +1 -1
- package/dist/providers/renderer.d.ts.map +1 -1
- package/dist/providers/research-compiler.d.ts.map +1 -1
- package/dist/providers/runtime-bundle.d.ts +1 -1
- package/dist/providers/runtime-bundle.d.ts.map +1 -1
- package/dist/providers/runtime-factory.d.ts.map +1 -1
- package/dist/providers/shopping/index.d.ts.map +1 -1
- package/dist/providers/social/platform.d.ts.map +1 -1
- package/dist/providers/social/search-quality.d.ts.map +1 -1
- package/dist/providers/social/youtube.d.ts.map +1 -1
- package/dist/providers/workflow-handoff.d.ts +18 -1
- package/dist/providers/workflow-handoff.d.ts.map +1 -1
- package/dist/providers/workflows.d.ts +3 -0
- package/dist/providers/workflows.d.ts.map +1 -1
- package/dist/{providers-TR3DUJZV.js → providers-QF2RFB4J.js} +2 -2
- package/dist/public-surface/generated-manifest.d.ts +6 -6
- package/dist/public-surface/generated-manifest.d.ts.map +1 -1
- package/dist/public-surface/source.d.ts +8 -8
- package/dist/public-surface/source.d.ts.map +1 -1
- package/dist/tools/inspiredesign_run.d.ts.map +1 -1
- package/dist/tools/macro_resolve.d.ts.map +1 -1
- package/dist/tools/product_video_run.d.ts.map +1 -1
- package/dist/tools/research_run.d.ts.map +1 -1
- package/dist/tools/shopping_run.d.ts.map +1 -1
- package/extension/manifest.json +1 -1
- package/package.json +1 -1
- package/skills/opendevbrowser-best-practices/SKILL.md +6 -6
- package/skills/opendevbrowser-design-agent/SKILL.md +5 -0
- package/skills/opendevbrowser-design-agent/artifacts/design-contract-playbook.md +6 -1
- package/skills/opendevbrowser-design-agent/assets/templates/design-contract.v1.json +15 -1
- package/skills/opendevbrowser-design-agent/assets/templates/inspiredesign-advanced-brief.v1.json +5 -2
- package/skills/opendevbrowser-design-agent/assets/templates/reference-pattern-board.v1.json +2 -0
- package/dist/chunk-MWBDO2L5.js.map +0 -1
- package/dist/chunk-V5DJUSPV.js.map +0 -1
- /package/dist/{providers-TR3DUJZV.js.map → providers-QF2RFB4J.js.map} +0 -0
|
@@ -47,7 +47,7 @@ import {
|
|
|
47
47
|
runResearchWorkflow,
|
|
48
48
|
runShoppingWorkflow,
|
|
49
49
|
toSnippet
|
|
50
|
-
} from "./chunk-
|
|
50
|
+
} from "./chunk-T3VVHJTK.js";
|
|
51
51
|
import {
|
|
52
52
|
ProviderRuntimeError
|
|
53
53
|
} from "./chunk-FUSXMW3G.js";
|
|
@@ -3199,6 +3199,19 @@ var isExplicitShoppingExtensionRequest = (request) => {
|
|
|
3199
3199
|
const preferredModes = request.runtimePolicy?.browser.preferredModes ?? request.preferredModes;
|
|
3200
3200
|
return request.source === "shopping" && preferredModes?.length === 1 && preferredModes[0] === "extension";
|
|
3201
3201
|
};
|
|
3202
|
+
var isExplicitSocialExtensionRequest = (request) => {
|
|
3203
|
+
const preferredModes = request.runtimePolicy?.browser.preferredModes ?? request.preferredModes;
|
|
3204
|
+
return request.source === "social" && request.runtimePolicy?.browser.forceTransport === true && preferredModes?.length === 1 && preferredModes[0] === "extension";
|
|
3205
|
+
};
|
|
3206
|
+
var shouldVerifyExtensionRequestUrl = (request) => isExplicitShoppingExtensionRequest(request) || isExplicitSocialExtensionRequest(request);
|
|
3207
|
+
var isRequiredExtensionSessionRequest = (request, runtimePolicy, preferredMode) => {
|
|
3208
|
+
if (preferredMode !== "extension") {
|
|
3209
|
+
return false;
|
|
3210
|
+
}
|
|
3211
|
+
const preferredModes = request.runtimePolicy?.browser.preferredModes ?? request.preferredModes;
|
|
3212
|
+
return runtimePolicy.browser.forceTransport === true || runtimePolicy.cookies.policy === "required" || preferredModes?.length === 1 && preferredModes[0] === "extension";
|
|
3213
|
+
};
|
|
3214
|
+
var requiresAuthenticatedExtensionSession = (runtimePolicy) => runtimePolicy.cookies.policy === "required";
|
|
3202
3215
|
var shouldAttachExtensionStartUrl = (request) => request.source === "social" || request.source === "shopping";
|
|
3203
3216
|
var SOCIAL_EXTENSION_MODE_ATTEMPTS = 3;
|
|
3204
3217
|
var resolveSocialExtensionModeAttempts = (request, preferredMode) => preferredMode === "extension" && request.source === "social" ? SOCIAL_EXTENSION_MODE_ATTEMPTS : 1;
|
|
@@ -3301,6 +3314,29 @@ var fallbackFailure = (reasonCode, message, cookieDiagnostics, challengeOrchestr
|
|
|
3301
3314
|
...options.details ? options.details : {}
|
|
3302
3315
|
}
|
|
3303
3316
|
});
|
|
3317
|
+
var extensionSessionRequiredFailure = (message, cookieDiagnostics, runtimePolicy, details) => {
|
|
3318
|
+
const reasonMessage = `Logged-in extension session required: ${message}`;
|
|
3319
|
+
cookieDiagnostics.reasonCode = "auth_required";
|
|
3320
|
+
cookieDiagnostics.message = reasonMessage;
|
|
3321
|
+
return fallbackFailure("auth_required", reasonMessage, cookieDiagnostics, void 0, runtimePolicy, {
|
|
3322
|
+
mode: "extension",
|
|
3323
|
+
details: {
|
|
3324
|
+
...details ?? {},
|
|
3325
|
+
extensionSessionRequired: true
|
|
3326
|
+
}
|
|
3327
|
+
});
|
|
3328
|
+
};
|
|
3329
|
+
var extensionTransportUnavailableFailure = (message, cookieDiagnostics, runtimePolicy, details) => {
|
|
3330
|
+
cookieDiagnostics.reasonCode = "env_limited";
|
|
3331
|
+
cookieDiagnostics.message = message;
|
|
3332
|
+
return fallbackFailure("env_limited", message, cookieDiagnostics, void 0, runtimePolicy, {
|
|
3333
|
+
mode: "extension",
|
|
3334
|
+
details: {
|
|
3335
|
+
...details ?? {},
|
|
3336
|
+
extensionTransportRequired: true
|
|
3337
|
+
}
|
|
3338
|
+
});
|
|
3339
|
+
};
|
|
3304
3340
|
var toJsonValue = (value) => {
|
|
3305
3341
|
if (value === null || typeof value === "string" || typeof value === "number" || typeof value === "boolean") {
|
|
3306
3342
|
return value;
|
|
@@ -3364,7 +3400,7 @@ var buildFallbackChallengeOrchestration = (args2) => {
|
|
|
3364
3400
|
mode: policy.mode,
|
|
3365
3401
|
source: policy.source,
|
|
3366
3402
|
...policy.standDownReason ? { standDownReason: policy.standDownReason } : {},
|
|
3367
|
-
helperEligibility: resolveFallbackHelperEligibility({
|
|
3403
|
+
helperEligibility: args2.helperEligibility ?? resolveFallbackHelperEligibility({
|
|
3368
3404
|
mode: policy.mode,
|
|
3369
3405
|
helperBridgeEnabled: args2.helperBridgeEnabled
|
|
3370
3406
|
}),
|
|
@@ -3372,6 +3408,11 @@ var buildFallbackChallengeOrchestration = (args2) => {
|
|
|
3372
3408
|
reason: args2.reason
|
|
3373
3409
|
});
|
|
3374
3410
|
};
|
|
3411
|
+
var NO_ACTIVE_CHALLENGE_HELPER_ELIGIBILITY = {
|
|
3412
|
+
allowed: false,
|
|
3413
|
+
reason: "No active auth or challenge blocker was detected after capture.",
|
|
3414
|
+
standDownReason: "helper_no_active_challenge"
|
|
3415
|
+
};
|
|
3375
3416
|
var isPreserveEligibleBlocker = (blocker) => {
|
|
3376
3417
|
return blocker?.type === "auth_required" || blocker?.type === "anti_bot_challenge";
|
|
3377
3418
|
};
|
|
@@ -3771,16 +3812,20 @@ var createBrowserFallbackPort = (manager, cookieDefaults = {}, transportDefaults
|
|
|
3771
3812
|
ensureNotAborted("mode_start");
|
|
3772
3813
|
if (preferredMode === "extension") {
|
|
3773
3814
|
if (!transportDefaults.extensionWsEndpoint) {
|
|
3774
|
-
lastFailure =
|
|
3815
|
+
lastFailure = isRequiredExtensionSessionRequest(request, runtimePolicy, preferredMode) ? extensionTransportUnavailableFailure(
|
|
3816
|
+
"Extension fallback requires a relay endpoint.",
|
|
3817
|
+
cookieDiagnostics,
|
|
3818
|
+
runtimePolicyRecord
|
|
3819
|
+
) : fallbackFailure("env_limited", "Extension fallback requires a relay endpoint.", cookieDiagnostics, void 0, runtimePolicyRecord);
|
|
3775
3820
|
continue;
|
|
3776
3821
|
}
|
|
3777
3822
|
const attachOptions = shouldAttachExtensionStartUrl(request) ? { startUrl: requestUrl } : void 0;
|
|
3778
3823
|
const attached = await manager.connectRelay(transportDefaults.extensionWsEndpoint, attachOptions);
|
|
3779
3824
|
sessionId = attached.sessionId;
|
|
3780
|
-
if (
|
|
3825
|
+
if (shouldVerifyExtensionRequestUrl(request)) {
|
|
3781
3826
|
attachedUrl = (await manager.status(sessionId)).url;
|
|
3782
3827
|
navigatedDuringAttach = didExtensionAttachReachRequestUrl(requestUrl, attachedUrl);
|
|
3783
|
-
if (isRestrictedExtensionAttachUrl(attachedUrl)) {
|
|
3828
|
+
if (request.source === "shopping" && isRestrictedExtensionAttachUrl(attachedUrl)) {
|
|
3784
3829
|
const recovered = await reconnectExplicitShoppingExtensionSession({
|
|
3785
3830
|
manager,
|
|
3786
3831
|
sessionId,
|
|
@@ -3874,23 +3919,24 @@ var createBrowserFallbackPort = (manager, cookieDefaults = {}, transportDefaults
|
|
|
3874
3919
|
"settle"
|
|
3875
3920
|
)
|
|
3876
3921
|
);
|
|
3877
|
-
if (preferredMode === "extension" &&
|
|
3922
|
+
if (preferredMode === "extension" && shouldVerifyExtensionRequestUrl(request)) {
|
|
3878
3923
|
const resolvedAttachStatus = await runWithinFallbackDeadline("status", async () => manager.status(activeSessionId));
|
|
3879
3924
|
const observedUrl = normalizeExtensionAttachUrl(resolvedAttachStatus.url);
|
|
3880
3925
|
if (!didExtensionAttachReachRequestUrl(requestUrl, resolvedAttachStatus.url)) {
|
|
3881
|
-
|
|
3882
|
-
|
|
3883
|
-
|
|
3926
|
+
const details = {
|
|
3927
|
+
requestedUrl: requestUrl,
|
|
3928
|
+
...observedUrl ? { observedUrl } : {}
|
|
3929
|
+
};
|
|
3930
|
+
lastFailure = requiresAuthenticatedExtensionSession(runtimePolicy) ? extensionSessionRequiredFailure(
|
|
3931
|
+
"Extension fallback did not reach the requested provider URL.",
|
|
3884
3932
|
cookieDiagnostics,
|
|
3885
|
-
void 0,
|
|
3886
3933
|
runtimePolicyRecord,
|
|
3887
|
-
|
|
3888
|
-
|
|
3889
|
-
|
|
3890
|
-
|
|
3891
|
-
|
|
3892
|
-
|
|
3893
|
-
}
|
|
3934
|
+
details
|
|
3935
|
+
) : extensionTransportUnavailableFailure(
|
|
3936
|
+
"Extension fallback did not reach the requested provider URL.",
|
|
3937
|
+
cookieDiagnostics,
|
|
3938
|
+
runtimePolicyRecord,
|
|
3939
|
+
details
|
|
3894
3940
|
);
|
|
3895
3941
|
continue;
|
|
3896
3942
|
}
|
|
@@ -4069,8 +4115,25 @@ var createBrowserFallbackPort = (manager, cookieDefaults = {}, transportDefaults
|
|
|
4069
4115
|
runtimePolicy,
|
|
4070
4116
|
helperBridgeEnabled,
|
|
4071
4117
|
invoked: false,
|
|
4072
|
-
reason: "Fallback capture cleared without an auth or challenge blocker, so challenge orchestration was not invoked."
|
|
4118
|
+
reason: "Fallback capture cleared without an auth or challenge blocker, so challenge orchestration was not invoked.",
|
|
4119
|
+
helperEligibility: NO_ACTIVE_CHALLENGE_HELPER_ELIGIBILITY
|
|
4073
4120
|
});
|
|
4121
|
+
if (html.trim().length === 0) {
|
|
4122
|
+
lastFailure = fallbackFailure(
|
|
4123
|
+
request.reasonCode,
|
|
4124
|
+
`Browser fallback captured no HTML content at ${resolvedUrl}.`,
|
|
4125
|
+
cookieDiagnostics,
|
|
4126
|
+
challengeOrchestrationRecord,
|
|
4127
|
+
runtimePolicyRecord,
|
|
4128
|
+
{
|
|
4129
|
+
mode: toFallbackMode(status.mode),
|
|
4130
|
+
details: {
|
|
4131
|
+
captureDiagnostics
|
|
4132
|
+
}
|
|
4133
|
+
}
|
|
4134
|
+
);
|
|
4135
|
+
continue;
|
|
4136
|
+
}
|
|
4074
4137
|
return {
|
|
4075
4138
|
ok: true,
|
|
4076
4139
|
reasonCode: request.reasonCode,
|
|
@@ -4107,7 +4170,7 @@ var createBrowserFallbackPort = (manager, cookieDefaults = {}, transportDefaults
|
|
|
4107
4170
|
} : void 0;
|
|
4108
4171
|
retryModeAttempt = preferredMode === "extension" && request.source === "social" && modeAttempt < maxModeAttempts;
|
|
4109
4172
|
if (!retryModeAttempt) {
|
|
4110
|
-
lastFailure = fallbackFailure(
|
|
4173
|
+
lastFailure = isRequiredExtensionSessionRequest(request, runtimePolicy, preferredMode) ? extensionTransportUnavailableFailure(message, cookieDiagnostics, runtimePolicyRecord, timeoutDetails) : fallbackFailure(
|
|
4111
4174
|
"env_limited",
|
|
4112
4175
|
message,
|
|
4113
4176
|
cookieDiagnostics,
|
|
@@ -4212,7 +4275,7 @@ var createConfiguredProviderRuntime = (args2) => {
|
|
|
4212
4275
|
|
|
4213
4276
|
// src/providers/runtime-bundle.ts
|
|
4214
4277
|
var runtimeChallengeConfigFingerprints = /* @__PURE__ */ new WeakMap();
|
|
4215
|
-
var
|
|
4278
|
+
var fallbackPortFingerprints = /* @__PURE__ */ new WeakMap();
|
|
4216
4279
|
var canReuseRuntime = (runtime, challengeFingerprint, hasInitOverride, hasExplicitChallengeConfig) => {
|
|
4217
4280
|
if (!runtime || hasInitOverride) {
|
|
4218
4281
|
return false;
|
|
@@ -4223,37 +4286,47 @@ var canReuseRuntime = (runtime, challengeFingerprint, hasInitOverride, hasExplic
|
|
|
4223
4286
|
}
|
|
4224
4287
|
return fingerprint === challengeFingerprint;
|
|
4225
4288
|
};
|
|
4226
|
-
var canReuseFallbackPort = (fallbackPort,
|
|
4289
|
+
var canReuseFallbackPort = (fallbackPort, fingerprint) => {
|
|
4227
4290
|
if (!fallbackPort) {
|
|
4228
4291
|
return false;
|
|
4229
4292
|
}
|
|
4230
|
-
const
|
|
4231
|
-
|
|
4293
|
+
const currentFingerprint = fallbackPortFingerprints.get(fallbackPort);
|
|
4294
|
+
if (currentFingerprint === void 0) {
|
|
4295
|
+
return !fingerprint.includes('"extensionWsEndpoint":"ws://');
|
|
4296
|
+
}
|
|
4297
|
+
return currentFingerprint === fingerprint;
|
|
4232
4298
|
};
|
|
4233
4299
|
var resolveFallbackTransportConfig = (config) => config && typeof config.relayPort === "number" && config.relayPort > 0 && config.relayToken !== false ? { extensionWsEndpoint: `ws://127.0.0.1:${config.relayPort}` } : {};
|
|
4300
|
+
var fallbackPortFingerprint = (challengeFingerprint, transportConfig) => JSON.stringify({
|
|
4301
|
+
challengeFingerprint,
|
|
4302
|
+
extensionWsEndpoint: transportConfig.extensionWsEndpoint ?? null
|
|
4303
|
+
});
|
|
4234
4304
|
var createProviderRuntimeBundle = (args2) => {
|
|
4235
4305
|
const challengeConfig = resolveEffectiveChallengeConfig(args2.config, args2.challengeConfig);
|
|
4236
4306
|
const challengeFingerprint = challengeConfig ? JSON.stringify(challengeConfig) : null;
|
|
4237
|
-
const
|
|
4307
|
+
const transportConfig = resolveFallbackTransportConfig(args2.config);
|
|
4308
|
+
const fallbackFingerprint = fallbackPortFingerprint(challengeFingerprint, transportConfig);
|
|
4309
|
+
const challengeOrchestrator = args2.challengeOrchestrator ?? (challengeConfig ? new ChallengeOrchestrator(challengeConfig) : void 0);
|
|
4310
|
+
const browserFallbackPort = canReuseFallbackPort(args2.browserFallbackPort, fallbackFingerprint) ? args2.browserFallbackPort : createBrowserFallbackPort(
|
|
4238
4311
|
args2.manager,
|
|
4239
4312
|
{
|
|
4240
4313
|
policy: args2.config?.providers?.cookiePolicy,
|
|
4241
4314
|
source: args2.config?.providers?.cookieSource
|
|
4242
4315
|
},
|
|
4243
|
-
|
|
4244
|
-
|
|
4316
|
+
transportConfig,
|
|
4317
|
+
challengeOrchestrator,
|
|
4245
4318
|
challengeConfig?.mode ?? "browser_with_helper",
|
|
4246
4319
|
challengeConfig?.optionalComputerUseBridge.enabled ?? true
|
|
4247
4320
|
);
|
|
4248
4321
|
if (browserFallbackPort && browserFallbackPort !== args2.browserFallbackPort) {
|
|
4249
|
-
|
|
4322
|
+
fallbackPortFingerprints.set(browserFallbackPort, fallbackFingerprint);
|
|
4250
4323
|
}
|
|
4251
4324
|
const providerRuntime = createConfiguredProviderRuntime({
|
|
4252
4325
|
config: args2.config,
|
|
4253
4326
|
manager: args2.manager,
|
|
4254
4327
|
browserFallbackPort,
|
|
4255
4328
|
challengeConfig,
|
|
4256
|
-
challengeOrchestrator
|
|
4329
|
+
challengeOrchestrator,
|
|
4257
4330
|
init: args2.init
|
|
4258
4331
|
});
|
|
4259
4332
|
runtimeChallengeConfigFingerprints.set(
|
|
@@ -21733,6 +21806,7 @@ var APPROVED_LIBRARY_ENTRIES = {
|
|
|
21733
21806
|
motion: new Set(PROJECT_DEFAULT_LIBRARY_POLICY.motion),
|
|
21734
21807
|
threeD: new Set(PROJECT_DEFAULT_LIBRARY_POLICY.threeD)
|
|
21735
21808
|
};
|
|
21809
|
+
var UNSUPPORTED_RUNTIME_LIBRARY_POLICY_KEYS = ["motion", "threeD"];
|
|
21736
21810
|
var PROJECT_DEFAULT_RUNTIME_BUDGETS = {
|
|
21737
21811
|
defaultLivePreviewLimit: 2,
|
|
21738
21812
|
maxPinnedFullPreviewExtra: 1,
|
|
@@ -23170,6 +23244,8 @@ function buildGovernanceBlockStates(document2) {
|
|
|
23170
23244
|
if (isNonEmptyRecord(block)) {
|
|
23171
23245
|
if (key === "generationPlan") {
|
|
23172
23246
|
status = assessGenerationPlan(block).status === "invalid" ? "invalid" : "present";
|
|
23247
|
+
} else if (key === "libraryPolicy" && hasUnsupportedRuntimeLanePolicy(document2)) {
|
|
23248
|
+
status = "invalid";
|
|
23173
23249
|
} else {
|
|
23174
23250
|
const inheritedDefault = OPTIONAL_INHERITED_KEYS.has(key) ? inheritedDefaultForGovernanceKey(key) : null;
|
|
23175
23251
|
status = inheritedDefault && stableStringify(block) === stableStringify(inheritedDefault) ? "inherited" : "present";
|
|
@@ -23254,7 +23330,13 @@ function evaluateCanvasWarnings(document2, options = {}) {
|
|
|
23254
23330
|
warnings.push(buildWarning("responsive-mismatch", "Viewport coverage is incomplete for desktop, tablet, and mobile previews.", { auditId: "CANVAS-02" }));
|
|
23255
23331
|
}
|
|
23256
23332
|
if (hasDisallowedLibrary(document2)) {
|
|
23257
|
-
|
|
23333
|
+
const runtimeLaneViolations = runtimeLanePolicyViolations(resolveCanvasLibraryPolicy(document2));
|
|
23334
|
+
const details = runtimeLaneViolations.length > 0 ? { runtimeLaneViolations } : void 0;
|
|
23335
|
+
warnings.push(buildWarning("library-policy-violation", "Library policy references a non-approved canvas library.", {
|
|
23336
|
+
auditId: "CANVAS-04",
|
|
23337
|
+
severity: "error",
|
|
23338
|
+
...details ? { details } : {}
|
|
23339
|
+
}));
|
|
23258
23340
|
}
|
|
23259
23341
|
if (hasIconPolicyViolation(document2)) {
|
|
23260
23342
|
warnings.push(buildWarning("icon-policy-violation", "Icon policy references a non-approved icon family.", { auditId: "CANVAS-04", severity: "error" }));
|
|
@@ -23315,7 +23397,12 @@ function evaluateCanvasWarnings(document2, options = {}) {
|
|
|
23315
23397
|
}
|
|
23316
23398
|
function missingRequiredSaveBlocks(document2) {
|
|
23317
23399
|
const states = buildGovernanceBlockStates(document2);
|
|
23318
|
-
return REQUIRED_BEFORE_SAVE_KEYS.filter((key) =>
|
|
23400
|
+
return REQUIRED_BEFORE_SAVE_KEYS.filter((key) => {
|
|
23401
|
+
if (key === "generationPlan" || key === "libraryPolicy") {
|
|
23402
|
+
return states[key].status === "missing" || states[key].status === "invalid";
|
|
23403
|
+
}
|
|
23404
|
+
return states[key].status === "missing";
|
|
23405
|
+
});
|
|
23319
23406
|
}
|
|
23320
23407
|
function validateCanvasSave(document2) {
|
|
23321
23408
|
const missingBlocks = missingRequiredSaveBlocks(document2);
|
|
@@ -23351,6 +23438,20 @@ function hasDisallowedLibrary(document2) {
|
|
|
23351
23438
|
const policy = resolveCanvasLibraryPolicy(document2);
|
|
23352
23439
|
return Object.entries(policy).some(([category, entries]) => entries.some((entry) => !APPROVED_LIBRARY_ENTRIES[category].has(entry)));
|
|
23353
23440
|
}
|
|
23441
|
+
function runtimeLanePolicyViolations(policy) {
|
|
23442
|
+
return UNSUPPORTED_RUNTIME_LIBRARY_POLICY_KEYS.map((category) => ({ category, entries: policy[category] })).filter((violation) => violation.entries.length > 0);
|
|
23443
|
+
}
|
|
23444
|
+
function hasUnsupportedRuntimeLanePolicy(document2) {
|
|
23445
|
+
return runtimeLanePolicyViolations(resolveCanvasLibraryPolicy(document2)).length > 0;
|
|
23446
|
+
}
|
|
23447
|
+
function assertNoUnsupportedRuntimeLanePolicy(document2) {
|
|
23448
|
+
const violations = runtimeLanePolicyViolations(resolveCanvasLibraryPolicy(document2));
|
|
23449
|
+
if (violations.length === 0) {
|
|
23450
|
+
return;
|
|
23451
|
+
}
|
|
23452
|
+
const paths = violations.map(({ category }) => `libraryPolicy.${category}`).join(", ");
|
|
23453
|
+
throw new Error(`${paths} must stay empty. Put shader, WebGL, Spline, and advanced motion cues in motionSystem or generationPlan.designVectors as advisory metadata only.`);
|
|
23454
|
+
}
|
|
23354
23455
|
function hasIconPolicyViolation(document2) {
|
|
23355
23456
|
const iconRoles = readCanvasIconRoles(document2);
|
|
23356
23457
|
return Object.values(iconRoles).filter((entry) => Boolean(entry)).some((entry) => !APPROVED_LIBRARY_ENTRIES.icons.has(entry));
|
|
@@ -23681,6 +23782,7 @@ var CanvasDocumentStore = class {
|
|
|
23681
23782
|
}
|
|
23682
23783
|
replaceDocument(document2, revision, origin) {
|
|
23683
23784
|
const nextDocument = normalizeCanvasDocument(document2);
|
|
23785
|
+
assertNoUnsupportedRuntimeLanePolicy(nextDocument);
|
|
23684
23786
|
nextDocument.updatedAt = nowIso();
|
|
23685
23787
|
this.ydoc.transact(() => {
|
|
23686
23788
|
clearYMap(this.root);
|
|
@@ -30183,7 +30285,7 @@ function optionalString4(value) {
|
|
|
30183
30285
|
return typeof value === "string" && value.trim().length > 0 ? value.trim() : null;
|
|
30184
30286
|
}
|
|
30185
30287
|
|
|
30186
|
-
// src/
|
|
30288
|
+
// src/canvas/guidance.ts
|
|
30187
30289
|
var PREPLAN_CANVAS_GUIDANCE = {
|
|
30188
30290
|
recommendedNextCommands: ["canvas.plan.set"],
|
|
30189
30291
|
reason: "Handshake is complete. Submit a complete generationPlan before mutation."
|
|
@@ -30224,6 +30326,30 @@ var CANVAS_GUIDANCE_BY_COMMAND = {
|
|
|
30224
30326
|
"canvas.document.save": PERSISTED_CANVAS_GUIDANCE,
|
|
30225
30327
|
"canvas.document.export": EXPORTED_CANVAS_GUIDANCE
|
|
30226
30328
|
};
|
|
30329
|
+
var CANVAS_REQUIRED_COMMANDS_BY_BLOCKER = {
|
|
30330
|
+
plan_required: ["canvas.plan.set"],
|
|
30331
|
+
generation_plan_invalid: ["canvas.plan.set", "canvas.plan.get"],
|
|
30332
|
+
revision_conflict: ["canvas.document.load"],
|
|
30333
|
+
policy_violation: ["canvas.plan.get", "canvas.document.load"],
|
|
30334
|
+
unsupported_target: ["canvas.session.status"],
|
|
30335
|
+
lease_reclaim_required: ["canvas.session.status"]
|
|
30336
|
+
};
|
|
30337
|
+
var cloneCanvasGuidance = (guidance) => ({
|
|
30338
|
+
recommendedNextCommands: [...guidance.recommendedNextCommands],
|
|
30339
|
+
reason: guidance.reason
|
|
30340
|
+
});
|
|
30341
|
+
var buildCanvasCommandGuidance = (input) => {
|
|
30342
|
+
if (input.planStatus === "invalid") {
|
|
30343
|
+
return cloneCanvasGuidance(INVALID_PLAN_CANVAS_GUIDANCE);
|
|
30344
|
+
}
|
|
30345
|
+
if (input.planStatus !== "accepted") {
|
|
30346
|
+
return cloneCanvasGuidance(PREPLAN_CANVAS_GUIDANCE);
|
|
30347
|
+
}
|
|
30348
|
+
return cloneCanvasGuidance(CANVAS_GUIDANCE_BY_COMMAND[input.command] ?? PLAN_ACCEPTED_CANVAS_GUIDANCE);
|
|
30349
|
+
};
|
|
30350
|
+
var getCanvasRequiredNextCommands = (code) => [...CANVAS_REQUIRED_COMMANDS_BY_BLOCKER[code]];
|
|
30351
|
+
|
|
30352
|
+
// src/browser/canvas-manager.ts
|
|
30227
30353
|
function resolveGenerationPlanState(plan) {
|
|
30228
30354
|
const assessment = assessGenerationPlan(plan);
|
|
30229
30355
|
if (assessment.status === "accepted") {
|
|
@@ -32170,14 +32296,10 @@ var CanvasManager = class {
|
|
|
32170
32296
|
};
|
|
32171
32297
|
}
|
|
32172
32298
|
buildCanvasGuidance(session, command) {
|
|
32173
|
-
|
|
32174
|
-
|
|
32175
|
-
|
|
32176
|
-
|
|
32177
|
-
return cloneCanvasGuidance(PREPLAN_CANVAS_GUIDANCE);
|
|
32178
|
-
}
|
|
32179
|
-
const guidance = CANVAS_GUIDANCE_BY_COMMAND[command] ?? PLAN_ACCEPTED_CANVAS_GUIDANCE;
|
|
32180
|
-
return cloneCanvasGuidance(guidance);
|
|
32299
|
+
return buildCanvasCommandGuidance({
|
|
32300
|
+
planStatus: session.planStatus,
|
|
32301
|
+
command
|
|
32302
|
+
});
|
|
32181
32303
|
}
|
|
32182
32304
|
buildSessionSummary(session) {
|
|
32183
32305
|
const document2 = session.store.getDocument();
|
|
@@ -32408,7 +32530,7 @@ var CanvasManager = class {
|
|
|
32408
32530
|
const blocker = {
|
|
32409
32531
|
code: "plan_required",
|
|
32410
32532
|
blockingCommand: command,
|
|
32411
|
-
requiredNextCommands:
|
|
32533
|
+
requiredNextCommands: getCanvasRequiredNextCommands("plan_required"),
|
|
32412
32534
|
latestRevision: session.store.getRevision(),
|
|
32413
32535
|
message: "generationPlan must be accepted before mutation."
|
|
32414
32536
|
};
|
|
@@ -32418,7 +32540,7 @@ var CanvasManager = class {
|
|
|
32418
32540
|
const blocker = {
|
|
32419
32541
|
code: "generation_plan_invalid",
|
|
32420
32542
|
blockingCommand: command,
|
|
32421
|
-
requiredNextCommands:
|
|
32543
|
+
requiredNextCommands: getCanvasRequiredNextCommands("generation_plan_invalid"),
|
|
32422
32544
|
latestRevision: session.store.getRevision(),
|
|
32423
32545
|
message: this.describeGenerationPlanFailure(missingFields, issues)
|
|
32424
32546
|
};
|
|
@@ -32436,7 +32558,7 @@ var CanvasManager = class {
|
|
|
32436
32558
|
const blocker = {
|
|
32437
32559
|
code: "revision_conflict",
|
|
32438
32560
|
blockingCommand: command,
|
|
32439
|
-
requiredNextCommands:
|
|
32561
|
+
requiredNextCommands: getCanvasRequiredNextCommands("revision_conflict"),
|
|
32440
32562
|
latestRevision: session.store.getRevision(),
|
|
32441
32563
|
message: "The canvas document revision changed before this patch batch was applied."
|
|
32442
32564
|
};
|
|
@@ -32446,7 +32568,7 @@ var CanvasManager = class {
|
|
|
32446
32568
|
const blocker = {
|
|
32447
32569
|
code: "policy_violation",
|
|
32448
32570
|
blockingCommand: command,
|
|
32449
|
-
requiredNextCommands:
|
|
32571
|
+
requiredNextCommands: getCanvasRequiredNextCommands("policy_violation"),
|
|
32450
32572
|
latestRevision: session.store.getRevision(),
|
|
32451
32573
|
message: `Required save governance blocks are missing: ${missingBlocks.join(", ")}.`
|
|
32452
32574
|
};
|
|
@@ -32464,7 +32586,7 @@ var CanvasManager = class {
|
|
|
32464
32586
|
const blocker = {
|
|
32465
32587
|
code: "unsupported_target",
|
|
32466
32588
|
blockingCommand: command,
|
|
32467
|
-
requiredNextCommands:
|
|
32589
|
+
requiredNextCommands: getCanvasRequiredNextCommands("unsupported_target"),
|
|
32468
32590
|
latestRevision: session.store.getRevision(),
|
|
32469
32591
|
message: `Canvas target is unavailable: ${targetId}.`
|
|
32470
32592
|
};
|
|
@@ -32481,7 +32603,7 @@ var CanvasManager = class {
|
|
|
32481
32603
|
const blocker = {
|
|
32482
32604
|
code: "lease_reclaim_required",
|
|
32483
32605
|
blockingCommand: "canvas.session.status",
|
|
32484
|
-
requiredNextCommands:
|
|
32606
|
+
requiredNextCommands: getCanvasRequiredNextCommands("lease_reclaim_required"),
|
|
32485
32607
|
latestRevision: session.store.getRevision(),
|
|
32486
32608
|
message: "The canvas lease was reclaimed or replaced."
|
|
32487
32609
|
};
|
|
@@ -32535,13 +32657,13 @@ var CanvasManager = class {
|
|
|
32535
32657
|
const blocker = session.planStatus === "invalid" ? {
|
|
32536
32658
|
code: "generation_plan_invalid",
|
|
32537
32659
|
blockingCommand: "canvas.feedback.poll",
|
|
32538
|
-
requiredNextCommands:
|
|
32660
|
+
requiredNextCommands: getCanvasRequiredNextCommands("generation_plan_invalid"),
|
|
32539
32661
|
latestRevision: session.store.getRevision(),
|
|
32540
32662
|
message: this.describeGenerationPlanFailure([], session.planIssues)
|
|
32541
32663
|
} : {
|
|
32542
32664
|
code: "plan_required",
|
|
32543
32665
|
blockingCommand: "canvas.feedback.poll",
|
|
32544
|
-
requiredNextCommands:
|
|
32666
|
+
requiredNextCommands: getCanvasRequiredNextCommands("plan_required"),
|
|
32545
32667
|
latestRevision: session.store.getRevision(),
|
|
32546
32668
|
message: "generationPlan must be accepted before the live design loop is ready."
|
|
32547
32669
|
};
|
|
@@ -34289,12 +34411,6 @@ function attachDetails(error, details) {
|
|
|
34289
34411
|
Object.assign(error, details);
|
|
34290
34412
|
return error;
|
|
34291
34413
|
}
|
|
34292
|
-
function cloneCanvasGuidance(guidance) {
|
|
34293
|
-
return {
|
|
34294
|
-
recommendedNextCommands: [...guidance.recommendedNextCommands],
|
|
34295
|
-
reason: guidance.reason
|
|
34296
|
-
};
|
|
34297
|
-
}
|
|
34298
34414
|
|
|
34299
34415
|
// src/relay/relay-server.ts
|
|
34300
34416
|
import { createServer } from "http";
|
|
@@ -36752,6 +36868,10 @@ var readTargetedSocialPlatform = (providerId) => {
|
|
|
36752
36868
|
return "bluesky";
|
|
36753
36869
|
case "social/reddit":
|
|
36754
36870
|
return "reddit";
|
|
36871
|
+
case "social/facebook":
|
|
36872
|
+
return "facebook";
|
|
36873
|
+
case "social/threads":
|
|
36874
|
+
return "threads";
|
|
36755
36875
|
default:
|
|
36756
36876
|
return null;
|
|
36757
36877
|
}
|
|
@@ -36902,7 +37022,8 @@ var buildRunOptions = (resolution, overrides) => {
|
|
|
36902
37022
|
return {
|
|
36903
37023
|
source,
|
|
36904
37024
|
...providerId ? { providerIds: [providerId] } : {},
|
|
36905
|
-
...overrides?.challengeAutomationMode ? { challengeAutomationMode: overrides.challengeAutomationMode } : {}
|
|
37025
|
+
...overrides?.challengeAutomationMode ? { challengeAutomationMode: overrides.challengeAutomationMode } : {},
|
|
37026
|
+
...overrides?.browserMode ? { runtimePolicy: { browserMode: overrides.browserMode } } : {}
|
|
36906
37027
|
};
|
|
36907
37028
|
};
|
|
36908
37029
|
var executeMacroResolution = async (resolution, runtime, overrides) => {
|
|
@@ -36990,7 +37111,10 @@ var executeMacroWithRuntime = async (args2) => {
|
|
|
36990
37111
|
await executeMacroResolution(
|
|
36991
37112
|
args2.resolution,
|
|
36992
37113
|
runtime,
|
|
36993
|
-
args2.challengeAutomationMode
|
|
37114
|
+
args2.challengeAutomationMode || args2.browserMode ? {
|
|
37115
|
+
...args2.browserMode ? { browserMode: args2.browserMode } : {},
|
|
37116
|
+
...args2.challengeAutomationMode ? { challengeAutomationMode: args2.challengeAutomationMode } : {}
|
|
37117
|
+
} : void 0
|
|
36994
37118
|
)
|
|
36995
37119
|
);
|
|
36996
37120
|
};
|
|
@@ -38035,21 +38159,32 @@ async function handleDaemonCommand(core, request) {
|
|
|
38035
38159
|
count: cookies.length
|
|
38036
38160
|
};
|
|
38037
38161
|
}
|
|
38038
|
-
case "macro.resolve":
|
|
38162
|
+
case "macro.resolve": {
|
|
38163
|
+
const execute = optionalBoolean2(params2.execute) ?? false;
|
|
38164
|
+
const browserMode = optionalWorkflowBrowserMode(params2.browserMode);
|
|
38165
|
+
const challengeAutomationMode = optionalChallengeAutomationMode(params2.challengeAutomationMode);
|
|
38166
|
+
if (!execute && browserMode) {
|
|
38167
|
+
throw new Error("browserMode requires execute=true for macro resolution");
|
|
38168
|
+
}
|
|
38169
|
+
if (!execute && challengeAutomationMode) {
|
|
38170
|
+
throw new Error("challengeAutomationMode requires execute=true for macro resolution");
|
|
38171
|
+
}
|
|
38039
38172
|
return resolveMacroExpression(
|
|
38040
38173
|
{
|
|
38041
38174
|
expression: requireString3(params2.expression, "expression"),
|
|
38042
38175
|
defaultProvider: optionalString6(params2.defaultProvider),
|
|
38043
38176
|
includeCatalog: optionalBoolean2(params2.includeCatalog) ?? false,
|
|
38044
|
-
execute
|
|
38177
|
+
execute,
|
|
38045
38178
|
timeoutMs: optionalNumber(params2.timeoutMs, "timeoutMs"),
|
|
38046
|
-
|
|
38179
|
+
browserMode,
|
|
38180
|
+
challengeAutomationMode
|
|
38047
38181
|
},
|
|
38048
38182
|
core.config,
|
|
38049
38183
|
core.manager,
|
|
38050
38184
|
core.browserFallbackPort,
|
|
38051
38185
|
core.providerRuntime
|
|
38052
38186
|
);
|
|
38187
|
+
}
|
|
38053
38188
|
case "research.run":
|
|
38054
38189
|
return runResearchWorkflow(
|
|
38055
38190
|
createDaemonWorkflowRuntime(core),
|
|
@@ -38066,6 +38201,7 @@ async function handleDaemonCommand(core, request) {
|
|
|
38066
38201
|
timeoutMs: optionalNumber(params2.timeoutMs, "timeoutMs"),
|
|
38067
38202
|
outputDir: optionalString6(params2.outputDir),
|
|
38068
38203
|
ttlHours: optionalNumber(params2.ttlHours, "ttlHours"),
|
|
38204
|
+
browserMode: optionalWorkflowBrowserMode(params2.browserMode),
|
|
38069
38205
|
useCookies: optionalBoolean2(params2.useCookies),
|
|
38070
38206
|
challengeAutomationMode: optionalChallengeAutomationMode(params2.challengeAutomationMode),
|
|
38071
38207
|
cookiePolicyOverride: optionalCookiePolicy(params2.cookiePolicyOverride)
|
|
@@ -38103,6 +38239,7 @@ async function handleDaemonCommand(core, request) {
|
|
|
38103
38239
|
timeoutMs: inspiredesignTimeoutMs,
|
|
38104
38240
|
outputDir: optionalString6(params2.outputDir),
|
|
38105
38241
|
ttlHours: optionalNumber(params2.ttlHours, "ttlHours"),
|
|
38242
|
+
browserMode: optionalWorkflowBrowserMode(params2.browserMode),
|
|
38106
38243
|
useCookies: optionalBoolean2(params2.useCookies),
|
|
38107
38244
|
challengeAutomationMode: optionalChallengeAutomationMode(params2.challengeAutomationMode),
|
|
38108
38245
|
cookiePolicyOverride: optionalCookiePolicy(params2.cookiePolicyOverride)
|
|
@@ -38129,6 +38266,7 @@ async function handleDaemonCommand(core, request) {
|
|
|
38129
38266
|
output_dir: optionalString6(params2.output_dir),
|
|
38130
38267
|
ttl_hours: optionalNumber(params2.ttl_hours, "ttl_hours"),
|
|
38131
38268
|
timeoutMs: productVideoTimeoutMs,
|
|
38269
|
+
browserMode: optionalWorkflowBrowserMode(params2.browserMode),
|
|
38132
38270
|
useCookies: optionalBoolean2(params2.useCookies),
|
|
38133
38271
|
challengeAutomationMode: optionalChallengeAutomationMode(params2.challengeAutomationMode),
|
|
38134
38272
|
cookiePolicyOverride: optionalCookiePolicy(params2.cookiePolicyOverride)
|
|
@@ -39089,6 +39227,7 @@ async function resolveMacroExpression(options, config, manager, browserFallbackP
|
|
|
39089
39227
|
manager,
|
|
39090
39228
|
browserFallbackPort,
|
|
39091
39229
|
timeoutMs: options.timeoutMs,
|
|
39230
|
+
browserMode: options.browserMode,
|
|
39092
39231
|
challengeAutomationMode: options.challengeAutomationMode
|
|
39093
39232
|
});
|
|
39094
39233
|
const handoff = buildMacroResolveSuccessHandoff({
|
|
@@ -40471,8 +40610,8 @@ var onboarding_metadata_default = {
|
|
|
40471
40610
|
skillList: "opendevbrowser_skill_list",
|
|
40472
40611
|
skillLoad: 'opendevbrowser_skill_load opendevbrowser-best-practices "quick start"',
|
|
40473
40612
|
validatedLanes: 'opendevbrowser_skill_load opendevbrowser-best-practices "validated capability lanes"',
|
|
40474
|
-
validatedResearch: 'npx opendevbrowser research run --topic "Chrome extension debugging workflows" --days 30 --source-selection auto --mode json --output-format json',
|
|
40475
|
-
validatedShopping: 'npx opendevbrowser shopping run --query "wireless ergonomic mouse" --providers shopping/bestbuy,shopping/ebay --budget 150 --browser-mode managed --mode json --output-format json',
|
|
40613
|
+
validatedResearch: 'npx opendevbrowser research run --topic "Chrome extension debugging workflows" --days 30 --source-selection auto --browser-mode managed --mode json --output-format json',
|
|
40614
|
+
validatedShopping: 'npx opendevbrowser shopping run --query "wireless ergonomic mouse" --providers shopping/bestbuy,shopping/ebay --budget 150 --browser-mode managed --use-cookies --challenge-automation-mode browser_with_helper --mode json --output-format json',
|
|
40476
40615
|
computerUseEntry: 'npx opendevbrowser research run --topic "account recovery flow" --source-selection auto --challenge-automation-mode browser --mode json --output-format json',
|
|
40477
40616
|
happyPath: "npx opendevbrowser launch --no-extension --headless --start-url https://example.com --output-format json"
|
|
40478
40617
|
},
|
|
@@ -40616,7 +40755,7 @@ var DEFAULT_WORKFLOW_TRANSPORT_TIMEOUT_MS = 12e4;
|
|
|
40616
40755
|
// src/public-surface/generated-manifest.ts
|
|
40617
40756
|
var PUBLIC_SURFACE_MANIFEST = {
|
|
40618
40757
|
"schemaVersion": "2026-04-04",
|
|
40619
|
-
"generatedAt": "2026-04-
|
|
40758
|
+
"generatedAt": "2026-04-30T02:27:58.736Z",
|
|
40620
40759
|
"cli": {
|
|
40621
40760
|
"groups": [
|
|
40622
40761
|
{
|
|
@@ -41042,7 +41181,7 @@ var PUBLIC_SURFACE_MANIFEST = {
|
|
|
41042
41181
|
"--timeout-ms"
|
|
41043
41182
|
],
|
|
41044
41183
|
"examples": [
|
|
41045
|
-
"npx opendevbrowser status-capabilities --session-id s1 --target-id page-1 --challenge-automation-mode
|
|
41184
|
+
"npx opendevbrowser status-capabilities --session-id s1 --target-id page-1 --challenge-automation-mode browser_with_helper --timeout-ms 30000 --output-format json"
|
|
41046
41185
|
],
|
|
41047
41186
|
"notes": [],
|
|
41048
41187
|
"groupId": "session_lifecycle",
|
|
@@ -41086,7 +41225,7 @@ var PUBLIC_SURFACE_MANIFEST = {
|
|
|
41086
41225
|
{
|
|
41087
41226
|
"name": "research",
|
|
41088
41227
|
"description": "Run research workflows",
|
|
41089
|
-
"usage": "npx opendevbrowser research run --topic <text> [--days <n>|--from <date> --to <date>] [--source-selection <family>] [--sources <csv>] [--include-engagement] [--limit-per-source <n>] [--mode <mode>] [--timeout-ms <ms>] [--output-dir <path>] [--ttl-hours <n>] [--use-cookies[=<bool>]] [--challenge-automation-mode <mode>] [--cookie-policy-override <policy>]",
|
|
41228
|
+
"usage": "npx opendevbrowser research run --topic <text> [--days <n>|--from <date> --to <date>] [--source-selection <family>] [--sources <csv>] [--include-engagement] [--limit-per-source <n>] [--browser-mode <mode>] [--mode <mode>] [--timeout-ms <ms>] [--output-dir <path>] [--ttl-hours <n>] [--use-cookies[=<bool>]] [--challenge-automation-mode <mode>] [--cookie-policy-override <policy>]",
|
|
41090
41229
|
"flags": [
|
|
41091
41230
|
"--topic",
|
|
41092
41231
|
"--days",
|
|
@@ -41096,6 +41235,7 @@ var PUBLIC_SURFACE_MANIFEST = {
|
|
|
41096
41235
|
"--sources",
|
|
41097
41236
|
"--include-engagement",
|
|
41098
41237
|
"--limit-per-source",
|
|
41238
|
+
"--browser-mode",
|
|
41099
41239
|
"--mode",
|
|
41100
41240
|
"--timeout-ms",
|
|
41101
41241
|
"--output-dir",
|
|
@@ -41106,7 +41246,7 @@ var PUBLIC_SURFACE_MANIFEST = {
|
|
|
41106
41246
|
"--cookie-policy"
|
|
41107
41247
|
],
|
|
41108
41248
|
"examples": [
|
|
41109
|
-
'npx opendevbrowser research run --topic "Chrome extension debugging workflows" --days 30 --source-selection auto --mode json --output-format json'
|
|
41249
|
+
'npx opendevbrowser research run --topic "Chrome extension debugging workflows" --days 30 --source-selection auto --browser-mode managed --mode json --output-format json'
|
|
41110
41250
|
],
|
|
41111
41251
|
"notes": [
|
|
41112
41252
|
"Generic topical research is currently safest with --source-selection auto; add shopping only for deliberate commercial comparison."
|
|
@@ -41136,7 +41276,7 @@ var PUBLIC_SURFACE_MANIFEST = {
|
|
|
41136
41276
|
"--cookie-policy"
|
|
41137
41277
|
],
|
|
41138
41278
|
"examples": [
|
|
41139
|
-
'npx opendevbrowser shopping run --query "wireless ergonomic mouse" --providers shopping/bestbuy,shopping/ebay --budget 150 --browser-mode managed --mode json --output-format json'
|
|
41279
|
+
'npx opendevbrowser shopping run --query "wireless ergonomic mouse" --providers shopping/bestbuy,shopping/ebay --budget 150 --browser-mode managed --use-cookies --challenge-automation-mode browser_with_helper --mode json --output-format json'
|
|
41140
41280
|
],
|
|
41141
41281
|
"notes": [
|
|
41142
41282
|
"Treat --region as advisory unless the workflow output reports region_authoritative=true."
|
|
@@ -41148,7 +41288,7 @@ var PUBLIC_SURFACE_MANIFEST = {
|
|
|
41148
41288
|
{
|
|
41149
41289
|
"name": "product-video",
|
|
41150
41290
|
"description": "Run product presentation asset workflows",
|
|
41151
|
-
"usage": "npx opendevbrowser product-video run (--product-url <url> | --product-name <name>) [--provider-hint <provider>] [--include-screenshots
|
|
41291
|
+
"usage": "npx opendevbrowser product-video run (--product-url <url> | --product-name <name>) [--provider-hint <provider>] [--include-screenshots[=<bool>]] [--include-all-images[=<bool>]] [--include-copy[=<bool>]] [--timeout-ms <ms>] [--browser-mode <mode>] [--use-cookies[=<bool>]] [--challenge-automation-mode <mode>] [--cookie-policy-override <policy>] [--output-dir <path>] [--ttl-hours <n>]",
|
|
41152
41292
|
"flags": [
|
|
41153
41293
|
"--product-url",
|
|
41154
41294
|
"--product-name",
|
|
@@ -41157,6 +41297,7 @@ var PUBLIC_SURFACE_MANIFEST = {
|
|
|
41157
41297
|
"--include-all-images",
|
|
41158
41298
|
"--include-copy",
|
|
41159
41299
|
"--timeout-ms",
|
|
41300
|
+
"--browser-mode",
|
|
41160
41301
|
"--use-cookies",
|
|
41161
41302
|
"--challenge-automation-mode",
|
|
41162
41303
|
"--cookie-policy-override",
|
|
@@ -41165,7 +41306,7 @@ var PUBLIC_SURFACE_MANIFEST = {
|
|
|
41165
41306
|
"--ttl-hours"
|
|
41166
41307
|
],
|
|
41167
41308
|
"examples": [
|
|
41168
|
-
'npx opendevbrowser product-video run --product-url "https://example.com/p/1" --include-screenshots --output-format json'
|
|
41309
|
+
'npx opendevbrowser product-video run --product-url "https://example.com/p/1" --browser-mode managed --use-cookies --challenge-automation-mode browser_with_helper --include-screenshots --output-format json'
|
|
41169
41310
|
],
|
|
41170
41311
|
"notes": [
|
|
41171
41312
|
"Confirm whether the returned pack is visual-ready or metadata-first before briefing production."
|
|
@@ -41177,7 +41318,7 @@ var PUBLIC_SURFACE_MANIFEST = {
|
|
|
41177
41318
|
{
|
|
41178
41319
|
"name": "inspiredesign",
|
|
41179
41320
|
"description": "Run inspiredesign workflows",
|
|
41180
|
-
"usage": "npx opendevbrowser inspiredesign run --brief <text> [--url <url>]... [--capture-mode <mode>] [--include-prototype-guidance[=<bool>]] [--mode <mode>] [--timeout-ms <ms>] [--output-dir <path>] [--ttl-hours <n>] [--use-cookies[=<bool>]] [--challenge-automation-mode <mode>] [--cookie-policy-override <policy>]",
|
|
41321
|
+
"usage": "npx opendevbrowser inspiredesign run --brief <text> [--url <url>]... [--capture-mode <mode>] [--include-prototype-guidance[=<bool>]] [--mode <mode>] [--timeout-ms <ms>] [--output-dir <path>] [--ttl-hours <n>] [--browser-mode <mode>] [--use-cookies[=<bool>]] [--challenge-automation-mode <mode>] [--cookie-policy-override <policy>]",
|
|
41181
41322
|
"flags": [
|
|
41182
41323
|
"--brief",
|
|
41183
41324
|
"--url",
|
|
@@ -41187,13 +41328,14 @@ var PUBLIC_SURFACE_MANIFEST = {
|
|
|
41187
41328
|
"--timeout-ms",
|
|
41188
41329
|
"--output-dir",
|
|
41189
41330
|
"--ttl-hours",
|
|
41331
|
+
"--browser-mode",
|
|
41190
41332
|
"--use-cookies",
|
|
41191
41333
|
"--challenge-automation-mode",
|
|
41192
41334
|
"--cookie-policy-override",
|
|
41193
41335
|
"--cookie-policy"
|
|
41194
41336
|
],
|
|
41195
41337
|
"examples": [
|
|
41196
|
-
'npx opendevbrowser inspiredesign run --brief "Extract a reusable dashboard design contract from live references" --url https://linear.app --include-prototype-guidance --output-dir /tmp/inspiredesign --output-format json'
|
|
41338
|
+
'npx opendevbrowser inspiredesign run --brief "Extract a reusable dashboard design contract from live references" --url https://linear.app --browser-mode managed --use-cookies --challenge-automation-mode browser_with_helper --include-prototype-guidance --output-dir /tmp/inspiredesign --output-format json'
|
|
41197
41339
|
],
|
|
41198
41340
|
"notes": [
|
|
41199
41341
|
"Any inspiredesign --url forces deep capture for DOM/layout evidence; without URLs, --capture-mode defaults to off.",
|
|
@@ -41222,19 +41364,21 @@ var PUBLIC_SURFACE_MANIFEST = {
|
|
|
41222
41364
|
{
|
|
41223
41365
|
"name": "macro-resolve",
|
|
41224
41366
|
"description": "Resolve or execute a macro expression via provider actions",
|
|
41225
|
-
"usage": "npx opendevbrowser macro-resolve --expression <macro> [--default-provider <provider>] [--include-catalog] [--execute
|
|
41367
|
+
"usage": "npx opendevbrowser macro-resolve --expression <macro> [--default-provider <provider>] [--include-catalog] [--execute [--timeout-ms <ms>] [--browser-mode <mode>] [--challenge-automation-mode <mode>]]",
|
|
41226
41368
|
"flags": [
|
|
41227
41369
|
"--expression",
|
|
41228
41370
|
"--default-provider",
|
|
41229
41371
|
"--include-catalog",
|
|
41230
41372
|
"--execute",
|
|
41231
41373
|
"--timeout-ms",
|
|
41374
|
+
"--browser-mode",
|
|
41232
41375
|
"--challenge-automation-mode"
|
|
41233
41376
|
],
|
|
41234
41377
|
"examples": [
|
|
41235
|
-
`npx opendevbrowser macro-resolve --expression '@community.search("browser automation failures", 4)' --execute --challenge-automation-mode
|
|
41378
|
+
`npx opendevbrowser macro-resolve --expression '@community.search("browser automation failures", 4)' --execute --browser-mode extension --challenge-automation-mode browser_with_helper --output-format json`
|
|
41236
41379
|
],
|
|
41237
41380
|
"notes": [
|
|
41381
|
+
"Use --browser-mode and --challenge-automation-mode only with --execute.",
|
|
41238
41382
|
"When --execute is enabled, inspect execution.meta.blocker before trusting a blocked result as complete."
|
|
41239
41383
|
],
|
|
41240
41384
|
"groupId": "provider_workflows",
|
|
@@ -41900,7 +42044,7 @@ var PUBLIC_SURFACE_MANIFEST = {
|
|
|
41900
42044
|
"--timeout-ms"
|
|
41901
42045
|
],
|
|
41902
42046
|
"examples": [
|
|
41903
|
-
"npx opendevbrowser session-inspector-plan --session-id s1 --target-id page-1 --challenge-automation-mode
|
|
42047
|
+
"npx opendevbrowser session-inspector-plan --session-id s1 --target-id page-1 --challenge-automation-mode browser_with_helper --output-format json"
|
|
41904
42048
|
],
|
|
41905
42049
|
"notes": [
|
|
41906
42050
|
"Inspect browser-scoped challenge automation before enabling browser_with_helper on a live rerun."
|
|
@@ -42846,7 +42990,7 @@ var PUBLIC_SURFACE_MANIFEST = {
|
|
|
42846
42990
|
"name": "opendevbrowser_status_capabilities",
|
|
42847
42991
|
"description": "Inspect runtime capability discovery for the host and an optional session.",
|
|
42848
42992
|
"cliEquivalent": "status-capabilities",
|
|
42849
|
-
"example": "npx opendevbrowser status-capabilities --session-id s1 --target-id page-1 --challenge-automation-mode
|
|
42993
|
+
"example": "npx opendevbrowser status-capabilities --session-id s1 --target-id page-1 --challenge-automation-mode browser_with_helper --timeout-ms 30000 --output-format json"
|
|
42850
42994
|
},
|
|
42851
42995
|
{
|
|
42852
42996
|
"name": "opendevbrowser_session_inspector",
|
|
@@ -42858,7 +43002,7 @@ var PUBLIC_SURFACE_MANIFEST = {
|
|
|
42858
43002
|
"name": "opendevbrowser_session_inspector_plan",
|
|
42859
43003
|
"description": "Inspect browser-scoped computer-use policy, eligibility, and safe suggested steps.",
|
|
42860
43004
|
"cliEquivalent": "session-inspector-plan",
|
|
42861
|
-
"example": "npx opendevbrowser session-inspector-plan --session-id s1 --target-id page-1 --challenge-automation-mode
|
|
43005
|
+
"example": "npx opendevbrowser session-inspector-plan --session-id s1 --target-id page-1 --challenge-automation-mode browser_with_helper --output-format json"
|
|
42862
43006
|
},
|
|
42863
43007
|
{
|
|
42864
43008
|
"name": "opendevbrowser_session_inspector_audit",
|
|
@@ -43112,31 +43256,31 @@ var PUBLIC_SURFACE_MANIFEST = {
|
|
|
43112
43256
|
"name": "opendevbrowser_macro_resolve",
|
|
43113
43257
|
"description": "Resolve or execute provider macro expressions.",
|
|
43114
43258
|
"cliEquivalent": "macro-resolve",
|
|
43115
|
-
"example": `npx opendevbrowser macro-resolve --expression '@community.search("browser automation failures", 4)' --execute --challenge-automation-mode
|
|
43259
|
+
"example": `npx opendevbrowser macro-resolve --expression '@community.search("browser automation failures", 4)' --execute --browser-mode extension --challenge-automation-mode browser_with_helper --output-format json`
|
|
43116
43260
|
},
|
|
43117
43261
|
{
|
|
43118
43262
|
"name": "opendevbrowser_research_run",
|
|
43119
43263
|
"description": "Run the research workflow directly.",
|
|
43120
43264
|
"cliEquivalent": "research",
|
|
43121
|
-
"example": 'npx opendevbrowser research run --topic "Chrome extension debugging workflows" --days 30 --source-selection auto --mode json --output-format json'
|
|
43265
|
+
"example": 'npx opendevbrowser research run --topic "Chrome extension debugging workflows" --days 30 --source-selection auto --browser-mode managed --mode json --output-format json'
|
|
43122
43266
|
},
|
|
43123
43267
|
{
|
|
43124
43268
|
"name": "opendevbrowser_shopping_run",
|
|
43125
43269
|
"description": "Run the shopping workflow directly.",
|
|
43126
43270
|
"cliEquivalent": "shopping",
|
|
43127
|
-
"example": 'npx opendevbrowser shopping run --query "wireless ergonomic mouse" --providers shopping/bestbuy,shopping/ebay --budget 150 --browser-mode managed --mode json --output-format json'
|
|
43271
|
+
"example": 'npx opendevbrowser shopping run --query "wireless ergonomic mouse" --providers shopping/bestbuy,shopping/ebay --budget 150 --browser-mode managed --use-cookies --challenge-automation-mode browser_with_helper --mode json --output-format json'
|
|
43128
43272
|
},
|
|
43129
43273
|
{
|
|
43130
43274
|
"name": "opendevbrowser_product_video_run",
|
|
43131
43275
|
"description": "Run the product-video asset workflow directly.",
|
|
43132
43276
|
"cliEquivalent": "product-video",
|
|
43133
|
-
"example": 'npx opendevbrowser product-video run --product-url "https://example.com/p/1" --include-screenshots --output-format json'
|
|
43277
|
+
"example": 'npx opendevbrowser product-video run --product-url "https://example.com/p/1" --browser-mode managed --use-cookies --challenge-automation-mode browser_with_helper --include-screenshots --output-format json'
|
|
43134
43278
|
},
|
|
43135
43279
|
{
|
|
43136
43280
|
"name": "opendevbrowser_inspiredesign_run",
|
|
43137
43281
|
"description": "Run the inspiredesign workflow directly.",
|
|
43138
43282
|
"cliEquivalent": "inspiredesign",
|
|
43139
|
-
"example": 'npx opendevbrowser inspiredesign run --brief "Extract a reusable dashboard design contract from live references" --url https://linear.app --include-prototype-guidance --output-dir /tmp/inspiredesign --output-format json'
|
|
43283
|
+
"example": 'npx opendevbrowser inspiredesign run --brief "Extract a reusable dashboard design contract from live references" --url https://linear.app --browser-mode managed --use-cookies --challenge-automation-mode browser_with_helper --include-prototype-guidance --output-dir /tmp/inspiredesign --output-format json'
|
|
43140
43284
|
},
|
|
43141
43285
|
{
|
|
43142
43286
|
"name": "opendevbrowser_canvas",
|
|
@@ -43622,4 +43766,4 @@ export {
|
|
|
43622
43766
|
TOOL_SURFACE_ENTRIES
|
|
43623
43767
|
};
|
|
43624
43768
|
/* v8 ignore next -- @preserve */
|
|
43625
|
-
//# sourceMappingURL=chunk-
|
|
43769
|
+
//# sourceMappingURL=chunk-I5ZCOZZV.js.map
|