@steipete/oracle 0.20.3 → 0.21.0
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/bin/oracle-cli.js +2 -0
- package/dist/docs-site/.nojekyll +0 -0
- package/dist/docs-site/CNAME +1 -0
- package/dist/docs-site/RELEASING.html +403 -0
- package/dist/docs-site/advisor.html +317 -0
- package/dist/docs-site/agents.html +375 -0
- package/dist/docs-site/anthropic.html +368 -0
- package/dist/docs-site/bridge.html +421 -0
- package/dist/docs-site/browser-mode.html +636 -0
- package/dist/docs-site/chromium-forks.html +355 -0
- package/dist/docs-site/cli-reference.html +347 -0
- package/dist/docs-site/configuration.html +464 -0
- package/dist/docs-site/favicon.svg +14 -0
- package/dist/docs-site/followup.html +375 -0
- package/dist/docs-site/gemini.html +387 -0
- package/dist/docs-site/grok.html +325 -0
- package/dist/docs-site/index.html +360 -0
- package/dist/docs-site/install.html +335 -0
- package/dist/docs-site/linux.html +321 -0
- package/dist/docs-site/llms.txt +44 -0
- package/dist/docs-site/manual-tests.html +621 -0
- package/dist/docs-site/mcp.html +412 -0
- package/dist/docs-site/multimodel.html +364 -0
- package/dist/docs-site/mythical-pro-agents.html +360 -0
- package/dist/docs-site/notifier.html +338 -0
- package/dist/docs-site/openai-endpoints.html +417 -0
- package/dist/docs-site/openrouter.html +344 -0
- package/dist/docs-site/quickstart.html +369 -0
- package/dist/docs-site/refactor/ux.html +321 -0
- package/dist/docs-site/sessions.html +397 -0
- package/dist/docs-site/social-card.png +0 -0
- package/dist/docs-site/social-card.svg +79 -0
- package/dist/docs-site/spec.html +363 -0
- package/dist/docs-site/testing.html +323 -0
- package/dist/docs-site/tui-debug.html +326 -0
- package/dist/docs-site/windows-work.html +348 -0
- package/dist/docs-site/windows.html +320 -0
- package/dist/src/browser/chatgptConversation.js +309 -0
- package/dist/src/browser/config.js +2 -0
- package/dist/src/browser/index.js +78 -8
- package/dist/src/browser/sessionRunner.js +1 -0
- package/dist/src/cli/browserConfig.js +1 -0
- package/dist/src/cli/browserDefaults.js +4 -0
- package/dist/src/cli/sessionRunner.js +1 -0
- package/dist/src/config.js +1 -0
- package/dist/src/remote/server.js +1 -0
- package/package.json +1 -1
|
@@ -58,6 +58,7 @@ export const DEFAULT_BROWSER_CONFIG = {
|
|
|
58
58
|
researchMode: "off",
|
|
59
59
|
archiveConversations: "auto",
|
|
60
60
|
resumeConversationUrl: null,
|
|
61
|
+
captureProviderNative: false,
|
|
61
62
|
};
|
|
62
63
|
export function resolveBrowserConfig(config) {
|
|
63
64
|
const debugPortEnv = parseDebugPort(process.env.ORACLE_BROWSER_PORT ?? process.env.ORACLE_BROWSER_DEBUG_PORT);
|
|
@@ -117,6 +118,7 @@ export function resolveBrowserConfig(config) {
|
|
|
117
118
|
researchMode,
|
|
118
119
|
archiveConversations,
|
|
119
120
|
resumeConversationUrl: config?.resumeConversationUrl ?? DEFAULT_BROWSER_CONFIG.resumeConversationUrl,
|
|
121
|
+
captureProviderNative: config?.captureProviderNative ?? DEFAULT_BROWSER_CONFIG.captureProviderNative,
|
|
120
122
|
manualLogin,
|
|
121
123
|
manualLoginProfileDir: manualLogin ? resolvedProfileDir : null,
|
|
122
124
|
manualLoginCookieSync: config?.manualLoginCookieSync ?? DEFAULT_BROWSER_CONFIG.manualLoginCookieSync,
|
|
@@ -16,6 +16,7 @@ import { INPUT_SELECTORS } from "./constants.js";
|
|
|
16
16
|
import { uploadAttachmentViaDataTransfer } from "./actions/remoteFileTransfer.js";
|
|
17
17
|
import { ensureThinkingTime } from "./actions/thinkingTime.js";
|
|
18
18
|
import { throwIfAssistantUiError } from "./actions/assistantResponse.js";
|
|
19
|
+
import { finalizeProviderNativeCapture, } from "./chatgptConversation.js";
|
|
19
20
|
import { startThinkingStatusMonitor } from "./actions/thinkingStatus.js";
|
|
20
21
|
import { classifyChatGptUiWarningText, collectChatGptUiWarnings, createAssistantTimeoutError, throwChatGptUiWarningIfPresent, } from "./uiWarnings.js";
|
|
21
22
|
import { activateDeepResearch, captureDeepResearchTargetKeys, waitForDeepResearchCompletion, waitForResearchPlanAutoConfirm, } from "./actions/deepResearch.js";
|
|
@@ -443,6 +444,31 @@ function formatBrowserLeaseDiagnostics(options) {
|
|
|
443
444
|
`launch=${options.launchDisposition ?? "unknown"}`,
|
|
444
445
|
].join("; ");
|
|
445
446
|
}
|
|
447
|
+
/**
|
|
448
|
+
* Provider-native capture, gated on explicit opt-in.
|
|
449
|
+
*
|
|
450
|
+
* Off by default because it costs two extra authenticated requests per run and
|
|
451
|
+
* only matters when a caller intends to treat the transcript as evidence rather
|
|
452
|
+
* than as an answer. When it is on and it fails, the run is unaffected: the
|
|
453
|
+
* summary records why, and nothing throws.
|
|
454
|
+
*/
|
|
455
|
+
async function runProviderNativeCapture(params) {
|
|
456
|
+
if (!params.config.captureProviderNative) {
|
|
457
|
+
return { artifacts: [] };
|
|
458
|
+
}
|
|
459
|
+
const conversationId = params.conversationUrl
|
|
460
|
+
? extractConversationIdFromUrl(params.conversationUrl)
|
|
461
|
+
: undefined;
|
|
462
|
+
return finalizeProviderNativeCapture({
|
|
463
|
+
Runtime: params.Runtime,
|
|
464
|
+
conversationId,
|
|
465
|
+
conversationUrl: params.conversationUrl,
|
|
466
|
+
sessionId: params.sessionId,
|
|
467
|
+
answerMarkdown: params.answerMarkdown,
|
|
468
|
+
answerMessageId: params.answerMessageId,
|
|
469
|
+
logger: params.logger,
|
|
470
|
+
});
|
|
471
|
+
}
|
|
446
472
|
function buildSkippedModelSelectionEvidence(desiredModel, strategy) {
|
|
447
473
|
return {
|
|
448
474
|
requestedModel: desiredModel ?? null,
|
|
@@ -682,6 +708,7 @@ async function runBrowserModeInternal(options, cancellation) {
|
|
|
682
708
|
const startedAt = Date.now();
|
|
683
709
|
let answerText = "";
|
|
684
710
|
let answerMarkdown = "";
|
|
711
|
+
let answerMessageId;
|
|
685
712
|
let answerHtml = "";
|
|
686
713
|
let runStatus = "attempted";
|
|
687
714
|
let connectionClosedUnexpectedly = false;
|
|
@@ -1227,15 +1254,23 @@ async function runBrowserModeInternal(options, cancellation) {
|
|
|
1227
1254
|
conversationUrl: lastUrl,
|
|
1228
1255
|
logger,
|
|
1229
1256
|
}), logger);
|
|
1257
|
+
const providerCapture = await runProviderNativeCapture({
|
|
1258
|
+
Runtime,
|
|
1259
|
+
config,
|
|
1260
|
+
conversationUrl: lastUrl,
|
|
1261
|
+
sessionId: options.sessionId,
|
|
1262
|
+
answerMarkdown: researchResult.text,
|
|
1263
|
+
logger,
|
|
1264
|
+
});
|
|
1230
1265
|
const transcriptArtifact = await saveOptionalArtifact(() => saveBrowserTranscriptArtifact({
|
|
1231
1266
|
sessionId: options.sessionId,
|
|
1232
1267
|
prompt: promptText,
|
|
1233
1268
|
answerMarkdown: researchResult.text,
|
|
1234
1269
|
conversationUrl: lastUrl,
|
|
1235
|
-
artifacts: appendArtifacts(undefined, [reportArtifact]),
|
|
1270
|
+
artifacts: appendArtifacts(appendArtifacts(undefined, [reportArtifact]), providerCapture.artifacts),
|
|
1236
1271
|
logger,
|
|
1237
1272
|
}), logger);
|
|
1238
|
-
const savedArtifacts = appendArtifacts(undefined, [reportArtifact, transcriptArtifact]);
|
|
1273
|
+
const savedArtifacts = appendArtifacts(appendArtifacts(undefined, [reportArtifact, transcriptArtifact]), providerCapture.artifacts);
|
|
1239
1274
|
const archive = await maybeArchiveCompletedConversation({
|
|
1240
1275
|
Runtime,
|
|
1241
1276
|
logger,
|
|
@@ -1249,6 +1284,7 @@ async function runBrowserModeInternal(options, cancellation) {
|
|
|
1249
1284
|
answerMarkdown: researchResult.text,
|
|
1250
1285
|
answerHtml: researchResult.html,
|
|
1251
1286
|
artifacts: savedArtifacts,
|
|
1287
|
+
providerNativeCapture: providerCapture.summary,
|
|
1252
1288
|
archive,
|
|
1253
1289
|
modelSelection: modelSelectionEvidence,
|
|
1254
1290
|
thinkingSelection: thinkingSelectionEvidence,
|
|
@@ -1561,6 +1597,7 @@ async function runBrowserModeInternal(options, cancellation) {
|
|
|
1561
1597
|
turnAnswerMarkdown = bestText;
|
|
1562
1598
|
}
|
|
1563
1599
|
}
|
|
1600
|
+
answerMessageId = turnAnswer.meta.messageId ?? undefined;
|
|
1564
1601
|
return {
|
|
1565
1602
|
label,
|
|
1566
1603
|
answerText: turnAnswerText,
|
|
@@ -1664,15 +1701,25 @@ async function runBrowserModeInternal(options, cancellation) {
|
|
|
1664
1701
|
});
|
|
1665
1702
|
const savedImageArtifacts = appendArtifacts(undefined, imageArtifacts.savedImages);
|
|
1666
1703
|
const savedBrowserArtifacts = appendArtifacts(savedImageArtifacts, fileArtifacts.savedFiles);
|
|
1704
|
+
const providerCapture = await runProviderNativeCapture({
|
|
1705
|
+
Runtime,
|
|
1706
|
+
config,
|
|
1707
|
+
conversationUrl: lastUrl,
|
|
1708
|
+
sessionId: options.sessionId,
|
|
1709
|
+
answerMarkdown,
|
|
1710
|
+
answerMessageId,
|
|
1711
|
+
logger,
|
|
1712
|
+
});
|
|
1713
|
+
const browserArtifactsWithCapture = appendArtifacts(savedBrowserArtifacts, providerCapture.artifacts);
|
|
1667
1714
|
const transcriptArtifact = await saveOptionalArtifact(() => saveBrowserTranscriptArtifact({
|
|
1668
1715
|
sessionId: options.sessionId,
|
|
1669
1716
|
prompt: promptText,
|
|
1670
1717
|
answerMarkdown,
|
|
1671
1718
|
conversationUrl: lastUrl,
|
|
1672
|
-
artifacts:
|
|
1719
|
+
artifacts: browserArtifactsWithCapture,
|
|
1673
1720
|
logger,
|
|
1674
1721
|
}), logger);
|
|
1675
|
-
const savedArtifacts = appendArtifacts(
|
|
1722
|
+
const savedArtifacts = appendArtifacts(browserArtifactsWithCapture, [transcriptArtifact]);
|
|
1676
1723
|
const archive = await maybeArchiveCompletedConversation({
|
|
1677
1724
|
Runtime,
|
|
1678
1725
|
logger,
|
|
@@ -1692,6 +1739,7 @@ async function runBrowserModeInternal(options, cancellation) {
|
|
|
1692
1739
|
answerMarkdown,
|
|
1693
1740
|
answerHtml: answerHtml.length > 0 ? answerHtml : undefined,
|
|
1694
1741
|
artifacts: savedArtifacts,
|
|
1742
|
+
providerNativeCapture: providerCapture.summary,
|
|
1695
1743
|
generatedImages: imageArtifacts.generatedImages,
|
|
1696
1744
|
savedImages: imageArtifacts.savedImages,
|
|
1697
1745
|
downloadableFiles: fileArtifacts.files,
|
|
@@ -2233,6 +2281,7 @@ async function runRemoteBrowserMode(promptText, attachments, config, logger, opt
|
|
|
2233
2281
|
const startedAt = Date.now();
|
|
2234
2282
|
let answerText = "";
|
|
2235
2283
|
let answerMarkdown = "";
|
|
2284
|
+
let answerMessageId;
|
|
2236
2285
|
let answerHtml = "";
|
|
2237
2286
|
let connectionClosedUnexpectedly = false;
|
|
2238
2287
|
let runStatus = "attempted";
|
|
@@ -2552,15 +2601,23 @@ async function runRemoteBrowserMode(promptText, attachments, config, logger, opt
|
|
|
2552
2601
|
conversationUrl: lastUrl,
|
|
2553
2602
|
logger,
|
|
2554
2603
|
}), logger);
|
|
2604
|
+
const providerCapture = await runProviderNativeCapture({
|
|
2605
|
+
Runtime,
|
|
2606
|
+
config,
|
|
2607
|
+
conversationUrl: lastUrl,
|
|
2608
|
+
sessionId: options.sessionId,
|
|
2609
|
+
answerMarkdown: researchResult.text,
|
|
2610
|
+
logger,
|
|
2611
|
+
});
|
|
2555
2612
|
const transcriptArtifact = await saveOptionalArtifact(() => saveBrowserTranscriptArtifact({
|
|
2556
2613
|
sessionId: options.sessionId,
|
|
2557
2614
|
prompt: promptText,
|
|
2558
2615
|
answerMarkdown: researchResult.text,
|
|
2559
2616
|
conversationUrl: lastUrl,
|
|
2560
|
-
artifacts: appendArtifacts(undefined, [reportArtifact]),
|
|
2617
|
+
artifacts: appendArtifacts(appendArtifacts(undefined, [reportArtifact]), providerCapture.artifacts),
|
|
2561
2618
|
logger,
|
|
2562
2619
|
}), logger);
|
|
2563
|
-
const savedArtifacts = appendArtifacts(undefined, [reportArtifact, transcriptArtifact]);
|
|
2620
|
+
const savedArtifacts = appendArtifacts(appendArtifacts(undefined, [reportArtifact, transcriptArtifact]), providerCapture.artifacts);
|
|
2564
2621
|
const archive = await maybeArchiveCompletedConversation({
|
|
2565
2622
|
Runtime,
|
|
2566
2623
|
logger,
|
|
@@ -2575,6 +2632,7 @@ async function runRemoteBrowserMode(promptText, attachments, config, logger, opt
|
|
|
2575
2632
|
answerMarkdown: researchResult.text,
|
|
2576
2633
|
answerHtml: researchResult.html,
|
|
2577
2634
|
artifacts: savedArtifacts,
|
|
2635
|
+
providerNativeCapture: providerCapture.summary,
|
|
2578
2636
|
archive,
|
|
2579
2637
|
modelSelection: modelSelectionEvidence,
|
|
2580
2638
|
thinkingSelection: thinkingSelectionEvidence,
|
|
@@ -2852,6 +2910,7 @@ async function runRemoteBrowserMode(promptText, attachments, config, logger, opt
|
|
|
2852
2910
|
turnAnswerMarkdown = bestText;
|
|
2853
2911
|
}
|
|
2854
2912
|
}
|
|
2913
|
+
answerMessageId = turnAnswer.meta.messageId ?? undefined;
|
|
2855
2914
|
return {
|
|
2856
2915
|
label,
|
|
2857
2916
|
answerText: turnAnswerText,
|
|
@@ -2947,15 +3006,25 @@ async function runRemoteBrowserMode(promptText, attachments, config, logger, opt
|
|
|
2947
3006
|
});
|
|
2948
3007
|
const savedImageArtifacts = appendArtifacts(undefined, imageArtifacts.savedImages);
|
|
2949
3008
|
const savedBrowserArtifacts = appendArtifacts(savedImageArtifacts, fileArtifacts.savedFiles);
|
|
3009
|
+
const providerCapture = await runProviderNativeCapture({
|
|
3010
|
+
Runtime,
|
|
3011
|
+
config,
|
|
3012
|
+
conversationUrl: lastUrl,
|
|
3013
|
+
sessionId: options.sessionId,
|
|
3014
|
+
answerMarkdown,
|
|
3015
|
+
answerMessageId,
|
|
3016
|
+
logger,
|
|
3017
|
+
});
|
|
3018
|
+
const browserArtifactsWithCapture = appendArtifacts(savedBrowserArtifacts, providerCapture.artifacts);
|
|
2950
3019
|
const transcriptArtifact = await saveOptionalArtifact(() => saveBrowserTranscriptArtifact({
|
|
2951
3020
|
sessionId: options.sessionId,
|
|
2952
3021
|
prompt: promptText,
|
|
2953
3022
|
answerMarkdown,
|
|
2954
3023
|
conversationUrl: lastUrl,
|
|
2955
|
-
artifacts:
|
|
3024
|
+
artifacts: browserArtifactsWithCapture,
|
|
2956
3025
|
logger,
|
|
2957
3026
|
}), logger);
|
|
2958
|
-
const savedArtifacts = appendArtifacts(
|
|
3027
|
+
const savedArtifacts = appendArtifacts(browserArtifactsWithCapture, [transcriptArtifact]);
|
|
2959
3028
|
const archive = await maybeArchiveCompletedConversation({
|
|
2960
3029
|
Runtime,
|
|
2961
3030
|
logger,
|
|
@@ -2991,6 +3060,7 @@ async function runRemoteBrowserMode(promptText, attachments, config, logger, opt
|
|
|
2991
3060
|
submittedPromptHash,
|
|
2992
3061
|
ownedRecoveryTarget,
|
|
2993
3062
|
artifacts: savedArtifacts,
|
|
3063
|
+
providerNativeCapture: providerCapture.summary,
|
|
2994
3064
|
generatedImages: imageArtifacts.generatedImages,
|
|
2995
3065
|
savedImages: imageArtifacts.savedImages,
|
|
2996
3066
|
downloadableFiles: fileArtifacts.files,
|
|
@@ -313,6 +313,7 @@ async function executeAssembledBrowserSession({ runOptions, browserConfig, log,
|
|
|
313
313
|
archive: browserResult.archive,
|
|
314
314
|
modelSelection,
|
|
315
315
|
thinkingSelection,
|
|
316
|
+
providerNativeCapture: browserResult.providerNativeCapture,
|
|
316
317
|
warnings,
|
|
317
318
|
answerText,
|
|
318
319
|
artifacts: savedArtifacts,
|
|
@@ -238,6 +238,7 @@ export async function buildBrowserConfig(options) {
|
|
|
238
238
|
? options.browserResearch
|
|
239
239
|
: "off",
|
|
240
240
|
archiveConversations: options.browserArchive,
|
|
241
|
+
captureProviderNative: options.browserCaptureProviderNative,
|
|
241
242
|
};
|
|
242
243
|
}
|
|
243
244
|
function assertBrowserModelAvailable(model, modelStrategy) {
|
|
@@ -111,6 +111,10 @@ export function applyBrowserDefaultsFromConfig(options, config, getSource) {
|
|
|
111
111
|
browser.thinkingTime !== undefined) {
|
|
112
112
|
options.browserThinkingTime = normalizeThinkingTimeLevel(browser.thinkingTime) ?? undefined;
|
|
113
113
|
}
|
|
114
|
+
if (isUnset("browserCaptureProviderNative") &&
|
|
115
|
+
typeof browser.captureProviderNative === "boolean") {
|
|
116
|
+
options.browserCaptureProviderNative = browser.captureProviderNative;
|
|
117
|
+
}
|
|
114
118
|
if (isUnset("browserResearch") && browser.researchMode !== undefined) {
|
|
115
119
|
options.browserResearch = browser.researchMode;
|
|
116
120
|
}
|
|
@@ -161,6 +161,7 @@ export async function performSessionRun({ sessionMeta, runOptions, mode, browser
|
|
|
161
161
|
archive: result.archive,
|
|
162
162
|
modelSelection: result.modelSelection,
|
|
163
163
|
thinkingSelection: result.thinkingSelection,
|
|
164
|
+
providerNativeCapture: result.providerNativeCapture,
|
|
164
165
|
warnings: browserWarnings.length > 0 ? browserWarnings : undefined,
|
|
165
166
|
},
|
|
166
167
|
artifacts: mergeArtifacts(sessionMeta.artifacts, mergeArtifacts(result.artifacts, outputArtifacts.artifacts)),
|
package/dist/src/config.js
CHANGED
|
@@ -131,6 +131,7 @@ function sanitizeProjectConfig(config) {
|
|
|
131
131
|
if (config.browser) {
|
|
132
132
|
sanitized.browser = {};
|
|
133
133
|
const browser = config.browser;
|
|
134
|
+
// Full-conversation retention is user-owned; never allow captureProviderNative here.
|
|
134
135
|
const allowedBrowserKeys = [
|
|
135
136
|
"attachRunning",
|
|
136
137
|
"timeoutMs",
|
|
@@ -867,6 +867,7 @@ function sanitizeResult(result, warnings = []) {
|
|
|
867
867
|
answerChars: result.answerChars,
|
|
868
868
|
modelSelection: result.modelSelection,
|
|
869
869
|
thinkingSelection: result.thinkingSelection,
|
|
870
|
+
providerNativeCapture: result.providerNativeCapture,
|
|
870
871
|
researchPlan: result.researchPlan,
|
|
871
872
|
archive: result.archive,
|
|
872
873
|
tabUrl: result.tabUrl,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@steipete/oracle",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.21.0",
|
|
4
4
|
"description": "CLI wrapper around OpenAI Responses API with GPT-5.6 Sol, GPT-5.6, GPT-5.5 Pro, GPT-5.5, GPT-5.4, GPT-5.2, GPT-5.1, and GPT-5.1 Codex high reasoning modes.",
|
|
5
5
|
"keywords": [],
|
|
6
6
|
"homepage": "https://askoracle.sh",
|