Commit Graph

86 Commits

Author SHA1 Message Date
engineer
366a936431 docs(launch): fill launch drafts with live install URLs — post-ready (Play marked pending)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-02 17:19:29 -07:00
engineer
35f99d124b docs(site): keep landing page source (deployed to gh-pages root)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-02 17:16:43 -07:00
engineer
7c79753e44 docs(readme): correct store/platform claims — feature live F-Droid repo + APK, drop fake iOS/App Store links
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-02 17:14:03 -07:00
engineer
dc7cc749c2 docs(distribution): cite live GitHub Pages privacy URL for store submissions (unblocks Play/IzzyOnDroid)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-02 17:11:39 -07:00
engineer
fb5c97a8a5 docs: CEO cycle 4 — sharpen owner queue steps (exact push/bump/privacy/MR/growth)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-02 03:43:28 -07:00
engineer
c36605e5e6 docs: CEO cycle 3 — F-Droid v0.4.3 verified live; bucket-A closed; queue refreshed
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-02 01:55:14 -07:00
engineer
c8458cd397 docs(distribution): reconcile privacy-policy URL to opencode.vibebrowser.app; v0.4.3
Privacy URL was inconsistent across owner docs (agentlabs.cc/opencode/privacy
in 3 spots vs opencode.vibebrowser.app/privacy in the majority). Reconciled
all to the canonical opencode.vibebrowser.app/privacy (Search-Console-verified
domain; what privacy-policy.html self-references). Also fixed stale v0.4.2 AAB
reference in PLAY-APP-CONTENT-ANSWERS.md.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-02 01:52:09 -07:00
engineer
ee7082a72a fix: custom-dir session create used user input not server directory (scope drift)
onCreateInDirectory navigated with dir.trim() (raw user input) while the
sibling create paths use the server-authoritative session.directory. When
the opencode server normalizes the path (trailing slash/symlink/relative),
the nav param diverged from the session's real scope, causing the new
session/[id] screen to scope to the wrong client -> 'Failed to load
session'. Mirror the sibling paths' session.directory spread.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-02 01:52:04 -07:00
engineer
61cbb35bf3 docs: refresh HANDOFF.md with current publish state and owner actions
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-02 01:35:19 -07:00
engineer
861ac7f059 docs(context): play internal live; androguard 4.1.3 fix for F-Droid 2026-06-02 01:31:09 -07:00
engineer
eea84a3f35 fix(ci): pin androguard==4.1.3 for F-Droid publish (4.1.4 crashes on signer cert)
androguard 4.1.4 raises 'NoOverwriteDict object has no attribute append' in
parse_v2_v3_signature when fdroidserver extracts the signer cert — this broke the
self-hosted F-Droid publish from v0.4.2 on. 4.1.3 (which shipped v0.3.2–v0.4.1)
parses our re-signed v1+v2-only APK cleanly; verified locally with
fdroidserver.common.get_first_signer_certificate.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-02 01:29:59 -07:00
engineer
821672048c docs(context): F-Droid publish fix + v0.4.3 release push 2026-06-02 00:59:55 -07:00
engineer
c66f4fb858 release(fdroid): v0.4.3 — fix self-hosted F-Droid publish (v2-only signing)
The self-hosted F-Droid repo (https://dzianisv.github.io/opencode-mobile/fdroid/repo)
has been stuck at v0.4.1 because publish-fdroid crashed in androguard parsing the
CI APK's v2+v3 signature block pair ('NoOverwriteDict' object has no attribute
'append'). Force v1+v2-only signing: gradle flags for local builds, plus a
deterministic apksigner re-sign step in the workflow (expo prebuild regenerates
build.gradle, so the workflow step is the real guarantee). Bump to v0.4.3 /
versionCode 5 so a fresh tag re-runs the publish with the verified bug fixes
(#10 scope fixes, send-error fix) included.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-02 00:58:41 -07:00
engineer
af351d1df0 docs(context): record runtime bug audit outcome 2026-06-02 00:42:01 -07:00
engineer
059b5cc0f5 fix(sessions): don't flash error / refresh wrong session on send failure
sendMessage captured currentSession at call time; if the user switched sessions
while a prompt was in flight and it failed, the catch handler surfaced the error
on and refetched the NOW-current session. Clear the sending flag for the session
we actually sent to, but only set error / refreshMessages when it's still on
screen. Found via runtime bug audit.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-02 00:41:42 -07:00
engineer
f58f90ae05 docs(context): session close — #1 verified green; publish/growth owner-gated
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-02 00:27:52 -07:00
engineer
67773fc8ba docs(izzyondroid): correct stale package id and version in inclusion request
App ID is cc.agentlabs.opencode (post-rename), not ai.opencode.mobile; bump the
example release to v0.4.2. Verified against the live v0.4.2 APK: package
cc.agentlabs.opencode, versionName 0.4.2, signing SHA-256 0C:25:..:99 matches the
documented fingerprint. Makes the IzzyOnDroid submission filing-ready.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-02 00:21:20 -07:00
engineer
67ebbeb3f4 docs(context): #10 verified E2E green (CUA smoke run 26803479355)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-02 00:19:13 -07:00
engineer
6d0e8c9599 docs(context): log version fix, #10 scope refactor + second scope-bug fix, gates
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-01 23:50:40 -07:00
engineer
66b89f74d4 fix(sessions): keep created-session scope through navigation and send (#10)
createSession now stamps the scope directory onto the returned session, and the
create-session navigation passes that directory to the detail screen. Previously
a freshly created home-scoped session was opened/addressed with the default
(CWD) client because the route carried no directory param — the same scope
mismatch class as #10, on the open/send path instead of the list path.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-01 23:49:19 -07:00
engineer
bed0b6f622 refactor(sessions): single source of truth for session directory scope (#10)
Extract the list/create scope rule into sessionScopeDirectory() so loadSessions
and createSession can no longer drift apart — the root cause of #10 (sessions
empty after connect/create). Add a zero-dependency node:test regression guard
proving both paths resolve identically across all inputs, a 'test' npm script,
and exclude test files from the app typecheck.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-01 23:46:48 -07:00
engineer
0615ab898e fix(android): bump versionName to 0.4.2 to match app.json; add ownership context
versionName in android/app/build.gradle was stale at 0.4.1 while app.json /
package.json declare 0.4.2, so CI-built APKs reported the wrong version string.
Align it. Also adds context.md (goal/design/plan/progress) and ignores the
generated index.android.bundle artifact.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-01 23:43:34 -07:00
engineer
a5364668db fix(sessions): create session in the same scope the list reads (#10)
Root cause of the empty-sessions-after-connect bug, caught by the now-live E2E
smoke: createSession() created via the plain connection client (server CWD),
while loadSessions() lists home-scoped when the connection has no explicit
directory. When CWD != home the new session was invisible to the list.

Fix: createSession now mirrors loadSessions' directory scoping (home-scoped
client when no explicit directory), so a freshly created session reliably
appears. No change for connections with an explicit directory.

Verified by the connect-and-verify-sessions CUA smoke on push.
Refs #10.
2026-06-01 16:26:42 -07:00
Den
14e858a402 ci(play): production track input + launch kit + F-Droid metadata fix (#19)
* ci(play): add track/status inputs to publish workflow

Lets the Play publish run target a public track (production/beta) and
choose draft vs completed, instead of being hard-wired to internal.
Defaults stay internal/completed so tag-push and release triggers are
unchanged. Enables promoting the app to a publicly-downloadable track —
the prerequisite for any real download growth.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* docs(play): record user authorization for production go-live

* docs(fdroid): correct metadata to cc.agentlabs.opencode + agentlabs.cc, flag post-rename tag gate

The fdroiddata submission still referenced the old package ai.opencode.mobile
and v0.3.1. Update package id, website, and document the real blocker: F-Droid
mainline needs a release tag built AFTER the package rename (v0.4.1 APK is the
old id) plus Play production live and a reproducible build. Signing fingerprint
is unchanged across the rename.

* docs(launch): ready-to-fire distribution kit (Show HN, Reddit, PH, X, dev.to)

Copy-paste launch posts + ordered fire checklist so distribution starts the
moment the public listing is live. Store URLs left as {{PLAY_URL}}/{{FDROID_URL}}
placeholders; web hub agentlabs.cc/opencode is live now.

---------

Co-authored-by: engineer <engineer@opencode.ai>
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-01 15:32:19 -07:00
Den
3bd6f6e1ab chore: repoint OpenCode links to agentlabs.cc/opencode (#17)
agentlabs.cc/opencode and /opencode/privacy are now live (200). Repoint
README, distribution listings (Play/App Store/F-Droid/IzzyOnDroid/iOS),
docs, and in-app privacy links (settings + telemetry consent) from
www.vibebrowser.app/opencode to the canonical agentlabs.cc hub.

Co-authored-by: engineer <engineer@opencode.ai>
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-01 15:32:12 -07:00
Den
c9a57901c4 fix(ci): CUA smoke true-E2E with local opencode server (#15) (#18)
* chore: repoint OpenCode links to agentlabs.cc/opencode

agentlabs.cc/opencode and /opencode/privacy are now live (200). Repoint
README, distribution listings (Play/App Store/F-Droid/IzzyOnDroid/iOS),
docs, and in-app privacy links (settings + telemetry consent) from
www.vibebrowser.app/opencode to the canonical agentlabs.cc hub.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* fix(ci): run local opencode server for CUA smoke true-E2E (#15)

GitHub-hosted runners can't reach the Tailscale dev server
(100.108.64.76:4096), so the CUA smoke always failed at session creation.

- Install opencode-ai and run `opencode serve` on the runner host; the
  Android emulator reaches it via 10.0.2.2. OPENCODE_URL now points there.
- Healthcheck /global/health before launching the app; dump server log on
  failure for diagnosis.
- Add --only-connect-scenario to the smoke script and run just the
  connect-and-verify-sessions path in CI: deterministic, needs no model
  backend. The scenario now creates a session if the list is empty, so a
  fresh server still yields a non-empty list.

This makes the smoke a true E2E and also exercises the #10 sessions-list
rendering path against a real server.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* fix(ci): emulator smoke script is dash, not bash — drop brace-group healthcheck

android-emulator-runner runs the script: block under /usr/bin/sh (dash). The
multi-line `|| { ...; }` healthcheck was a dash syntax error (end of file
unexpected), failing the step before the smoke ran. Replace with a non-fatal
one-line re-check; the server was already health-gated in the prior step.

* docs(tasks): record smoke CI round 1 failure + dash fix

---------

Co-authored-by: engineer <engineer@opencode.ai>
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-01 15:32:06 -07:00
engineer
d1888dc392 docs(play): draft App content declaration answers to speed console publish
Pre-fills data safety / content rating / target audience / ads declarations from
the app's actual behavior so the one human gate (Play Console App content) is a
quick verify-and-enter. User must review before attesting.
2026-06-01 15:24:39 -07:00
engineer
6df5d4004e docs(tasks): record F-Droid self-hosted deprioritization + session state 2026-06-01 15:22:33 -07:00
engineer
1e07e36d5c fix(ci): pin androguard==4.1.4 for F-Droid publish (verified locally)
Reproduced locally against the v0.4.2 APK: androguard 4.0.x fails resource
parsing ('res1 must be zero!'), 4.1.0/4.1.1 fail signature parsing
('NoOverwriteDict' object has no attribute 'append'), and 4.1.4 parses both
cleanly. fdroidserver 2.4.4's own resolver pulls a buggy 4.1.x, so pin 4.1.4.
2026-06-01 15:00:59 -07:00
engineer
1c242e6a21 fix(ci): use latest fdroidserver for F-Droid publish
Pinning fdroidserver 2.4.4 hit androguard parse bugs on modern aapt2 APKs
(4.1+: NoOverwriteDict.append; 4.0.x: 'res1 must be zero!'). Upgrade to latest
fdroidserver which ships a compatible androguard.
2026-06-01 14:37:32 -07:00
engineer
8e06b860ac fix(dist): remove AI-generated fake screenshots; use real app captures
The phone-01/02/03 'screenshots' were AI-generated mockups (Apple '9:41'
marketing clock on an Android app, synthetic dark-theme rendering that doesn't
match the app's actual light theme, text overlapping buttons). Shipping these
as screenshots violates Google Play's real-screenshot policy and misleads users.

- Delete the three fake mockups.
- Add a real screenshot captured from the app running on an Android emulator
  (build cc.agentlabs.opencode) under play-graphics/screenshots/.
- Fix README store badges: were falsely marked 'available' linking the old
  ai.opencode.mobile package. Now: real APK download (GitHub releases),
  Google Play 'coming soon', F-Droid 'submitted' (MR #39530).

Connected-state screenshots (session list, streaming chat, diff viewer) will be
captured from the end-to-end smoke test (app + real opencode server).
2026-06-01 14:36:23 -07:00
engineer
dcb6ee0c66 fix(ci): pin androguard<4.1 for F-Droid publish
fdroidserver 2.4.4 + androguard 4.1+ crashes in 'fdroid update' with
"'NoOverwriteDict' object has no attribute 'append'" while parsing the APK
v2/v3 signature. Pin androguard>=4.0,<4.1 to restore the self-hosted F-Droid
repo publish.
2026-06-01 14:16:07 -07:00
engineer
0d25b3705c chore: release v0.4.2 — first post-rename build (cc.agentlabs.opencode)
First tagged release after the ai.opencode.mobile -> cc.agentlabs.opencode
rename. Produces a signed cc.agentlabs.opencode APK on the GitHub release and
refreshes the self-hosted F-Droid repo to the current package — prerequisite
for the F-Droid mainline / IzzyOnDroid submissions.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-01 13:41:59 -07:00
engineer
6351dd6e71 docs: repoint website links to www.vibebrowser.app/opencode
The canonical public landing page is https://www.vibebrowser.app/opencode.
Repoint README and store-listing website references from agentlabs.cc/opencode
to www.vibebrowser.app/opencode. Privacy-policy URLs and GitHub repo links
left unchanged.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-31 13:20:39 -07:00
engineer
6dc7e71a40 docs: point website/homepage links to agentlabs.cc/opencode
Update product/marketing website references in README and store-listing
docs from the old vibebrowser.app subdomain to the new landing page at
https://agentlabs.cc/opencode. Privacy-policy URLs and source-repo links
left unchanged.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-30 15:08:27 -07:00
engineer
a481e63bd3 docs(agents): add work-tracking discipline (use GitHub issue, not /tmp/AGENTS churn)
Track multi-step/upgrade work in the related GitHub issue via gh issue
comment, not by editing AGENTS.md or writing /tmp scratch files. Verify
steps in the real channel before claiming done. Drive web UIs via
snapshot->act-on-current-uids->re-snapshot, never batched/guessed clicks.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-30 13:54:12 -07:00
engineer
c667331593 docs(privacy): publish privacy policy via GitHub Pages (cc.agentlabs.opencode)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-30 13:14:15 -07:00
engineer
67e4c1f379 fix(ci): purge stale generated sources before publish build
publish-play-store.yml caches android/build + intermediates with a
restore-keys prefix fallback. After the package rename, that fallback
restored a generated autolinking tree (ReactNativeApplicationEntryPoint.java)
referencing the OLD package ai.opencode.mobile.BuildConfig, so
compileReleaseJavaWithJavac failed. Delete generated + intermediates
before prebuild so they regenerate for cc.agentlabs.opencode.

Build.yml has no Gradle cache, which is why it built the new package fine.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-30 13:12:58 -07:00
engineer
b808ad114e docs(tasks): correct verify.md with real CUA launch+screenshot evidence
Replace earlier paraphrased launch block with verbatim job-log lines
(am start cc.agentlabs.opencode/.MainActivity, 15 driven steps) and
screenshot proof (Sessions + Add-Connection render). Failure is the
env connection-timeout gap (#15), not a rename regression.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-30 05:07:35 -07:00
engineer
6985e74965 docs(tasks): rebrand-cc-agentlabs ownership audit trail
Rename verified: HEAD builds cc.agentlabs.opencode (build green) and the
app launches at runtime under the new package. CUA session goal blocked
by CI env (no opencode server) -> issue #15.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-30 05:05:35 -07:00
engineer
dff9dc5a79 docs(tasks): rebrand-cc-agentlabs ownership audit trail
success/design/verify/decisions/worklog for the package rename slice.
Rename verified: build green + runtime launch of cc.agentlabs.opencode.
CUA session goal blocked by env (no opencode server in CI) -> issue #15.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-30 05:04:45 -07:00
engineer
6405e2b9d9 refactor: commit package rename for core build files
The earlier rename commit did not persist the package-identity edits for
app.json, build.gradle, fastlane, the publish workflow, and the Kotlin
package declarations (they were reverted in the working tree after staging).
HEAD therefore still built ai.opencode.mobile. This commits the real
cc.agentlabs.opencode identity so CI builds the rebranded package.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-30 04:17:31 -07:00
engineer
c699d0b0bb fix(ci): set CUA smoke APP_PACKAGE to cc.agentlabs.opencode
Rename commit missed the Python launcher constant; HEAD still targeted
the old package so the smoke could not find the installed app.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-30 04:14:53 -07:00
engineer
9cd5911f23 fix(ci): drop stale ai.opencode.mobile launch in CUA smoke
Rename left both old and new package am-start lines; old package is no
longer installed and pollutes the smoke launch. Launch only
cc.agentlabs.opencode/.MainActivity.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-30 04:12:00 -07:00
engineer
a4cd22ef4b docs(aso): finalize Play Store SEO listing copy
Add ASO audit and apply recommendations to play-listing.md (optimized
title, short/full description, category, tags), refresh whatsnew, and
update AGENTS.md Play Console section for the cc.agentlabs.opencode rebrand.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-30 04:09:16 -07:00
engineer
927bcc3689 refactor: rename package ai.opencode.mobile -> cc.agentlabs.opencode
Rebrand to agentlabs.cc domain. Updates applicationId/namespace, Kotlin
package + source dir, Expo bundleIdentifier/package, CI publish + CUA
workflows, fastlane, and the CUA smoke launcher. Targets new Play Console
app (id 4976021563707170091); legacy ai.opencode.mobile app is orphaned.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-30 03:54:24 -07:00
engineer
7098823248 fix(android): add org/project to sentry.properties
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-05-29 10:32:01 -07:00
engineer
ec906341de fix(ci): disable Sentry upload in CUA smoke test build
CUA test doesn't need source maps uploaded to Sentry.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-05-28 01:25:45 -07:00
engineer
1c098f742b fix(ci): use reactivecircus/android-emulator-runner for reliable boot
- Switch from manual emulator management to the proven emulator-runner action
- Use API 30 (boots faster than 34 with software rendering)
- Build APK before starting emulator to minimize emulator uptime
- All emulator-dependent steps run inside the action's script block
- Move env vars to job level for cleaner structure

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-05-28 01:16:54 -07:00
engineer
e3384677bc fix(ci): enable KVM and fix emulator boot in CUA smoke test
- Enable KVM for hardware acceleration (required for x86_64 emulator)
- Use nohup for emulator process to prevent terminal association issues
- Add avdmanager list to verify AVD creation
- Include platform-tools in sdkmanager install
- Increase boot timeout to 180s
- Upload emulator.log as artifact for debugging
- Reduce job timeout to 45min (was 60)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-05-28 00:23:56 -07:00