Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
119 commits
Select commit Hold shift + click to select a range
34a9ea4
WIP
Apr 8, 2026
2391cfe
merged latest main
Apr 8, 2026
cfc0db3
WIP
Apr 10, 2026
a734846
adding cloud command and other minor changes
Apr 10, 2026
ace9248
Merge branch 'fix-for-allocate-ports' into adding-cloud-command
Apr 11, 2026
9d5ccb5
merge latest from main
Apr 11, 2026
b5fb805
Merge branch 'remove-suite-flag-from-test' into adding-cloud-command
Apr 11, 2026
ac4e4ce
WIP - cloud suite and cloud test
Apr 11, 2026
f151070
Merge branch 'main' into adding-cloud-command
Apr 11, 2026
1d11e6c
Cloud CLI: fire-and-forget submission, runType/name/appFilename metadata
srinidhi-lwt Apr 13, 2026
9c99225
Merge branch 'main' into adding-cloud-command
srinidhi-lwt Apr 14, 2026
8d415d2
app upload and resuing the app
srinidhi-lwt Apr 14, 2026
a491d32
removed MD file
srinidhi-lwt Apr 14, 2026
63c6bd5
auth KEY in headers
srinidhi-lwt Apr 16, 2026
56b158d
app parser and app inspector for app validation
srinidhi-lwt Apr 17, 2026
2688ec5
adding traces to langfuse
srinidhi-lwt Apr 17, 2026
4f5c036
Merge branch 'add-llm-call-trace' into adding-cloud-command
srinidhi-lwt Apr 17, 2026
04a6db5
feat: per-feature model and reasoning effort via workspace YAML
droid-ash Apr 19, 2026
1169820
Merge pull request #93 from final-run/feat/planner-hierarchy-optimiza…
arnoldlaishram Apr 19, 2026
2f79fa8
Merge remote-tracking branch 'origin/main' into feat/per-feature-mode…
droid-ash Apr 19, 2026
518a77c
fix: resolve per-feature provider/model in new summary logs post-merge
droid-ash Apr 19, 2026
38c4aff
docs: spell out supported config shapes and per-provider reasoning le…
droid-ash Apr 19, 2026
c8ddcc7
fix(ai): enforce structured output on Anthropic path via zod schema
droid-ash Apr 19, 2026
8c629a7
fix(ai): drop .int() from Anthropic schemas to satisfy tool-schema va…
droid-ash Apr 19, 2026
4d7721f
fix(ai): drop outer output wrapper from Anthropic schemas
droid-ash Apr 19, 2026
4b4069f
fix(ai): pin Anthropic to outputFormat structured-output mode
droid-ash Apr 19, 2026
659693e
fix(ai): route OpenAI through Responses API so reasoningEffort takes …
droid-ash Apr 19, 2026
6967a13
refactor(ai): harden per-feature model resolution and run-context cap…
droid-ash Apr 19, 2026
b31afb4
chore: add mintlify-docs folder placeholder
droid-ash Apr 19, 2026
32161a6
docs: add mintlify community docs content
droid-ash Apr 19, 2026
5441886
Merge pull request #95 from final-run/add-mintlify-docs-folder
droid-ash Apr 19, 2026
440dd4a
docs(mintlify): rework landing page with hero video and local logos
droid-ash Apr 20, 2026
2acb1c3
docs(readme): surface docs.finalrun.app in top nav and Documentation …
droid-ash Apr 20, 2026
0a53a11
refactor: split dense paragraphs into short, active sentences
mintlify[bot] Apr 20, 2026
58a57ca
Merge pull request #96 from final-run/claude/lucid-burnell-43b853
droid-ash Apr 20, 2026
ec7f1a8
docs(mintlify): restructure Get Started — Intro, Installation (with p…
droid-ash Apr 20, 2026
5167f35
Merge pull request #97 from final-run/claude/mintlify-get-started-res…
droid-ash Apr 20, 2026
5769171
Merge pull request #94 from final-run/feat/per-feature-model-reasoning
droid-ash Apr 20, 2026
6aafb3a
chore: bump version to 0.1.7
droid-ash Apr 20, 2026
fb51a2b
Merge pull request #99 from final-run/bump-version-0.1.7
droid-ash Apr 20, 2026
f39686b
merged latest
srinidhi-lwt Apr 20, 2026
63d9b11
app options fix
srinidhi-lwt Apr 21, 2026
25cd43c
cloud dev URL
srinidhi-lwt Apr 21, 2026
0e90f83
refactored into components and npm packgae
srinidhi-lwt Apr 22, 2026
0aad4df
Migrate report-web to Vite and publish common + report-web to npm
droid-ash Apr 23, 2026
ebb17a0
Address CodeRabbit review feedback on PR #101
droid-ash Apr 23, 2026
b257576
Revert LLM call trace plumbing
droid-ash Apr 23, 2026
3b9bb85
Add LLM call traces for Langfuse observability
droid-ash Apr 23, 2026
ca351a0
Add finalrun cloud commands (test/suite/upload) with app validation
droid-ash Apr 23, 2026
6548768
Remove finalrun cloud command plumbing
droid-ash Apr 23, 2026
bbfc94c
Merge pull request #101 from final-run/adding-cloud-command
droid-ash Apr 23, 2026
e328e78
Fix report-web build under TypeScript 6
droid-ash Apr 23, 2026
350b3f7
Merge branch 'main' into llm-call-trace-langfuse
droid-ash Apr 23, 2026
41458a0
Merge pull request #104 from final-run/fix/ts6-baseurl-deprecation
droid-ash Apr 23, 2026
d2c82a6
Merge pull request #102 from final-run/llm-call-trace-langfuse
droid-ash Apr 23, 2026
ae211a2
Merge branch 'main' of https://github.com/final-run/finalrun-agent in…
droid-ash Apr 23, 2026
d62dcab
change version of vite and other dep
srinidhi-lwt Apr 23, 2026
148357c
Reorder workspaces so report-web builds before cli
droid-ash Apr 23, 2026
a87350e
Merge pull request #105 from final-run/fixing-build-issues
droid-ash Apr 23, 2026
1523bcb
Merge remote-tracking branch 'origin/main' into claude/epic-archimede…
droid-ash Apr 23, 2026
146ddb4
Phase 1: Extract @finalrun/cloud-core
droid-ash Apr 24, 2026
6d9d527
Phase 2: Lazy-loading scaffolding for local-runtime modules
droid-ash Apr 24, 2026
3c47721
Phase 3: Add @finalrun/local-runtime package + per-platform tarball b…
droid-ash Apr 24, 2026
dc63992
Phase 4: Bun compile + rewrite scripts/install.sh for binary distribu…
droid-ash Apr 25, 2026
483a7b0
Phase 5: Stop publishing to npm
droid-ash Apr 25, 2026
1d3ca36
Phase 6: Add finalrun upgrade subcommand
droid-ash Apr 25, 2026
96b4695
Honor FINALRUN_DIR in the binary's runtime resolver
droid-ash Apr 25, 2026
71858b1
Bake CLI version into the Bun-compiled binary
droid-ash Apr 25, 2026
d4b06f8
Add manual-trigger GitHub Actions release workflow
droid-ash Apr 25, 2026
fc009fa
Address CodeRabbit review on PR #111 (16 actionable findings)
droid-ash Apr 25, 2026
c77192e
Address remaining active CodeRabbit findings on PR #111
droid-ash Apr 25, 2026
8c50afd
Address 4 follow-up CodeRabbit findings on PR #111
droid-ash Apr 25, 2026
d185429
Merge pull request #111 from final-run/cli-binary-distribution
droid-ash Apr 25, 2026
fef35f3
Release v0.1.8
droid-ash Apr 25, 2026
318988d
Add CHANGELOG entry for v0.1.8
droid-ash Apr 25, 2026
f5206e3
Make CHANGELOG.md the single source of truth for release notes
droid-ash Apr 25, 2026
e8ff500
Merge pull request #113 from final-run/release/v0.1.8
droid-ash Apr 25, 2026
ad9f4e2
Fix release workflow: drop lockfile-dependent steps
droid-ash Apr 25, 2026
5234ca0
Merge pull request #114 from final-run/fix/release-workflow-no-lockfile
droid-ash Apr 25, 2026
a68db91
Fix install.sh curl|bash hang + simplify flags to --ci
droid-ash Apr 25, 2026
52ba25a
Fix misleading --ci hint in exhausted-platform-prompt warning
droid-ash Apr 25, 2026
a030fbc
Merge pull request #115 from final-run/fix/install-hang-rename-flag
droid-ash Apr 25, 2026
dfdc76d
Rewrite RELEASING.md in plain language + document the manual fallback
droid-ash Apr 25, 2026
44dec1a
RELEASING.md: drop unnecessary sections
droid-ash Apr 25, 2026
8ac6b45
Merge pull request #116 from final-run/docs/releasing-plain-language
droid-ash Apr 25, 2026
55ae5ae
Fix env-file zip when env comes from config.yaml default
droid-ash Apr 26, 2026
bcb92a5
Merge pull request #117 from final-run/fix/env-file-respect-config-de…
droid-ash Apr 26, 2026
b258aa3
Release v0.1.9
droid-ash Apr 26, 2026
e015a66
Merge pull request #118 from final-run/release/v0.1.9
droid-ash Apr 26, 2026
c4d40ef
Add Windows x64 release support
droid-ash Apr 26, 2026
f78ae01
release.yml: skip tag-uniqueness check in dry-run mode
droid-ash Apr 26, 2026
f311ba6
Drop dry_run workflow input
droid-ash Apr 26, 2026
3fe8346
Merge pull request #119 from final-run/claude/confident-khayyam-dc2041
droid-ash Apr 26, 2026
357e105
Release v0.1.10
droid-ash Apr 26, 2026
9d5b78e
Add install.ps1 + Windows branch in finalrun upgrade
droid-ash Apr 26, 2026
a50a556
install.ps1: fix two CodeRabbit review findings
droid-ash Apr 26, 2026
89fcbb4
Merge pull request #120 from final-run/release/v0.1.10
droid-ash Apr 26, 2026
36f56d3
README: trim install section, add Windows
droid-ash Apr 26, 2026
ff57e96
Merge pull request #121 from final-run/docs/readme-install-trim
droid-ash Apr 26, 2026
2e4bc20
package.json: skip workspaces without a build script
droid-ash Apr 26, 2026
8e883d3
Merge pull request #122 from final-run/fix/build-skip-workspaces-with…
droid-ash Apr 26, 2026
783a5db
installer: detect AI provider keys; docs: add Cloud API key page
droid-ash Apr 27, 2026
fec8fc3
installer: clickable URLs in the no-key block
droid-ash Apr 27, 2026
4d429dc
installer: revert OSC 8 hyperlinks; rely on terminal URL detection
droid-ash Apr 27, 2026
339c4f5
installer: underline URLs in the no-key block
droid-ash Apr 27, 2026
7ebd25b
Merge pull request #123 from final-run/claude/hungry-proskuriakova-6f…
droid-ash Apr 27, 2026
7e18920
installer: skip platform prompt when tools already installed; fix Xco…
droid-ash Apr 27, 2026
67e3035
Merge pull request #124 from final-run/claude/installer-skip-ready-pl…
droid-ash Apr 27, 2026
874a949
installer: auto-sync FinalRun skills (no prompt, skip when up to date)
droid-ash Apr 27, 2026
d9a29fd
Merge pull request #125 from final-run/claude/installer-skills-auto
droid-ash Apr 27, 2026
7035c80
installer: symlink into ~/.local/bin and verify PATH instead of telli…
droid-ash Apr 27, 2026
5983e45
installer: escalate the no-API-key message from yellow warn to red fail
droid-ash Apr 28, 2026
05c2e61
installer: address CodeRabbit findings on PR #126
droid-ash Apr 28, 2026
fc85212
Merge pull request #126 from final-run/claude/installer-local-bin-sym…
droid-ash Apr 28, 2026
d3ec2be
Unify TypeScript 6 across workspaces and fix TS 6 typings defaults.
arnoldlaishram Apr 28, 2026
4db3f1d
Fix clean-install build under TypeScript 6 and Vite 8.
droid-ash Apr 28, 2026
f248431
Merge pull request #127 from final-run/ts-version-update
droid-ash Apr 28, 2026
08da896
Merge branch 'main' into feat/multi-device-tests
droid-ash Apr 28, 2026
3b764c8
Document standalone binary install path on installation page
mintlify[bot] Apr 28, 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
29 changes: 29 additions & 0 deletions .changeset/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
# Changesets

This directory holds [Changesets](https://github.com/changesets/changesets) used
to coordinate versioning and publishing of the public packages in this monorepo:

- `@finalrun/common`
- `@finalrun/report-web`
- `@finalrun/finalrun-agent`

`@finalrun/goal-executor` and `@finalrun/device-node` are intentionally ignored
(they ship only as `bundleDependencies` inside `@finalrun/finalrun-agent`).

## Workflow

1. After making a change in a public package, run:
```
npx changeset
```
Pick the packages and the bump type (patch/minor/major) and write a short
summary. A markdown file appears in this directory.

2. Commit the changeset file alongside the code change in the same PR.

3. On `main`, to cut a release:
```
npx changeset version # bumps package.json versions, updates deps, writes CHANGELOG
git commit -am "chore: release"
npx changeset publish # publishes bumped packages to npm
```
11 changes: 11 additions & 0 deletions .changeset/config.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{
"$schema": "https://unpkg.com/@changesets/config@3.0.0/schema.json",
"changelog": "@changesets/cli/changelog",
"commit": false,
"fixed": [],
"linked": [],
"access": "public",
"baseBranch": "main",
"updateInternalDependencies": "patch",
"ignore": ["@finalrun/goal-executor", "@finalrun/device-node"]
}
13 changes: 13 additions & 0 deletions .changeset/publish-common-report-web.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
---
'@finalrun/common': minor
'@finalrun/report-web': minor
---

Publish `@finalrun/common` and `@finalrun/report-web` to npm for the first
time. Previously common shipped only as a `bundleDependency` of
`@finalrun/finalrun-agent`, and report-web was unpublished (consumed only
via yalc / local tarballs).

`@finalrun/report-web` is also fully migrated from a Next.js App Router
shell to a Vite SPA; the library exports (`/ui`, `/ui/styles.css`,
`/routes`) are unchanged.
51 changes: 51 additions & 0 deletions .github/release-notes-template.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
## Install

### macOS / Linux

One command. No Node.js, no npm, nothing else required.

```sh
curl -fsSL https://raw.githubusercontent.com/final-run/finalrun-agent/main/scripts/install.sh | bash
```

For CI / non-interactive environments (binary only, no runtime tarball, no prompts):

```sh
curl -fsSL https://raw.githubusercontent.com/final-run/finalrun-agent/main/scripts/install.sh | bash -s -- --ci
```

CI environments (`CI=1`) get this behavior automatically even without the flag.

### Windows (PowerShell)

```powershell
irm https://raw.githubusercontent.com/final-run/finalrun-agent/main/scripts/install.ps1 | iex
```

For CI / non-interactive environments:

```powershell
$env:FINALRUN_NON_INTERACTIVE=1; irm https://raw.githubusercontent.com/final-run/finalrun-agent/main/scripts/install.ps1 | iex
```

Windows hosts support **Android local execution and all cloud commands.** iOS local execution requires macOS (xcodebuild) — use `finalrun cloud` for iOS testing from Windows. First run may show a SmartScreen warning since the binary is not yet code-signed; click "More info → Run anyway".

## Artifacts

| Platform | Binary | Runtime tarball |
|---|---|---|
| macOS Apple Silicon | `finalrun-darwin-arm64` | `finalrun-runtime-<version>-darwin-arm64.tar.gz` |
| macOS Intel | `finalrun-darwin-x64` | `finalrun-runtime-<version>-darwin-x64.tar.gz` |
| Linux x86_64 | `finalrun-linux-x64` | `finalrun-runtime-<version>-linux-x64.tar.gz` |
| Linux ARM64 | `finalrun-linux-arm64` | `finalrun-runtime-<version>-linux-arm64.tar.gz` |
| Windows x86_64 | `finalrun-windows-x64.exe` | `finalrun-runtime-<version>-windows-x64.tar.gz` |

Each artifact ships with a matching `.sha256` sidecar.

## Upgrading from a previous version

```sh
finalrun upgrade
```

The CLI re-runs the install script with sensible defaults (auto-detects whether you previously installed the runtime tarball, preserves your install directory).
257 changes: 257 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,257 @@
name: Release

# Manual-only trigger. Click "Run workflow" in the Actions tab.
#
# Flow when triggered from main (or any branch):
# 1. Reads version from packages/cli/package.json on the chosen branch.
# 2. Fails fast if the matching tag (v<version>) already exists.
# 3. Builds all 5 Bun binaries (darwin-arm64/x64, linux-x64/arm64, windows-x64).
# 4. Builds all 5 runtime tarballs (per-platform).
# 5. Smoke-tests the Windows binary on a real windows-latest runner.
# 6. Tags the exact build SHA as v<version> and pushes the tag.
# 7. Creates a GitHub Release at that tag, attaches all artifacts +
# their .sha256 sidecars, marks it as "latest".
#
# To cut a release:
# 1. Bump packages/cli/package.json version on a branch (default main).
# 2. Commit + push to the branch.
# 3. Actions tab → Release → Run workflow → choose branch → Run.
on:
workflow_dispatch:
inputs:
branch:
description: 'Branch to release from'
required: false
default: 'main'

permissions:
contents: write # create tag + GitHub Release

# Serialize releases so two clicks of "Run workflow" can't race on tag
# creation, both build the full artifact set, and then duel on `git push`.
# cancel-in-progress: false → queue rather than abort the in-flight run.
concurrency:
group: release-${{ github.event.inputs.branch }}
cancel-in-progress: false

jobs:
build:
runs-on: ubuntu-24.04
outputs:
version: ${{ steps.version.outputs.version }}
tag: ${{ steps.version.outputs.tag }}
sha: ${{ steps.version.outputs.sha }}
is_latest: ${{ steps.version.outputs.is_latest }}
steps:
- uses: actions/checkout@v4
with:
ref: ${{ github.event.inputs.branch }}
fetch-depth: 0 # need history + tags so we can validate uniqueness

- name: Resolve & validate version
id: version
run: |
set -euo pipefail
VERSION=$(node -p "require('./packages/cli/package.json').version")
TAG="v${VERSION}"
SHA=$(git rev-parse HEAD)
BRANCH="${{ github.event.inputs.branch }}"

# Strict semver: 0.1.7, 1.2.3, 0.2.0-rc.1, 0.2.0-beta.1, etc.
# Rejects empty, non-numeric, or trailing-junk versions.
if ! [[ "$VERSION" =~ ^[0-9]+\.[0-9]+\.[0-9]+(-[0-9A-Za-z.-]+)?(\+[0-9A-Za-z.-]+)?$ ]]; then
echo "::error::Invalid semver in packages/cli/package.json: '$VERSION'"
exit 1
fi

# Refuse if the tag already exists locally OR on origin (the local
# check alone misses tags pushed by other contributors / CI runs).
if git rev-parse --verify --quiet "refs/tags/$TAG" >/dev/null; then
echo "::error::Tag $TAG already exists locally. Bump packages/cli/package.json or delete the existing tag."
exit 1
fi
if git ls-remote --tags --exit-code origin "refs/tags/$TAG" >/dev/null 2>&1; then
echo "::error::Tag $TAG already exists on origin. Bump packages/cli/package.json."
exit 1
fi

# Pre-release tags (e.g. 0.2.0-rc.1) should NOT clobber the
# "latest" pointer; only stable releases from main do that.
IS_LATEST="false"
if [[ "$BRANCH" == "main" && ! "$VERSION" =~ - ]]; then
IS_LATEST="true"
fi

echo "version=$VERSION" >> "$GITHUB_OUTPUT"
echo "tag=$TAG" >> "$GITHUB_OUTPUT"
echo "sha=$SHA" >> "$GITHUB_OUTPUT"
echo "is_latest=$IS_LATEST" >> "$GITHUB_OUTPUT"
echo "Releasing $TAG from $BRANCH commit $SHA (is-latest: $IS_LATEST)"

- uses: actions/setup-node@v4
with:
node-version: '20.19'
# No cache: 'npm' — this repo intentionally does not commit
# package-lock.json (.gitignore line 4), so setup-node's npm
# cache feature has nothing to key on.
# Same reason `npm install` instead of `npm ci`: ci requires a lockfile.
- run: npm install

- uses: oven-sh/setup-bun@v2
with:
bun-version: '1.3.11'

- name: Build all workspace dist files
run: |
npm run build --workspace=@finalrun/common
npm run build --workspace=@finalrun/cloud-core
npm run build --workspace=@finalrun/device-node
npm run build --workspace=@finalrun/goal-executor
npm run build --workspace=@finalrun/report-web
npm run build --workspace=@finalrun/finalrun-agent

- name: Build binaries (all 5 targets via Bun cross-compile)
run: ./scripts/build-binary.sh

- name: Build runtime tarballs (all 5 targets)
run: |
for t in darwin-arm64 darwin-x64 linux-x64 linux-arm64 windows-x64; do
npm run build:tarball --workspace=@finalrun/local-runtime -- --target="$t"
done

- name: Stage release artifacts
run: |
mkdir -p release-artifacts
cp dist/binaries/finalrun-* release-artifacts/
cp packages/local-runtime/dist/finalrun-runtime-*.tar.gz* release-artifacts/
ls -la release-artifacts/

- uses: actions/upload-artifact@v4
with:
name: release-artifacts
path: release-artifacts/
retention-days: 7

# Validate the Windows .exe actually executes on a real Windows host before
# we tag and publish. Bun cross-compiles the binary from ubuntu-24.04, so
# without this gate a Windows-specific runtime breakage (missing DLL, bad
# PE header, embedded-runtime mismatch) would only surface after release.
# Cheap insurance: ~30s of windows-latest runtime per release.
smoke-windows:
needs: build
runs-on: windows-latest
steps:
- uses: actions/download-artifact@v4
with:
name: release-artifacts
path: release-artifacts/

- name: Smoke-test the Windows binary
shell: pwsh
run: |
$exe = "release-artifacts/finalrun-windows-x64.exe"
if (-not (Test-Path $exe)) {
Write-Error "Expected $exe in downloaded artifacts but did not find it."
exit 1
}
Write-Host "Running: $exe --version"
& $exe --version
if ($LASTEXITCODE -ne 0) {
Write-Error "finalrun.exe --version exited $LASTEXITCODE"
exit 1
}
Write-Host "Running: $exe --help"
& $exe --help
if ($LASTEXITCODE -ne 0) {
Write-Error "finalrun.exe --help exited $LASTEXITCODE"
exit 1
}

release:
needs: [build, smoke-windows]
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v4
with:
ref: ${{ needs.build.outputs.sha }}
fetch-depth: 0

- uses: actions/download-artifact@v4
with:
name: release-artifacts
path: release-artifacts/

- name: Tag the build commit and push the tag
env:
TAG: ${{ needs.build.outputs.tag }}
SHA: ${{ needs.build.outputs.sha }}
run: |
set -euo pipefail
git config user.name "github-actions[bot]"
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
git tag -a "$TAG" "$SHA" -m "Release $TAG"
git push origin "$TAG"

- name: Build release notes from template + CHANGELOG section
env:
VERSION: ${{ needs.build.outputs.version }}
run: |
set -euo pipefail

# Extract the matching `## [VERSION]` section from CHANGELOG.md.
# Maintainers must update CHANGELOG.md (manually, or via Claude)
# in the release PR — the workflow refuses to publish without it,
# so a release can't accidentally go out without notes.
CHANGELOG_SECTION=$(awk -v marker="## [${VERSION}]" '
index($0, marker) == 1 { capture = 1; print; next }
capture && /^## \[/ { exit }
capture { print }
' CHANGELOG.md)

if [ -z "$CHANGELOG_SECTION" ]; then
echo "::error::CHANGELOG.md has no '## [${VERSION}]' section."
echo "::error::Add an entry under that heading describing what changed in this release, then re-run the workflow."
exit 1
fi

# Combine the static install instructions (from the template)
# with the version-specific changelog section. The template is
# the same across releases; the changelog section changes.
{
cat .github/release-notes-template.md
echo ""
echo "---"
echo ""
echo "## What's changed in this release"
echo ""
# Skip the first line (`## [VERSION] - DATE`) since we just
# printed our own heading; keep the rest verbatim.
echo "$CHANGELOG_SECTION" | tail -n +2
} > /tmp/release-notes.md

echo "::group::Final release notes"
cat /tmp/release-notes.md
echo "::endgroup::"

- name: Create GitHub Release with all artifacts
env:
GH_TOKEN: ${{ github.token }}
TAG: ${{ needs.build.outputs.tag }}
VERSION: ${{ needs.build.outputs.version }}
IS_LATEST: ${{ needs.build.outputs.is_latest }}
run: |
set -euo pipefail
# Pre-releases (e.g. 0.2.0-rc.1) and releases from non-main
# branches don't update the "latest" pointer that install.sh and
# the README badges resolve against.
extra_flags=()
if [ "$IS_LATEST" = "true" ]; then
extra_flags+=(--latest)
else
extra_flags+=(--prerelease)
fi
gh release create "$TAG" \
--title "FinalRun $VERSION" \
--notes-file /tmp/release-notes.md \
"${extra_flags[@]}" \
release-artifacts/*
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
# Dependencies
node_modules/
packages/*/node_modules/
package-lock.json

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

Do not ignore the root package-lock.json.

This repo uses npm ci, so the lockfile needs to stay tracked for reproducible installs and workspace dependency updates. Ignoring it will make dependency bumps harder to review and can leave CI without the exact resolved tree.

Proposed fix
-package-lock.json
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
package-lock.json
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In @.gitignore at line 4, Remove the ignore entry "package-lock.json" from the
ignore list, ensure the repository tracks the root package-lock.json (if it was
previously ignored run git rm --cached package-lock.json then git add
package-lock.json and commit), and update the ignore rules so only any
intentionally ignored lockfiles (e.g., for nested workspaces) remain excluded.
This will restore tracking of the root lockfile used by npm ci for reproducible
installs.


# TypeScript build output
packages/*/dist/
Expand All @@ -23,6 +24,7 @@ packages/*/coverage/

# npm pack artifacts
/finalrun-agent-*.tgz
packages/*/*.tgz

# Local environment files
.env
Expand Down Expand Up @@ -59,3 +61,4 @@ pnpm-debug.log*
/.codex

/.gemini
dist/
Loading