Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
76 commits
Select commit Hold shift + click to select a range
27b8749
docs: tighten project documentation structure
Wing900 May 31, 2026
cb42f2d
docs: record runtime release asset conventions
Wing900 May 31, 2026
3089db5
docs(runtime): add slimming plan
Wing900 Jun 6, 2026
d47e32b
feat(runtime): persist workspace state and track runtime bridge
Wing900 Jun 6, 2026
d4e5d25
feat(editor): add in-editor code search
Wing900 Jun 6, 2026
5e30610
fix(subscription): persist resolved device id
Wing900 Jun 6, 2026
b872998
fix(editor): refine inline code search bar
Wing900 Jun 7, 2026
7596c0c
refactor(editor): simplify inline search bar
Wing900 Jun 7, 2026
d06dc9b
build(runtime): add staged runtime trim profiles
Wing900 Jun 7, 2026
24ca0ad
build(runtime): switch release archive to 7z
Wing900 Jun 7, 2026
8738bfc
build(runtime): vendor 7zip extractor binaries
Wing900 Jun 7, 2026
e94fd46
chore(prompts): relax optimize prompt fallback
Wing900 Jun 7, 2026
b97f420
chore(prompts): relax repair prompt fallback
Wing900 Jun 7, 2026
a72b8f6
fix(runtime): include libwinpthread for surface fastpath
Wing900 Jun 7, 2026
f0dcaec
fix(runtime): vendor libwinpthread for fastpath
Wing900 Jun 7, 2026
bc4e48e
feat(ai): add auto check-and-repair execution loop
Wing900 Jun 7, 2026
973cdc8
fix: bind note ai tasks to scene context
Wing900 Jun 7, 2026
0cbe308
refactor: move AI code workflow into backend service
Wing900 Jun 8, 2026
2e3813e
订阅激活后购买按钮改为可点击,文字显示为'再次购买'
Wing900 Jun 8, 2026
1b25408
feat: add workspace package export and bump version
Wing900 Jun 8, 2026
b2722aa
feat: add runtime extraction progress and release v0.0.3.0
Wing900 Jun 9, 2026
21f56c2
Remove matplotlib fastpath and target 3.11.0rc2
Wing900 Jun 11, 2026
add78da
Lower runtime archive memory usage
Wing900 Jun 11, 2026
001d884
feat: add screening mode architecture and UI
Wing900 Jun 12, 2026
ab0b3e8
fix: stabilize screening window transitions
Wing900 Jun 12, 2026
5002f1b
chore: remove unused screening helpers
Wing900 Jun 12, 2026
eb97992
feat: finalize screening interaction flow
Wing900 Jun 12, 2026
92c78df
chore: update prompt templates
Wing900 Jun 12, 2026
9ffe7b9
feat: update default scene template
Wing900 Jun 14, 2026
451a53c
chore: refresh ai prompt presets
Wing900 Jun 14, 2026
d22dc25
fix: stabilize scene list drag targets
Wing900 Jun 14, 2026
839a7bb
chore: bump version to 0.0.3.5
Wing900 Jun 15, 2026
cb1bfd2
feat: add screeningzoom helper integration
Wing900 Jun 16, 2026
7bdbd51
fix: enforce content-driven window sizing
Wing900 Jun 16, 2026
246a297
refactor(screening): simplify ScreeningZoom helper runtime integration
Wing900 Jun 16, 2026
9907d95
feat(screeningzoom): adapt ZoomIt helper behavior for screening mode
Wing900 Jun 16, 2026
49c508f
docs(screeningzoom): replace planning notes with developer guide
Wing900 Jun 16, 2026
8e45991
docs(screeningzoom): tighten developer documentation
Wing900 Jun 16, 2026
4a8885b
docs: remove screening planning documents from root
Wing900 Jun 16, 2026
36962f5
docs: polish and deduplicate root-level documentation
Wing900 Jun 16, 2026
89a1468
docs: add ZoomIt acknowledgement to README
Wing900 Jun 16, 2026
445f6cf
docs: restore 开发初衷 section with origin story
Wing900 Jun 16, 2026
bf3e7e2
refactor: smooth persistent scene panel transitions
Wing900 Jun 16, 2026
3675db0
chore: refresh prompt guidance for design cards
Wing900 Jun 16, 2026
c42f252
build: include screening zoom helper in release package
Wing900 Jun 16, 2026
627c6a7
build: exclude screening zoom pdb from release package
Wing900 Jun 16, 2026
9b2b542
chore: replace ZoomIt with zoomit-next, remove old thirdparty/tools/r…
Wing900 Jun 19, 2026
308334f
feat(screeningzoom): replace ZoomIt with zoomit-next, add right-click…
Wing900 Jun 19, 2026
6191ed3
fix(screening): add global mouse hook as reliable fallback for right-…
Wing900 Jun 19, 2026
6db20a8
fix(screening): use dedicated menu window thread to fix TrackPopupMen…
Wing900 Jun 20, 2026
12b76af
Merge branch 'zoomin'
Wing900 Jun 20, 2026
efc07de
chore: remove debug logging residuals and fix GitHub language detection
Wing900 Jun 20, 2026
80fae93
chore: mark wailsjs auto-generated JS as linguist-generated
Wing900 Jun 20, 2026
4510489
fix: package screening zoom executable consistently
Wing900 Jun 22, 2026
41840db
fix: adapt window sizing for small displays
Wing900 Jun 23, 2026
66f7959
feat: add script safety guard and release workflow
Wing900 Jun 25, 2026
e80e85c
chore: prepare 0.0.4.0 release automation
Wing900 Jun 25, 2026
e233c66
fix: fallback runtime download from release zip
Wing900 Jun 25, 2026
ac32f67
fix: include cmath for screening zoom build
Wing900 Jun 25, 2026
e605b79
release: 0.0.4.1
Wing900 Jul 4, 2026
8df501f
style: switch editor font to Cascadia Code
Wing900 Jul 4, 2026
aaaa54c
style: refine settings and notebook chrome
Wing900 Jul 5, 2026
6ba96df
style: refine notebook split interactions
Wing900 Jul 5, 2026
1b645dd
feat: add workspace layout modes
Wing900 Jul 5, 2026
5d21a0d
style: polish notebook editor chrome
Wing900 Jul 5, 2026
717a76d
style: polish markdown prose and design card editor
Wing900 Jul 5, 2026
e5af01c
style: soften markdown blockquote surface
Wing900 Jul 5, 2026
c036d7b
feat: smooth loading progress and bump version to 0.0.4.2
Wing900 Jul 5, 2026
d7da8df
feat: polish loading screen motion
Wing900 Jul 5, 2026
4193c6d
fix: remove loading screen enter transition
Wing900 Jul 5, 2026
c1ad251
chore: bump version to 0.0.4.21
Wing900 Jul 5, 2026
f13ee45
feat: refine search bar and reset update button state
Wing900 Jul 6, 2026
459b14c
feat: polish sidebar and menu interactions
Wing900 Jul 6, 2026
7c2e21d
feat(sidebar): redesign footer tool icons with rounded SVG + soften r…
Wing900 Jul 9, 2026
e9e7435
feat(note): redesign context-menu icons with clear semantics
Wing900 Jul 9, 2026
a1d01c7
feat(updater): 重写更新安装逻辑 + 修复 BOM 解析
Wing900 Jul 11, 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
6 changes: 6 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
thirdparty/screeningzoom/**/*.cpp linguist-vendored=false
thirdparty/screeningzoom/**/*.h linguist-vendored=false
thirdparty/screeningzoom/**/*.hpp linguist-vendored=false

