Skip to content

Commit bee0c13

Browse files
authored
Merge pull request #34 from arul28/dev
CTO UX, sync hardening, iOS companion, CI signing, simplification pass
2 parents 2d585df + de1315a commit bee0c13

185 files changed

Lines changed: 16523 additions & 14402 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.ade/cto/identity.yaml

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,6 @@
11
name: CTO
2-
version: 2
3-
persona: >-
4-
You are the CTO for this project inside ADE.
5-
6-
You are the persistent technical lead who owns architecture, execution
7-
quality, engineering continuity, and team direction.
8-
9-
Use ADE's tools and project context to help the team move forward with clear,
10-
concrete decisions.
2+
version: 3
3+
persona: Persistent project CTO with strategic personality.
114
personality: strategic
125
modelPreferences:
136
provider: claude
@@ -30,5 +23,6 @@ openclawContextPolicy:
3023
- system_prompt
3124
onboardingState:
3225
completedSteps:
33-
- integrations
34-
updatedAt: 2026-03-16T04:16:18.954Z
26+
- identity
27+
completedAt: 2026-03-17T20:35:20.336Z
28+
updatedAt: 2026-03-17T20:35:20.336Z

.github/dependabot.yml

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
version: 2
2+
updates:
3+
- package-ecosystem: "npm"
4+
directory: "/apps/desktop"
5+
schedule:
6+
interval: "weekly"
7+
open-pull-requests-limit: 10
8+
- package-ecosystem: "npm"
9+
directory: "/apps/mcp-server"
10+
schedule:
11+
interval: "weekly"
12+
open-pull-requests-limit: 5
13+
- package-ecosystem: "github-actions"
14+
directory: "/"
15+
schedule:
16+
interval: "weekly"
17+
open-pull-requests-limit: 5

.github/workflows/ci.yml

Lines changed: 160 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -10,39 +10,177 @@ permissions:
1010
contents: read
1111

1212
jobs:
13-
check:
13+
# ── Stage 1: Install & cache ──────────────────────────────────────────
14+
install:
1415
runs-on: ubuntu-latest
1516
steps:
1617
- uses: actions/checkout@v4
1718
- uses: actions/setup-node@v4
1819
with:
1920
node-version: 22
20-
cache: npm
21-
cache-dependency-path: |
22-
apps/desktop/package-lock.json
23-
apps/mcp-server/package-lock.json
24-
apps/web/package-lock.json
2521

26-
- name: Install MCP server dependencies
27-
run: cd apps/mcp-server && npm ci
22+
- name: Restore node_modules cache
23+
id: cache
24+
uses: actions/cache@v4
25+
with:
26+
path: |
27+
apps/desktop/node_modules
28+
apps/mcp-server/node_modules
29+
apps/web/node_modules
30+
key: nm-${{ hashFiles('apps/desktop/package-lock.json','apps/mcp-server/package-lock.json','apps/web/package-lock.json') }}
2831

29-
- name: Install desktop dependencies
30-
run: cd apps/desktop && npm ci
32+
- name: Install all dependencies (parallel)
33+
if: steps.cache.outputs.cache-hit != 'true'
34+
run: |
35+
cd apps/desktop && npm ci &
36+
cd apps/mcp-server && npm ci &
37+
cd apps/web && npm ci &
38+
wait
3139
32-
- name: Install web dependencies
33-
run: cd apps/web && npm ci
40+
# ── Stage 2: Parallel checks ──────────────────────────────────────────
41+
typecheck-desktop:
42+
needs: install
43+
runs-on: ubuntu-latest
44+
steps:
45+
- uses: actions/checkout@v4
46+
- uses: actions/setup-node@v4
47+
with:
48+
node-version: 22
49+
- uses: actions/cache/restore@v4
50+
with:
51+
path: |
52+
apps/desktop/node_modules
53+
apps/mcp-server/node_modules
54+
apps/web/node_modules
55+
key: nm-${{ hashFiles('apps/desktop/package-lock.json','apps/mcp-server/package-lock.json','apps/web/package-lock.json') }}
56+
- run: cd apps/desktop && npm run typecheck
3457

