Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
63f918b
feat(desktop): add S1 native foundation and Windows CI
knqiufan Sep 19, 2026
66c47ab
feat(desktop): add connection and diagnostic workflows
knqiufan Sep 19, 2026
3c9597c
fix(desktop): pin upstream version tag for CI fixtures
knqiufan Sep 19, 2026
088ca7b
feat(desktop): add scoped note search and exact reading
knqiufan Sep 19, 2026
e56dcf4
fix(desktop): clear inaccessible memory results and expand evidence
knqiufan Sep 19, 2026
7d9c334
test(desktop): record installed package provenance
knqiufan Sep 19, 2026
dc7f238
fix(desktop): refresh identity state after scope failures
knqiufan Sep 19, 2026
0018e8a
docs(desktop): record native workflow and passing Windows CI
knqiufan Sep 19, 2026
cae5ca8
docs(desktop): record installed memory workflow evidence
knqiufan Sep 19, 2026
68436a4
test(desktop): verify real provider identity invalidation
knqiufan Sep 19, 2026
a076db4
test(desktop): verify historical reads after permission revocation
knqiufan Sep 19, 2026
28d9926
test(desktop): verify committed writes with lost responses
knqiufan Sep 19, 2026
8e50c94
test(desktop): verify real scope pagination and storage markers
knqiufan Sep 19, 2026
36531a6
docs(desktop): reconcile phase qualification evidence
knqiufan Sep 19, 2026
ec7ae2e
test(desktop): exercise installed WebView on Windows CI
knqiufan Sep 19, 2026
704001c
test(desktop): simplify installed UI driver cleanup
knqiufan Sep 19, 2026
3aea037
test(desktop): cover installed memory workflow in remote UI
knqiufan Sep 19, 2026
c8a96eb
test(desktop): attach WebDriver to installed WebView explicitly
knqiufan Sep 19, 2026
a12d36d
fix(desktop): keep UI harness type checks portable
knqiufan Sep 19, 2026
584df87
test(desktop): diagnose startup with verified existing packages
knqiufan Sep 19, 2026
025cc48
fix(ci): upload explicitly selected desktop diagnostic files
knqiufan Sep 19, 2026
e98ff6b
fix(ci): configure WebView debugging for elevated Windows runners
knqiufan Sep 19, 2026
e29adea
docs(desktop): record verified remote installed workflow
knqiufan Sep 19, 2026
94c45bb
test(desktop): cover installed isolation and unknown writes
knqiufan Sep 19, 2026
7ee1e96
test(desktop): verify server survives installed app termination
knqiufan Sep 19, 2026
fd10d9d
test(desktop): confirm explicit write after unknown outcome
knqiufan Sep 19, 2026
8cb762f
test(desktop): preserve exact localized confirmation text
knqiufan Sep 19, 2026
c4e298b
docs(desktop): record installed forced-exit acceptance
knqiufan Sep 19, 2026
1291157
test(desktop): exercise installed input and search boundaries
knqiufan Sep 19, 2026
ff4a3cc
test(desktop): distinguish search revision from historical citation
knqiufan Sep 19, 2026
da1851f
refactor(desktop): rebuild UI around the MVP prototype layout
knqiufan Sep 22, 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
178 changes: 178 additions & 0 deletions .github/workflows/desktop.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,178 @@
name: Desktop validation

on:
pull_request:
paths: ['desktop/**', 'src/powercontext/**', 'pyproject.toml', 'uv.lock', 'openapi/powercontext.yaml', 'tests/fixtures/transport_loopback_vectors.json', 'website/assets/**', '.github/workflows/desktop.yml']
push:
branches: [master, codex/desktop-preview]
paths: ['desktop/**', 'src/powercontext/**', 'pyproject.toml', 'uv.lock', 'openapi/powercontext.yaml', 'tests/fixtures/transport_loopback_vectors.json', 'website/assets/**', '.github/workflows/desktop.yml']
workflow_dispatch:
inputs:
installer_run:
description: 'Optional run ID from this repository to diagnose its exact existing installer'
required: false
type: string
default: ''

permissions:
contents: read