# Wails auto-generated bindings
frontend/wailsjs/**/*.js linguist-generated=true
182 changes: 182 additions & 0 deletions .github/workflows/build-release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,182 @@
name: Build Release

on:
push:
branches:
- master
workflow_dispatch:

permissions:
contents: write

jobs:
build-windows:
runs-on: windows-latest

steps:
- name: Checkout
uses: actions/checkout@v4

- name: Setup Go
uses: actions/setup-go@v5
with:
go-version-file: go.mod

- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 20
cache: npm
cache-dependency-path: frontend/package-lock.json

- name: Install frontend dependencies
working-directory: frontend
run: npm ci

- name: Install Wails CLI
shell: pwsh
run: |
go install github.com/wailsapp/wails/v2/cmd/wails@v2.10.2
"$(go env GOPATH)\bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append

- name: Read version
id: version
shell: pwsh
run: |
$version = (Get-Content version.json -Raw | ConvertFrom-Json).appVersion
if ([string]::IsNullOrWhiteSpace($version)) {
throw "version.json appVersion is empty"
}
"app_version=$($version.Trim())" | Out-File -FilePath $env:GITHUB_OUTPUT -Encoding utf8 -Append

- name: Download runtime archive
shell: pwsh
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
$appVersion = "${{ steps.version.outputs.app_version }}"
$repo = "${{ github.repository }}"
$runtimeDir = Join-Path $PWD "resources/runtime"
$runtimeArchive = Join-Path $runtimeDir "runtime.7z"
New-Item -ItemType Directory -Path $runtimeDir -Force | Out-Null
$downloaded = $false

$candidates = @(
"https://github.com/$repo/releases/download/v$appVersion/runtime.7z"
)

$apiHeaders = @{
Authorization = "Bearer $env:GITHUB_TOKEN"
"User-Agent" = "plotkitycat-actions"
}