35-
- name: Typecheck
36-
run: cd apps/desktop && npm run typecheck
58+
typecheck-mcp:
59+
needs: install
60+
runs-on: ubuntu-latest
61+
steps:
62+
- uses: actions/checkout@v4
63+
- uses: actions/setup-node@v4
64+
with:
65+
node-version: 22
66+
- uses: actions/cache/restore@v4
67+
with:
68+
path: |
69+
apps/desktop/node_modules
70+
apps/mcp-server/node_modules
71+
apps/web/node_modules
72+
key: nm-${{ hashFiles('apps/desktop/package-lock.json','apps/mcp-server/package-lock.json','apps/web/package-lock.json') }}
73+
- run: cd apps/mcp-server && npm run typecheck
74+
75+
lint-desktop:
76+
needs: install
77+
runs-on: ubuntu-latest
78+
steps:
79+
- uses: actions/checkout@v4
80+
- uses: actions/setup-node@v4
81+
with:
82+
node-version: 22
83+
- uses: actions/cache/restore@v4
84+
with:
85+
path: |
86+
apps/desktop/node_modules
87+
apps/mcp-server/node_modules
88+
apps/web/node_modules
89+
key: nm-${{ hashFiles('apps/desktop/package-lock.json','apps/mcp-server/package-lock.json','apps/web/package-lock.json') }}
90+
- run: cd apps/desktop && npm run lint
91+
92+
test-desktop:
93+
needs: install
94+
runs-on: ubuntu-latest
95+
strategy:
96+
fail-fast: false
97+
matrix:
98+
shard: [1, 2, 3]
99+
steps:
100+
- uses: actions/checkout@v4
101+
- uses: actions/setup-node@v4
102+
with:
103+
node-version: 22
104+
- uses: actions/cache/restore@v4
105+
with:
106+
path: |
107+
apps/desktop/node_modules
108+
apps/mcp-server/node_modules
109+
apps/web/node_modules
110+
key: nm-${{ hashFiles('apps/desktop/package-lock.json','apps/mcp-server/package-lock.json','apps/web/package-lock.json') }}
111+
- run: cd apps/desktop && npx vitest run --shard=${{ matrix.shard }}/3
37112

38-
- name: Test desktop
39-
run: cd apps/desktop && npm test
113+
test-mcp:
114+
needs: install
115+
runs-on: ubuntu-latest
116+
steps:
117+
- uses: actions/checkout@v4
118+
- uses: actions/setup-node@v4
119+
with:
120+
node-version: 22
121+
- uses: actions/cache/restore@v4
122+
with:
123+
path: |
124+
apps/desktop/node_modules
125+
apps/mcp-server/node_modules
126+
apps/web/node_modules
127+
key: nm-${{ hashFiles('apps/desktop/package-lock.json','apps/mcp-server/package-lock.json','apps/web/package-lock.json') }}
128+
- run: cd apps/mcp-server && npm test
40129

41-
- name: Test MCP server
42-
run: cd apps/mcp-server && npm test
130+
build:
131+
needs: install
132+
runs-on: ubuntu-latest
133+
steps:
134+
- uses: actions/checkout@v4
135+
- uses: actions/setup-node@v4
136+
with:
137+
node-version: 22
138+
- uses: actions/cache/restore@v4
139+
with:
140+
path: |
141+
apps/desktop/node_modules
142+
apps/mcp-server/node_modules
143+
apps/web/node_modules
144+
key: nm-${{ hashFiles('apps/desktop/package-lock.json','apps/mcp-server/package-lock.json','apps/web/package-lock.json') }}
145+
- run: cd apps/desktop && npm run build
146+
- run: cd apps/mcp-server && npm run build
147+
- run: cd apps/web && npm run build
43148

44-
- name: Build web
45-
run: cd apps/web && npm run build
149+
validate-docs:
150+
needs: install
151+
runs-on: ubuntu-latest
152+
steps:
153+
- uses: actions/checkout@v4
154+
- uses: actions/setup-node@v4
155+
with:
156+
node-version: 22
157+
- uses: actions/cache/restore@v4
158+
with:
159+
path: |
160+
apps/desktop/node_modules
161+
apps/mcp-server/node_modules
162+
apps/web/node_modules
163+
key: nm-${{ hashFiles('apps/desktop/package-lock.json','apps/mcp-server/package-lock.json','apps/web/package-lock.json') }}
164+
- run: node scripts/validate-docs.mjs
46165

47-
- name: Validate docs
48-
run: node scripts/validate-docs.mjs
166+
# ── Gate: all jobs must pass ──────────────────────────────────────────
167+
ci-pass:
168+
if: always()
169+
needs:
170+
- typecheck-desktop
171+
- typecheck-mcp
172+
- lint-desktop
173+
- test-desktop
174+
- test-mcp
175+
- build
176+
- validate-docs
177+
runs-on: ubuntu-latest
178+
steps:
179+
- name: Check all jobs passed
180+
run: |
181+
if [[ "${{ contains(needs.*.result, 'failure') }}" == "true" ]] ||
182+
[[ "${{ contains(needs.*.result, 'cancelled') }}" == "true" ]]; then
183+
echo "::error::One or more required jobs failed or were cancelled"
184+
exit 1
185+
fi
186+
echo "All CI jobs passed"

.github/workflows/release.yml

