Skip to content

Commit 29e3528

Browse files
chore: merge main into validation branch
Resolved conflict in `script/build.ts`: kept both `ALTIMATE_CLI_CHANGELOG` (from main) and `ALTIMATE_VALIDATE_*` constants (from validation branch) in the build define block.
2 parents 525a27d + 8071ed2 commit 29e3528

37 files changed

Lines changed: 3670 additions & 72 deletions

.github/workflows/ci.yml

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,14 @@ jobs:
1111
name: TypeScript
1212
runs-on: ubuntu-latest
1313
steps:
14-
- uses: actions/checkout@v4
14+
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
1515

16-
- uses: oven-sh/setup-bun@v2
16+
- uses: oven-sh/setup-bun@ecf28ddc73e819eb6fa29df6b34ef8921c743461 # v2
17+
with:
18+
bun-version: "1.3.9"
1719

1820
- name: Cache Bun dependencies
19-
uses: actions/cache@v4
21+
uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4
2022
with:
2123
path: ~/.bun/install/cache
2224
key: bun-${{ runner.os }}-${{ hashFiles('bun.lock') }}
@@ -39,14 +41,14 @@ jobs:
3941
name: Lint
4042
runs-on: ubuntu-latest
4143
steps:
42-
- uses: actions/checkout@v4
44+
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
4345

44-
- uses: actions/setup-python@v5
46+
- uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5
4547
with:
4648
python-version: "3.12"
4749

4850
- name: Install linter
49-
run: pip install ruff
51+
run: pip install ruff==0.9.10
5052

5153
- name: Lint
5254
run: ruff check src
@@ -59,9 +61,9 @@ jobs:
5961
matrix:
6062
python-version: ["3.10", "3.11", "3.12"]
6163
steps:
62-
- uses: actions/checkout@v4
64+
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
6365

64-
- uses: actions/setup-python@v5
66+
- uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5
6567
with:
6668
python-version: ${{ matrix.python-version }}
6769
cache: 'pip'

.github/workflows/docs.yml

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,10 @@ jobs:
2020
runs-on: ubuntu-latest
2121
steps:
2222
- name: Checkout
23-
uses: actions/checkout@v4
23+
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
2424

2525
- name: Setup Python
26-
uses: actions/setup-python@v5
26+
uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5
2727
with:
2828
python-version: "3.12"
2929
cache: "pip"
@@ -36,10 +36,10 @@ jobs:
3636
run: mkdocs build -f docs/mkdocs.yml -d site
3737

3838
- name: Setup Pages
39-
uses: actions/configure-pages@v5
39+
uses: actions/configure-pages@983d7736d9b0ae728b81ab479565c72886d7745b # v5
4040

4141
- name: Upload artifact
42-
uses: actions/upload-pages-artifact@v3
42+
uses: actions/upload-pages-artifact@56afc609e74202658d3ffba0e8f6dda462b719fa # v3
4343
with:
4444
path: docs/site
4545

@@ -52,4 +52,4 @@ jobs:
5252
steps:
5353
- name: Deploy to GitHub Pages
5454
id: deployment
55-
uses: actions/deploy-pages@v4
55+
uses: actions/deploy-pages@d6db90164ac5ed86f2b6aed7e0febac5b3c0c03e # v4

.github/workflows/publish-engine.yml

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,22 +13,23 @@ jobs:
1313
permissions:
1414
id-token: write
1515
steps:
16-
- uses: actions/checkout@v4
16+
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
1717

18-
- uses: actions/setup-python@v5
18+
- uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5
1919
with:
2020
python-version: "3.12"
2121
cache: "pip"
2222
cache-dependency-path: packages/altimate-engine/pyproject.toml
2323

2424
- name: Install build tools
25-
run: pip install build
25+
run: pip install build==1.2.2
2626

2727
- name: Build package
2828
run: python -m build
2929
working-directory: packages/altimate-engine
3030

3131
- name: Publish to PyPI
32-
uses: pypa/gh-action-pypi-publish@release/v1
32+
uses: pypa/gh-action-pypi-publish@ed0c53931b1dc9bd32cbe73a98c7f6766f8a527e # release/v1
3333
with:
3434
packages-dir: packages/altimate-engine/dist/
35+
skip-existing: true

.github/workflows/release.yml

Lines changed: 23 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -9,28 +9,28 @@ concurrency:
99
group: release
1010
cancel-in-progress: false
1111

12-
permissions:
13-
contents: write
14-
id-token: write
15-
1612
env:
1713
GH_REPO: AltimateAI/altimate-code
1814

1915
jobs:
2016
build:
2117
name: Build (${{ matrix.os }})
2218
runs-on: ubuntu-latest
19+
permissions:
20+
contents: read
2321
strategy:
2422
fail-fast: false
2523
matrix:
2624
os: [linux, darwin, win32]
2725
steps:
28-
- uses: actions/checkout@v4
26+
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
2927

30-
- uses: oven-sh/setup-bun@v2
28+
- uses: oven-sh/setup-bun@ecf28ddc73e819eb6fa29df6b34ef8921c743461 # v2
29+
with:
30+
bun-version: "1.3.9"
3131

3232
- name: Cache Bun dependencies
33-
uses: actions/cache@v4
33+
uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4
3434
with:
3535
path: ~/.bun/install/cache
3636
key: bun-${{ runner.os }}-${{ hashFiles('bun.lock') }}
@@ -50,7 +50,7 @@ jobs:
5050
MODELS_DEV_API_JSON: test/tool/fixtures/models-api.json
5151

