sneakoscope 4.8.2 → 4.8.4
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/crates/sks-core/Cargo.lock +1 -1
- package/crates/sks-core/Cargo.toml +1 -1
- package/crates/sks-core/src/main.rs +1 -1
- package/dist/bin/sks.js +1 -1
- package/dist/core/codex-app/sks-menubar.js +9 -3
- package/dist/core/fsx.js +1 -1
- package/dist/core/version.js +1 -1
- package/dist/scripts/sks-menubar-install-check.js +16 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -49,7 +49,7 @@ sks seo-geo-optimizer apply latest --mode seo --apply --json
|
|
|
49
49
|
sks seo-geo-optimizer audit --mode geo --target package --offline --json
|
|
50
50
|
```
|
|
51
51
|
|
|
52
|
-
> 📋 **Current release: `v4.8.
|
|
52
|
+
> 📋 **Current release: `v4.8.4`** — full release history lives in [CHANGELOG.md](CHANGELOG.md). This README documents how Sneakoscope works today, not its version-by-version changes. Release readiness is tracked in [docs/release-readiness.md](docs/release-readiness.md).
|
|
53
53
|
|
|
54
54
|
## 🍥 Parallelism, UX, And Integrations
|
|
55
55
|
|
|
@@ -4,7 +4,7 @@ use std::io::{self, Read, Seek, SeekFrom};
|
|
|
4
4
|
fn main() {
|
|
5
5
|
let mut args = std::env::args().skip(1);
|
|
6
6
|
match args.next().as_deref() {
|
|
7
|
-
Some("--version") => println!("sks-rs 4.8.
|
|
7
|
+
Some("--version") => println!("sks-rs 4.8.4"),
|
|
8
8
|
Some("compact-info") => {
|
|
9
9
|
let mut input = String::new();
|
|
10
10
|
let _ = io::stdin().read_to_string(&mut input);
|
package/dist/bin/sks.js
CHANGED
|
@@ -8,6 +8,7 @@ const CONTROL_CENTER_PREFERRED_POSITION = 360;
|
|
|
8
8
|
const MENU_ITEMS = [
|
|
9
9
|
'Use codex-lb',
|
|
10
10
|
'Use ChatGPT OAuth',
|
|
11
|
+
'Set codex-lb Domain and Key',
|
|
11
12
|
'Set OpenRouter Key and GLM Profiles',
|
|
12
13
|
'Fast Check',
|
|
13
14
|
'SKS Version Check',
|
|
@@ -294,7 +295,7 @@ func runInTerminal(_ command: String) {
|
|
|
294
295
|
.replacingOccurrences(of: "\\\\", with: "\\\\\\\\")
|
|
295
296
|
.replacingOccurrences(of: "\\\"", with: "\\\\\\\"")
|
|
296
297
|
let script = "tell application \\"Terminal\\" to activate\\n" +
|
|
297
|
-
"tell application \\"Terminal\\" to do script \\"
|
|
298
|
+
"tell application \\"Terminal\\" to do script \\"\\(escaped)\\""
|
|
298
299
|
runDetached("/usr/bin/osascript", ["-e", script])
|
|
299
300
|
}
|
|
300
301
|
|
|
@@ -313,6 +314,7 @@ final class AppDelegate: NSObject, NSApplicationDelegate {
|
|
|
313
314
|
let menu = NSMenu()
|
|
314
315
|
add(menu, "Use codex-lb", #selector(useCodexLb))
|
|
315
316
|
add(menu, "Use ChatGPT OAuth", #selector(useChatGptOAuth))
|
|
317
|
+
add(menu, "Set codex-lb Domain and Key", #selector(setCodexLbDomainAndKey))
|
|
316
318
|
menu.addItem(NSMenuItem.separator())
|
|
317
319
|
add(menu, "Set OpenRouter Key and GLM Profiles", #selector(setOpenRouterKey))
|
|
318
320
|
add(menu, "Fast Check", #selector(fastCheck))
|
|
@@ -360,6 +362,10 @@ final class AppDelegate: NSObject, NSApplicationDelegate {
|
|
|
360
362
|
runSks(["codex-lb", "use-oauth"])
|
|
361
363
|
}
|
|
362
364
|
|
|
365
|
+
@objc func setCodexLbDomainAndKey() {
|
|
366
|
+
runSks(["codex-lb", "setup"])
|
|
367
|
+
}
|
|
368
|
+
|
|
363
369
|
@objc func setOpenRouterKey() {
|
|
364
370
|
let command = "printf 'Paste OpenRouter key, then press Return: '; read -r key; printf '%s\\\\n' \\"$key\\" | \\(shellQuote(actionScript)) codex-app set-openrouter-key --api-key-stdin; \\(shellQuote(actionScript)) codex-app glm-profile install; echo; echo 'OpenRouter/GLM update finished. Restart Codex if the model picker was already open.'"
|
|
365
371
|
runInTerminal(command)
|
|
@@ -431,8 +437,8 @@ function launchAgentSource(executablePath, installDir) {
|
|
|
431
437
|
</array>
|
|
432
438
|
<key>RunAtLoad</key>
|
|
433
439
|
<true/>
|
|
434
|
-
<key>
|
|
435
|
-
<
|
|
440
|
+
<key>ProcessType</key>
|
|
441
|
+
<string>Interactive</string>
|
|
436
442
|
<key>StandardOutPath</key>
|
|
437
443
|
<string>${escapeXml(path.join(installDir, 'menubar.out.log'))}</string>
|
|
438
444
|
<key>StandardErrorPath</key>
|
package/dist/core/fsx.js
CHANGED
|
@@ -5,7 +5,7 @@ import os from 'node:os';
|
|
|
5
5
|
import crypto from 'node:crypto';
|
|
6
6
|
import { spawn } from 'node:child_process';
|
|
7
7
|
import { fileURLToPath } from 'node:url';
|
|
8
|
-
export const PACKAGE_VERSION = '4.8.
|
|
8
|
+
export const PACKAGE_VERSION = '4.8.4';
|
|
9
9
|
export const DEFAULT_PROCESS_TAIL_BYTES = 256 * 1024;
|
|
10
10
|
export const DEFAULT_PROCESS_TIMEOUT_MS = 30 * 60 * 1000;
|
|
11
11
|
export function nowIso() {
|
package/dist/core/version.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export const PACKAGE_VERSION = '4.8.
|
|
1
|
+
export const PACKAGE_VERSION = '4.8.4';
|
|
2
2
|
//# sourceMappingURL=version.js.map
|
|
@@ -25,6 +25,7 @@ const launchAgentExists = result.launch_agent_path ? await exists(result.launch_
|
|
|
25
25
|
const actionScriptExists = result.action_script_path ? await exists(result.action_script_path) : false;
|
|
26
26
|
const generatedSourcePath = result.app_path ? path.join(path.dirname(result.app_path), 'SKSMenuBar.swift') : null;
|
|
27
27
|
const generatedSource = generatedSourcePath ? await fs.readFile(generatedSourcePath, 'utf8').catch(() => '') : '';
|
|
28
|
+
const launchAgentSource = result.launch_agent_path ? await fs.readFile(result.launch_agent_path, 'utf8').catch(() => '') : '';
|
|
28
29
|
const hasVisibleLabelSource = generatedSource.includes('NSStatusItem.variableLength')
|
|
29
30
|
&& generatedSource.includes('button.title = "SKS"')
|
|
30
31
|
&& generatedSource.includes('button.attributedTitle = NSAttributedString(string: "SKS"')
|
|
@@ -34,9 +35,17 @@ const hasVisibleLabelSource = generatedSource.includes('NSStatusItem.variableLen
|
|
|
34
35
|
// once-dragged item does not jump back behind the notch on the next doctor --fix.
|
|
35
36
|
const hasAutosaveNameSource = generatedSource.includes('statusItem.autosaveName = "com.sneakoscope.sks-menubar"');
|
|
36
37
|
const hasExplicitVisibleSource = generatedSource.includes('statusItem.isVisible = true');
|
|
38
|
+
const terminalCommandLine = generatedSource.split(/\r?\n/)
|
|
39
|
+
.find((line) => line.includes('do script') && line.includes('escaped')) || '';
|
|
40
|
+
const hasTerminalCommandInterpolation = terminalCommandLine.includes(String.raw `\(escaped)`)
|
|
41
|
+
&& !terminalCommandLine.includes(String.raw `\"(escaped)\"`);
|
|
42
|
+
const hasNoUnconditionalKeepAlive = !launchAgentSource.includes('<key>KeepAlive</key>');
|
|
43
|
+
const hasInteractiveProcessType = launchAgentSource.includes('<key>ProcessType</key>')
|
|
44
|
+
&& launchAgentSource.includes('<string>Interactive</string>');
|
|
37
45
|
const expectedMenuItems = [
|
|
38
46
|
'Use codex-lb',
|
|
39
47
|
'Use ChatGPT OAuth',
|
|
48
|
+
'Set codex-lb Domain and Key',
|
|
40
49
|
'Set OpenRouter Key and GLM Profiles',
|
|
41
50
|
'Fast Check',
|
|
42
51
|
'SKS Version Check',
|
|
@@ -71,6 +80,9 @@ const ok = process.platform === 'darwin'
|
|
|
71
80
|
&& hasVisibleLabelSource
|
|
72
81
|
&& hasAutosaveNameSource
|
|
73
82
|
&& hasExplicitVisibleSource
|
|
83
|
+
&& hasTerminalCommandInterpolation
|
|
84
|
+
&& hasNoUnconditionalKeepAlive
|
|
85
|
+
&& hasInteractiveProcessType
|
|
74
86
|
&& launchSkippedForTempHome
|
|
75
87
|
&& launchSkippedForEnvHome
|
|
76
88
|
&& launchSkippedForTempInstall
|
|
@@ -87,9 +99,13 @@ const report = {
|
|
|
87
99
|
launch_agent_exists: launchAgentExists,
|
|
88
100
|
action_script_exists: actionScriptExists,
|
|
89
101
|
generated_source_path: generatedSourcePath,
|
|
102
|
+
terminal_command_line: terminalCommandLine,
|
|
90
103
|
has_visible_label_source: hasVisibleLabelSource,
|
|
91
104
|
has_autosave_name_source: hasAutosaveNameSource,
|
|
92
105
|
has_explicit_visible_source: hasExplicitVisibleSource,
|
|
106
|
+
has_terminal_command_interpolation: hasTerminalCommandInterpolation,
|
|
107
|
+
has_no_unconditional_keepalive: hasNoUnconditionalKeepAlive,
|
|
108
|
+
has_interactive_process_type: hasInteractiveProcessType,
|
|
93
109
|
launch_skipped_for_temp_home: launchSkippedForTempHome,
|
|
94
110
|
launch_skipped_for_env_home: launchSkippedForEnvHome,
|
|
95
111
|
launch_skipped_for_temp_install: launchSkippedForTempInstall,
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sneakoscope",
|
|
3
3
|
"displayName": "ㅅㅋㅅ",
|
|
4
|
-
"version": "4.8.
|
|
4
|
+
"version": "4.8.4",
|
|
5
5
|
"description": "Sneakoscope Codex: fast proof-first Codex trust layer with image-based Voxel TriWiki.",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"homepage": "https://github.com/mandarange/Sneakoscope-Codex#readme",
|