Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
200 commits
Select commit Hold shift + click to select a range
1f172a3
feat(components): add permanent sharing reminder dismissal [risk:medi…
lodystage[bot] Aug 10, 2026
2dc05fa
feat(components): render Markdown files by default (#2)
lodystage[bot] Aug 10, 2026
d736f3a
fix(components): move provider sign-in into the provider detail [risk…
lodystage[bot] Aug 10, 2026
aef797b
Fix/close empty right sidebar release base (#4)
Leeeon233 Aug 10, 2026
388d774
fix(shared): repair public defaults CI [risk:medium] (#5)
Leeeon233 Aug 10, 2026
8d81443
Merge branch 'LodyAI:main' into main
Leeeon233 Aug 10, 2026
699f7c7
feat(components): in-app changelog for desktop updates [risk:medium]
Leeeon233 Aug 10, 2026
6f06583
fix(components): select update changelog by resolved i18n language
Leeeon233 Aug 10, 2026
591c66b
feat(electron): consume localized update notes [risk:medium]
Leeeon233 Aug 10, 2026
f42bf97
fix(electron): harden localized update notes [risk:medium]
Leeeon233 Aug 10, 2026
63da230
fix(site-docs): restore release validation
Leeeon233 Aug 10, 2026
bb7f8a9
Merge pull request #6 from loro-dev/agent/fix-quickstart-mdx-closing-tag
Leeeon233 Aug 10, 2026
9ea5588
Merge pull request #7 from loro-dev/feat/electron-update-changelog
Leeeon233 Aug 10, 2026
bf7b734
feat(components): quote the seat cost in the invite dialog [risk:medi…
lodystage[bot] Aug 10, 2026
99939ad
test: prune redundant coverage and speed up components (#9)
Leeeon233 Aug 10, 2026
e5e4cad
fix(components): pin PR comment composer to bottom (#10)
lodystage[bot] Aug 10, 2026
2d633db
feat: integrate official Grok runtime adapter [risk:medium]
Leeeon233 Aug 10, 2026
d50399b
chore: merge origin/main into Grok integration [risk:medium]
Leeeon233 Aug 10, 2026
ab0c9af
fix: restore public source validation [risk:medium] (#11)
Leeeon233 Aug 10, 2026
c2ae305
chore: test
Leeeon233 Aug 10, 2026
57a26e1
chore:
Leeeon233 Aug 10, 2026
59f05e2
chore(deps): upgrade loro-crdt to 1.14.1 [risk:high] (#12)
lodystage[bot] Aug 10, 2026
a9197ab
chore(deps): upgrade loro-crdt to 1.14.1 [risk:high] (#12)
lodystage[bot] Aug 10, 2026
ad5dae5
fix: separate Grok permission and interaction controls [risk:medium]
Leeeon233 Aug 10, 2026
ec13ea4
fix: expose Grok interaction mode selector [risk:medium]
Leeeon233 Aug 10, 2026
1492eec
fix: localize Grok run configuration [risk:medium]
Leeeon233 Aug 10, 2026
8f57d82
fix: repair release baseline checks [risk:high] (#13)
Leeeon233 Aug 10, 2026
c2a303f
fix: grok
Leeeon233 Aug 10, 2026
0f53df8
fix: changelog
Leeeon233 Aug 10, 2026
5f4ab69
Merge remote-tracking branch 'upstream/main'
Leeeon233 Aug 11, 2026
8f4ef10
chore:
Leeeon233 Aug 11, 2026
a41984d
chore: version
Leeeon233 Aug 11, 2026
19d9849
fix: keep Grok interaction labels in English
Leeeon233 Aug 11, 2026
7159709
chore: merge Grok bundle verification fix [risk:medium]
Leeeon233 Aug 11, 2026
97aff88
fix(electron): restore zoom out shortcut (#14)
lodystage[bot] Aug 11, 2026
8db8827
fix(components): expand PR descriptions with panel (#15)
lodystage[bot] Aug 11, 2026
678c00b
feat: integrate Grok usage and context [risk:medium]
Leeeon233 Aug 11, 2026
027ed3e
fix: update Grok context adapter [risk:medium]
Leeeon233 Aug 11, 2026
cd29918
feat: show Grok session rate limits [risk:medium]
Leeeon233 Aug 11, 2026
d568d61
Merge branch 'LodyAI:main' into main
Leeeon233 Aug 11, 2026
97e0b1c
fix(components): align assistant turn rows on one left rail (#17)
lodystage[bot] Aug 11, 2026
6bd885f
fix: expose reliable Grok ACP controls and usage [risk:high]
Leeeon233 Aug 11, 2026
a28eb55
fix: apply Grok ACP modes and permissions [risk:high]
Leeeon233 Aug 11, 2026
c6fde75
fix(local-data-plane): decode socket chunks with a stateful UTF-8 dec…
lodystage[bot] Aug 11, 2026
09fc29d
perf(site-docs): cut the landing's critical path and de-slop its a11y…
lodystage[bot] Aug 11, 2026
229a894
feat: add grok
Leeeon233 Aug 11, 2026
d67ffd0
Merge branch 'main' into feat/acp-extension-grok-lody-runtime
Leeeon233 Aug 11, 2026
9174491
chore:
Leeeon233 Aug 11, 2026
c0514b8
Merge pull request #16 from loro-dev/feat/acp-extension-grok-lody-run…
Leeeon233 Aug 11, 2026
0eda5d8
feat(cli): verify backend sign-in before entering daemon mode (#20)
lodystage[bot] Aug 11, 2026
6897eea
fix(cli): decide macOS session admission from kernel memory pressure …
lodystage[bot] Aug 11, 2026
9fec9dd
fix(cli): make the Linux memory guard reclaim-aware [risk:medium] (#22)
lodystage[bot] Aug 11, 2026
a647d12
fix: unblock OSS release validation [risk:high]
zxch3n Aug 11, 2026
5197481
docs: add 0.78.0 changelog [risk:high] (#24)
zxch3n Aug 11, 2026
cf7c5dd
fix: update composer mention placeholder (#26)
lodystage[bot] Aug 12, 2026
f05b600
fix: restore issue and PR mention loading (#25)
lodystage[bot] Aug 12, 2026
f8ee853
fix: prevent archived sessions from appearing on startup (#27)
lodystage[bot] Aug 12, 2026
850e76c
fix: repair the toast surface for description + action toasts (#30)
lodystage[bot] Aug 12, 2026
2cb9079
fix(shared): serve session image thumbnails from an API route [risk:m…
lodystage[bot] Aug 12, 2026
4f200da
fix(cli): prevent Codex errors from becoming titles [risk:medium] (#32)
zxch3n Aug 12, 2026
9cb7eec
fix(cli): preserve Codex title provider config [risk:medium] (#34)
zxch3n Aug 12, 2026
3f150b4
fix: restore reliable skill mentions (#35)
lodystage[bot] Aug 12, 2026
954c221
fix(electron): allow image export from blob previews (#38)
zxch3n Aug 12, 2026
09389ec
fix: add terminal clipboard actions (#39)
lodystage[bot] Aug 12, 2026
fd65b56
docs: add 0.79.0 changelog [risk:high]
codex Aug 12, 2026
823bb9e
Merge pull request #40 from loro-dev/docs/stable-changelog-0.79.0
codex Aug 12, 2026
8086d48
test: speed up the public test suite [risk:medium] (#41)
lodystage[bot] Aug 13, 2026
ad6214e
fix: keep side panel file tree folders expanded (#43)
zxch3n Aug 13, 2026
185e3db
fix(cli): judge Windows memory pressure on a growable commit limit [r…
lodystage[bot] Aug 13, 2026
4079234
docs: correct stable changelog version to 0.79.2 [risk:high]
zxch3n Aug 13, 2026
10e2cb4
feat: read files directly for preview via file/preview v3 [risk:high]…
zxch3n Aug 13, 2026
ada0e54
fix: bound concurrent ACP session starts [risk:medium] (#48)
zxch3n Aug 13, 2026
857eb16
chore(deps): upgrade streams-crdt to 0.15.1 and loro-repo to 0.20.0 […
zxch3n Aug 13, 2026
3c60587
fix(electron): keep native TLA in renderer builds [risk:low] (#50)
lodystage[bot] Aug 13, 2026
238cb8a
fix(deps): update adapters to hide Windows consoles [risk:medium] (#52)
Leeeon233 Aug 14, 2026
9295285
docs: publish 0.80.0 stable changelog [risk:high] (#53)
Leeeon233 Aug 14, 2026
5125930
fix(components): stabilize virtualized chat follow [risk:medium] (#54)
wibus-wee Aug 14, 2026
f939c60
fix(components): make mobile settings rows readable on narrow screens…
zxch3n Aug 14, 2026
a377bfa
feat: add DeepSeek Harness builtin ACP [risk:medium] (#51)
lodystage[bot] Aug 14, 2026
45ece3d
feat: group and link MCP-opened sessions [risk:medium] (#45)
lodystage[bot] Aug 14, 2026
4893e60
fix: dsh
Leeeon233 Aug 14, 2026
26a8ebb
fix: open workspace files whose on-disk spelling differs from the req…
zxch3n Aug 14, 2026
6edd7d7
fix(electron): restore KDE taskbar icon [risk:medium] (#57)
zxch3n Aug 14, 2026
04beaa5
docs: publish 0.81.0 stable changelog [risk:high] (#58)
Leeeon233 Aug 14, 2026
8039e18
fix: dsh
Leeeon233 Aug 14, 2026
3522296
feat(cli): serve lody MCP over daemon HTTP instead of per-session std…
zxch3n Aug 14, 2026
4ee0425
fix(cli): support shared DSH session roots [risk:medium] (#59)
Leeeon233 Aug 14, 2026
05bc9ad
fix: dsh
Leeeon233 Aug 14, 2026
6edd8c8
fix: dsh
Leeeon233 Aug 14, 2026
ee33205
feat(components): new usage skyline ui with selected range (#60)
wibus-wee Aug 14, 2026
fcd5c50
feat(components): select mention candidates with Tab (#62)
Leeeon233 Aug 15, 2026
71885d7
fix: hide sidebar tree lines when a child session has status (#61)
lodystage[bot] Aug 15, 2026
ea87546
fix(components): match VS Code terminal copy, paste, and selection (#63)
Leeeon233 Aug 15, 2026
d3d2f4b
feat: enable GitHub PR flows for local projects [risk:medium] (#64)
Leeeon233 Aug 15, 2026
27ebda3
fix(components): complete terminal selection return path (#65)
Leeeon233 Aug 15, 2026
6c1b1fa
feat(components): add copy and open actions to diff file titles (#66)
Leeeon233 Aug 15, 2026
46a8650
fix: restore hosted Streams shard topology via runtime injection [ris…
lodystage[bot] Aug 16, 2026
b005e9e
fix: make provider setup negotiation resilient (#33)
lodystage[bot] Aug 16, 2026
b8467cc
perf(site-docs): skip duplicate install generation (#71)
Leeeon233 Aug 16, 2026
122e5fd
feat: fork sessions into new worktrees [risk:high] (#72)
Leeeon233 Aug 16, 2026
14c5638
feat(composer): render mentions as chips and carry them into sent mes…
lodystage[bot] Aug 16, 2026
18a514e
fix(components): include child sessions in @session: mention candidat…
lodystage[bot] Aug 16, 2026
738954a
fix: restore sticky scroll lifecycle (#73)
wibus-wee Aug 16, 2026
4c00cac
fix(components): truncate long fork-origin notice titles inside the c…
lodystage[bot] Aug 16, 2026
8f61c06
fix(components): show working spinner in place of opened-by disclosur…
lodystage[bot] Aug 16, 2026
02d48a3
feat(cli): serve lody MCP from a shared HTTP host instead of a per-se…
zxch3n Aug 16, 2026
3852cac
chore(deps): upgrade flock-wasm to 0.4.3 for O(delta) incremental exp…
zxch3n Aug 16, 2026
26717d2
feat: surface recently used run configs in the desktop run-config men…
lodystage[bot] Aug 16, 2026
513e80c
fix(cli): never adopt a prepared worktree whose directory was dispose…
zxch3n Aug 16, 2026
151729a
perf(components): scope navigation re-renders to affected sidebar gro…
lodystage[bot] Aug 17, 2026
84956e1
feat(mobile): nest MCP-opened sessions under their opener [risk:low] …
lodystage[bot] Aug 17, 2026
21df1c5
feat(components): show gift timeline and post-gift subscribe in Billi…
Leeeon233 Aug 17, 2026
c1a502f
fix(cli): bound session room bootstrap fan-out [risk:medium] (#81)
Leeeon233 Aug 17, 2026
302fc3a
fix(components): stop light-theme form fields reading as disabled (#83)
lodystage[bot] Aug 17, 2026
0ec3656
fix(cli): prevent Electron reconnect crashes [risk:high] (#84)
Leeeon233 Aug 17, 2026
70a9eda
chore(deps): drop streams-crdt v1 snapshot export patch (#82)
zxch3n Aug 17, 2026
dda9228
fix(components): complete recent runs workspace fixture (#85)
Leeeon233 Aug 17, 2026
879404b
feat: add workspace MCP configuration (#31)
lodystage[bot] Aug 17, 2026
c773934
fix(electron): stop local probes when agent is disabled [risk:medium]…
Leeeon233 Aug 17, 2026
5897795
fix(cli): discover interrupted forks without opening every session do…
lodystage[bot] Aug 17, 2026
39cd9d0
fix(cli): fail turns that end with no agent output [risk:medium] (#88)
lodystage[bot] Aug 18, 2026
a9a3c86
feat: acp registry
Leeeon233 Aug 18, 2026
b6fcb72
fix(components): localize AI usage compact number units (#90)
lodystage[bot] Aug 18, 2026
8ef95f2
docs: add 0.82.0 changelog (#92)
Leeeon233 Aug 18, 2026
c50dcb3
fix(components): loop mention keyboard navigation (#93)
lodystage[bot] Aug 18, 2026
1daa862
fix: satisfy type-aware lint checks (#94)
lodystage[bot] Aug 18, 2026
8bd4705
feat(components): mention a conversation by dragging its sidebar row …
lodystage[bot] Aug 18, 2026
d159779
docs:
Leeeon233 Aug 18, 2026
a97c11a
test(cli): stabilize release session tests (#95)
lodystage[bot] Aug 18, 2026
4fd19c2
fix(i18n): add missing pasted text collapse label (#96)
Leeeon233 Aug 18, 2026
8a594a6
feat(electron): package OSS desktop for release and auto-update [risk…
lodystage[bot] Aug 18, 2026
cf2438c
feat(electron): introduce brand new desktop onboarding [risk:high] (#97)
wibus-wee Aug 18, 2026
a5f3ac6
feat(cli): add Agent MCP configuration tool [risk:high] (#98)
Leeeon233 Aug 18, 2026
1bc6271
fix(cli): trim Lody MCP prompt guidance (#99)
lodystage[bot] Aug 18, 2026
a812210
fix: dsh thinking
Leeeon233 Aug 18, 2026
a72f368
fix(cli): don't require origin fetch when restoring session worktrees…
zxch3n Aug 18, 2026
60ce0f3
fix(cli): read CLI version from the composed release manifest (#101)
zxch3n Aug 18, 2026
7fb806a
fix(components): keep task board wheel vertical inside columns (#102)
lodystage[bot] Aug 19, 2026
3325f9a
feat: maintain Kimi as a builtin runtime (#29)
lodystage[bot] Aug 19, 2026
e0860d8
fix: kimi runtime
Leeeon233 Aug 19, 2026
95f61a8
fix: kimi lint
Leeeon233 Aug 19, 2026
2d3d1ce
fix: runtime
Leeeon233 Aug 19, 2026
f42e574
fix: enforce light theme during onboarding (#104)
wibus-wee Aug 19, 2026
08dcfeb
fix(cli): repair Grok HTTP MCP initialize handshake [risk:medium] (#103)
lodystage[bot] Aug 19, 2026
7573f86
docs(site): publish the 0.83.0 changelog (#105)
lodystage[bot] Aug 19, 2026
105dd80
fix(onboarding): centre provider status badge in its row (#108)
lodystage[bot] Aug 20, 2026
7af42a9
fix(settings): keep row controls inside a narrow preferences panel (#…
lodystage[bot] Aug 20, 2026
c103574
fix: show all workspace tasks by default (#110)
Leeeon233 Aug 20, 2026
1cdb648
feat(components): fill the "Recently used" run configs from real use …
lodystage[bot] Aug 20, 2026
767a1e4
chore: migrate ACP extension repositories (#111)
lodystage[bot] Aug 20, 2026
67fea1c
fix(site): repair light veil and Loro Wasm startup [risk:medium] (#113)
zxch3n Aug 20, 2026
fb44ef3
feat(components): add a round outline rail to the session conversatio…
lodystage[bot] Aug 20, 2026
d52d073
fix: import Codex history without resuming threads [risk:medium] (#115)
Leeeon233 Aug 21, 2026
e9c72a4
fix(electron): normalize macOS Dock icon size (#117)
Leeeon233 Aug 21, 2026
43888fa
fix: preserve ACP process arguments on Windows (#116)
lodystage[bot] Aug 21, 2026
89920a4
feat: update acp
Leeeon233 Aug 21, 2026
a6cf343
fix: vite
Leeeon233 Aug 21, 2026
484ee4f
fix: skip acp test
Leeeon233 Aug 21, 2026
af4106d
docs: publish 0.84.0 release notes (#118)
Leeeon233 Aug 21, 2026
72700e5
fix(cli): sync managed runtime pins [risk:high]
Leeeon233 Aug 21, 2026
0540997
fix: apply Grok permission config during session startup (#120)
lodystage[bot] Aug 21, 2026
e94ce5c
fix: streamline session mention drag handling (#122)
Leeeon233 Aug 21, 2026
3a8ccb7
feat: update DeepSeek Harness to 0.1.1-rc.1 (#123)
lodystage[bot] Aug 21, 2026
04b2e0b
fix: preserve focus when IME handles Escape (#124)
lodystage[bot] Aug 21, 2026
754cc80
feat: add System theme mode that follows the OS (#121)
lodystage[bot] Aug 21, 2026
045ca63
fix: dsh
Leeeon233 Aug 21, 2026
b42ddbe
docs: publish 0.85.0 release notes (#125)
lodystage[bot] Aug 22, 2026
22c67cc
chore:
Leeeon233 Aug 22, 2026
ab8634a
fix: use Grok local terminal fallback (#126)
lodystage[bot] Aug 22, 2026
fe0d553
fix: add Claude Fable fallback [risk:medium] (#127)
Leeeon233 Aug 22, 2026
1923737
fix: stabilize Claude and Grok model fallbacks [risk:medium] (#129)
Leeeon233 Aug 22, 2026
c6bd294
fix(components): filter stale new-session ACP config [risk:medium] (#…
lodystage[bot] Aug 22, 2026
3d7f3d0
refactor: consume unified Lody ACP extensions (#119)
Leeeon233 Aug 22, 2026
c17c86f
fix(components): prevent composer resize from moving chat [risk:mediu…
zxch3n Aug 22, 2026
457d6dd
feat(components): preview self-contained HTML files [risk:high] (#114)
lodystage[bot] Aug 22, 2026
8439259
fix(components): prevent composer resize from moving chat [risk:mediu…
zxch3n Aug 22, 2026
82ce66b
fix(code-collab): load local file index over IPC [risk:medium] (#128)
Leeeon233 Aug 22, 2026
3f5737a
fix(cli): keep direct local sessions branchless [risk:medium] (#133)
zxch3n Aug 22, 2026
6cb5190
Fix/direct local session branch (#136)
zxch3n Aug 22, 2026
6c7412f
feat: add Markdown full-copy actions (#134)
lodystage[bot] Aug 22, 2026
9781746
feat(components): add Codex reset forecasts [risk:medium] (#112)
lodystage[bot] Aug 22, 2026
e5da52f
Feat/app store review prompt (#137)
zxch3n Aug 22, 2026
3438429
Fix/direct local session branch (#138)
zxch3n Aug 22, 2026
f5f745e
fix: preserve task body until save acknowledgement (#139)
lodystage[bot] Aug 23, 2026
24a1bc1
feat: update acp
Leeeon233 Aug 23, 2026
d780abb
fix:
Leeeon233 Aug 23, 2026
2d82006
fix: localize Codex reset forecast expiry (#141)
lodystage[bot] Aug 23, 2026
1d8c521
fix: lint
Leeeon233 Aug 23, 2026
a2ff8f9
test: remove Codex reset forecast entry-point coverage (#143)
lodystage[bot] Aug 23, 2026
279276e
test: halve local test runtime [risk:medium] (#144)
lodystage[bot] Aug 23, 2026
f6f8e35
chore: merge LodyAI main
Leeeon233 Aug 24, 2026
acc5740
Merge pull request #146 from loro-dev/feat/lodyai-main
Leeeon233 Aug 24, 2026
f9b3cce
docs: document Agent Role V1 design (#135)
lodystage[bot] Aug 24, 2026
c343f32
chore:
Leeeon233 Aug 24, 2026
6e14783
fix: lint
Leeeon233 Aug 24, 2026
5eaf1cd
fix(components): cascade archives to child sessions (#148)
lodystage[bot] Aug 24, 2026
0a5ced8
fix: gate Lody Task MCP tools (#150)
lodystage[bot] Aug 24, 2026
09e3099
fix(file-preview): keep Electron browsing local [risk:medium]
zxch3n Aug 24, 2026
2b0d758
Fix/direct local session branch (#149)
zxch3n Aug 24, 2026
c5a07fc
Merge remote-tracking branch 'origin/main' into fix/electron-local-fi…
zxch3n Aug 24, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
218 changes: 218 additions & 0 deletions .github/workflows/release-electron.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,218 @@
name: Release Electron

# Builds and publishes the public Lody OSS desktop app for macOS, Windows and
# Linux, plus the electron-updater metadata that drives in-app auto-update.
#
# The tag is the source of truth for the released version: `package-electron.mjs`
# injects it through extraMetadata so apps/electron/package.json never silently
# ships a stale version. electron-updater resolves its feed from the `publish`
# block in electron-builder.yml, which electron-builder bakes into the packaged
# app-update.yml — the public renderer build strips every VITE_* value, so the
# cloud composition's VITE_ELECTRON_UPDATE_URL injection is not available here.

on:
push:
tags:
- 'v*'
workflow_dispatch:
inputs:
version:
description: 'Version to package, e.g. 0.80.1 (defaults to apps/electron/package.json)'
required: false
type: string
publish:
description: 'Create/update the GitHub Release with the built artifacts'
required: false
default: false
type: boolean

permissions:
contents: read

concurrency:
group: release-electron-${{ github.ref }}
cancel-in-progress: false

env:
NODE_VERSION: 22
COREPACK_ENABLE_DOWNLOAD_PROMPT: 0

jobs:
build:
strategy:
fail-fast: false
matrix:
include:
- os: macos-latest
target: mac
# Both slices from one runner: beforePack swaps the embedded CLI's
# native bindings per arch, so a universal build is rejected upstream.
package_args: '--mac --arm64 --x64'
- os: windows-2022
target: win
package_args: '--win'
- os: ubuntu-latest
target: linux
# snap is deliberately omitted: electron-builder needs snapcraft on the
# runner to produce it. `pnpm --dir apps/electron build:linux` still
# builds it locally for anyone who has snapcraft installed.
package_args: '--linux AppImage deb'
runs-on: ${{ matrix.os }}
environment: release
env:
CSC_LINK: ${{ matrix.target == 'mac' && secrets.MACOS_CERTIFICATE_P12_BASE64 || '' }}
CSC_KEY_PASSWORD: ${{ matrix.target == 'mac' && secrets.MACOS_CERTIFICATE_PASSWORD || '' }}
CSC_NAME: ${{ matrix.target == 'mac' && secrets.MACOS_CERTIFICATE_NAME || '' }}
APPLE_API_KEY_P8: ${{ matrix.target == 'mac' && secrets.APPLE_API_KEY_P8 || '' }}
APPLE_API_KEY_ID: ${{ matrix.target == 'mac' && secrets.APPLE_API_KEY_ID || '' }}
APPLE_API_ISSUER: ${{ matrix.target == 'mac' && secrets.APPLE_API_ISSUER || '' }}
# Signing identities come from the secrets above only; never from whatever
# happens to be in the runner keychain.
CSC_IDENTITY_AUTO_DISCOVERY: 'false'
npm_config_msvs_version: ${{ matrix.target == 'win' && '2022' || '' }}
steps:
- name: Checkout
uses: actions/checkout@v4
with:
# All four acp-extension submodules are public, so no deploy key is needed.
submodules: recursive
persist-credentials: false

- name: Resolve release version
shell: bash
run: |
set -euo pipefail
if [[ "${{ github.event_name }}" == "push" ]]; then
version="${GITHUB_REF_NAME#v}"
else
version="${{ inputs.version }}"
version="${version#v}"
fi

if [[ -z "${version}" ]]; then
version="$(node -p "require('./apps/electron/package.json').version")"
fi

if [[ ! "${version}" =~ ^[0-9]+\.[0-9]+\.[0-9]+(-[0-9A-Za-z.-]+)?$ ]]; then
echo "Refusing to package unparseable version: ${version}"
exit 1
fi

echo "LODY_OSS_RELEASE_VERSION=${version}" >> "$GITHUB_ENV"
echo "Packaging Lody OSS ${version}"

- name: Prepare macOS signing and notarization credentials
if: matrix.target == 'mac'
shell: bash
run: |
set -euo pipefail
required_envs=(
"CSC_LINK"
"CSC_KEY_PASSWORD"
"APPLE_API_KEY_P8"
"APPLE_API_KEY_ID"
"APPLE_API_ISSUER"
)
for key in "${required_envs[@]}"; do
if [[ -z "${!key:-}" ]]; then
echo "Missing required macOS signing secret: ${key}"
echo "macOS auto-update cannot work from an unsigned build, so this is fatal."
exit 1
fi
done

api_key_path="${RUNNER_TEMP}/AuthKey_${APPLE_API_KEY_ID}.p8"
printf '%s' "${APPLE_API_KEY_P8}" > "${api_key_path}"
chmod 600 "${api_key_path}"
echo "APPLE_API_KEY=${api_key_path}" >> "$GITHUB_ENV"

- name: Setup pnpm
uses: pnpm/action-setup@v4

- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: ${{ env.NODE_VERSION }}
cache: 'pnpm'

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

- name: Build bundled CLI and renderer
run: pnpm --dir apps/electron run build

- name: Package (${{ matrix.target }})
run: pnpm --dir apps/electron run package -- ${{ matrix.package_args }} --publish never

- name: Collect release assets
shell: bash
run: |
set -euo pipefail
mkdir -p release-assets
find apps/electron/dist -maxdepth 1 -type f \
\( \
-name 'latest*.yml' -o \
-name '*.blockmap' -o \
-name '*.exe' -o \
-name '*.dmg' -o \
-name '*.zip' -o \
-name '*.AppImage' -o \
-name '*.deb' \
\) \
-exec cp {} release-assets/ \;

if [[ -z "$(ls -A release-assets)" ]]; then
echo "No release assets were produced"
exit 1
fi
ls -la release-assets

- name: Upload release assets
uses: actions/upload-artifact@v4
with:
name: lody-oss-release-${{ matrix.target }}
path: release-assets/*
if-no-files-found: error

publish:
needs: build
if: github.event_name == 'push' || inputs.publish
runs-on: ubuntu-latest
environment: release
permissions:
contents: write
steps:
- name: Download release assets
uses: actions/download-artifact@v4
with:
pattern: lody-oss-release-*
path: release-assets
merge-multiple: true

- name: Publish GitHub Release
shell: bash
env:
GH_TOKEN: ${{ github.token }}
GH_REPO: ${{ github.repository }}
run: |
set -euo pipefail

if [[ "${{ github.event_name }}" == "push" ]]; then
tag="${GITHUB_REF_NAME}"
else
version="${{ inputs.version }}"
tag="v${version#v}"
fi

# electron-updater's GitHub provider resolves assets from the tag that
# matches `v${version}`, so the tag name is part of the update contract.
echo "Publishing ${tag}"
ls -la release-assets

if gh release view "${tag}" >/dev/null 2>&1; then
gh release upload "${tag}" release-assets/* --clobber
else
gh release create "${tag}" release-assets/* \
--title "Lody OSS ${tag#v}" \
--generate-notes
fi
16 changes: 14 additions & 2 deletions .gitmodules
Original file line number Diff line number Diff line change
@@ -1,6 +1,18 @@
[submodule "packages/acp-extension-codex"]
path = packages/acp-extension-codex
url = https://github.com/loro-dev/acp-extension-codex.git
url = https://github.com/LodyAI/acp-extension-codex.git
[submodule "packages/acp-extension-claude"]
path = packages/acp-extension-claude
url = https://github.com/loro-dev/acp-extension-claude.git
url = https://github.com/LodyAI/acp-extension-claude.git
[submodule "packages/acp-extension-core"]
path = packages/acp-extension-core
url = https://github.com/LodyAI/acp-extension-core.git
[submodule "packages/acp-extension-grok"]
path = packages/acp-extension-grok
url = https://github.com/LodyAI/acp-extension-grok.git
[submodule "packages/acp-extension-kimi"]
path = packages/acp-extension-kimi
url = https://github.com/LodyAI/acp-extension-kimi.git
[submodule "packages/acp-extension-dsh"]
path = packages/acp-extension-dsh
url = https://github.com/LodyAI/acp-extension-dsh.git
2 changes: 2 additions & 0 deletions .oxlintrc.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@
"site-docs/scripts/**/*",
"packages/acp-extension-claude/**/*",
"packages/acp-extension-codex/**/*",
"packages/acp-extension-grok/**/*",
"packages/acp-extension-kimi/**/*",
"site/**/*",
"functions/**/*",
".codex/**/*",
Expand Down
37 changes: 37 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,10 +36,45 @@ private service secrets, and the Web and mobile app sources.
not accept or discover staging/production deployment presets.
- Local CLI, renderer, and Electron-main telemetry is hard-disabled even when
unrelated PostHog variables exist in the caller's shell.
- Client workflows that require daemon support negotiate integer protocol versions through
`MachineMeta.protocolCapabilities`; never infer support from the CLI release version. Missing
capabilities mean legacy/unsupported. Advertised set and version checks share one binding in
`packages/shared/src/machine-protocol-capabilities.ts` so a key never travels without its version.
- Managed runtime downloads default to the public R2-backed channel owned by
`packages/platform/src/runtime-artifacts.ts`; local and cloud assembly must use that
same constant. `LODY_RUNTIME_BASE_URL` is only an explicit mirror override.
- `packages/acp-extension-kimi` is an isolated submodule workspace. Do not add it
to the root pnpm dependency graph; Lody consumes only its separately built,
checksummed managed-runtime artifact and versioned ACP extension contract.
- `packages/acp-extension-core` is a public submodule workspace sourced from
`LodyAI/acp-extension-core`. Keep shared ACP extension contracts there and consume
them through the root pnpm workspace; do not duplicate those contracts locally.
- Never commit captured user/agent transcripts; fixtures must be synthetic.
- Workspace MCP has exactly two durable layers: catalog entries in the workspace Flock
document and selected ids in each user turn input config. Do not add machine bindings.
Preserve `mcpServerIds: []` as an explicit empty selection; dispatch must carry the
driving turn's selection into ACP startup rather than rereading session history.
- Workspace catalog mutations (MCP servers and Agent Roles) are durable on the local
Flock write and shared by an explicit upload that follows it. Settings surfaces resolve
on durability and do not wait on or report that upload: the row already exists, the
joined room carries the document when a one-shot upload cannot, and a banner about it is
something the user can neither act on nor dismiss. What is forbidden is the opposite —
reporting a durable write as failed, or rolling one back, because the upload did not go
through. The CLI still reports its own sync result to the terminal.
- Agent Roles are one `agentRole` row family in the same workspace Flock document, not a
private and a shared catalog: sharing is an ordinary update of `visibility` on the row.
A Role stores no secret — no API key, MCP selection, memory, or permission default —
and `isSensitiveAgentRoleConfigOptionKey` is applied on read as well as on write,
because a workspace row reaches every member's client. Access is
`canReadAgentRole`/`canManageAgentRole` everywhere; hiding a private Role in the UI is
not an access check.
- A Role never falls back. `machineId + agentConfigId` bind the execution site exactly;
when the machine, config, or a stored model/mode is unavailable the Role stays listed
with the precise reason and stops being mentionable. What a user Turn authorized is
frozen into its input config as `agentRoleInvocations`, so a later Role edit or delete
cannot change an accepted operation or a retry. `SessionMeta.agentRoleId` /
`agentRoleRevision` record where a Session came from and are display-only; execution,
recovery, and retry read the already-frozen dispatch config, never the Role catalog.

`pnpm check:public-boundary` is the executable repository boundary and must pass
after changing package scope or cloud/local composition.
Expand All @@ -53,6 +88,8 @@ after changing package scope or cloud/local composition.
- `packages/cloud-api`: public optional-cloud client contract
- `packages/shared`: schemas, protocols, and cross-runtime utilities
- `packages/loro-streams-rpc`: public Streams RPC protocol/client
- `packages/acp-extension-core`: shared public ACP extension contracts
- `packages/acp-extension-kimi`: independently built Kimi runtime source and Lody ACP extensions
- `site-docs`: public documentation site

## Checks and commits
Expand Down
7 changes: 6 additions & 1 deletion THIRD_PARTY_NOTICES.md
Original file line number Diff line number Diff line change
Expand Up @@ -616,7 +616,7 @@ This list covers shipped production dependencies plus vendored third-party asset
- Author: Ben Coe
- Description: the mighty option parser used by yargs

### MIT (787)
### MIT (789)

- `@antfu/install-pkg @ 1.1.0` — https://github.com/antfu/install-pkg#readme
- Author: Anthony Fu
Expand Down Expand Up @@ -1503,6 +1503,9 @@ This list covers shipped production dependencies plus vendored third-party asset
- `emoji-regex @ 8.0.0` — https://mths.be/emoji-regex
- Author: Mathias Bynens
- Description: A regular expression to match all Emoji-only symbols as per the Unicode Standard.
- `emojibase-data @ 17.0.0` — https://emojibase.dev
- Author: Miles Johnson
- Description: Aggregated emoji, shortcode, and emoticon data.
- `empathic @ 2.0.0` — https://github.com/lukeed/empathic#readme
- Author: Luke Edwards
- Description: A set of small and fast Node.js utilities to understand your pathing needs.
Expand Down Expand Up @@ -1593,6 +1596,8 @@ This list covers shipped production dependencies plus vendored third-party asset
- `framer-motion @ 12.34.0` — https://github.com/motiondivision/motion#readme
- Author: Matt Perry
- Description: A simple and powerful JavaScript animation library
- `frimousse @ 0.3.0` — https://frimousse.liveblocks.io
- Description: A lightweight, unstyled, and composable emoji picker for React.
- `fs-constants @ 1.0.0` — https://github.com/mafintosh/fs-constants
- Author: Mathias Buus
- Description: Require constants across node and the browser
Expand Down
Loading