Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
51 commits
Select commit Hold shift + click to select a range
70b02bf
chore(deps): bump actions/checkout from 6 to 7
dependabot[bot] Jun 20, 2026
a3bf374
chore(deps): bump the spa-deps group in /desktop with 13 updates
dependabot[bot] Jun 20, 2026
98df5bd
chore(deps): bump the python-deps group with 4 updates
dependabot[bot] Jun 20, 2026
8d61b57
docs(status): #1216 WSL install robustness on master + CI runner inci…
jaylfc Jun 20, 2026
6df7d7a
ci: cancel superseded runs per ref to stop runner-pool pileup
jaylfc Jun 20, 2026
45b4f13
Merge pull request #1218 from jaylfc/ci/concurrency-cancel
jaylfc Jun 20, 2026
9f14413
feat(userspace): Stream Chat viewer over Social Stream Ninja (#109)
jaylfc Jun 20, 2026
a547866
feat(coding-studio): agent build loop + diff review (slice 1)
jaylfc Jun 20, 2026
1a4cf75
docs(status): stream-build program kickoff -- Code Studio/store-pipel…
jaylfc Jun 20, 2026
c632d5b
userspace: move stream-chat out of seed/ into optional/
jaylfc Jun 20, 2026
9f2a7f5
fix: coding studio review findings - git identity, 207 handling, NUL …
jaylfc Jun 20, 2026
408691b
tsk-gzvpk2 [OPEN] Install placement + version registry (BaseStore: t
jaylfc Jun 20, 2026
a534184
tsk-dfmzqd [OPEN] Userspace manifest: support app_type 'tui' (CLI co
jaylfc Jun 20, 2026
0dfdd08
ci: run test matrix on github-hosted runners (free + parallel for pub…
jaylfc Jun 20, 2026
9d92a2d
fix(stream-chat): address gitar review findings on PR #1219
jaylfc Jun 20, 2026
5c027a6
fix(coding-studio): drop unused idx param in steps.map (TS6133 broke …
jaylfc Jun 20, 2026
9573483
Merge pull request #1222 from jaylfc/exec/tsk-gzvpk2
jaylfc Jun 20, 2026
3ff22ef
Merge pull request #1221 from jaylfc/exec/tsk-dfmzqd
jaylfc Jun 20, 2026
9acf997
Merge pull request #1224 from jaylfc/ci/test-on-github-hosted
jaylfc Jun 20, 2026
ad8a09a
Merge pull request #1219 from jaylfc/feat/stream-chat
jaylfc Jun 20, 2026
c588fae
docs(status): stream-build wave 1 landed (stream-chat/CI-flip/TUI-man…
jaylfc Jun 20, 2026
0af6be5
Merge pull request #1220 from jaylfc/feat/coding-studio-build-loop
jaylfc Jun 20, 2026
4ce8e5a
fix(neko-cdp): single-line RUN for the DevTools policy patch (Dockerf…
jaylfc Jun 20, 2026
650da36
feat(coding-studio): workspace-scoped agent file edits (slice 2)
jaylfc Jun 20, 2026
773b177
Merge master into dev (sync #1223 iframe sandbox hardening)
jaylfc Jun 20, 2026
c1723da
fix(coding-studio): reject writes into workspace .git (apply-blocks h…
jaylfc Jun 20, 2026
dde1c91
tsk-kknsro [OPEN] Store submission state machine (BaseStore: draft -
jaylfc Jun 20, 2026
4d31ab3
docs(status): wind-down at 95% -- #1223 done (neko image fixed+public…
jaylfc Jun 20, 2026
42f4ddd
Merge pull request #1226 from jaylfc/exec/tsk-kknsro
jaylfc Jun 20, 2026
aef9887
Merge pull request #1225 from jaylfc/feat/coding-studio-slice2
jaylfc Jun 20, 2026
2e6e391
fix(store): create_submission returns 400 (not 500) on invalid kind/m…
jaylfc Jun 20, 2026
35ccfd7
feat(browser): redesign to the design bar with a collapsible sidebar …
jaylfc Jun 20, 2026
f5e1523
fix(browser): host-aware neko_url + multi-IP NAT1TO1 for Tailscale (#73)
jaylfc Jun 20, 2026
08faf70
fix(security): IDOR guard on get_submission, symlink-TOCTOU-safe appl…
jaylfc Jun 20, 2026
144cf8a
Merge pull request #1227 from jaylfc/feat/browser-redesign-collapsibl…
jaylfc Jun 20, 2026
95f0400
Merge pull request #1228 from jaylfc/fix/browser-tailscale-neko-url
jaylfc Jun 20, 2026
467b007
docs(status): post-reset burst -- browser redesign + tailscale white-…
jaylfc Jun 20, 2026
3fb3b91
fix(browser): single connecting-host NAT1TO1 (comma list broke WebRTC)
jaylfc Jun 20, 2026
ee01ef9
Merge pull request #1213 from jaylfc/dependabot/github_actions/dev/ac…
jaylfc Jun 20, 2026
2169ca0
Merge pull request #1214 from jaylfc/dependabot/npm_and_yarn/desktop/…
jaylfc Jun 20, 2026
f221af7
Merge pull request #1215 from jaylfc/dependabot/uv/dev/python-deps-f5…
jaylfc Jun 20, 2026
1cf3ff5
ci: auto-merge dependabot patch/minor (npm + actions) on green
jaylfc Jun 20, 2026
9eaf909
Merge pull request #1230 from jaylfc/fix/browser-webrtc-single-nat1to1
jaylfc Jun 20, 2026
1768c69
fix(browser): non-blocking tailscale detect, wire connecting state, s…
jaylfc Jun 20, 2026
f340043
fix: fold gitar findings + reconcile #124 nits with #1230
jaylfc Jun 20, 2026
53f893a
Merge pull request #1229 from jaylfc/fix/browser-124-nits
jaylfc Jun 20, 2026
00d58c0
chore(deps): bump dompurify to 3.4.11 (security)
jaylfc Jun 20, 2026
7816fa2
Merge pull request #1231 from jaylfc/ci/dependabot-automerge
jaylfc Jun 20, 2026
b4d1cc9
Merge pull request #1232 from jaylfc/chore/dompurify-security
jaylfc Jun 20, 2026
bba509d
release: 1.0.0-beta.5
jaylfc Jun 20, 2026
f01347e
Merge pull request #1233 from jaylfc/release/beta-5
jaylfc Jun 20, 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
2 changes: 1 addition & 1 deletion .github/workflows/build-agent-images.yml
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ jobs:
debarch: arm64
runs-on: ${{ matrix.runner }}
steps:
- uses: actions/checkout@v6
- uses: actions/checkout@v7

# Approach A: install incus in the runner and build the base image
# by launching a real container. GitHub's ubuntu-latest and
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/build-neko-cdp-image.yml
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ jobs:
platform: linux/arm64
runs-on: ${{ matrix.runner }}
steps:
- uses: actions/checkout@v6
- uses: actions/checkout@v7

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
Expand Down
50 changes: 18 additions & 32 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,38 +18,24 @@ on:
# each release is a self-contained packaged download (see spa-build below).
types: [published]

# Cancel superseded runs of the same ref so a rapid series of pushes to a PR
# branch does not stack up and starve the small self-hosted runner pool (this
# bit us once: three superseded runs queued behind each other on two runners).
# A PR push event carries ref refs/pull/<n>/merge, so successive pushes to the
# same PR share a group and the older run is cancelled. master/dev are excluded
# from cancellation: every promotion's CI (and its bundle publish) must finish.
concurrency:
group: ci-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: ${{ github.ref != 'refs/heads/master' && github.ref != 'refs/heads/dev' }}

jobs:
# Route the matrix to the self-hosted POOL (VPS + Fedora, both labelled
# taos-ci) rather than pinning it to one box. The two boxes are ~tied per
# core (Fedora i5-10600 ~2.0s, VPS EPYC ~2.2s on the same microbench), so the
# fastest run is the two matrix legs in PARALLEL across both — pinning the
# whole matrix to a single runner would serialise the legs and be slower. The
# always-on, dedicated VPS is the anchor; Fedora joins the pool when it is up
# and adds a parallel lane. We only fall back to GitHub-hosted when BOTH
# self-hosted runners are offline, so CI never hangs. Reading runner status
# needs a PAT with administration:read (secret RUNNER_ADMIN_PAT); without it
# we stay on the pool, which the always-on VPS keeps serviceable.
pick-runner:
runs-on: ubuntu-latest
outputs:
on: ${{ steps.p.outputs.on }}
steps:
- id: p
env:
PAT: ${{ secrets.RUNNER_ADMIN_PAT }}
run: |
on='["self-hosted","taos-ci"]'
if [ -n "$PAT" ]; then
count=$(GH_TOKEN="$PAT" gh api "repos/${{ github.repository }}/actions/runners" \
--jq '[.runners[] | select(.status=="online") | select(any(.labels[].name; . == "taos-ci"))] | length' \
2>/dev/null || echo 1)
if [ "${count:-1}" -eq 0 ]; then on='"ubuntu-latest"'; fi
fi
echo "on=$on" >> "$GITHUB_OUTPUT"
# The test matrix runs on GitHub-hosted runners. taOS is a public repo, so
# hosted Actions are free with high concurrency (~20 parallel jobs); many PRs
# run at once instead of queueing behind the 2 self-hosted boxes. The VPS +
# Fedora runners stay free for the kilo lane and GPU/bench work.

test:
needs: pick-runner
runs-on: ${{ fromJSON(needs.pick-runner.outputs.on) }}
runs-on: ubuntu-latest
# 45 min cap accommodates the cron run that includes 3.11 (~30 min);
# 3.12/3.13 PR runs finish in ~16 min, so this only kicks in if 3.11
# ever drifts further.
Expand All @@ -61,7 +47,7 @@ jobs:
python-version: ${{ github.event_name == 'schedule' && fromJSON('["3.11", "3.12", "3.13"]') || fromJSON('["3.12", "3.13"]') }}

steps:
- uses: actions/checkout@v6
- uses: actions/checkout@v7

# No actions/setup-python: it only ships prebuilt CPython for GitHub's
# ubuntu image, so on the self-hosted Fedora runner it fails with
Expand Down Expand Up @@ -99,7 +85,7 @@ jobs:
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- uses: actions/checkout@v7

- name: Set up Python
uses: actions/setup-python@v6
Expand All @@ -123,7 +109,7 @@ jobs:
permissions:
contents: write
steps:
- uses: actions/checkout@v6
- uses: actions/checkout@v7

- name: Set up Node
uses: actions/setup-node@v4
Expand Down
31 changes: 31 additions & 0 deletions .github/workflows/dependabot-automerge.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
name: Dependabot auto-merge

# Auto-merges grouped patch/minor Dependabot PRs once required checks pass.
# Majors and Python (uv) updates are left for manual review.
on: pull_request_target

permissions:
contents: write
pull-requests: write

jobs:
automerge:
if: ${{ github.actor == 'dependabot[bot]' }}
runs-on: ubuntu-latest
steps:
- name: Fetch Dependabot metadata
id: meta
uses: dependabot/fetch-metadata@v2
with:
github-token: ${{ secrets.GITHUB_TOKEN }}

- name: Enable auto-merge for npm / actions patch & minor
if: >-
(steps.meta.outputs.package-ecosystem == 'npm' ||
steps.meta.outputs.package-ecosystem == 'github_actions') &&
(steps.meta.outputs.update-type == 'version-update:semver-patch' ||
steps.meta.outputs.update-type == 'version-update:semver-minor')
run: gh pr merge --auto --merge "$PR_URL"
env:
PR_URL: ${{ github.event.pull_request.html_url }}
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
2 changes: 1 addition & 1 deletion .github/workflows/fork-audit.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ jobs:
issues: write
contents: read
steps:
- uses: actions/checkout@v6
- uses: actions/checkout@v7

- uses: actions/setup-python@v6
with:
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/security.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ jobs:
dependency-audit:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- uses: actions/checkout@v7

- name: Set up Python
uses: actions/setup-python@v6
Expand Down
17 changes: 17 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,23 @@ Versions follow semver beta: `1.0.0-beta.N`, bumped on each dev->master promotio

## [Unreleased]

## [1.0.0-beta.5] - 2026-06-20

### Added
- Browser app redesigned to the current design bar with a collapsible sidebar.
- Coding Studio: workspace-scoped agent file edits with a build loop and inline diff review.

### Changed
- CI runs the test matrix on GitHub-hosted runners, cancels superseded runs per ref, and auto-merges low-risk Dependabot patch and minor updates on green.

### Fixed
- Streamed browser now connects over Tailscale and other non-LAN addresses: WebRTC advertises the single connecting-host IP, fixing the white screen the previous comma-separated NAT mapping caused.
- The "connecting" overlay can no longer hang over a session that is already live.
- Hardened the streamed-browser iframe sandbox and several store and coding-studio endpoints: IDOR guard on submission reads, symlink-safe workspace writes, and an admin gate on install-registry mutations.
- Store submissions return 400 on invalid input instead of 500.
- Security: dompurify updated to 3.4.11; cryptography and pydantic-settings advisories cleared.
- Install: the core install no longer aborts when optional components fail, and drops to the service user without assuming sudo (WSL robustness).

## [1.0.0-beta.3] - 2026-06-16

### Added
Expand Down
10 changes: 1 addition & 9 deletions app-catalog/streaming/neko-browser/Dockerfile.cdp
Original file line number Diff line number Diff line change
Expand Up @@ -44,15 +44,7 @@ RUN apt-get update -qq \
# ── 2. Patch the managed policy: re-enable DevTools ─────────────────────────
# The stock image ships /etc/chromium/policies/managed/policies.json with
# DeveloperToolsAvailability=2 (fully disabled). Set it to 0 (allowed).
RUN python3 -c "
import json, pathlib
p = pathlib.Path('/etc/chromium/policies/managed/policies.json')
data = json.loads(p.read_text()) if p.exists() else {}
data['DeveloperToolsAvailability'] = 0
p.parent.mkdir(parents=True, exist_ok=True)
p.write_text(json.dumps(data, indent=2))
print('policy patched:', data)
"
RUN python3 -c "import json, pathlib; p = pathlib.Path('/etc/chromium/policies/managed/policies.json'); data = json.loads(p.read_text()) if p.exists() else {}; data['DeveloperToolsAvailability'] = 0; p.parent.mkdir(parents=True, exist_ok=True); p.write_text(json.dumps(data, indent=2)); print('policy patched:', data)"

# ── 3. CDP launch flags (127.0.0.1-only binding) ────────────────────────────
# Neko reads Chromium flags from drop-in files under /etc/chromium.d/.
Expand Down
Loading
Loading