5252
- name: Upload build artifacts
53-
uses: actions/upload-artifact@v4
53+
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
5454
with:
5555
name: dist-${{ matrix.os }}
5656
path: packages/altimate-code/dist/
@@ -59,13 +59,17 @@ jobs:
5959
name: Publish to npm
6060
needs: build
6161
runs-on: ubuntu-latest
62+
permissions:
63+
contents: read
6264
steps:
63-
- uses: actions/checkout@v4
65+
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
6466

65-
- uses: oven-sh/setup-bun@v2
67+
- uses: oven-sh/setup-bun@ecf28ddc73e819eb6fa29df6b34ef8921c743461 # v2
68+
with:
69+
bun-version: "1.3.9"
6670

6771
- name: Cache Bun dependencies
68-
uses: actions/cache@v4
72+
uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4
6973
with:
7074
path: ~/.bun/install/cache
7175
key: bun-${{ runner.os }}-${{ hashFiles('bun.lock') }}
@@ -76,7 +80,7 @@ jobs:
7680
run: bun install
7781

7882
- name: Download all build artifacts
79-
uses: actions/download-artifact@v4
83+
uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4
8084
with:
8185
pattern: dist-*
8286
path: packages/altimate-code/dist/
@@ -124,23 +128,23 @@ jobs:
124128
contents: read
125129
id-token: write
126130
steps:
127-
- uses: actions/checkout@v4
131+
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
128132

129-
- uses: actions/setup-python@v5
133+
- uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5
130134
with:
131135
python-version: "3.12"
132136
cache: 'pip'
133137
cache-dependency-path: packages/altimate-engine/pyproject.toml
134138

135139
- name: Install build tools
136-
run: pip install build
140+
run: pip install build==1.2.2
137141

138142
- name: Build package
139143
run: python -m build
140144
working-directory: packages/altimate-engine
141145

142146
- name: Publish to PyPI
143-
uses: pypa/gh-action-pypi-publish@release/v1
147+
uses: pypa/gh-action-pypi-publish@ed0c53931b1dc9bd32cbe73a98c7f6766f8a527e # release/v1
144148
with:
145149
packages-dir: packages/altimate-engine/dist/
146150
skip-existing: true
@@ -152,7 +156,7 @@ jobs:
152156
permissions:
153157
contents: write
154158
steps:
155-
- uses: actions/checkout@v4
159+
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
156160
with:
157161
fetch-depth: 0
158162

@@ -206,14 +210,14 @@ jobs:
206210
CURRENT_TAG: ${{ github.ref_name }}
207211

208212
- name: Download all build artifacts
209-
uses: actions/download-artifact@v4
213+
uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4
210214
with:
211215
pattern: dist-*
212216
path: packages/altimate-code/dist/
213217
merge-multiple: true
214218

215219
- name: Create GitHub Release
216-
uses: softprops/action-gh-release@v2
220+
uses: softprops/action-gh-release@a06a81a03ee405af7f2048a818ed3f03bbf83c7b # v2
217221
with:
218222
body_path: notes.md
219223
draft: false

CHANGELOG.md

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,39 @@ All notable changes to this project will be documented in this file.
55
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
66
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
77

8+
## [0.2.4] - 2026-03-04
9+
10+
### Added
11+
12+
- E2E tests for npm install pipeline: postinstall script, bin wrapper, and publish output (#50)
13+
14+
## [0.2.3] - 2026-03-04
15+
16+
### Added
17+
18+
- Postinstall welcome banner and changelog display after upgrade (#48)
19+
20+
### Fixed
21+
22+
- Security: validate well-known auth command type before execution, add confirmation prompt (#45)
23+
- CI/CD: SHA-pin all GitHub Actions, per-job least-privilege permissions (#45)
24+
- MCP: fix copy-paste log messages, log init errors, prefix floating promises (#45)
25+
- Session compaction: clean up compactionAttempts on abort to prevent memory leak (#45)
26+
- Telemetry: retry failed flush events once with buffer-size cap (#45, #46)
27+
- Telemetry: flush events before process exit (#46)
28+
- TUI: resolve worker startup crash from circular dependency (#47)
29+
- CLI: define ALTIMATE_CLI build-time constants for correct version reporting (#41)
30+
- Address 4 issues found in post-v0.2.2 commits (#49)
31+
- Address remaining code review issues from PR #39 (#43)
32+
33+
### Changed
34+
35+
- CI/CD: optimize pipeline with caching and parallel builds (#42)
36+
37+
### Docs
38+
39+
- Add security FAQ (#44)
40+
841
## [0.2.2] - 2026-03-05
942

1043
### Fixed

docs/docs/configure/telemetry.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,12 @@ We collect the following categories of events:
3636

3737
Each event includes a timestamp, anonymous session ID, and the CLI version.
3838

39+
## Delivery & Reliability
40+
41+
Telemetry events are buffered in memory and flushed periodically. If a flush fails (e.g., due to a transient network error), events are re-added to the buffer for one retry. On process exit, the CLI performs a final flush to avoid losing events from the current session.
42+
43+
No events are ever written to disk — if the process is killed before the final flush, buffered events are lost. This is by design to minimize on-disk footprint.
44+
3945
## Why We Collect Telemetry
4046

4147
Telemetry helps us:

docs/docs/getting-started.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ Unlike general-purpose coding agents, altimate is built for data teams:
2020
npm install -g @altimateai/altimate-code
2121
```
2222

23+
After install, you'll see a welcome banner with quick-start commands. On upgrades, the banner also shows what changed since your previous version.
24+
2325
## First run
2426

2527
```bash

0 commit comments

Comments
 (0)