concurrency:
group: desktop-${{ github.event.pull_request.number || github.ref }}-${{ inputs.installer_run || 'build' }}
cancel-in-progress: true

jobs:
windows:
if: ${{ github.event_name != 'workflow_dispatch' || inputs.installer_run == '' }}
runs-on: windows-2025
timeout-minutes: 40
defaults:
run:
working-directory: desktop
shell: pwsh
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
with:
persist-credentials: false
fetch-depth: 0
- name: Verify Server version baseline tag
run: |
git fetch --no-tags https://github.com/oceanbase/powercontext.git refs/tags/powercontext-v1.0.0:refs/tags/powercontext-v1.0.0
if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE }
if ((git rev-parse refs/tags/powercontext-v1.0.0) -ne 'ec97efba5f26fc972e9d8bf5027d8233acab3ca1') {
throw 'Unexpected Server version baseline tag'
}
- uses: jdx/mise-action@c37c93293d6b742fc901e1406b8f764f6fb19dac # v2
with:
working_directory: desktop
- name: Install pinned Windows Rust toolchain
run: rustup toolchain install 1.95.0-x86_64-pc-windows-msvc --profile minimal --component rustfmt --component clippy
- name: Install locked dependencies
run: pnpm install --frozen-lockfile
- run: pnpm lint
- run: pnpm typecheck
- run: pnpm test
- run: pnpm build
- run: cargo fmt --manifest-path src-tauri/Cargo.toml --check
- run: cargo clippy --locked --manifest-path src-tauri/Cargo.toml --all-targets -- -D warnings
- run: cargo test --locked --manifest-path src-tauri/Cargo.toml
- run: pnpm ipc:check
- name: Verify diagnostic process containment
run: cargo run --locked --manifest-path src-tauri/Cargo.toml --example diagnostic_process_probe
- name: Verify Windows vault across processes
run: cargo run --locked --manifest-path src-tauri/Cargo.toml --example credential_probe
- name: Set up Python fixture tooling
uses: astral-sh/setup-uv@ae62891fec2bb8e7d6c99fc78c9fec3a63790f8d # v10.0.0
with:
version: "0.10.12"
- name: Install locked Server test dependencies
working-directory: .
run: uv sync --locked --python 3.12
- name: Build Server wheel for isolated acceptance
working-directory: .
run: uv build --wheel --out-dir desktop/.artifacts/server-wheel
- name: Check installed UI acceptance harness
working-directory: .
run: |
uv run --no-sync ruff check --no-fix desktop/tests/installed_ui.py desktop/tests/installed_fixture.py desktop/tests/installed_workflow.py
if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE }
uv run --no-sync ruff format --check desktop/tests/installed_ui.py desktop/tests/installed_fixture.py desktop/tests/installed_workflow.py
if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE }
uv run --no-sync ty check desktop/tests/installed_ui.py desktop/tests/installed_fixture.py desktop/tests/installed_workflow.py
if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE }
uv run --no-sync ty check --python-platform linux desktop/tests/installed_ui.py desktop/tests/installed_fixture.py desktop/tests/installed_workflow.py
- name: Build native API acceptance client
run: cargo build --locked --manifest-path src-tauri/Cargo.toml --example server_probe --example diagnostic_cli_probe
- name: Test native adapter with real SQLite Server
working-directory: .
run: uv run --no-sync python desktop/tests/real_server.py
- name: Test native diagnostics with isolated real CLI
working-directory: .
run: uv run --no-sync python desktop/tests/real_cli.py
- name: Build unsigned internal Windows installer
run: pnpm desktop:build
- name: Prepare matching WebView2 driver
run: ./scripts/prepare-webdriver.ps1
- name: Smoke test installed package
timeout-minutes: 8
run: ./scripts/windows-smoke.ps1
- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
if: always()
with:
name: desktop-windows-internal-unsigned
include-hidden-files: true
path: |
desktop/src-tauri/target/release/bundle/nsis/*-setup.exe
desktop/.artifacts/windows-smoke.json
desktop/.artifacts/real-server.json
desktop/.artifacts/real-cli.json
desktop/.artifacts/installed-ui.json
desktop/.artifacts/installed-ui.png
desktop/.artifacts/installed-ui-driver.log
desktop/.artifacts/installed-ui-app.log
desktop/.artifacts/installed-ui-processes.json
desktop/.artifacts/installed-ui-window.png
if-no-files-found: error

installed-package:
if: ${{ github.event_name == 'workflow_dispatch' && inputs.installer_run != '' }}
runs-on: windows-2025
timeout-minutes: 15
permissions:
contents: read
actions: read
defaults:
run:
shell: pwsh
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
with:
persist-credentials: false
fetch-depth: 0
- name: Verify Server version baseline tag
run: |
git fetch --no-tags https://github.com/oceanbase/powercontext.git refs/tags/powercontext-v1.0.0:refs/tags/powercontext-v1.0.0
if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE }
if ((git rev-parse refs/tags/powercontext-v1.0.0) -ne 'ec97efba5f26fc972e9d8bf5027d8233acab3ca1') { throw 'Unexpected Server version baseline tag' }
- uses: astral-sh/setup-uv@ae62891fec2bb8e7d6c99fc78c9fec3a63790f8d # v10.0.0
with:
version: "0.10.12"
- name: Prepare isolated Server fixture
run: |
uv sync --locked --python 3.12
if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE }
uv build --wheel --out-dir desktop/.artifacts/server-wheel
- name: Retrieve and verify exact installer
env:
GH_TOKEN: ${{ github.token }}
INSTALLER_RUN: ${{ inputs.installer_run }}
run: |
if ($env:INSTALLER_RUN -notmatch '^\d+$') { throw 'Expected numeric workflow run ID.' }
$run = gh api "repos/$env:GITHUB_REPOSITORY/actions/runs/$env:INSTALLER_RUN" | ConvertFrom-Json
if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE }
if ($run.path -ne '.github/workflows/desktop.yml' -or $run.head_branch -ne 'codex/desktop-preview') { throw 'Expected Desktop preview workflow artifact.' }
gh run download $env:INSTALLER_RUN --repo $env:GITHUB_REPOSITORY --name desktop-windows-internal-unsigned --dir desktop/.artifacts/source-installer
if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE }
$packages = @(Get-ChildItem desktop/.artifacts/source-installer -Recurse -Filter '*-setup.exe')
$reports = @(Get-ChildItem desktop/.artifacts/source-installer -Recurse -Filter windows-smoke.json)
if ($packages.Count -ne 1 -or $reports.Count -ne 1) { throw 'Expected exactly one package and package report.' }
$report = Get-Content -LiteralPath $reports[0].FullName -Raw | ConvertFrom-Json
if ($report.commit -ne $run.head_sha -or (Get-FileHash -LiteralPath $packages[0].FullName).Hash -ne $report.installerSha256 -or $packages[0].Length -ne $report.installerBytes) { throw 'Installer identity mismatch.' }
$bundle = 'desktop/src-tauri/target/release/bundle/nsis'
New-Item -ItemType Directory -Path $bundle -Force | Out-Null
Copy-Item -LiteralPath $packages[0].FullName -Destination $bundle
"DESKTOP_INSTALLER_COMMIT=$($run.head_sha)" >> $env:GITHUB_ENV
- name: Prepare matching WebView2 driver
run: ./desktop/scripts/prepare-webdriver.ps1
- name: Exercise existing installed package
timeout-minutes: 8
run: ./desktop/scripts/windows-smoke.ps1
- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
if: always()
with:
name: desktop-installed-diagnostics
include-hidden-files: true
path: |
desktop/.artifacts/windows-smoke.json
desktop/.artifacts/installed-ui*
if-no-files-found: warn
17 changes: 17 additions & 0 deletions desktop/.gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
# Copyright (c) 2026 OceanBase.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

* text=auto eol=lf
*.png binary
*.ico binary
6 changes: 6 additions & 0 deletions desktop/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
node_modules/
dist/
src-tauri/target/
src-tauri/gen/
src-tauri/permissions/autogenerated/
.artifacts/
17 changes: 17 additions & 0 deletions desktop/.mise.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
# Copyright (c) 2026 OceanBase.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

[tools]
node = "24.14.1"
pnpm = "11.13.1"
Loading
Loading