try {
$latestRelease = Invoke-RestMethod -Uri "https://api.github.com/repos/$repo/releases/latest" -Headers $apiHeaders
$latestRuntime = $latestRelease.assets | Where-Object { $_.name -eq "runtime.7z" } | Select-Object -First 1
if ($null -ne $latestRuntime -and -not [string]::IsNullOrWhiteSpace($latestRuntime.browser_download_url)) {
$candidates += $latestRuntime.browser_download_url
}

$latestZip = $latestRelease.assets | Where-Object { $_.name -like "PlotKityCat-v*.zip" } | Select-Object -First 1
if ($null -ne $latestZip -and -not [string]::IsNullOrWhiteSpace($latestZip.browser_download_url)) {
$zipPath = Join-Path $env:RUNNER_TEMP "latest-release.zip"
$extractDir = Join-Path $env:RUNNER_TEMP "latest-release"
Write-Host "Downloading fallback release zip from $($latestZip.browser_download_url)"
Invoke-WebRequest -Uri $latestZip.browser_download_url -OutFile $zipPath
if (Test-Path -LiteralPath $extractDir) {
Remove-Item -LiteralPath $extractDir -Recurse -Force
}
Expand-Archive -LiteralPath $zipPath -DestinationPath $extractDir -Force
$embeddedRuntime = Get-ChildItem -Path $extractDir -Recurse -Filter runtime.7z | Select-Object -First 1
if ($null -ne $embeddedRuntime) {
Copy-Item -LiteralPath $embeddedRuntime.FullName -Destination $runtimeArchive -Force
$downloaded = $true
}
}
} catch {
Write-Host "Latest release lookup failed: $($_.Exception.Message)"
}

if (-not $downloaded) {
foreach ($url in $candidates | Select-Object -Unique) {
try {
Write-Host "Downloading runtime from $url"
Invoke-WebRequest -Uri $url -OutFile $runtimeArchive
$downloaded = $true
break
} catch {
Write-Host "Runtime download failed from $url : $($_.Exception.Message)"
}
}
}

if (-not $downloaded) {
throw "Unable to download runtime.7z from release assets."
}

- name: Bootstrap vcpkg
shell: pwsh
run: |
$vcpkgRoot = Join-Path $env:RUNNER_TEMP "vcpkg"
git clone https://github.com/microsoft/vcpkg.git $vcpkgRoot
& (Join-Path $vcpkgRoot "bootstrap-vcpkg.bat") -disableMetrics
$vcpkgExe = Join-Path $vcpkgRoot "vcpkg.exe"
& $vcpkgExe install nlohmann-json:x64-windows-static
"VCPKG_ROOT=$vcpkgRoot" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append

- name: Build screening zoom helper
shell: pwsh
run: |
$toolchain = Join-Path $env:VCPKG_ROOT "scripts/buildsystems/vcpkg.cmake"
cmake -S thirdparty/screeningzoom `
-B thirdparty/screeningzoom/build `
-DCMAKE_BUILD_TYPE=Release `
-DCMAKE_TOOLCHAIN_FILE="$toolchain" `
-DVCPKG_TARGET_TRIPLET=x64-windows-static
cmake --build thirdparty/screeningzoom/build --config Release

- name: Build versioned app
shell: pwsh
run: .\tools\build-versioned-app.ps1 -Version "${{ steps.version.outputs.app_version }}"

- name: Prepare update artifacts
shell: pwsh
run: .\tools\prepare-update-release.ps1 -Version "${{ steps.version.outputs.app_version }}"

- name: Package full release
shell: pwsh
run: .\tools\package-release.ps1 -Version "${{ steps.version.outputs.app_version }}"

- name: Upload app binary
uses: actions/upload-artifact@v4
with:
name: PlotKityCat-build-${{ steps.version.outputs.app_version }}
path: build/bin/PlotKityCat.exe
if-no-files-found: error

- name: Upload update artifacts
uses: actions/upload-artifact@v4
with:
name: PlotKityCat-update-${{ steps.version.outputs.app_version }}
path: build/update/${{ steps.version.outputs.app_version }}
if-no-files-found: error

- name: Upload full release package
uses: actions/upload-artifact@v4
with:
name: PlotKityCat-release-${{ steps.version.outputs.app_version }}
path: build/release/PlotKityCat-v${{ steps.version.outputs.app_version }}.zip
if-no-files-found: error

- name: Publish GitHub release
uses: softprops/action-gh-release@v2
with:
tag_name: v${{ steps.version.outputs.app_version }}
name: v${{ steps.version.outputs.app_version }}
generate_release_notes: true
fail_on_unmatched_files: true
files: |
build/release/PlotKityCat-v${{ steps.version.outputs.app_version }}.zip
build/update/${{ steps.version.outputs.app_version }}/PlotKityCat-${{ steps.version.outputs.app_version }}-windows-amd64.exe
build/update/${{ steps.version.outputs.app_version }}/manifest.json
resources/runtime/runtime.7z
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ build/update/
*.zip
!/resources/runtime/
!/resources/runtime/.gitkeep
/resources/runtime/runtime.7z
.runtime-staging/
.runtime-staging.7z
.tools_py/
Expand All @@ -28,6 +29,7 @@ Thumbs.db
/.runtime-pack/
__pycache__/
*.py[cod]
thirdparty/screeningzoom/build/

