refactor: repo folder structure (#1038)

* refactor(repo): move OpenWork apps into apps and ee layout

Rebase the monorepo layout migration onto the latest dev changes so the moved app, desktop, share, and cloud surfaces keep working from their new paths. Carry the latest deeplink, token persistence, build, Vercel, and docs updates forward to avoid stale references and broken deploy tooling.

* chore(repo): drop generated desktop artifacts

Ignore the moved Tauri target and sidecar paths so local cargo checks do not pollute the branch. Remove the accidentally committed outputs from the repo while keeping the layout migration intact.

* fix(release): drop built server cli artifact

Stop tracking the locally built apps/server/cli binary so generated server outputs do not leak into commits. Also update the release workflow to check the published scoped package name for @openwork/server before deciding whether npm publish is needed.

* fix(workspace): add stable CLI bin wrappers

Point the server and router package bins at committed wrapper scripts so workspace installs can create shims before dist outputs exist. Keep the wrappers compatible with built binaries and source checkouts to avoid Vercel install warnings without changing runtime behavior.
This commit is contained in:
Omar McAdam
2026-03-19 11:41:38 -07:00
committed by GitHub
parent 3738ae47a1
commit 2b91b4d777
638 changed files with 662 additions and 475 deletions

View File

@@ -65,8 +65,8 @@ jobs:
path: |
~/.cargo/registry
~/.cargo/git
packages/desktop/src-tauri/target
key: macos-cargo-${{ hashFiles('packages/desktop/src-tauri/Cargo.lock') }}
apps/desktop/src-tauri/target
key: macos-cargo-${{ hashFiles('apps/desktop/src-tauri/Cargo.lock') }}
restore-keys: |
macos-cargo-
@@ -75,7 +75,7 @@ jobs:
- name: Create CI Tauri config (no updater artifacts)
run: |
node -e "const fs=require('fs'); const configPath='packages/desktop/src-tauri/tauri.conf.json'; const ciPath='packages/desktop/src-tauri/tauri.conf.alpha.json'; const config=JSON.parse(fs.readFileSync(configPath,'utf8')); config.bundle={...config.bundle, createUpdaterArtifacts:false}; fs.writeFileSync(ciPath, JSON.stringify(config, null, 2));"
node -e "const fs=require('fs'); const configPath='apps/desktop/src-tauri/tauri.conf.json'; const ciPath='apps/desktop/src-tauri/tauri.conf.alpha.json'; const config=JSON.parse(fs.readFileSync(configPath,'utf8')); config.bundle={...config.bundle, createUpdaterArtifacts:false}; fs.writeFileSync(ciPath, JSON.stringify(config, null, 2));"
- name: Setup Rust
uses: dtolnay/rust-toolchain@stable
@@ -126,7 +126,7 @@ jobs:
}
async function main() {
const pkg = JSON.parse(fs.readFileSync('./packages/desktop/package.json', 'utf8'));
const pkg = JSON.parse(fs.readFileSync('./apps/desktop/package.json', 'utf8'));
const configuredRaw = (process.env.OPENCODE_VERSION || pkg.opencodeVersion || '').toString().trim();
if (configuredRaw && configuredRaw.toLowerCase() !== 'latest') {
const resolved = (configuredRaw.startsWith('v') ? configuredRaw.slice(1) : configuredRaw).trim();
@@ -172,20 +172,20 @@ jobs:
exit 1
fi
mkdir -p packages/desktop/src-tauri/sidecars
cp "$extract_dir/opencode" "packages/desktop/src-tauri/sidecars/opencode-aarch64-apple-darwin"
chmod 755 "packages/desktop/src-tauri/sidecars/opencode-aarch64-apple-darwin"
mkdir -p apps/desktop/src-tauri/sidecars
cp "$extract_dir/opencode" "apps/desktop/src-tauri/sidecars/opencode-aarch64-apple-darwin"
chmod 755 "apps/desktop/src-tauri/sidecars/opencode-aarch64-apple-darwin"
- name: Build alpha desktop app
run: pnpm --filter @different-ai/openwork exec tauri build --config src-tauri/tauri.conf.alpha.json --target aarch64-apple-darwin --bundles dmg,app
run: pnpm --filter @openwork/desktop exec tauri build --config src-tauri/tauri.conf.alpha.json --target aarch64-apple-darwin --bundles dmg,app
- name: Upload alpha artifact bundle
uses: actions/upload-artifact@v4
with:
name: openwork-alpha-macos-aarch64-${{ github.sha }}
path: |
packages/desktop/src-tauri/target/aarch64-apple-darwin/release/bundle/dmg/*.dmg
packages/desktop/src-tauri/target/aarch64-apple-darwin/release/bundle/macos/*.app.tar.gz
packages/desktop/src-tauri/target/aarch64-apple-darwin/release/bundle/macos/*.app.tar.gz.sig
apps/desktop/src-tauri/target/aarch64-apple-darwin/release/bundle/dmg/*.dmg
apps/desktop/src-tauri/target/aarch64-apple-darwin/release/bundle/macos/*.app.tar.gz
apps/desktop/src-tauri/target/aarch64-apple-darwin/release/bundle/macos/*.app.tar.gz.sig
if-no-files-found: error
retention-days: 14

View File

@@ -64,7 +64,7 @@ jobs:
- name: Create CI Tauri config (no updater artifacts)
run: |
node -e "const fs=require('fs'); const configPath='packages/desktop/src-tauri/tauri.conf.json'; const ciPath='packages/desktop/src-tauri/tauri.conf.ci.json'; const config=JSON.parse(fs.readFileSync(configPath,'utf8')); config.bundle={...config.bundle, createUpdaterArtifacts:false}; fs.writeFileSync(ciPath, JSON.stringify(config, null, 2));"
node -e "const fs=require('fs'); const configPath='apps/desktop/src-tauri/tauri.conf.json'; const ciPath='apps/desktop/src-tauri/tauri.conf.ci.json'; const config=JSON.parse(fs.readFileSync(configPath,'utf8')); config.bundle={...config.bundle, createUpdaterArtifacts:false}; fs.writeFileSync(ciPath, JSON.stringify(config, null, 2));"
- name: Download OpenCode sidecar
shell: bash
@@ -79,7 +79,7 @@ jobs:
version="${OPENCODE_VERSION:-}"
if [ -z "$version" ]; then
version="$(node -p "require('./packages/desktop/package.json').opencodeVersion || ''" 2>/dev/null || true)"
version="$(node -p "require('./apps/desktop/package.json').opencodeVersion || ''" 2>/dev/null || true)"
fi
version="$(echo "$version" | tr -d '\r\n' | sed 's/^v//')"
@@ -133,15 +133,15 @@ jobs:
fi
target_name="opencode-x86_64-unknown-linux-gnu"
mkdir -p packages/desktop/src-tauri/sidecars
cp "$bin_path" "packages/desktop/src-tauri/sidecars/${target_name}"
chmod 755 "packages/desktop/src-tauri/sidecars/${target_name}"
mkdir -p apps/desktop/src-tauri/sidecars
cp "$bin_path" "apps/desktop/src-tauri/sidecars/${target_name}"
chmod 755 "apps/desktop/src-tauri/sidecars/${target_name}"
- name: Prepare desktop sidecars
run: pnpm -C packages/desktop prepare:sidecar
run: pnpm -C apps/desktop prepare:sidecar
- name: Run Rust tests (engine + sidecar resolution)
run: cargo test --manifest-path packages/desktop/src-tauri/Cargo.toml --locked
run: cargo test --manifest-path apps/desktop/src-tauri/Cargo.toml --locked
- name: Build desktop app
run: pnpm --filter @different-ai/openwork exec tauri build --config src-tauri/tauri.conf.ci.json --target x86_64-unknown-linux-gnu --bundles deb
run: pnpm --filter @openwork/desktop exec tauri build --config src-tauri/tauri.conf.ci.json --target x86_64-unknown-linux-gnu --bundles deb

View File

@@ -47,7 +47,7 @@ jobs:
version="${OPENCODE_VERSION:-}"
if [ -z "$version" ]; then
version="$(node -p "require('./packages/desktop/package.json').opencodeVersion || ''" 2>/dev/null || true)"
version="$(node -p "require('./apps/desktop/package.json').opencodeVersion || ''" 2>/dev/null || true)"
fi
version="$(echo "$version" | tr -d '\r\n' | sed 's/^v//')"
@@ -140,4 +140,4 @@ jobs:
run: pnpm install --frozen-lockfile
- name: Run e2e tests
run: pnpm --filter @different-ai/openwork-ui test:e2e
run: pnpm --filter @openwork/app test:e2e

View File

@@ -34,7 +34,7 @@ jobs:
run: pnpm install --frozen-lockfile
- name: Build web
run: pnpm --filter @different-ai/openwork-web build
run: pnpm --filter @openwork-ee/den-web build
build-den:
name: Build Den service
@@ -58,7 +58,7 @@ jobs:
run: pnpm install --frozen-lockfile
- name: Build den service
run: pnpm --filter @openwork/den build
run: pnpm --filter @openwork-ee/den-controller build
build-orchestrator-binary:
name: Build openwork orchestrator binary
@@ -94,5 +94,5 @@ jobs:
- name: Validate compiled binary
run: |
./packages/orchestrator/dist/bin/openwork --version
./packages/orchestrator/dist/bin/openwork --help >/dev/null
./apps/orchestrator/dist/bin/openwork --version
./apps/orchestrator/dist/bin/openwork --help >/dev/null

View File

@@ -216,7 +216,7 @@ jobs:
}
async function main() {
const pkg = JSON.parse(fs.readFileSync('./packages/desktop/package.json', 'utf8'));
const pkg = JSON.parse(fs.readFileSync('./apps/desktop/package.json', 'utf8'));
const configuredRaw = (process.env.OPENCODE_VERSION || pkg.opencodeVersion || '').toString().trim();
if (configuredRaw && configuredRaw.toLowerCase() !== 'latest') {
const normalized = configuredRaw.startsWith('v') ? configuredRaw.slice(1) : configuredRaw;
@@ -305,9 +305,9 @@ jobs:
target_name="${target_name}.exe"
fi
mkdir -p packages/desktop/src-tauri/sidecars
cp "$bin_path" "packages/desktop/src-tauri/sidecars/${target_name}"
chmod 755 "packages/desktop/src-tauri/sidecars/${target_name}"
mkdir -p apps/desktop/src-tauri/sidecars
cp "$bin_path" "apps/desktop/src-tauri/sidecars/${target_name}"
chmod 755 "apps/desktop/src-tauri/sidecars/${target_name}"
- name: Write notary API key
if: matrix.os_type == 'macos' && env.MACOS_NOTARIZE == 'true'
@@ -348,7 +348,7 @@ jobs:
releaseBody: ${{ env.RELEASE_BODY }}
prerelease: true
releaseDraft: false
projectPath: packages/desktop
projectPath: apps/desktop
tauriScript: pnpm exec tauri -vvv
args: ${{ matrix.args }}
retryAttempts: 3
@@ -374,7 +374,7 @@ jobs:
releaseBody: ${{ env.RELEASE_BODY }}
prerelease: true
releaseDraft: false
projectPath: packages/desktop
projectPath: apps/desktop
tauriScript: pnpm exec tauri -vvv
args: ${{ matrix.args }}
retryAttempts: 3

View File

@@ -324,8 +324,8 @@ jobs:
path: |
~/.cargo/registry
~/.cargo/git
packages/desktop/src-tauri/target
key: ${{ runner.os }}-cargo-${{ hashFiles('packages/desktop/src-tauri/Cargo.lock') }}
apps/desktop/src-tauri/target
key: ${{ runner.os }}-cargo-${{ hashFiles('apps/desktop/src-tauri/Cargo.lock') }}
restore-keys: |
${{ runner.os }}-cargo-
@@ -405,7 +405,7 @@ jobs:
}
async function main() {
const pkg = JSON.parse(fs.readFileSync('./packages/desktop/package.json', 'utf8'));
const pkg = JSON.parse(fs.readFileSync('./apps/desktop/package.json', 'utf8'));
const configuredRaw = (process.env.OPENCODE_VERSION || pkg.opencodeVersion || '').toString().trim();
if (configuredRaw && configuredRaw.toLowerCase() !== 'latest') {
const normalized = configuredRaw.startsWith('v') ? configuredRaw.slice(1) : configuredRaw;
@@ -495,9 +495,9 @@ jobs:
target_name="${target_name}.exe"
fi
mkdir -p packages/desktop/src-tauri/sidecars
cp "$bin_path" "packages/desktop/src-tauri/sidecars/${target_name}"
chmod 755 "packages/desktop/src-tauri/sidecars/${target_name}"
mkdir -p apps/desktop/src-tauri/sidecars
cp "$bin_path" "apps/desktop/src-tauri/sidecars/${target_name}"
chmod 755 "apps/desktop/src-tauri/sidecars/${target_name}"
- name: Write notary API key
if: matrix.os_type == 'macos' && env.MACOS_NOTARIZE == 'true'
@@ -538,7 +538,7 @@ jobs:
releaseBody: ${{ env.RELEASE_BODY }}
releaseDraft: ${{ env.RELEASE_DRAFT == 'true' }}
prerelease: ${{ env.RELEASE_PRERELEASE == 'true' }}
projectPath: packages/desktop
projectPath: apps/desktop
tauriScript: pnpm exec tauri -vvv
args: ${{ matrix.args }}
retryAttempts: 3
@@ -567,7 +567,7 @@ jobs:
releaseBody: ${{ env.RELEASE_BODY }}
releaseDraft: ${{ env.RELEASE_DRAFT == 'true' }}
prerelease: ${{ env.RELEASE_PRERELEASE == 'true' }}
projectPath: packages/desktop
projectPath: apps/desktop
tauriScript: pnpm exec tauri -vvv
args: ${{ matrix.args }}
retryAttempts: 3
@@ -612,7 +612,7 @@ jobs:
if [ ! -f "$manifest_path" ]; then
echo "ERROR: versions.json missing from app bundle: $manifest_path" >&2
echo "Hint: ensure packages/desktop/src-tauri/tauri.conf.json bundles sidecars/versions.json" >&2
echo "Hint: ensure apps/desktop/src-tauri/tauri.conf.json bundles sidecars/versions.json" >&2
exit 1
fi
@@ -701,7 +701,7 @@ jobs:
id: sidecar-versions
shell: bash
run: |
node -e "const fs=require('fs'); const orchestrator=JSON.parse(fs.readFileSync('packages/orchestrator/package.json','utf8')); const server=JSON.parse(fs.readFileSync('packages/server/package.json','utf8')); const opencodeRouter=JSON.parse(fs.readFileSync('packages/opencode-router/package.json','utf8')); console.log('orchestrator=' + orchestrator.version); console.log('server=' + server.version); console.log('opencodeRouter=' + opencodeRouter.version);" >> "$GITHUB_OUTPUT"
node -e "const fs=require('fs'); const orchestrator=JSON.parse(fs.readFileSync('apps/orchestrator/package.json','utf8')); const server=JSON.parse(fs.readFileSync('apps/server/package.json','utf8')); const opencodeRouter=JSON.parse(fs.readFileSync('apps/opencode-router/package.json','utf8')); console.log('orchestrator=' + orchestrator.version); console.log('server=' + server.version); console.log('opencodeRouter=' + opencodeRouter.version);" >> "$GITHUB_OUTPUT"
- name: Resolve SOURCE_DATE_EPOCH
id: source-date
@@ -753,7 +753,7 @@ jobs:
GH_TOKEN: ${{ github.token }}
run: |
tag="openwork-orchestrator-v${{ steps.sidecar-versions.outputs.orchestrator }}"
gh release upload "$tag" packages/orchestrator/dist/sidecars/* --repo "$GITHUB_REPOSITORY" --clobber
gh release upload "$tag" apps/orchestrator/dist/sidecars/* --repo "$GITHUB_REPOSITORY" --clobber
publish-npm:
name: Publish npm packages
@@ -810,7 +810,7 @@ jobs:
id: package-versions
shell: bash
run: |
node -e "const fs=require('fs'); const orchestrator=JSON.parse(fs.readFileSync('packages/orchestrator/package.json','utf8')); const server=JSON.parse(fs.readFileSync('packages/server/package.json','utf8')); const opencodeRouter=JSON.parse(fs.readFileSync('packages/opencode-router/package.json','utf8')); console.log('orchestrator=' + orchestrator.version); console.log('server=' + server.version); console.log('opencodeRouter=' + opencodeRouter.version);" >> "$GITHUB_OUTPUT"
node -e "const fs=require('fs'); const orchestrator=JSON.parse(fs.readFileSync('apps/orchestrator/package.json','utf8')); const server=JSON.parse(fs.readFileSync('apps/server/package.json','utf8')); const opencodeRouter=JSON.parse(fs.readFileSync('apps/opencode-router/package.json','utf8')); console.log('orchestrator=' + orchestrator.version); console.log('server=' + server.version); console.log('opencodeRouter=' + opencodeRouter.version);" >> "$GITHUB_OUTPUT"
- name: Check npm versions
id: npm-versions
@@ -824,7 +824,7 @@ jobs:
# npm view exits non-zero for packages that don't exist yet (404).
# Treat missing packages as "not published" so release can publish them.
orchestrator_current="$(npm view openwork-orchestrator version 2>/dev/null || true)"
server_current="$(npm view openwork-server version 2>/dev/null || true)"
server_current="$(npm view @openwork/server version 2>/dev/null || true)"
opencodeRouter_current="$(npm view opencode-router version 2>/dev/null || true)"
if [ "$orchestrator_current" = "$ORCHESTRATOR_VERSION" ]; then
@@ -876,7 +876,7 @@ jobs:
- name: Publish openwork-server
if: steps.npm-auth.outputs.enabled == 'true' && steps.npm-versions.outputs.publish_server == 'true'
run: pnpm --filter openwork-server publish --access public --no-git-checks
run: pnpm --filter @openwork/server publish --access public --no-git-checks
- name: Publish opencode-router
if: steps.npm-auth.outputs.enabled == 'true' && steps.npm-versions.outputs.publish_opencodeRouter == 'true'
@@ -895,7 +895,7 @@ jobs:
exit 1
fi
pnpm --filter openwork-orchestrator build:bin:all
node packages/orchestrator/scripts/publish-npm.mjs
node apps/orchestrator/scripts/publish-npm.mjs
aur-publish:
name: Publish AUR

9
.gitignore vendored
View File

@@ -1,9 +1,15 @@
node_modules/
packages/*/node_modules/
apps/*/node_modules/
ee/apps/*/node_modules/
ee/packages/*/node_modules/
.next/
out/
dist/
packages/*/dist/
apps/*/dist/
ee/apps/*/dist/
ee/packages/*/dist/
tmp/
# Local git worktrees
@@ -12,6 +18,8 @@ _worktrees/
# Tauri/Rust
packages/desktop/src-tauri/target/
packages/desktop/src-tauri/sidecars/
apps/desktop/src-tauri/target/
apps/desktop/src-tauri/sidecars/
# Env
.env
@@ -20,6 +28,7 @@ packages/desktop/src-tauri/sidecars/
# Bun build artifacts
*.bun-build
apps/server/cli
# pnpm store (created by Docker volume mounts)
.pnpm-store/

View File

@@ -4,7 +4,7 @@
set -e
CARGO_TOML="${1:-packages/desktop/src-tauri/Cargo.toml}"
CARGO_TOML="${1:-apps/desktop/src-tauri/Cargo.toml}"
echo "🔍 Checking Cargo.lock status for: $CARGO_TOML"

View File

@@ -3,7 +3,7 @@
set -e
CARGO_TOML="${1:-packages/desktop/src-tauri/Cargo.toml}"
CARGO_TOML="${1:-apps/desktop/src-tauri/Cargo.toml}"
WORKDIR=$(dirname "$CARGO_TOML")
echo "📦 Updating Cargo.lock in: $WORKDIR"

View File

@@ -9,7 +9,7 @@ if [ -n "$(git status --porcelain)" ]; then
exit 1
fi
version=$(node -p "require('./packages/orchestrator/package.json').version")
version=$(node -p "require('./apps/orchestrator/package.json').version")
echo "Publishing openwork-orchestrator@$version"
pnpm --filter openwork-orchestrator publish --access public

View File

@@ -1,3 +1,11 @@
Copyright (c) 2026-present Different AI, Inc.
Portions of this software are licensed as follows:
* All content that resides under the /ee directory of this repository (Fair Source License) is licensed under the license defined in "ee/LICENSE".
* All third party components incorporated into the OpenWork Software are licensed under the original license provided by the owner of the applicable component.
* Content outside of the above mentioned directories or restrictions above is available under the "MIT" license as defined below.
MIT License
Copyright (c) 2026 Different AI

View File

@@ -41,7 +41,7 @@ OpenWork is designed around the idea that you can easily ship your agentic workf
- **OpenWork Orchestrator (CLI host)**: run OpenCode + OpenWork server without the desktop UI.
- install: `npm install -g openwork-orchestrator`
- run: `openwork start --workspace /path/to/workspace --approval auto`
- docs: [packages/orchestrator/README.md](./packages/orchestrator/README.md)
- docs: [apps/orchestrator/README.md](./apps/orchestrator/README.md)
## Quick start
@@ -110,7 +110,7 @@ pnpm install --frozen-lockfile
which bun
bun --version
pnpm --filter @different-ai/openwork exec tauri --version
pnpm --filter @openwork/desktop exec tauri --version
```
### Install
@@ -119,7 +119,7 @@ pnpm --filter @different-ai/openwork exec tauri --version
pnpm install
```
OpenWork now lives in `packages/app` (UI) and `packages/desktop` (desktop shell).
OpenWork now lives in `apps/app` (UI) and `apps/desktop` (desktop shell).
### Run (Desktop)
@@ -165,7 +165,7 @@ This lets you run agentic workflows, send prompts, and see progress entirely on
The folder picker uses the Tauri dialog plugin.
Capability permissions are defined in:
- `packages/desktop/src-tauri/capabilities/default.json`
- `apps/desktop/src-tauri/capabilities/default.json`
## OpenPackage Notes
@@ -229,7 +229,7 @@ WEBKIT_DISABLE_COMPOSITING_MODE=1 openwork
- Run `pnpm install` once per checkout, then verify your change with `pnpm typecheck` plus `pnpm test:e2e` (or the targeted subset of scripts) before opening a PR.
- Use `.github/pull_request_template.md` when opening PRs and include exact commands, outcomes, manual verification steps, and evidence.
- If CI fails, classify failures in the PR body as either code-related regressions or external/environment/auth blockers.
- Add new PRDs to `packages/app/pr/<name>.md` following the `.opencode/skills/prd-conventions/SKILL.md` conventions described in `AGENTS.md`.
- Add new PRDs to `apps/app/pr/<name>.md` following the `.opencode/skills/prd-conventions/SKILL.md` conventions described in `AGENTS.md`.
Community docs:

View File

@@ -1,5 +1,5 @@
{
"name": "@different-ai/openwork-ui",
"name": "@openwork/app",
"private": true,
"version": "0.11.170",
"type": "module",

View File

Before

Width:  |  Height:  |  Size: 313 KiB

After

Width:  |  Height:  |  Size: 313 KiB

View File

Before

Width:  |  Height:  |  Size: 339 KiB

After

Width:  |  Height:  |  Size: 339 KiB

View File

Before

Width:  |  Height:  |  Size: 301 KiB

After

Width:  |  Height:  |  Size: 301 KiB

View File

Before

Width:  |  Height:  |  Size: 228 KiB

After

Width:  |  Height:  |  Size: 228 KiB

View File

Before

Width:  |  Height:  |  Size: 155 KiB

After

Width:  |  Height:  |  Size: 155 KiB

View File

Before

Width:  |  Height:  |  Size: 267 KiB

After

Width:  |  Height:  |  Size: 267 KiB

View File

Before

Width:  |  Height:  |  Size: 245 KiB

After

Width:  |  Height:  |  Size: 245 KiB

View File

Before

Width:  |  Height:  |  Size: 252 KiB

After

Width:  |  Height:  |  Size: 252 KiB

View File

Before

Width:  |  Height:  |  Size: 257 KiB

After

Width:  |  Height:  |  Size: 257 KiB

View File

Before

Width:  |  Height:  |  Size: 298 KiB

After

Width:  |  Height:  |  Size: 298 KiB

View File

Before

Width:  |  Height:  |  Size: 341 KiB

After

Width:  |  Height:  |  Size: 341 KiB

View File

Before

Width:  |  Height:  |  Size: 218 KiB

After

Width:  |  Height:  |  Size: 218 KiB

View File

Before

Width:  |  Height:  |  Size: 388 KiB

After

Width:  |  Height:  |  Size: 388 KiB

View File

Before

Width:  |  Height:  |  Size: 407 KiB

After

Width:  |  Height:  |  Size: 407 KiB

View File

Before

Width:  |  Height:  |  Size: 218 KiB

After

Width:  |  Height:  |  Size: 218 KiB

View File

Before

Width:  |  Height:  |  Size: 318 KiB

After

Width:  |  Height:  |  Size: 318 KiB

View File

Before

Width:  |  Height:  |  Size: 437 KiB

After

Width:  |  Height:  |  Size: 437 KiB

View File

Before

Width:  |  Height:  |  Size: 168 KiB

After

Width:  |  Height:  |  Size: 168 KiB

View File

Before

Width:  |  Height:  |  Size: 54 KiB

After

Width:  |  Height:  |  Size: 54 KiB

View File

Before

Width:  |  Height:  |  Size: 76 KiB

After

Width:  |  Height:  |  Size: 76 KiB

View File

Before

Width:  |  Height:  |  Size: 44 KiB

After

Width:  |  Height:  |  Size: 44 KiB

View File

Before

Width:  |  Height:  |  Size: 93 KiB

After

Width:  |  Height:  |  Size: 93 KiB

View File

Before

Width:  |  Height:  |  Size: 77 KiB

After

Width:  |  Height:  |  Size: 77 KiB

View File

Before

Width:  |  Height:  |  Size: 70 KiB

After

Width:  |  Height:  |  Size: 70 KiB

View File

Before

Width:  |  Height:  |  Size: 52 KiB

After

Width:  |  Height:  |  Size: 52 KiB

View File

Before

Width:  |  Height:  |  Size: 34 KiB

After

Width:  |  Height:  |  Size: 34 KiB

View File

Before

Width:  |  Height:  |  Size: 80 KiB

After

Width:  |  Height:  |  Size: 80 KiB

View File

Before

Width:  |  Height:  |  Size: 167 KiB

After

Width:  |  Height:  |  Size: 167 KiB

View File

Before

Width:  |  Height:  |  Size: 192 KiB

After

Width:  |  Height:  |  Size: 192 KiB

View File

Before

Width:  |  Height:  |  Size: 70 KiB

After

Width:  |  Height:  |  Size: 70 KiB

View File

Before

Width:  |  Height:  |  Size: 188 KiB

After

Width:  |  Height:  |  Size: 188 KiB

View File

Before

Width:  |  Height:  |  Size: 147 KiB

After

Width:  |  Height:  |  Size: 147 KiB

View File

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 14 KiB

View File

Before

Width:  |  Height:  |  Size: 748 B

After

Width:  |  Height:  |  Size: 748 B

Some files were not shown because too many files have changed in this diff Show More