Lines changed: 92 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,58 @@ jobs:
2121
git fetch origin main --depth=1
2222
git merge-base --is-ancestor "$GITHUB_SHA" origin/main
2323
24-
release:
24+
build-mac-app:
2525
needs: verify
26+
strategy:
27+
fail-fast: false
28+
matrix:
29+
include:
30+
- arch: arm64
31+
runner: macos-latest
32+
app_dir: mac-arm64
33+
- arch: x64
34+
runner: macos-15-intel
35+
app_dir: mac
36+
runs-on: ${{ matrix.runner }}
37+
steps:
38+
- uses: actions/checkout@v4
39+
with:
40+
fetch-depth: 0
41+
42+
- uses: actions/setup-node@v4
43+
with:
44+
node-version: 22
45+
cache: npm
46+
cache-dependency-path: apps/desktop/package-lock.json
47+
48+
- name: Install desktop dependencies
49+
run: cd apps/desktop && npm ci
50+
51+
- name: Stamp release version
52+
env:
53+
ADE_RELEASE_TAG: ${{ github.ref_name }}
54+
run: cd apps/desktop && npm run version:release
55+
56+
- name: Build unsigned macOS app bundle
57+
run: cd apps/desktop && npm run dist:mac:dir -- --${{ matrix.arch }}
58+
59+
- name: Archive app bundle
60+
run: |
61+
APP_PATH="apps/desktop/release/${{ matrix.app_dir }}/ADE.app"
62+
ARCHIVE_PATH="apps/desktop/release/ADE-${{ matrix.arch }}.app.zip"
63+
test -d "$APP_PATH"
64+
ditto -c -k --sequesterRsrc --keepParent "$APP_PATH" "$ARCHIVE_PATH"
65+
66+
- uses: actions/upload-artifact@v4
67+
with:
68+
name: mac-app-${{ matrix.arch }}
69+
path: apps/desktop/release/ADE-${{ matrix.arch }}.app.zip
70+
if-no-files-found: error
71+
72+
release:
73+
needs:
74+
- verify
75+
- build-mac-app
2676
runs-on: macos-latest
2777
concurrency:
2878
group: release-${{ github.ref_name }}
@@ -36,21 +86,51 @@ jobs:
3686
with:
3787
node-version: 22
3888
cache: npm
39-
cache-dependency-path: |
40-
apps/desktop/package-lock.json
41-
apps/mcp-server/package-lock.json
89+
cache-dependency-path: apps/desktop/package-lock.json
4290

4391
- name: Install desktop dependencies
4492
run: cd apps/desktop && npm ci
4593

46-
- name: Install MCP server dependencies
47-
run: cd apps/mcp-server && npm ci
48-
4994
- name: Stamp release version
5095
env:
5196
ADE_RELEASE_TAG: ${{ github.ref_name }}
5297
run: cd apps/desktop && npm run version:release
5398

99+
- uses: actions/download-artifact@v4
100+
with:
101+
name: mac-app-arm64
102+
path: apps/desktop/release/_ci/downloads/arm64
103+
104+
- uses: actions/download-artifact@v4
105+
with:
106+
name: mac-app-x64
107+
path: apps/desktop/release/_ci/downloads/x64
108+
109+
- name: Expand architecture app bundles
110+
run: |
111+
rm -rf apps/desktop/release/_ci/arm64 apps/desktop/release/_ci/x64
112+
mkdir -p apps/desktop/release/_ci/arm64 apps/desktop/release/_ci/x64
113+
ditto -x -k apps/desktop/release/_ci/downloads/arm64/ADE-arm64.app.zip apps/desktop/release/_ci/arm64
114+
ditto -x -k apps/desktop/release/_ci/downloads/x64/ADE-x64.app.zip apps/desktop/release/_ci/x64
115+
116+
- name: Merge universal app bundle
117+
run: cd apps/desktop && npm run merge:mac:universal
118+
119+
- name: Materialize App Store Connect API key
120+
env:
121+
APPLE_API_KEY_P8: ${{ secrets.APPLE_API_KEY_P8 }}
122+
APPLE_API_KEY_ID: ${{ secrets.APPLE_API_KEY_ID }}
123+
run: |
124+
if [ -z "$APPLE_API_KEY_P8" ] || [ -z "$APPLE_API_KEY_ID" ]; then
125+
echo "::error::Missing APPLE_API_KEY_P8 or APPLE_API_KEY_ID GitHub secret."
126+
exit 1
127+
fi
128+
129+
KEY_PATH="$RUNNER_TEMP/AuthKey_${APPLE_API_KEY_ID}.p8"
130+
printf '%s' "$APPLE_API_KEY_P8" > "$KEY_PATH"
131+
chmod 600 "$KEY_PATH"
132+
echo "APPLE_API_KEY=$KEY_PATH" >> "$GITHUB_ENV"
133+
54134
- name: Create draft GitHub release with generated notes
55135
env:
56136
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
@@ -64,4 +144,8 @@ jobs:
64144
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
65145
ELECTRON_CACHE: ${{ runner.temp }}/electron
66146
ELECTRON_BUILDER_CACHE: ${{ runner.temp }}/electron-builder
67-
run: cd apps/desktop && npm run release:mac
147+
CSC_LINK: ${{ secrets.CSC_LINK }}
148+
CSC_KEY_PASSWORD: ${{ secrets.CSC_KEY_PASSWORD }}
149+
APPLE_API_KEY_ID: ${{ secrets.APPLE_API_KEY_ID }}
150+
APPLE_API_ISSUER: ${{ secrets.APPLE_API_ISSUER }}
151+
run: cd apps/desktop && npm run release:mac:universal

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,3 +51,4 @@ xcuserdata/
5151
.pnpm-store/
5252
/apps/desktop/.ade
5353
/.playwright-mcp
54+
/.codex-derived-data

0 commit comments

Comments
 (0)