# Legacy root docs
Tec.md
Expand Down
50 changes: 25 additions & 25 deletions DEVELOPMENT.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
# PlotKityCat Development

本地开发启动、runtime 与构建发布、Git 仓库约定。

## 环境

- Windows
- Go 1.21+
- Go 1.22+
- Node.js 18+
- Wails v2

Expand All @@ -23,61 +25,53 @@ wails dev

## 版本

应用版本唯一来源:

- `version.json`

相关脚本都会默认读取这里的 `appVersion`。
应用版本唯一来源为 `version.json` 中的 `appVersion`。构建与发布脚本默认都读取这里的值。

## Runtime

项目运行依赖便携 Python runtime:
项目运行依赖便携 Python runtime。约定如下

- runtime 占位目录:`resources/runtime/`
- 发布输入:本地放置的 `resources/runtime/runtime.zip`
- 占位目录:`resources/runtime/`
- 本地发布输入:`resources/runtime/runtime.7z`
- 本地展开目录:`runtime/`
- 临时展开目录:`runtime.tmp/`
- 元数据文件:`runtime.version.json`

约定:

- `resources/runtime/runtime.zip` 默认不提交到 Git
- 该文件应通过 GitHub Release asset 或其他制品存储分发
- 仓库仅跟踪 runtime 脚本、元数据和第三方补丁源码
- runtime 通过 GitHub Release asset 分发
- 仓库仅跟踪 runtime 脚本和元数据

准备 runtime 压缩包:

```powershell
.\tools\prepare-runtime.ps1 -SourceRuntimeDir <你的 runtime 目录>
```

当前默认应保留的核心库
默认核心库

- Python 标准库
- numpy
- matplotlib
- scipy
- PyQt5

`runtime.version.json` 应同步填写实际 Python 与核心库版本,不要长期保留 `pending`。
`runtime.version.json` 必须填写真实版本,`pending` 仅为占位值

从零重建 runtime 的完整说明见 [RUNTIME_BUILD.md](D:/projects/plotkitycat/RUNTIME_BUILD.md)。

## 打包入口
## 构建与打包

构建 exe:

```powershell
.\tools\build-versioned-app.ps1
```

生成发布 zip
生成完整发布包

```powershell
.\tools\package-release.ps1
```

生成自动更新发布物
生成在线更新产物

```powershell
.\tools\prepare-update-release.ps1
Expand All @@ -86,15 +80,17 @@ wails dev
如果要覆盖默认版本:

```powershell
.\tools\build-versioned-app.ps1 -Version 0.0.2.1
.\tools\package-release.ps1 -Version 0.0.2.1
.\tools\prepare-update-release.ps1 -Version 0.0.2.1
.\tools\build-versioned-app.ps1 -Version 0.0.3.5
.\tools\package-release.ps1 -Version 0.0.3.5
.\tools\prepare-update-release.ps1 -Version 0.0.3.5
```

## 发布前检查

- 确认 `version.json` 版本正确
- 确认 `resources/runtime/runtime.zip` 存在
- 确认 `resources/runtime/runtime.7z` 存在
- 确认 `zoomit.exe` 已经准备好,优先放在 `resources/screeningzoom/zoomit.exe`
- 如果还没放到 `resources/screeningzoom/zoomit.exe`,至少确认存在开发构建产物 `thirdparty/screeningzoom/build/Release/zoomit.exe`
- 确认 `runtime.version.json` 已填写真实版本
- 确认 `Scripts/` 中示例内容就是准备随包分发的内容
- 确认 `config/` 没有本机账号、缓存、更新状态等脏数据
Expand All @@ -107,10 +103,12 @@ wails dev
- `frontend/`
- `tools/`
- `build/windows/`
- `resources/` 下需要随项目维护的静态资源
- `resources/` 下需要随项目维护的静态资源与占位文件
- `resources/runtime/.gitkeep`
- `resources/screeningzoom/.gitkeep`
- `README.md`
- `DEVELOPMENT.md`
- `UPDATE_RELEASE.md`
- `RUNTIME_BUILD.md`
- `version.json`
- `runtime.version.json`
Expand All @@ -125,3 +123,5 @@ wails dev
- `build/release/`
- `build/update/`
- `packaging/`

发布服务器更新步骤见 [UPDATE_RELEASE.md](D:/projects/plotkitycat/UPDATE_RELEASE.md)。
Loading
Loading