@steipete/oracle 0.17.2 → 0.18.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 +10 -1
- package/dist/bin/oracle-mcp.js +0 -0
- package/dist/bin/oracle.js +683 -0
- package/dist/docs-site/bridge.html +1 -17
- package/dist/docs-site/browser-mode.html +18 -26
- package/dist/docs-site/cli-reference.html +6 -6
- package/dist/docs-site/configuration.html +7 -33
- package/dist/docs-site/followup.html +9 -16
- package/dist/docs-site/gemini.html +6 -10
- package/dist/docs-site/index.html +7 -7
- package/dist/docs-site/install.html +1 -1
- package/dist/docs-site/manual-tests.html +2 -4
- package/dist/docs-site/mcp.html +5 -28
- package/dist/docs-site/mythical-pro-agents.html +10 -10
- package/dist/docs-site/openai-endpoints.html +1 -24
- package/dist/docs-site/quickstart.html +1 -1
- package/dist/docs-site/sessions.html +5 -6
- package/dist/docs-site/spec.html +1 -1
- package/dist/docs-site/windows-work.html +1 -2
- package/dist/docs-site/windows.html +1 -1
- package/dist/markdansi/types/index.js +4 -0
- package/dist/oracle/bin/oracle-cli.js +472 -0
- package/dist/oracle/src/browser/actions/assistantResponse.js +471 -0
- package/dist/oracle/src/browser/actions/attachments.js +82 -0
- package/dist/oracle/src/browser/actions/modelSelection.js +190 -0
- package/dist/oracle/src/browser/actions/navigation.js +75 -0
- package/dist/oracle/src/browser/actions/promptComposer.js +167 -0
- package/dist/oracle/src/browser/chromeLifecycle.js +104 -0
- package/dist/oracle/src/browser/config.js +33 -0
- package/dist/oracle/src/browser/constants.js +40 -0
- package/dist/oracle/src/browser/cookies.js +210 -0
- package/dist/oracle/src/browser/domDebug.js +36 -0
- package/dist/oracle/src/browser/index.js +331 -0
- package/dist/oracle/src/browser/pageActions.js +5 -0
- package/dist/oracle/src/browser/prompt.js +88 -0
- package/dist/oracle/src/browser/promptSummary.js +20 -0
- package/dist/oracle/src/browser/sessionRunner.js +80 -0
- package/dist/oracle/src/browser/types.js +1 -0
- package/dist/oracle/src/browser/utils.js +62 -0
- package/dist/oracle/src/browserMode.js +1 -0
- package/dist/oracle/src/cli/browserConfig.js +44 -0
- package/dist/oracle/src/cli/dryRun.js +59 -0
- package/dist/oracle/src/cli/engine.js +17 -0
- package/dist/oracle/src/cli/errorUtils.js +9 -0
- package/dist/oracle/src/cli/help.js +70 -0
- package/dist/oracle/src/cli/markdownRenderer.js +15 -0
- package/dist/oracle/src/cli/options.js +103 -0
- package/dist/oracle/src/cli/promptRequirement.js +14 -0
- package/dist/oracle/src/cli/rootAlias.js +30 -0
- package/dist/oracle/src/cli/sessionCommand.js +77 -0
- package/dist/oracle/src/cli/sessionDisplay.js +270 -0
- package/dist/oracle/src/cli/sessionRunner.js +94 -0
- package/dist/oracle/src/heartbeat.js +43 -0
- package/dist/oracle/src/oracle/client.js +48 -0
- package/dist/oracle/src/oracle/config.js +29 -0
- package/dist/oracle/src/oracle/errors.js +101 -0
- package/dist/oracle/src/oracle/files.js +220 -0
- package/dist/oracle/src/oracle/format.js +33 -0
- package/dist/oracle/src/oracle/fsAdapter.js +7 -0
- package/dist/oracle/src/oracle/oscProgress.js +60 -0
- package/dist/oracle/src/oracle/request.js +48 -0
- package/dist/oracle/src/oracle/run.js +444 -0
- package/dist/oracle/src/oracle/tokenStats.js +39 -0
- package/dist/oracle/src/oracle/types.js +1 -0
- package/dist/oracle/src/oracle.js +9 -0
- package/dist/oracle/src/sessionManager.js +205 -0
- package/dist/oracle/src/version.js +39 -0
- package/dist/scripts/chrome/browser-tools.js +295 -0
- package/dist/src/browser/actions/assistantResponse.js +71 -23
- package/dist/src/browser/actions/thinkingTime.js +165 -9
- package/dist/src/browser/chromeCookies.js +312 -0
- package/dist/src/browser/config.js +2 -3
- package/dist/src/browser/index.js +7 -2
- package/dist/src/browser/keytarShim.js +56 -0
- package/dist/src/browser/policies.js +10 -2
- package/dist/src/browser/profileSync.js +141 -0
- package/dist/src/browser/projectSourcesRunner.js +6 -3
- package/dist/src/browser/reattach.js +50 -35
- package/dist/src/browser/windowsCookies.js +219 -0
- package/dist/src/cli/browserConfig.js +39 -10
- package/dist/src/cli/browserDefaults.js +9 -1
- package/dist/src/cli/dryRun.js +1 -0
- package/dist/src/cli/projectSources.js +10 -1
- package/dist/src/mcp/tools/consult.js +13 -4
- package/dist/src/remote/server.js +8 -3
- package/dist/vendor/oracle-notifier/OracleNotifier.app/Contents/CodeResources +0 -0
- package/dist/vendor/oracle-notifier/OracleNotifier.app/Contents/Info.plist +20 -0
- package/dist/vendor/oracle-notifier/OracleNotifier.app/Contents/MacOS/OracleNotifier +0 -0
- package/dist/vendor/oracle-notifier/OracleNotifier.app/Contents/Resources/OracleIcon.icns +0 -0
- package/dist/vendor/oracle-notifier/OracleNotifier.app/Contents/_CodeSignature/CodeResources +128 -0
- package/package.json +8 -8
- package/vendor/oracle-notifier/OracleNotifier.app/Contents/CodeResources +0 -0
- package/vendor/oracle-notifier/OracleNotifier.app/Contents/Info.plist +20 -0
- package/vendor/oracle-notifier/OracleNotifier.app/Contents/MacOS/OracleNotifier +0 -0
- package/vendor/oracle-notifier/OracleNotifier.app/Contents/Resources/OracleIcon.icns +0 -0
- package/vendor/oracle-notifier/OracleNotifier.app/Contents/_CodeSignature/CodeResources +128 -0
|
@@ -13,6 +13,12 @@ const DEFAULT_BROWSER_ATTACHMENT_TIMEOUT_MS = 45_000;
|
|
|
13
13
|
const DEFAULT_BROWSER_RECHECK_TIMEOUT_MS = 120_000;
|
|
14
14
|
const DEFAULT_BROWSER_AUTO_REATTACH_TIMEOUT_MS = 120_000;
|
|
15
15
|
const DEFAULT_CHROME_PROFILE = "Default";
|
|
16
|
+
const CURRENT_CHATGPT_PRO_ALIASES = new Set([
|
|
17
|
+
"gpt-5-pro",
|
|
18
|
+
"gpt-5.1-pro",
|
|
19
|
+
"gpt-5.2-pro",
|
|
20
|
+
"gpt-5.4-pro",
|
|
21
|
+
]);
|
|
16
22
|
// Ordered array: most specific models first to ensure correct selection.
|
|
17
23
|
// The browser label is passed to the model picker which fuzzy-matches against ChatGPT's UI.
|
|
18
24
|
const BROWSER_MODEL_LABELS = [
|
|
@@ -52,11 +58,8 @@ export function normalizeChatGptModelForBrowser(model) {
|
|
|
52
58
|
return normalized;
|
|
53
59
|
}
|
|
54
60
|
// Pro variants: resolve to the latest Pro model in ChatGPT.
|
|
55
|
-
if (normalized
|
|
56
|
-
|
|
57
|
-
normalized === "gpt-5.2-pro" ||
|
|
58
|
-
normalized === "gpt-5.4-pro") {
|
|
59
|
-
return "gpt-5.5-pro";
|
|
61
|
+
if (isCurrentChatGptProAlias(normalized)) {
|
|
62
|
+
return "gpt-5.6-sol";
|
|
60
63
|
}
|
|
61
64
|
// Explicit model variants: keep as-is (they have their own browser labels)
|
|
62
65
|
if (normalized === "gpt-5.2-thinking" || normalized === "gpt-5.2-instant") {
|
|
@@ -68,6 +71,18 @@ export function normalizeChatGptModelForBrowser(model) {
|
|
|
68
71
|
}
|
|
69
72
|
return model;
|
|
70
73
|
}
|
|
74
|
+
export function isCurrentChatGptProAlias(model) {
|
|
75
|
+
return CURRENT_CHATGPT_PRO_ALIASES.has(model?.trim().toLowerCase() ?? "");
|
|
76
|
+
}
|
|
77
|
+
export function resolveDefaultBrowserThinkingTime({ model, requestedModel, modelStrategy, }) {
|
|
78
|
+
const strategy = normalizeBrowserModelStrategy(modelStrategy) ?? DEFAULT_MODEL_STRATEGY;
|
|
79
|
+
if (strategy !== "select")
|
|
80
|
+
return undefined;
|
|
81
|
+
const normalizedModel = normalizeChatGptModelForBrowser(model);
|
|
82
|
+
return isCurrentChatGptProAlias(requestedModel ?? model) || normalizedModel === "gpt-5.5-pro"
|
|
83
|
+
? "pro"
|
|
84
|
+
: undefined;
|
|
85
|
+
}
|
|
71
86
|
export async function buildBrowserConfig(options) {
|
|
72
87
|
if (options.copyProfile && options.browserKeepBrowser) {
|
|
73
88
|
throw new Error("--copy-profile cannot be combined with --browser-keep-browser: the copied profile is a throwaway that is deleted after the run, so it must not be retained.");
|
|
@@ -85,11 +100,14 @@ export async function buildBrowserConfig(options) {
|
|
|
85
100
|
const normalizedOverride = desiredModelOverride?.toLowerCase() ?? "";
|
|
86
101
|
const baseModel = options.model.toLowerCase();
|
|
87
102
|
const isChatGptModel = baseModel.startsWith("gpt-") && !baseModel.includes("codex");
|
|
88
|
-
const normalizedBrowserModel = normalizeChatGptModelForBrowser(options.model);
|
|
89
103
|
const shouldUseOverride = !isChatGptModel && normalizedOverride.length > 0 && normalizedOverride !== baseModel;
|
|
90
104
|
const modelStrategy = normalizeBrowserModelStrategy(options.browserModelStrategy) ?? DEFAULT_MODEL_STRATEGY;
|
|
91
105
|
const thinkingTime = normalizeThinkingTimeLevel(options.browserThinkingTime) ??
|
|
92
|
-
(
|
|
106
|
+
resolveDefaultBrowserThinkingTime({
|
|
107
|
+
model: options.model,
|
|
108
|
+
requestedModel: options.browserRequestedModel,
|
|
109
|
+
modelStrategy,
|
|
110
|
+
});
|
|
93
111
|
assertBrowserModelAvailable(options.model, modelStrategy);
|
|
94
112
|
const cookieNames = parseCookieNames(options.browserCookieNames ?? process.env.ORACLE_BROWSER_COOKIE_NAMES);
|
|
95
113
|
let inline = await resolveInlineCookies({
|
|
@@ -99,7 +117,9 @@ export async function buildBrowserConfig(options) {
|
|
|
99
117
|
envFile: process.env.ORACLE_BROWSER_COOKIES_FILE,
|
|
100
118
|
cwd: process.cwd(),
|
|
101
119
|
});
|
|
102
|
-
|
|
120
|
+
const chromeCookieSyncRequested = options.browserNoCookieSync !== true &&
|
|
121
|
+
(options.browserCookieSync === true || options.browserManualLoginCookieSync === true);
|
|
122
|
+
if (inline?.source?.startsWith("home:") && chromeCookieSyncRequested) {
|
|
103
123
|
inline = undefined;
|
|
104
124
|
}
|
|
105
125
|
let remoteChrome;
|
|
@@ -161,14 +181,21 @@ export async function buildBrowserConfig(options) {
|
|
|
161
181
|
cookieSyncWaitMs: options.browserCookieWait
|
|
162
182
|
? parseBrowserDuration(options.browserCookieWait, "--browser-cookie-wait", 0)
|
|
163
183
|
: undefined,
|
|
164
|
-
cookieSync:
|
|
184
|
+
cookieSync: inline?.cookies?.length
|
|
185
|
+
? true
|
|
186
|
+
: options.browserNoCookieSync
|
|
187
|
+
? false
|
|
188
|
+
: options.browserCookieSync === true || options.browserManualLoginCookieSync === true
|
|
189
|
+
? true
|
|
190
|
+
: undefined,
|
|
165
191
|
cookieNames,
|
|
166
192
|
inlineCookies: inline?.cookies,
|
|
167
193
|
inlineCookiesSource: inline?.source ?? null,
|
|
168
|
-
headless:
|
|
194
|
+
headless: options.browserHeadless === true ? true : undefined,
|
|
169
195
|
keepBrowser: options.browserKeepBrowser ? true : undefined,
|
|
170
196
|
manualLogin: options.browserManualLogin === undefined ? undefined : options.browserManualLogin,
|
|
171
197
|
manualLoginProfileDir: options.browserManualLoginProfileDir ?? undefined,
|
|
198
|
+
manualLoginCookieSync: inline?.cookies?.length ? true : options.browserManualLoginCookieSync,
|
|
172
199
|
copyProfileSource: options.copyProfile ?? undefined,
|
|
173
200
|
hideWindow: options.browserHideWindow ? true : undefined,
|
|
174
201
|
desiredModel,
|
|
@@ -201,7 +228,9 @@ function validateAttachRunningOptions(options, { attachRunning, hasInlineCookies
|
|
|
201
228
|
const conflicts = [
|
|
202
229
|
options.browserChromeProfile ? "--browser-chrome-profile" : null,
|
|
203
230
|
options.browserCookiePath ? "--browser-cookie-path" : null,
|
|
231
|
+
options.browserCookieSync ? "--browser-cookie-sync" : null,
|
|
204
232
|
options.browserNoCookieSync ? "--browser-no-cookie-sync" : null,
|
|
233
|
+
options.browserHeadless ? "--browser-headless" : null,
|
|
205
234
|
options.browserHideWindow ? "--browser-hide-window" : null,
|
|
206
235
|
options.browserKeepBrowser ? "--browser-keep-browser" : null,
|
|
207
236
|
options.browserManualLogin ? "--browser-manual-login" : null,
|
|
@@ -76,7 +76,10 @@ export function applyBrowserDefaultsFromConfig(options, config, getSource) {
|
|
|
76
76
|
if (isUnset("browserCookieWait") && typeof browser.cookieSyncWaitMs === "number") {
|
|
77
77
|
options.browserCookieWait = String(browser.cookieSyncWaitMs);
|
|
78
78
|
}
|
|
79
|
-
if (isUnset("
|
|
79
|
+
if (!attachRunningRequested && isUnset("browserCookieSync") && browser.cookieSync !== undefined) {
|
|
80
|
+
options.browserCookieSync = browser.cookieSync;
|
|
81
|
+
}
|
|
82
|
+
if (!attachRunningRequested && isUnset("browserHeadless") && browser.headless !== undefined) {
|
|
80
83
|
options.browserHeadless = browser.headless;
|
|
81
84
|
}
|
|
82
85
|
if (!attachRunningRequested && isUnset("browserHideWindow") && browser.hideWindow !== undefined) {
|
|
@@ -111,4 +114,9 @@ export function applyBrowserDefaultsFromConfig(options, config, getSource) {
|
|
|
111
114
|
browser.manualLoginProfileDir !== undefined) {
|
|
112
115
|
options.browserManualLoginProfileDir = browser.manualLoginProfileDir;
|
|
113
116
|
}
|
|
117
|
+
if (!attachRunningRequested &&
|
|
118
|
+
isUnset("browserManualLoginCookieSync") &&
|
|
119
|
+
browser.manualLoginCookieSync !== undefined) {
|
|
120
|
+
options.browserManualLoginCookieSync = browser.manualLoginCookieSync;
|
|
121
|
+
}
|
|
114
122
|
}
|
package/dist/src/cli/dryRun.js
CHANGED
|
@@ -110,6 +110,7 @@ export async function runBrowserPreview({ runOptions, cwd, version, previewMode,
|
|
|
110
110
|
log(chalk.cyan(headerLine));
|
|
111
111
|
logBrowserControlPlan(browserConfig, log, "preview");
|
|
112
112
|
logBrowserFollowUpSummary(runOptions.browserFollowUps, log, "preview");
|
|
113
|
+
logBrowserCookieStrategy(browserConfig, log, "preview");
|
|
113
114
|
logBrowserFileSummary(artifacts, log, "preview");
|
|
114
115
|
if (previewMode === "json" || previewMode === "full") {
|
|
115
116
|
const attachmentSummary = artifacts.attachments.map((attachment) => ({
|
|
@@ -71,14 +71,23 @@ export async function buildProjectSourcesBrowserConfig({ options, projectUrl, co
|
|
|
71
71
|
envProfileDir ??
|
|
72
72
|
null)
|
|
73
73
|
: null;
|
|
74
|
+
const manualLoginCookieSync = flagConfig.manualLoginCookieSync ?? configuredBrowser.manualLoginCookieSync;
|
|
75
|
+
const cookieSync = flagConfig.cookieSync === false
|
|
76
|
+
? false
|
|
77
|
+
: flagConfig.cookieSync === true
|
|
78
|
+
? true
|
|
79
|
+
: manualLogin
|
|
80
|
+
? manualLoginCookieSync === true
|
|
81
|
+
: configuredBrowser.cookieSync === true;
|
|
74
82
|
return {
|
|
75
83
|
...configuredBrowser,
|
|
76
84
|
...flagConfig,
|
|
77
85
|
url: projectUrl,
|
|
78
86
|
chatgptUrl: projectUrl,
|
|
79
|
-
cookieSync
|
|
87
|
+
cookieSync,
|
|
80
88
|
manualLogin,
|
|
81
89
|
manualLoginProfileDir,
|
|
90
|
+
manualLoginCookieSync,
|
|
82
91
|
desiredModel: null,
|
|
83
92
|
modelStrategy: "ignore",
|
|
84
93
|
researchMode: "off",
|
|
@@ -24,7 +24,7 @@ import { CONSULT_PRESETS, browserThinkingTimeRawSchema, consultInputSchema } fro
|
|
|
24
24
|
import { applyConsultPreset } from "../consultPresets.js";
|
|
25
25
|
import { loadUserConfig } from "../../config.js";
|
|
26
26
|
import { resolveNotificationSettings } from "../../cli/notifier.js";
|
|
27
|
-
import { mapModelToBrowserLabel, resolveBrowserModelLabel } from "../../cli/browserConfig.js";
|
|
27
|
+
import { mapModelToBrowserLabel, resolveBrowserModelLabel, resolveDefaultBrowserThinkingTime, } from "../../cli/browserConfig.js";
|
|
28
28
|
import { normalizeThinkingTimeLevel } from "../../oracle/thinkingTime.js";
|
|
29
29
|
// Use raw shapes so the MCP SDK (with its bundled Zod) wraps them and emits valid JSON Schema.
|
|
30
30
|
const consultInputShape = {
|
|
@@ -267,11 +267,14 @@ export function buildConsultBrowserConfig({ userConfig, env, runModel, inputMode
|
|
|
267
267
|
? true
|
|
268
268
|
: (configuredBrowser.manualLogin ?? process.platform === "win32");
|
|
269
269
|
const configuredThinkingTime = normalizeThinkingTimeLevel(configuredBrowser.thinkingTime);
|
|
270
|
+
const modelStrategy = browserModelStrategy ?? configuredBrowser.modelStrategy;
|
|
270
271
|
return {
|
|
271
272
|
...configuredBrowser,
|
|
272
273
|
url: configuredUrl,
|
|
273
274
|
chatgptUrl: configuredUrl,
|
|
274
|
-
cookieSync:
|
|
275
|
+
cookieSync: manualLogin
|
|
276
|
+
? configuredBrowser.manualLoginCookieSync === true
|
|
277
|
+
: configuredBrowser.cookieSync === true,
|
|
275
278
|
headless: configuredBrowser.headless ?? false,
|
|
276
279
|
hideWindow: configuredBrowser.hideWindow ?? false,
|
|
277
280
|
keepBrowser: browserKeepBrowser ?? configuredBrowser.keepBrowser ?? false,
|
|
@@ -279,8 +282,14 @@ export function buildConsultBrowserConfig({ userConfig, env, runModel, inputMode
|
|
|
279
282
|
manualLoginProfileDir: manualLogin
|
|
280
283
|
? ((envProfileDir || configuredBrowser.manualLoginProfileDir) ?? null)
|
|
281
284
|
: null,
|
|
282
|
-
thinkingTime: browserThinkingTime ??
|
|
283
|
-
|
|
285
|
+
thinkingTime: browserThinkingTime ??
|
|
286
|
+
configuredThinkingTime ??
|
|
287
|
+
resolveDefaultBrowserThinkingTime({
|
|
288
|
+
model: runModel,
|
|
289
|
+
requestedModel: inputModel,
|
|
290
|
+
modelStrategy,
|
|
291
|
+
}),
|
|
292
|
+
modelStrategy,
|
|
284
293
|
researchMode: browserResearchMode ?? configuredBrowser.researchMode,
|
|
285
294
|
archiveConversations: browserArchive ?? configuredBrowser.archiveConversations,
|
|
286
295
|
desiredModel: desiredModelLabel || mapModelToBrowserLabel(runModel),
|
|
@@ -192,14 +192,15 @@ export async function createRemoteServer(options = {}, deps = {}) {
|
|
|
192
192
|
// Preserve an explicit request to leave the completed conversation tab
|
|
193
193
|
// open before the service forces `keepBrowser` for process lifetime.
|
|
194
194
|
const clientRequestedKeepBrowser = payload.browserConfig?.keepBrowser === true;
|
|
195
|
-
// Remote runs
|
|
195
|
+
// Remote runs rely on the host's authentication policy; never accept cookie payloads from clients.
|
|
196
196
|
if (payload.browserConfig) {
|
|
197
197
|
payload.browserConfig.inlineCookies = null;
|
|
198
198
|
payload.browserConfig.inlineCookiesSource = null;
|
|
199
|
-
payload.browserConfig.cookieSync = true;
|
|
199
|
+
payload.browserConfig.cookieSync = options.cookieSyncDefault === true;
|
|
200
200
|
}
|
|
201
201
|
else {
|
|
202
202
|
payload.browserConfig = {};
|
|
203
|
+
payload.browserConfig.cookieSync = options.cookieSyncDefault === true;
|
|
203
204
|
}
|
|
204
205
|
// Enforce manual-login profile when cookie sync is unavailable (e.g., Windows/WSL).
|
|
205
206
|
if (options.manualLoginDefault) {
|
|
@@ -293,7 +294,10 @@ export async function createRemoteServer(options = {}, deps = {}) {
|
|
|
293
294
|
}
|
|
294
295
|
export async function serveRemote(options = {}) {
|
|
295
296
|
const manualProfileDir = options.manualLoginProfileDir ?? path.join(os.homedir(), ".oracle", "browser-profile");
|
|
296
|
-
const preferManualLogin = options.manualLoginDefault ||
|
|
297
|
+
const preferManualLogin = options.manualLoginDefault ||
|
|
298
|
+
options.cookieSyncDefault !== true ||
|
|
299
|
+
process.platform === "win32" ||
|
|
300
|
+
isWsl();
|
|
297
301
|
let cookies = null;
|
|
298
302
|
let opened = false;
|
|
299
303
|
if (isWsl() && process.env.ORACLE_ALLOW_WSL_SERVE !== "1") {
|
|
@@ -303,6 +307,7 @@ export async function serveRemote(options = {}) {
|
|
|
303
307
|
return;
|
|
304
308
|
}
|
|
305
309
|
if (!preferManualLogin) {
|
|
310
|
+
console.log("Warning: Chrome cookie copying can invalidate an active ChatGPT session when tokens rotate. Prefer the default dedicated manual-login profile when possible.");
|
|
306
311
|
// Warm-up: ensure this host has a ChatGPT login before accepting runs.
|
|
307
312
|
const result = await loadLocalChatgptCookies(console.log, CHATGPT_URL);
|
|
308
313
|
cookies = result.cookies;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
3
|
+
<plist version="1.0">
|
|
4
|
+
<dict>
|
|
5
|
+
<key>CFBundleIdentifier</key>
|
|
6
|
+
<string>com.steipete.oracle.notifier</string>
|
|
7
|
+
<key>CFBundleName</key>
|
|
8
|
+
<string>OracleNotifier</string>
|
|
9
|
+
<key>CFBundleDisplayName</key>
|
|
10
|
+
<string>Oracle Notifier</string>
|
|
11
|
+
<key>CFBundleExecutable</key>
|
|
12
|
+
<string>OracleNotifier</string>
|
|
13
|
+
<key>CFBundleIconFile</key>
|
|
14
|
+
<string>OracleIcon</string>
|
|
15
|
+
<key>CFBundlePackageType</key>
|
|
16
|
+
<string>APPL</string>
|
|
17
|
+
<key>LSMinimumSystemVersion</key>
|
|
18
|
+
<string>13.0</string>
|
|
19
|
+
</dict>
|
|
20
|
+
</plist>
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
3
|
+
<plist version="1.0">
|
|
4
|
+
<dict>
|
|
5
|
+
<key>files</key>
|
|
6
|
+
<dict>
|
|
7
|
+
<key>Resources/OracleIcon.icns</key>
|
|
8
|
+
<data>
|
|
9
|
+
edUHAMetayIv3xtc3Vb92VXRLfM=
|
|
10
|
+
</data>
|
|
11
|
+
</dict>
|
|
12
|
+
<key>files2</key>
|
|
13
|
+
<dict>
|
|
14
|
+
<key>Resources/OracleIcon.icns</key>
|
|
15
|
+
<dict>
|
|
16
|
+
<key>hash2</key>
|
|
17
|
+
<data>
|
|
18
|
+
AVPJK/6w6IOsDLmZTW4hL+Za+/4wHMxZiIp0t6m3NRA=
|
|
19
|
+
</data>
|
|
20
|
+
</dict>
|
|
21
|
+
</dict>
|
|
22
|
+
<key>rules</key>
|
|
23
|
+
<dict>
|
|
24
|
+
<key>^Resources/</key>
|
|
25
|
+
<true/>
|
|
26
|
+
<key>^Resources/.*\.lproj/</key>
|
|
27
|
+
<dict>
|
|
28
|
+
<key>optional</key>
|
|
29
|
+
<true/>
|
|
30
|
+
<key>weight</key>
|
|
31
|
+
<real>1000</real>
|
|
32
|
+
</dict>
|
|
33
|
+
<key>^Resources/.*\.lproj/locversion.plist$</key>
|
|
34
|
+
<dict>
|
|
35
|
+
<key>omit</key>
|
|
36
|
+
<true/>
|
|
37
|
+
<key>weight</key>
|
|
38
|
+
<real>1100</real>
|
|
39
|
+
</dict>
|
|
40
|
+
<key>^Resources/Base\.lproj/</key>
|
|
41
|
+
<dict>
|
|
42
|
+
<key>weight</key>
|
|
43
|
+
<real>1010</real>
|
|
44
|
+
</dict>
|
|
45
|
+
<key>^version.plist$</key>
|
|
46
|
+
<true/>
|
|
47
|
+
</dict>
|
|
48
|
+
<key>rules2</key>
|
|
49
|
+
<dict>
|
|
50
|
+
<key>.*\.dSYM($|/)</key>
|
|
51
|
+
<dict>
|
|
52
|
+
<key>weight</key>
|
|
53
|
+
<real>11</real>
|
|
54
|
+
</dict>
|
|
55
|
+
<key>^(.*/)?\.DS_Store$</key>
|
|
56
|
+
<dict>
|
|
57
|
+
<key>omit</key>
|
|
58
|
+
<true/>
|
|
59
|
+
<key>weight</key>
|
|
60
|
+
<real>2000</real>
|
|
61
|
+
</dict>
|
|
62
|
+
<key>^(Frameworks|SharedFrameworks|PlugIns|Plug-ins|XPCServices|Helpers|MacOS|Library/(Automator|Spotlight|LoginItems))/</key>
|
|
63
|
+
<dict>
|
|
64
|
+
<key>nested</key>
|
|
65
|
+
<true/>
|
|
66
|
+
<key>weight</key>
|
|
67
|
+
<real>10</real>
|
|
68
|
+
</dict>
|
|
69
|
+
<key>^.*</key>
|
|
70
|
+
<true/>
|
|
71
|
+
<key>^Info\.plist$</key>
|
|
72
|
+
<dict>
|
|
73
|
+
<key>omit</key>
|
|
74
|
+
<true/>
|
|
75
|
+
<key>weight</key>
|
|
76
|
+
<real>20</real>
|
|
77
|
+
</dict>
|
|
78
|
+
<key>^PkgInfo$</key>
|
|
79
|
+
<dict>
|
|
80
|
+
<key>omit</key>
|
|
81
|
+
<true/>
|
|
82
|
+
<key>weight</key>
|
|
83
|
+
<real>20</real>
|
|
84
|
+
</dict>
|
|
85
|
+
<key>^Resources/</key>
|
|
86
|
+
<dict>
|
|
87
|
+
<key>weight</key>
|
|
88
|
+
<real>20</real>
|
|
89
|
+
</dict>
|
|
90
|
+
<key>^Resources/.*\.lproj/</key>
|
|
91
|
+
<dict>
|
|
92
|
+
<key>optional</key>
|
|
93
|
+
<true/>
|
|
94
|
+
<key>weight</key>
|
|
95
|
+
<real>1000</real>
|
|
96
|
+
</dict>
|
|
97
|
+
<key>^Resources/.*\.lproj/locversion.plist$</key>
|
|
98
|
+
<dict>
|
|
99
|
+
<key>omit</key>
|
|
100
|
+
<true/>
|
|
101
|
+
<key>weight</key>
|
|
102
|
+
<real>1100</real>
|
|
103
|
+
</dict>
|
|
104
|
+
<key>^Resources/Base\.lproj/</key>
|
|
105
|
+
<dict>
|
|
106
|
+
<key>weight</key>
|
|
107
|
+
<real>1010</real>
|
|
108
|
+
</dict>
|
|
109
|
+
<key>^[^/]+$</key>
|
|
110
|
+
<dict>
|
|
111
|
+
<key>nested</key>
|
|
112
|
+
<true/>
|
|
113
|
+
<key>weight</key>
|
|
114
|
+
<real>10</real>
|
|
115
|
+
</dict>
|
|
116
|
+
<key>^embedded\.provisionprofile$</key>
|
|
117
|
+
<dict>
|
|
118
|
+
<key>weight</key>
|
|
119
|
+
<real>20</real>
|
|
120
|
+
</dict>
|
|
121
|
+
<key>^version\.plist$</key>
|
|
122
|
+
<dict>
|
|
123
|
+
<key>weight</key>
|
|
124
|
+
<real>20</real>
|
|
125
|
+
</dict>
|
|
126
|
+
</dict>
|
|
127
|
+
</dict>
|
|
128
|
+
</plist>
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@steipete/oracle",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.18.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",
|
|
@@ -77,9 +77,9 @@
|
|
|
77
77
|
"openai": "^7.4.0",
|
|
78
78
|
"osc-progress": "^0.3.2",
|
|
79
79
|
"qs": "^6.15.3",
|
|
80
|
-
"shiki": "^4.4.
|
|
80
|
+
"shiki": "^4.4.2",
|
|
81
81
|
"toasted-notifier": "^10.1.0",
|
|
82
|
-
"tokentally": "^0.1.
|
|
82
|
+
"tokentally": "^0.1.3",
|
|
83
83
|
"zod": "^4.4.3"
|
|
84
84
|
},
|
|
85
85
|
"devDependencies": {
|
|
@@ -90,11 +90,11 @@
|
|
|
90
90
|
"@vitest/coverage-v8": "4.1.10",
|
|
91
91
|
"devtools-protocol": "0.0.1676105",
|
|
92
92
|
"es-toolkit": "^1.50.0",
|
|
93
|
-
"esbuild": "^0.28.
|
|
94
|
-
"oxfmt": "0.
|
|
95
|
-
"oxlint": "^1.
|
|
93
|
+
"esbuild": "^0.28.1",
|
|
94
|
+
"oxfmt": "0.62.0",
|
|
95
|
+
"oxlint": "^1.77.0",
|
|
96
96
|
"puppeteer-core": "^25.5.0",
|
|
97
|
-
"tsx": "^4.23.
|
|
97
|
+
"tsx": "^4.23.11",
|
|
98
98
|
"typescript": "^7.0.2",
|
|
99
99
|
"vitest": "^4.1.10"
|
|
100
100
|
},
|
|
@@ -109,5 +109,5 @@
|
|
|
109
109
|
"engines": {
|
|
110
110
|
"node": ">=24"
|
|
111
111
|
},
|
|
112
|
-
"packageManager": "pnpm@
|
|
112
|
+
"packageManager": "pnpm@11.20.0"
|
|
113
113
|
}
|
|
Binary file
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
3
|
+
<plist version="1.0">
|
|
4
|
+
<dict>
|
|
5
|
+
<key>CFBundleIdentifier</key>
|
|
6
|
+
<string>com.steipete.oracle.notifier</string>
|
|
7
|
+
<key>CFBundleName</key>
|
|
8
|
+
<string>OracleNotifier</string>
|
|
9
|
+
<key>CFBundleDisplayName</key>
|
|
10
|
+
<string>Oracle Notifier</string>
|
|
11
|
+
<key>CFBundleExecutable</key>
|
|
12
|
+
<string>OracleNotifier</string>
|
|
13
|
+
<key>CFBundleIconFile</key>
|
|
14
|
+
<string>OracleIcon</string>
|
|
15
|
+
<key>CFBundlePackageType</key>
|
|
16
|
+
<string>APPL</string>
|
|
17
|
+
<key>LSMinimumSystemVersion</key>
|
|
18
|
+
<string>13.0</string>
|
|
19
|
+
</dict>
|
|
20
|
+
</plist>
|
|
Binary file
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
3
|
+
<plist version="1.0">
|
|
4
|
+
<dict>
|
|
5
|
+
<key>files</key>
|
|
6
|
+
<dict>
|
|
7
|
+
<key>Resources/OracleIcon.icns</key>
|
|
8
|
+
<data>
|
|
9
|
+
edUHAMetayIv3xtc3Vb92VXRLfM=
|
|
10
|
+
</data>
|
|
11
|
+
</dict>
|
|
12
|
+
<key>files2</key>
|
|
13
|
+
<dict>
|
|
14
|
+
<key>Resources/OracleIcon.icns</key>
|
|
15
|
+
<dict>
|
|
16
|
+
<key>hash2</key>
|
|
17
|
+
<data>
|
|
18
|
+
AVPJK/6w6IOsDLmZTW4hL+Za+/4wHMxZiIp0t6m3NRA=
|
|
19
|
+
</data>
|
|
20
|
+
</dict>
|
|
21
|
+
</dict>
|
|
22
|
+
<key>rules</key>
|
|
23
|
+
<dict>
|
|
24
|
+
<key>^Resources/</key>
|
|
25
|
+
<true/>
|
|
26
|
+
<key>^Resources/.*\.lproj/</key>
|
|
27
|
+
<dict>
|
|
28
|
+
<key>optional</key>
|
|
29
|
+
<true/>
|
|
30
|
+
<key>weight</key>
|
|
31
|
+
<real>1000</real>
|
|
32
|
+
</dict>
|
|
33
|
+
<key>^Resources/.*\.lproj/locversion.plist$</key>
|
|
34
|
+
<dict>
|
|
35
|
+
<key>omit</key>
|
|
36
|
+
<true/>
|
|
37
|
+
<key>weight</key>
|
|
38
|
+
<real>1100</real>
|
|
39
|
+
</dict>
|
|
40
|
+
<key>^Resources/Base\.lproj/</key>
|
|
41
|
+
<dict>
|
|
42
|
+
<key>weight</key>
|
|
43
|
+
<real>1010</real>
|
|
44
|
+
</dict>
|
|
45
|
+
<key>^version.plist$</key>
|
|
46
|
+
<true/>
|
|
47
|
+
</dict>
|
|
48
|
+
<key>rules2</key>
|
|
49
|
+
<dict>
|
|
50
|
+
<key>.*\.dSYM($|/)</key>
|
|
51
|
+
<dict>
|
|
52
|
+
<key>weight</key>
|
|
53
|
+
<real>11</real>
|
|
54
|
+
</dict>
|
|
55
|
+
<key>^(.*/)?\.DS_Store$</key>
|
|
56
|
+
<dict>
|
|
57
|
+
<key>omit</key>
|
|
58
|
+
<true/>
|
|
59
|
+
<key>weight</key>
|
|
60
|
+
<real>2000</real>
|
|
61
|
+
</dict>
|
|
62
|
+
<key>^(Frameworks|SharedFrameworks|PlugIns|Plug-ins|XPCServices|Helpers|MacOS|Library/(Automator|Spotlight|LoginItems))/</key>
|
|
63
|
+
<dict>
|
|
64
|
+
<key>nested</key>
|
|
65
|
+
<true/>
|
|
66
|
+
<key>weight</key>
|
|
67
|
+
<real>10</real>
|
|
68
|
+
</dict>
|
|
69
|
+
<key>^.*</key>
|
|
70
|
+
<true/>
|
|
71
|
+
<key>^Info\.plist$</key>
|
|
72
|
+
<dict>
|
|
73
|
+
<key>omit</key>
|
|
74
|
+
<true/>
|
|
75
|
+
<key>weight</key>
|
|
76
|
+
<real>20</real>
|
|
77
|
+
</dict>
|
|
78
|
+
<key>^PkgInfo$</key>
|
|
79
|
+
<dict>
|
|
80
|
+
<key>omit</key>
|
|
81
|
+
<true/>
|
|
82
|
+
<key>weight</key>
|
|
83
|
+
<real>20</real>
|
|
84
|
+
</dict>
|
|
85
|
+
<key>^Resources/</key>
|
|
86
|
+
<dict>
|
|
87
|
+
<key>weight</key>
|
|
88
|
+
<real>20</real>
|
|
89
|
+
</dict>
|
|
90
|
+
<key>^Resources/.*\.lproj/</key>
|
|
91
|
+
<dict>
|
|
92
|
+
<key>optional</key>
|
|
93
|
+
<true/>
|
|
94
|
+
<key>weight</key>
|
|
95
|
+
<real>1000</real>
|
|
96
|
+
</dict>
|
|
97
|
+
<key>^Resources/.*\.lproj/locversion.plist$</key>
|
|
98
|
+
<dict>
|
|
99
|
+
<key>omit</key>
|
|
100
|
+
<true/>
|
|
101
|
+
<key>weight</key>
|
|
102
|
+
<real>1100</real>
|
|
103
|
+
</dict>
|
|
104
|
+
<key>^Resources/Base\.lproj/</key>
|
|
105
|
+
<dict>
|
|
106
|
+
<key>weight</key>
|
|
107
|
+
<real>1010</real>
|
|
108
|
+
</dict>
|
|
109
|
+
<key>^[^/]+$</key>
|
|
110
|
+
<dict>
|
|
111
|
+
<key>nested</key>
|
|
112
|
+
<true/>
|
|
113
|
+
<key>weight</key>
|
|
114
|
+
<real>10</real>
|
|
115
|
+
</dict>
|
|
116
|
+
<key>^embedded\.provisionprofile$</key>
|
|
117
|
+
<dict>
|
|
118
|
+
<key>weight</key>
|
|
119
|
+
<real>20</real>
|
|
120
|
+
</dict>
|
|
121
|
+
<key>^version\.plist$</key>
|
|
122
|
+
<dict>
|
|
123
|
+
<key>weight</key>
|
|
124
|
+
<real>20</real>
|
|
125
|
+
</dict>
|
|
126
|
+
</dict>
|
|
127
|
+
</dict>
|
|
128
|
+
</plist>
|