@steipete/oracle 0.9.0 → 0.11.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/LICENSE +1 -1
- package/README.md +107 -49
- package/dist/bin/oracle-cli.js +551 -410
- package/dist/bin/oracle-mcp.js +2 -2
- package/dist/bin/oracle.js +165 -279
- package/dist/scripts/agent-send.js +31 -31
- package/dist/scripts/check.js +6 -6
- package/dist/scripts/debug/extract-chatgpt-response.js +10 -10
- package/dist/scripts/docs-list.js +30 -30
- package/dist/scripts/git-policy.js +25 -23
- package/dist/scripts/run-cli.js +8 -8
- package/dist/scripts/runner.js +203 -195
- package/dist/scripts/test-browser.js +21 -18
- package/dist/scripts/test-remote-chrome.js +20 -20
- package/dist/src/bridge/connection.js +18 -18
- package/dist/src/bridge/userConfigFile.js +7 -7
- package/dist/src/browser/actions/archiveConversation.js +224 -0
- package/dist/src/browser/actions/assistantResponse.js +175 -101
- package/dist/src/browser/actions/attachmentDataTransfer.js +49 -47
- package/dist/src/browser/actions/attachments.js +246 -150
- package/dist/src/browser/actions/deepResearch.js +662 -0
- package/dist/src/browser/actions/domEvents.js +2 -2
- package/dist/src/browser/actions/modelSelection.js +342 -119
- package/dist/src/browser/actions/navigation.js +183 -137
- package/dist/src/browser/actions/projectSources.js +491 -0
- package/dist/src/browser/actions/promptComposer.js +152 -91
- package/dist/src/browser/actions/remoteFileTransfer.js +10 -10
- package/dist/src/browser/actions/thinkingStatus.js +391 -0
- package/dist/src/browser/actions/thinkingTime.js +207 -110
- package/dist/src/browser/artifacts.js +150 -0
- package/dist/src/browser/attachRunning.js +31 -0
- package/dist/src/browser/chatgptImages.js +315 -0
- package/dist/src/browser/chromeLifecycle.js +276 -63
- package/dist/src/browser/config.js +59 -16
- package/dist/src/browser/constants.js +25 -12
- package/dist/src/browser/controlPlan.js +81 -0
- package/dist/src/browser/cookies.js +19 -19
- package/dist/src/browser/detect.js +250 -77
- package/dist/src/browser/domDebug.js +50 -1
- package/dist/src/browser/index.js +1559 -692
- package/dist/src/browser/liveTabs.js +434 -0
- package/dist/src/browser/modelStrategy.js +1 -1
- package/dist/src/browser/pageActions.js +5 -5
- package/dist/src/browser/policies.js +16 -13
- package/dist/src/browser/profileState.js +127 -42
- package/dist/src/browser/projectSourcesRunner.js +366 -0
- package/dist/src/browser/prompt.js +72 -42
- package/dist/src/browser/promptSummary.js +5 -5
- package/dist/src/browser/providerDomFlow.js +1 -1
- package/dist/src/browser/providers/chatgptDomProvider.js +9 -9
- package/dist/src/browser/providers/geminiDeepThinkDomProvider.js +51 -42
- package/dist/src/browser/providers/index.js +2 -2
- package/dist/src/browser/reattach.js +178 -73
- package/dist/src/browser/reattachHelpers.js +32 -27
- package/dist/src/browser/sessionRunner.js +89 -25
- package/dist/src/browser/tabLeaseRegistry.js +182 -0
- package/dist/src/browser/utils.js +9 -9
- package/dist/src/browserMode.js +1 -1
- package/dist/src/cli/bridge/claudeConfig.js +24 -20
- package/dist/src/cli/bridge/client.js +28 -20
- package/dist/src/cli/bridge/codexConfig.js +16 -16
- package/dist/src/cli/bridge/doctor.js +47 -39
- package/dist/src/cli/bridge/host.js +58 -56
- package/dist/src/cli/browserConfig.js +102 -48
- package/dist/src/cli/browserDefaults.js +51 -26
- package/dist/src/cli/browserTabs.js +228 -0
- package/dist/src/cli/bundleWarnings.js +1 -1
- package/dist/src/cli/clipboard.js +11 -2
- package/dist/src/cli/detach.js +2 -2
- package/dist/src/cli/dryRun.js +62 -26
- package/dist/src/cli/duplicatePromptGuard.js +12 -4
- package/dist/src/cli/engine.js +9 -9
- package/dist/src/cli/errorUtils.js +1 -1
- package/dist/src/cli/fileSize.js +3 -3
- package/dist/src/cli/format.js +2 -2
- package/dist/src/cli/help.js +28 -28
- package/dist/src/cli/hiddenAliases.js +3 -3
- package/dist/src/cli/markdownBundle.js +7 -7
- package/dist/src/cli/markdownRenderer.js +15 -15
- package/dist/src/cli/notifier.js +77 -67
- package/dist/src/cli/options.js +131 -106
- package/dist/src/cli/oscUtils.js +1 -1
- package/dist/src/cli/projectSources.js +116 -0
- package/dist/src/cli/promptRequirement.js +2 -2
- package/dist/src/cli/renderOutput.js +1 -1
- package/dist/src/cli/rootAlias.js +1 -1
- package/dist/src/cli/runOptions.js +32 -28
- package/dist/src/cli/sessionCommand.js +82 -21
- package/dist/src/cli/sessionDisplay.js +213 -87
- package/dist/src/cli/sessionLineage.js +6 -2
- package/dist/src/cli/sessionRunner.js +149 -95
- package/dist/src/cli/sessionTable.js +26 -23
- package/dist/src/cli/stdin.js +22 -0
- package/dist/src/cli/tagline.js +121 -124
- package/dist/src/cli/tui/index.js +139 -128
- package/dist/src/cli/writeOutputPath.js +5 -5
- package/dist/src/config.js +7 -7
- package/dist/src/gemini-web/browserSessionManager.js +19 -15
- package/dist/src/gemini-web/client.js +76 -70
- package/dist/src/gemini-web/executionMode.js +6 -8
- package/dist/src/gemini-web/executor.js +98 -93
- package/dist/src/gemini-web/index.js +1 -1
- package/dist/src/mcp/consultPresets.js +19 -0
- package/dist/src/mcp/server.js +18 -12
- package/dist/src/mcp/tools/consult.js +246 -67
- package/dist/src/mcp/tools/projectSources.js +123 -0
- package/dist/src/mcp/tools/sessionResources.js +12 -12
- package/dist/src/mcp/tools/sessions.js +26 -17
- package/dist/src/mcp/types.js +12 -5
- package/dist/src/mcp/utils.js +21 -8
- package/dist/src/oracle/background.js +15 -15
- package/dist/src/oracle/claude.js +53 -25
- package/dist/src/oracle/client.js +50 -41
- package/dist/src/oracle/config.js +96 -66
- package/dist/src/oracle/errors.js +38 -38
- package/dist/src/oracle/files.js +55 -46
- package/dist/src/oracle/finishLine.js +10 -8
- package/dist/src/oracle/format.js +3 -3
- package/dist/src/oracle/gemini.js +37 -33
- package/dist/src/oracle/logging.js +7 -7
- package/dist/src/oracle/markdown.js +28 -28
- package/dist/src/oracle/modelResolver.js +16 -16
- package/dist/src/oracle/multiModelRunner.js +12 -12
- package/dist/src/oracle/oscProgress.js +8 -8
- package/dist/src/oracle/promptAssembly.js +6 -3
- package/dist/src/oracle/request.js +16 -13
- package/dist/src/oracle/run.js +160 -135
- package/dist/src/oracle/runUtils.js +8 -5
- package/dist/src/oracle/tokenEstimate.js +6 -6
- package/dist/src/oracle/tokenStats.js +5 -5
- package/dist/src/oracle/tokenStringifier.js +5 -5
- package/dist/src/oracle.js +12 -12
- package/dist/src/oracleHome.js +3 -3
- package/dist/src/projectSources/plan.js +27 -0
- package/dist/src/projectSources/url.js +23 -0
- package/dist/src/remote/client.js +25 -25
- package/dist/src/remote/health.js +20 -20
- package/dist/src/remote/remoteServiceConfig.js +9 -9
- package/dist/src/remote/server.js +129 -118
- package/dist/src/sessionManager.js +78 -75
- package/dist/src/sessionStore.js +3 -3
- package/dist/src/version.js +10 -10
- package/dist/vendor/oracle-notifier/README.md +2 -0
- package/package.json +67 -62
- package/vendor/oracle-notifier/README.md +2 -0
- package/dist/markdansi/types/index.js +0 -4
- package/dist/oracle/bin/oracle-cli.js +0 -472
- package/dist/oracle/src/browser/actions/assistantResponse.js +0 -471
- package/dist/oracle/src/browser/actions/attachments.js +0 -82
- package/dist/oracle/src/browser/actions/modelSelection.js +0 -190
- package/dist/oracle/src/browser/actions/navigation.js +0 -75
- package/dist/oracle/src/browser/actions/promptComposer.js +0 -167
- package/dist/oracle/src/browser/chromeLifecycle.js +0 -104
- package/dist/oracle/src/browser/config.js +0 -33
- package/dist/oracle/src/browser/constants.js +0 -40
- package/dist/oracle/src/browser/cookies.js +0 -210
- package/dist/oracle/src/browser/domDebug.js +0 -36
- package/dist/oracle/src/browser/index.js +0 -331
- package/dist/oracle/src/browser/pageActions.js +0 -5
- package/dist/oracle/src/browser/prompt.js +0 -88
- package/dist/oracle/src/browser/promptSummary.js +0 -20
- package/dist/oracle/src/browser/sessionRunner.js +0 -80
- package/dist/oracle/src/browser/utils.js +0 -62
- package/dist/oracle/src/browserMode.js +0 -1
- package/dist/oracle/src/cli/browserConfig.js +0 -44
- package/dist/oracle/src/cli/dryRun.js +0 -59
- package/dist/oracle/src/cli/engine.js +0 -17
- package/dist/oracle/src/cli/errorUtils.js +0 -9
- package/dist/oracle/src/cli/help.js +0 -70
- package/dist/oracle/src/cli/markdownRenderer.js +0 -15
- package/dist/oracle/src/cli/options.js +0 -103
- package/dist/oracle/src/cli/promptRequirement.js +0 -14
- package/dist/oracle/src/cli/rootAlias.js +0 -30
- package/dist/oracle/src/cli/sessionCommand.js +0 -77
- package/dist/oracle/src/cli/sessionDisplay.js +0 -270
- package/dist/oracle/src/cli/sessionRunner.js +0 -94
- package/dist/oracle/src/heartbeat.js +0 -43
- package/dist/oracle/src/oracle/client.js +0 -48
- package/dist/oracle/src/oracle/config.js +0 -29
- package/dist/oracle/src/oracle/errors.js +0 -101
- package/dist/oracle/src/oracle/files.js +0 -220
- package/dist/oracle/src/oracle/format.js +0 -33
- package/dist/oracle/src/oracle/fsAdapter.js +0 -7
- package/dist/oracle/src/oracle/oscProgress.js +0 -60
- package/dist/oracle/src/oracle/request.js +0 -48
- package/dist/oracle/src/oracle/run.js +0 -444
- package/dist/oracle/src/oracle/tokenStats.js +0 -39
- package/dist/oracle/src/oracle/types.js +0 -1
- package/dist/oracle/src/oracle.js +0 -9
- package/dist/oracle/src/sessionManager.js +0 -205
- package/dist/oracle/src/version.js +0 -39
- package/dist/scripts/chrome/browser-tools.js +0 -295
- package/dist/src/browser/profileSync.js +0 -141
- /package/dist/{oracle/src/browser → src/projectSources}/types.js +0 -0
|
@@ -1,15 +1,45 @@
|
|
|
1
|
-
import { countTokens as countTokensGpt5 } from
|
|
2
|
-
import { countTokens as countTokensGpt5Pro } from
|
|
3
|
-
import { countTokens as countTokensAnthropicRaw } from
|
|
4
|
-
import { stringifyTokenizerInput } from
|
|
5
|
-
export const DEFAULT_MODEL =
|
|
6
|
-
export const PRO_MODELS = new Set([
|
|
1
|
+
import { countTokens as countTokensGpt5 } from "gpt-tokenizer/model/gpt-5";
|
|
2
|
+
import { countTokens as countTokensGpt5Pro } from "gpt-tokenizer/model/gpt-5-pro";
|
|
3
|
+
import { countTokens as countTokensAnthropicRaw } from "@anthropic-ai/tokenizer";
|
|
4
|
+
import { stringifyTokenizerInput } from "./tokenStringifier.js";
|
|
5
|
+
export const DEFAULT_MODEL = "gpt-5.5-pro";
|
|
6
|
+
export const PRO_MODELS = new Set([
|
|
7
|
+
"gpt-5.5-pro",
|
|
8
|
+
"gpt-5.4-pro",
|
|
9
|
+
"gpt-5.1-pro",
|
|
10
|
+
"gpt-5-pro",
|
|
11
|
+
"gpt-5.2-pro",
|
|
12
|
+
"claude-4.6-sonnet",
|
|
13
|
+
"claude-4.1-opus",
|
|
14
|
+
]);
|
|
7
15
|
const countTokensAnthropic = (input) => countTokensAnthropicRaw(stringifyTokenizerInput(input));
|
|
8
16
|
export const MODEL_CONFIGS = {
|
|
9
|
-
|
|
10
|
-
model:
|
|
11
|
-
|
|
12
|
-
|
|
17
|
+
"gpt-5.5-pro": {
|
|
18
|
+
model: "gpt-5.5-pro",
|
|
19
|
+
provider: "openai",
|
|
20
|
+
tokenizer: countTokensGpt5Pro,
|
|
21
|
+
inputLimit: 1_050_000,
|
|
22
|
+
pricing: {
|
|
23
|
+
inputPerToken: 30 / 1_000_000,
|
|
24
|
+
outputPerToken: 180 / 1_000_000,
|
|
25
|
+
},
|
|
26
|
+
reasoning: { effort: "xhigh" },
|
|
27
|
+
},
|
|
28
|
+
"gpt-5.5": {
|
|
29
|
+
model: "gpt-5.5",
|
|
30
|
+
provider: "openai",
|
|
31
|
+
tokenizer: countTokensGpt5,
|
|
32
|
+
inputLimit: 1_050_000,
|
|
33
|
+
pricing: {
|
|
34
|
+
inputPerToken: 5 / 1_000_000,
|
|
35
|
+
outputPerToken: 30 / 1_000_000,
|
|
36
|
+
},
|
|
37
|
+
reasoning: { effort: "xhigh" },
|
|
38
|
+
},
|
|
39
|
+
"gpt-5.1-pro": {
|
|
40
|
+
model: "gpt-5.1-pro",
|
|
41
|
+
apiModel: "gpt-5.5-pro",
|
|
42
|
+
provider: "openai",
|
|
13
43
|
tokenizer: countTokensGpt5Pro,
|
|
14
44
|
inputLimit: 196000,
|
|
15
45
|
pricing: {
|
|
@@ -18,9 +48,9 @@ export const MODEL_CONFIGS = {
|
|
|
18
48
|
},
|
|
19
49
|
reasoning: null,
|
|
20
50
|
},
|
|
21
|
-
|
|
22
|
-
model:
|
|
23
|
-
provider:
|
|
51
|
+
"gpt-5-pro": {
|
|
52
|
+
model: "gpt-5-pro",
|
|
53
|
+
provider: "openai",
|
|
24
54
|
tokenizer: countTokensGpt5Pro,
|
|
25
55
|
inputLimit: 196000,
|
|
26
56
|
pricing: {
|
|
@@ -29,65 +59,65 @@ export const MODEL_CONFIGS = {
|
|
|
29
59
|
},
|
|
30
60
|
reasoning: null,
|
|
31
61
|
},
|
|
32
|
-
|
|
33
|
-
model:
|
|
34
|
-
provider:
|
|
62
|
+
"gpt-5.1": {
|
|
63
|
+
model: "gpt-5.1",
|
|
64
|
+
provider: "openai",
|
|
35
65
|
tokenizer: countTokensGpt5,
|
|
36
66
|
inputLimit: 196000,
|
|
37
67
|
pricing: {
|
|
38
68
|
inputPerToken: 1.25 / 1_000_000,
|
|
39
69
|
outputPerToken: 10 / 1_000_000,
|
|
40
70
|
},
|
|
41
|
-
reasoning: { effort:
|
|
71
|
+
reasoning: { effort: "high" },
|
|
42
72
|
},
|
|
43
|
-
|
|
44
|
-
model:
|
|
45
|
-
provider:
|
|
73
|
+
"gpt-5.1-codex": {
|
|
74
|
+
model: "gpt-5.1-codex",
|
|
75
|
+
provider: "openai",
|
|
46
76
|
tokenizer: countTokensGpt5,
|
|
47
77
|
inputLimit: 196000,
|
|
48
78
|
pricing: {
|
|
49
79
|
inputPerToken: 1.25 / 1_000_000,
|
|
50
80
|
outputPerToken: 10 / 1_000_000,
|
|
51
81
|
},
|
|
52
|
-
reasoning: { effort:
|
|
82
|
+
reasoning: { effort: "high" },
|
|
53
83
|
},
|
|
54
|
-
|
|
55
|
-
model:
|
|
56
|
-
provider:
|
|
84
|
+
"gpt-5.4": {
|
|
85
|
+
model: "gpt-5.4",
|
|
86
|
+
provider: "openai",
|
|
57
87
|
tokenizer: countTokensGpt5,
|
|
58
88
|
inputLimit: 196000,
|
|
59
89
|
pricing: {
|
|
60
90
|
inputPerToken: 2.5 / 1_000_000,
|
|
61
91
|
outputPerToken: 15 / 1_000_000,
|
|
62
92
|
},
|
|
63
|
-
reasoning: { effort:
|
|
93
|
+
reasoning: { effort: "xhigh" },
|
|
64
94
|
},
|
|
65
|
-
|
|
66
|
-
model:
|
|
67
|
-
provider:
|
|
95
|
+
"gpt-5.4-pro": {
|
|
96
|
+
model: "gpt-5.4-pro",
|
|
97
|
+
provider: "openai",
|
|
68
98
|
tokenizer: countTokensGpt5Pro,
|
|
69
99
|
inputLimit: 196000,
|
|
70
100
|
pricing: {
|
|
71
101
|
inputPerToken: 30 / 1_000_000,
|
|
72
102
|
outputPerToken: 180 / 1_000_000,
|
|
73
103
|
},
|
|
74
|
-
reasoning: { effort:
|
|
104
|
+
reasoning: { effort: "xhigh" },
|
|
75
105
|
},
|
|
76
|
-
|
|
77
|
-
model:
|
|
78
|
-
provider:
|
|
106
|
+
"gpt-5.2": {
|
|
107
|
+
model: "gpt-5.2",
|
|
108
|
+
provider: "openai",
|
|
79
109
|
tokenizer: countTokensGpt5,
|
|
80
110
|
inputLimit: 196000,
|
|
81
111
|
pricing: {
|
|
82
112
|
inputPerToken: 1.75 / 1_000_000,
|
|
83
113
|
outputPerToken: 14 / 1_000_000,
|
|
84
114
|
},
|
|
85
|
-
reasoning: { effort:
|
|
115
|
+
reasoning: { effort: "xhigh" },
|
|
86
116
|
},
|
|
87
|
-
|
|
88
|
-
model:
|
|
89
|
-
apiModel:
|
|
90
|
-
provider:
|
|
117
|
+
"gpt-5.2-instant": {
|
|
118
|
+
model: "gpt-5.2-instant",
|
|
119
|
+
apiModel: "gpt-5.2-chat-latest",
|
|
120
|
+
provider: "openai",
|
|
91
121
|
tokenizer: countTokensGpt5,
|
|
92
122
|
inputLimit: 196000,
|
|
93
123
|
pricing: {
|
|
@@ -96,21 +126,21 @@ export const MODEL_CONFIGS = {
|
|
|
96
126
|
},
|
|
97
127
|
reasoning: null,
|
|
98
128
|
},
|
|
99
|
-
|
|
100
|
-
model:
|
|
101
|
-
apiModel:
|
|
102
|
-
provider:
|
|
129
|
+
"gpt-5.2-pro": {
|
|
130
|
+
model: "gpt-5.2-pro",
|
|
131
|
+
apiModel: "gpt-5.5-pro",
|
|
132
|
+
provider: "openai",
|
|
103
133
|
tokenizer: countTokensGpt5Pro,
|
|
104
134
|
inputLimit: 196000,
|
|
105
135
|
pricing: {
|
|
106
136
|
inputPerToken: 30 / 1_000_000,
|
|
107
137
|
outputPerToken: 180 / 1_000_000,
|
|
108
138
|
},
|
|
109
|
-
reasoning: { effort:
|
|
139
|
+
reasoning: { effort: "xhigh" },
|
|
110
140
|
},
|
|
111
|
-
|
|
112
|
-
model:
|
|
113
|
-
provider:
|
|
141
|
+
"gemini-3.1-pro": {
|
|
142
|
+
model: "gemini-3.1-pro",
|
|
143
|
+
provider: "google",
|
|
114
144
|
tokenizer: countTokensGpt5Pro,
|
|
115
145
|
inputLimit: 200000,
|
|
116
146
|
pricing: {
|
|
@@ -121,9 +151,9 @@ export const MODEL_CONFIGS = {
|
|
|
121
151
|
supportsBackground: false,
|
|
122
152
|
supportsSearch: true,
|
|
123
153
|
},
|
|
124
|
-
|
|
125
|
-
model:
|
|
126
|
-
provider:
|
|
154
|
+
"gemini-3-pro": {
|
|
155
|
+
model: "gemini-3-pro",
|
|
156
|
+
provider: "google",
|
|
127
157
|
tokenizer: countTokensGpt5Pro,
|
|
128
158
|
inputLimit: 200000,
|
|
129
159
|
pricing: {
|
|
@@ -134,10 +164,10 @@ export const MODEL_CONFIGS = {
|
|
|
134
164
|
supportsBackground: false,
|
|
135
165
|
supportsSearch: true,
|
|
136
166
|
},
|
|
137
|
-
|
|
138
|
-
model:
|
|
139
|
-
apiModel:
|
|
140
|
-
provider:
|
|
167
|
+
"claude-4.6-sonnet": {
|
|
168
|
+
model: "claude-4.6-sonnet",
|
|
169
|
+
apiModel: "claude-sonnet-4-6",
|
|
170
|
+
provider: "anthropic",
|
|
141
171
|
tokenizer: countTokensAnthropic,
|
|
142
172
|
inputLimit: 200000,
|
|
143
173
|
pricing: {
|
|
@@ -148,24 +178,24 @@ export const MODEL_CONFIGS = {
|
|
|
148
178
|
supportsBackground: false,
|
|
149
179
|
supportsSearch: false,
|
|
150
180
|
},
|
|
151
|
-
|
|
152
|
-
model:
|
|
153
|
-
apiModel:
|
|
154
|
-
provider:
|
|
181
|
+
"claude-4.1-opus": {
|
|
182
|
+
model: "claude-4.1-opus",
|
|
183
|
+
apiModel: "claude-opus-4-1",
|
|
184
|
+
provider: "anthropic",
|
|
155
185
|
tokenizer: countTokensAnthropic,
|
|
156
186
|
inputLimit: 200000,
|
|
157
187
|
pricing: {
|
|
158
188
|
inputPerToken: 15 / 1_000_000,
|
|
159
189
|
outputPerToken: 75 / 1_000_000,
|
|
160
190
|
},
|
|
161
|
-
reasoning: { effort:
|
|
191
|
+
reasoning: { effort: "high" },
|
|
162
192
|
supportsBackground: false,
|
|
163
193
|
supportsSearch: false,
|
|
164
194
|
},
|
|
165
|
-
|
|
166
|
-
model:
|
|
167
|
-
apiModel:
|
|
168
|
-
provider:
|
|
195
|
+
"grok-4.1": {
|
|
196
|
+
model: "grok-4.1",
|
|
197
|
+
apiModel: "grok-4-1-fast-reasoning",
|
|
198
|
+
provider: "xai",
|
|
169
199
|
tokenizer: countTokensGpt5Pro,
|
|
170
200
|
inputLimit: 2_000_000,
|
|
171
201
|
pricing: {
|
|
@@ -175,11 +205,11 @@ export const MODEL_CONFIGS = {
|
|
|
175
205
|
reasoning: null,
|
|
176
206
|
supportsBackground: false,
|
|
177
207
|
supportsSearch: true,
|
|
178
|
-
searchToolType:
|
|
208
|
+
searchToolType: "web_search",
|
|
179
209
|
},
|
|
180
210
|
};
|
|
181
211
|
export const DEFAULT_SYSTEM_PROMPT = [
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
].join(
|
|
185
|
-
export const TOKENIZER_OPTIONS = { allowedSpecial:
|
|
212
|
+
"You are Oracle, a focused one-shot problem solver.",
|
|
213
|
+
"Emphasize direct answers and cite any files referenced.",
|
|
214
|
+
].join(" ");
|
|
215
|
+
export const TOKENIZER_OPTIONS = { allowedSpecial: "all" };
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import { APIConnectionError, APIConnectionTimeoutError, APIUserAbortError } from
|
|
2
|
-
import { APIError } from
|
|
3
|
-
import { formatElapsed } from
|
|
1
|
+
import { APIConnectionError, APIConnectionTimeoutError, APIUserAbortError } from "openai";
|
|
2
|
+
import { APIError } from "openai/error";
|
|
3
|
+
import { formatElapsed } from "./format.js";
|
|
4
4
|
export class OracleUserError extends Error {
|
|
5
5
|
category;
|
|
6
6
|
details;
|
|
7
7
|
constructor(category, message, details, cause) {
|
|
8
8
|
super(message);
|
|
9
|
-
this.name =
|
|
9
|
+
this.name = "OracleUserError";
|
|
10
10
|
this.category = category;
|
|
11
11
|
this.details = details;
|
|
12
12
|
if (cause) {
|
|
@@ -16,20 +16,20 @@ export class OracleUserError extends Error {
|
|
|
16
16
|
}
|
|
17
17
|
export class FileValidationError extends OracleUserError {
|
|
18
18
|
constructor(message, details, cause) {
|
|
19
|
-
super(
|
|
20
|
-
this.name =
|
|
19
|
+
super("file-validation", message, details, cause);
|
|
20
|
+
this.name = "FileValidationError";
|
|
21
21
|
}
|
|
22
22
|
}
|
|
23
23
|
export class BrowserAutomationError extends OracleUserError {
|
|
24
24
|
constructor(message, details, cause) {
|
|
25
|
-
super(
|
|
26
|
-
this.name =
|
|
25
|
+
super("browser-automation", message, details, cause);
|
|
26
|
+
this.name = "BrowserAutomationError";
|
|
27
27
|
}
|
|
28
28
|
}
|
|
29
29
|
export class PromptValidationError extends OracleUserError {
|
|
30
30
|
constructor(message, details, cause) {
|
|
31
|
-
super(
|
|
32
|
-
this.name =
|
|
31
|
+
super("prompt-validation", message, details, cause);
|
|
32
|
+
this.name = "PromptValidationError";
|
|
33
33
|
}
|
|
34
34
|
}
|
|
35
35
|
export function asOracleUserError(error) {
|
|
@@ -42,7 +42,7 @@ export class OracleTransportError extends Error {
|
|
|
42
42
|
reason;
|
|
43
43
|
constructor(reason, message, cause) {
|
|
44
44
|
super(message);
|
|
45
|
-
this.name =
|
|
45
|
+
this.name = "OracleTransportError";
|
|
46
46
|
this.reason = reason;
|
|
47
47
|
if (cause) {
|
|
48
48
|
this.cause = cause;
|
|
@@ -54,7 +54,7 @@ export class OracleResponseError extends Error {
|
|
|
54
54
|
response;
|
|
55
55
|
constructor(message, response) {
|
|
56
56
|
super(message);
|
|
57
|
-
this.name =
|
|
57
|
+
this.name = "OracleResponseError";
|
|
58
58
|
this.response = response;
|
|
59
59
|
this.metadata = extractResponseMetadata(response);
|
|
60
60
|
}
|
|
@@ -79,54 +79,54 @@ export function toTransportError(error, model) {
|
|
|
79
79
|
return error;
|
|
80
80
|
}
|
|
81
81
|
if (error instanceof APIConnectionTimeoutError) {
|
|
82
|
-
return new OracleTransportError(
|
|
82
|
+
return new OracleTransportError("client-timeout", "OpenAI request timed out before completion.", error);
|
|
83
83
|
}
|
|
84
84
|
if (error instanceof APIUserAbortError) {
|
|
85
|
-
return new OracleTransportError(
|
|
85
|
+
return new OracleTransportError("client-abort", "The request was aborted before OpenAI finished responding.", error);
|
|
86
86
|
}
|
|
87
87
|
if (error instanceof APIConnectionError) {
|
|
88
|
-
return new OracleTransportError(
|
|
88
|
+
return new OracleTransportError("connection-lost", "Connection to OpenAI dropped before the response completed.", error);
|
|
89
89
|
}
|
|
90
|
-
const isApiError = error instanceof APIError || error?.name ===
|
|
90
|
+
const isApiError = error instanceof APIError || error?.name === "APIError";
|
|
91
91
|
if (isApiError) {
|
|
92
92
|
const apiError = error;
|
|
93
93
|
const code = apiError.code ?? apiError.error?.code;
|
|
94
|
-
const messageText = apiError.message?.toLowerCase?.() ??
|
|
94
|
+
const messageText = apiError.message?.toLowerCase?.() ?? "";
|
|
95
95
|
const apiMessage = apiError.error?.message ||
|
|
96
96
|
apiError.message ||
|
|
97
|
-
(apiError.status ? `${apiError.status} OpenAI API error` :
|
|
97
|
+
(apiError.status ? `${apiError.status} OpenAI API error` : "OpenAI API error");
|
|
98
98
|
// Friendly guidance when a pro-tier model isn't available on this base URL / API key.
|
|
99
|
-
if (model ===
|
|
100
|
-
(code ===
|
|
101
|
-
messageText.includes(
|
|
102
|
-
messageText.includes(
|
|
103
|
-
messageText.includes(
|
|
104
|
-
return new OracleTransportError(
|
|
99
|
+
if ((model === "gpt-5.5-pro" || model === "gpt-5.4-pro") &&
|
|
100
|
+
(code === "model_not_found" ||
|
|
101
|
+
messageText.includes("does not exist") ||
|
|
102
|
+
messageText.includes("unknown model") ||
|
|
103
|
+
messageText.includes("model_not_found"))) {
|
|
104
|
+
return new OracleTransportError("model-unavailable", `${model} is not available on this API base/key. Try gpt-5.5, gpt-5-pro, or switch to the browser engine.`, apiError);
|
|
105
105
|
}
|
|
106
106
|
if (apiError.status === 404 || apiError.status === 405) {
|
|
107
|
-
return new OracleTransportError(
|
|
107
|
+
return new OracleTransportError("unsupported-endpoint", "HTTP 404/405 from the Responses API; this base URL or gateway likely does not expose /v1/responses. Set OPENAI_BASE_URL to api.openai.com/v1, update your Azure API version/deployment, or use the browser engine.", apiError);
|
|
108
108
|
}
|
|
109
|
-
return new OracleTransportError(
|
|
109
|
+
return new OracleTransportError("api-error", apiMessage, apiError);
|
|
110
110
|
}
|
|
111
|
-
return new OracleTransportError(
|
|
111
|
+
return new OracleTransportError("unknown", error instanceof Error ? error.message : "Unknown transport failure.", error);
|
|
112
112
|
}
|
|
113
113
|
export function describeTransportError(error, deadlineMs) {
|
|
114
114
|
switch (error.reason) {
|
|
115
|
-
case
|
|
115
|
+
case "client-timeout":
|
|
116
116
|
return deadlineMs
|
|
117
117
|
? `Client-side timeout: OpenAI streaming call exceeded the ${formatElapsed(deadlineMs)} deadline.`
|
|
118
|
-
:
|
|
119
|
-
case
|
|
120
|
-
return
|
|
121
|
-
case
|
|
122
|
-
return
|
|
123
|
-
case
|
|
118
|
+
: "Client-side timeout: OpenAI streaming call exceeded the configured deadline.";
|
|
119
|
+
case "connection-lost":
|
|
120
|
+
return "Connection to OpenAI ended unexpectedly before the response completed.";
|
|
121
|
+
case "client-abort":
|
|
122
|
+
return "Request was aborted before OpenAI completed the response.";
|
|
123
|
+
case "api-error":
|
|
124
124
|
return error.message;
|
|
125
|
-
case
|
|
125
|
+
case "model-unavailable":
|
|
126
126
|
return error.message;
|
|
127
|
-
case
|
|
128
|
-
return
|
|
127
|
+
case "unsupported-endpoint":
|
|
128
|
+
return "The Responses API returned 404/405 — your base URL/gateway probably lacks /v1/responses (check OPENAI_BASE_URL or switch to api.openai.com / browser engine).";
|
|
129
129
|
default:
|
|
130
|
-
return
|
|
130
|
+
return "OpenAI streaming call ended with an unknown transport error.";
|
|
131
131
|
}
|
|
132
132
|
}
|