Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
48 commits
Select commit Hold shift + click to select a range
80fa2cc
Route telemetry through ScientFactory gateway (#43)
yaacovcorcos Jul 20, 2026
e55716c
Fix unsigned macOS release signatures (#44)
yaacovcorcos Jul 20, 2026
1d72ef9
Add consent-aware desktop analytics (#47)
yaacovcorcos Jul 20, 2026
4e4019c
Fix Claude terminal auth and connection recovery (#52)
yaacovcorcos Jul 20, 2026
c88a239
Use direct OAuth for Grok sign-in (#53)
yaacovcorcos Jul 21, 2026
8058028
Secure Scient state initialization (#48)
yaacovcorcos Jul 21, 2026
a577f50
Supervise the desktop backend lifecycle (#49)
yaacovcorcos Jul 21, 2026
e1a4d4d
Supervise desktop connection recovery (#50)
yaacovcorcos Jul 21, 2026
40dfa6c
Define safe RPC recovery policies (#51)
yaacovcorcos Jul 21, 2026
211ed85
Surface connection recovery diagnostics (#55)
yaacovcorcos Jul 21, 2026
f658bbc
Recover Codex sessions after authentication loss (#56)
yaacovcorcos Jul 21, 2026
88ac61d
Support Linux desktop development launch (#57)
yaacovcorcos Jul 21, 2026
3c04060
Fix Antigravity browser authentication (#59)
yaacovcorcos Jul 21, 2026
71da4e4
Scope desktop signing credentials by platform (#60)
yaacovcorcos Jul 21, 2026
4813299
Fix managed Antigravity updates, authentication, and dialog UX (#62)
yaacovcorcos Jul 21, 2026
b80b249
Stabilize macOS release identity (#63)
yaacovcorcos Jul 21, 2026
f55be4e
Reduce unintended macOS permission prompts (#64)
yaacovcorcos Jul 21, 2026
1eafedb
Control macOS notarization lifecycle (#65)
yaacovcorcos Jul 21, 2026
95cf946
Add Evidence to Note as a latent built-in (#70)
yaacovcorcos Jul 22, 2026
d05d4e1
Harden bidirectional chat rendering (#71)
yaacovcorcos Jul 22, 2026
5982a79
Add Medical Exam Study built-in (#72)
yaacovcorcos Jul 22, 2026
abb7a05
Fix YAML frontmatter in Markdown previews (#69)
yaacovcorcos Jul 22, 2026
cbf4c16
Add T3-inspired project source dialog (#76)
yaacovcorcos Jul 22, 2026
4ad0351
Add T3-style right dock surfaces (#77)
yaacovcorcos Jul 22, 2026
490c907
fix: remove AppSnap startup announcement (#80)
yaacovcorcos Jul 22, 2026
8071f14
Add artifact preview cards to chat (#81)
yaacovcorcos Jul 22, 2026
2257adf
fix: select providers after connection (#82)
yaacovcorcos Jul 22, 2026
df36dda
Add message-level conversation forks (#78)
yaacovcorcos Jul 22, 2026
4c678de
Improve desktop contribution workflow (#75)
yaacovcorcos Jul 22, 2026
a14aa27
Set default base font to 15px and fix numeric editing (#79)
yaacovcorcos Jul 23, 2026
66c93fc
Use recommended provider model defaults (#83)
yaacovcorcos Jul 23, 2026
a757575
Align desktop approval policy (#85)
yaacovcorcos Jul 23, 2026
8d421bb
Fix release-candidate regressions (#86)
yaacovcorcos Jul 23, 2026
640473f
fix(release): preserve Linux sandbox (#87)
yaacovcorcos Jul 23, 2026
554ca86
fix: preserve whitespace in folder browsing (#90)
yaacovcorcos Jul 23, 2026
bee5a9d
Collapse long assistant artifact shelves (#91)
yaacovcorcos Jul 23, 2026
482a948
Remove project setup confirmation card (#93)
yaacovcorcos Jul 23, 2026
67818a1
Build unified notification system (#96)
yaacovcorcos Jul 23, 2026
d711e05
Hide provider setup banner on empty chats (#94)
yaacovcorcos Jul 23, 2026
9ec7017
Fix Droid model discovery lifecycle (#95)
yaacovcorcos Jul 23, 2026
1ff9a26
Add ChatGPT-first voice transcription with local Whisper fallback (#97)
yaacovcorcos Jul 23, 2026
f6488bc
Default Git writing to GPT-5.6 Luna (#99)
yaacovcorcos Jul 23, 2026
5201456
Apply updated settings defaults once (#101)
yaacovcorcos Jul 23, 2026
dd5f543
Improve voice dictation and active-turn composer controls (#102)
yaacovcorcos Jul 23, 2026
b3b0e7a
Fix folder picker navigation and project opening (#98)
yaacovcorcos Jul 23, 2026
1d2ef85
Fix Whisper runtime packaging on Windows (#104)
yaacovcorcos Jul 23, 2026
db689d6
Secure HTML artifact previews with isolated execution (#100)
yaacovcorcos Jul 23, 2026
7ba359d
Promote main for v0.5.12
yaacovcorcos Jul 24, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 41 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -108,6 +108,47 @@ jobs:
test -f apps/desktop/dist-electron/preload.js
grep -nE "desktopBridge|getWsUrl|PICK_FOLDER_CHANNEL|wsUrl" apps/desktop/dist-electron/preload.js

html_preview_platform:
name: HTML Preview Platform Smoke (${{ matrix.label }})
runs-on: ${{ matrix.runner }}
timeout-minutes: 20
strategy:
fail-fast: false
matrix:
include:
- label: Linux
runner: ubuntu-24.04
- label: Windows
runner: windows-2022
steps:
- name: Checkout
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0

- name: Setup Bun
uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2
with:
bun-version-file: package.json

- name: Setup Node
uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with:
node-version-file: package.json

- name: Install Linux listener tools
if: runner.os == 'Linux'
shell: bash
run: |
command -v lsof >/dev/null 2>&1 || {
sudo apt-get update
sudo apt-get install -y lsof
}

- name: Install dependencies
run: bun install --frozen-lockfile

- name: Exercise native localhost preview and discovery
run: bun run --cwd apps/server test:html-preview-platform

windows_process:
name: Windows Process Regression
runs-on: windows-2022
Expand Down
67 changes: 67 additions & 0 deletions apps/desktop/src/artifactPreviewPolicy.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
import { describe, expect, it } from "vitest";

import {
artifactPreviewNavigationAllowed,
artifactPreviewRequestAllowed,
} from "./artifactPreviewPolicy";

const ORIGIN = "http://g-123.preview.localhost:5000";

describe("artifactPreviewPolicy", () => {
it("allows only same-capability resources and inert embedded data", () => {
expect(
artifactPreviewRequestAllowed({
url: `${ORIGIN}/assets/app.js`,
allowedOrigin: ORIGIN,
resourceType: "script",
}),
).toBe(true);
expect(
artifactPreviewRequestAllowed({
url: "https://example.com/tracker.js",
allowedOrigin: ORIGIN,
resourceType: "script",
}),
).toBe(false);
expect(
artifactPreviewRequestAllowed({
url: `${ORIGIN}/socket`,
allowedOrigin: ORIGIN,
resourceType: "webSocket",
}),
).toBe(false);
for (const resourceType of ["worker", "sharedWorker", "serviceWorker"]) {
expect(
artifactPreviewRequestAllowed({
url: `${ORIGIN}/worker.js`,
allowedOrigin: ORIGIN,
resourceType,
}),
).toBe(false);
}
});

it("denies subframes and cross-origin top-level navigation", () => {
expect(
artifactPreviewNavigationAllowed({
url: `${ORIGIN}/`,
allowedOrigin: ORIGIN,
isMainFrame: true,
}),
).toBe(true);
expect(
artifactPreviewNavigationAllowed({
url: "https://example.com/",
allowedOrigin: ORIGIN,
isMainFrame: true,
}),
).toBe(false);
expect(
artifactPreviewNavigationAllowed({
url: `${ORIGIN}/frame.html`,
allowedOrigin: ORIGIN,
isMainFrame: false,
}),
).toBe(false);
});
});
47 changes: 47 additions & 0 deletions apps/desktop/src/artifactPreviewPolicy.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
// FILE: artifactPreviewPolicy.ts
// Purpose: Pure Electron-level network and navigation policy for untrusted artifact tabs.

const DENIED_RESOURCE_TYPES = new Set([
"subFrame",
"webSocket",
"object",
"ping",
"worker",
"sharedWorker",
"serviceWorker",
]);

export function artifactPreviewRequestAllowed(input: {
url: string;
allowedOrigin: string;
resourceType: string;
}): boolean {
if (DENIED_RESOURCE_TYPES.has(input.resourceType)) {
return false;
}
try {
const requestUrl = new URL(input.url);
return (
requestUrl.protocol === "data:" ||
requestUrl.protocol === "blob:" ||
requestUrl.origin === input.allowedOrigin
);
} catch {
return false;
}
}

export function artifactPreviewNavigationAllowed(input: {
url: string;
allowedOrigin: string;
isMainFrame: boolean;
}): boolean {
if (!input.isMainFrame) {
return false;
}
try {
return new URL(input.url).origin === input.allowedOrigin;
} catch {
return false;
}
}
Loading
Loading