Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
99 commits
Select commit Hold shift + click to select a range
bc7936b
Integrate tiered local achievements on the v2.4.1 safety baseline
Carl723000 Oct 5, 2026
0fd82ef
Prevent argument-stack overflow on large Claude histories
Carl723000 Oct 5, 2026
ba1f5a2
Document the local achievements candidate and privacy boundaries
Carl723000 Oct 5, 2026
4e16758
Include phase-end RSS in large-history diagnostics
Carl723000 Oct 5, 2026
1ab1859
Keep the Chinese achievement privacy inventory aligned
Carl723000 Oct 5, 2026
87326a4
Label mobile achievement catalog as 2.4.2
Carl723000 Oct 5, 2026
e990fe0
Improve achievement gallery and preview-first sharing UX
Carl723000 Oct 5, 2026
0907da5
Document achievement UX and exact-preview privacy contract
Carl723000 Oct 5, 2026
3116d0a
fix(achievements): unlock verified Codex milestones and simplify prog…
Carl723000 Oct 6, 2026
58ebd63
feat(achievements): give every series distinct bundled artwork
Carl723000 Oct 6, 2026
bcd61cc
docs(achievements): document verified subsets and distinct integer-fi…
Carl723000 Oct 6, 2026
c960090
fix(perf): avoid stack overflow in dense tool-result appends
Carl723000 Oct 7, 2026
18f443e
fix(diagnostics): report bounded Claude refresh failure stages
Carl723000 Oct 7, 2026
08c49ff
fix(perf): bound failed Claude refresh retries by source revision
Carl723000 Oct 7, 2026
982d927
fix(perf): avoid recursive Codex primary lineage ordering
Carl723000 Oct 7, 2026
f72398b
test(perf): measure synthetic Codex worker lifecycle
Carl723000 Oct 7, 2026
a3d631d
test(native): guard isolated Extension Host startup
Carl723000 Oct 7, 2026
5dc64ca
test(native): stage guarded real-host diagnostics
Carl723000 Oct 7, 2026
a63d9b1
test(native): stage bundled achievement assets
Carl723000 Oct 7, 2026
03eea3c
test(native): await panel disposal and inspect single previews
Carl723000 Oct 7, 2026
9ba8e6f
test(native): verify warm I/O and awaited provider retirement
Carl723000 Oct 7, 2026
231e1ed
fix(diagnostics): report cached Claude warm work explicitly
Carl723000 Oct 8, 2026
fea8879
test(native): add bounded watch and achievement resource soak
Carl723000 Oct 8, 2026
f22402b
test(native): retain anonymous resource-soak phase evidence
Carl723000 Oct 8, 2026
2b74de4
test(native): preserve exact focus evidence on diagnostic failures
Carl723000 Oct 8, 2026
345fd76
test(native): classify only owned anonymous soak failures
Carl723000 Oct 8, 2026
3752f76
fix(watch): keep installed Claude callbacks live during setup
Carl723000 Oct 8, 2026
5b5b73a
test(native): observe real background window resource bounds
Carl723000 Oct 8, 2026
b996b3a
fix(achievements): separate proof and render revisions
Carl723000 Oct 8, 2026
555780a
fix(achievements): separate evidence states and quiet baselines
Carl723000 Oct 8, 2026
42024a1
feat(achievements): add display-only Token stages and face progress
Carl723000 Oct 8, 2026
cb1d6b6
feat(achievements): highlight stable badge and goal overviews
Carl723000 Oct 8, 2026
daa1a0d
fix(achievements): distinguish saved actions from imported history
Carl723000 Oct 8, 2026
47307a9
feat(achievements): persist bounded awards with cross-host clear fences
Carl723000 Oct 8, 2026
53c6774
feat(achievements): confirm quiet notices with shared cooldown
Carl723000 Oct 8, 2026
7854889
feat(achievements): prepare bounded recent views and atomic pin intents
Carl723000 Oct 8, 2026
5e00b00
feat(achievements): show quiet bounded recent record views
Carl723000 Oct 8, 2026
24225b4
feat(achievements): persist deliberate showcase pin controls
Carl723000 Oct 8, 2026
28dda26
fix(achievements): release hidden provider pins safely
Carl723000 Oct 8, 2026
97dc26a
fix(achievements): validate restored dashboard readiness
Carl723000 Oct 8, 2026
25b52c9
fix(build): restrict TypeScript discovery to source tree
Carl723000 Oct 8, 2026
081a2a5
feat(achievements): add explicit bounded unread summaries
Carl723000 Oct 8, 2026
650ffbc
feat(achievements): prove Claude tail-origin volume deltas
Carl723000 Oct 8, 2026
367a7b5
feat(achievements): verify Codex tail-origin proof across workers
Carl723000 Oct 8, 2026
f65fb2c
feat(achievements): persist verified Codex growth independently of re…
Carl723000 Oct 8, 2026
50be4ca
feat(achievements): separate quiet notice preference from awards
Carl723000 Oct 8, 2026
56ac505
Wire accepted Claude usage into non-rendering achievement awards
Carl723000 Oct 8, 2026
ec11661
Prove Claude cache-creation tier crossings from native tail usage
Carl723000 Oct 8, 2026
0cdfb51
Clarify model achievements and preserve current-tab disclosures
Carl723000 Oct 8, 2026
8c5ad6b
Group legacy milestones into growing achievement themes
Carl723000 Oct 8, 2026
2523fab
Keep keyboard focus when merged legacy pin controls disappear
Carl723000 Oct 8, 2026
e6b457a
Show saved local feature steps without inferring historical actions
Carl723000 Oct 8, 2026
207a7d7
Use accurate exploration artwork and a quiet one-shot badge reveal
Carl723000 Oct 8, 2026
b2e4f72
feat: link badges to current cached statistics with safe return
Carl723000 Oct 8, 2026
765b6bd
feat(quota): prepare observation-anchored weekly pace calculation
Carl723000 Oct 10, 2026
14d12c1
feat(achievements): prepare frozen exact-component API reference evid…
Carl723000 Oct 10, 2026
ec570a4
feat(achievements): prepare output and repeated-task collaboration ev…
Carl723000 Oct 10, 2026
4dbd31f
feat(achievements): materialize native TTL-complete reference usage
Carl723000 Oct 10, 2026
f0fa407
feat(achievements): derive independently verified API reference scopes
Carl723000 Oct 10, 2026
1a4998b
fix(achievements): pool effort evidence within each verified root
Carl723000 Oct 10, 2026
fa92615
feat(sharing): prepare privacy-safe API equivalent heatmap artifacts
Carl723000 Oct 10, 2026
1e53dc8
feat(achievements): adopt versioned joint rules and API resource badges
Carl723000 Oct 10, 2026
0751296
style(achievements): add restrained monetary cues to API emblems
Carl723000 Oct 10, 2026
4d8b5ff
feat: prepare bounded daily pricing and original-time quota projections
Carl723000 Oct 10, 2026
f12f6c7
feat(achievements): derive bounded per-effort reference statistics
Carl723000 Oct 10, 2026
2d2a6f3
fix(sharing): withhold unpriced model and component coverage
Carl723000 Oct 10, 2026
ff57587
feat(achievements): capture bounded same-reference monetary origins
Carl723000 Oct 10, 2026
ce3eac7
feat(achievements): store price-bound cumulative usage receipts
Carl723000 Oct 10, 2026
b1dc96f
feat: integrate reference achievements, sharing and quota pace
Carl723000 Oct 10, 2026
f060217
test(perf): include default-on achievements in dashboard cohorts
Carl723000 Oct 10, 2026
b6cbee9
docs: align candidate behavior and privacy boundaries
Carl723000 Oct 10, 2026
2cc45f9
test(perf): bound current monetary scopes on dense and multi-file inputs
Carl723000 Oct 10, 2026
b4c07ce
test(native): capture bounded setup readback checkpoints
Carl723000 Oct 10, 2026
7c92ca2
chore(tests): remove extra perf-driver end-of-file blank line
Carl723000 Oct 10, 2026
b75034d
test(native): retain final readback when setup fails early
Carl723000 Oct 10, 2026
62ed151
fix(sharing): select achievements from single-provider gallery
Carl723000 Oct 10, 2026
c7909e9
test(ui): align catalogue, themes and lazy sharing responses
Carl723000 Oct 10, 2026
d445b09
test(native): wait for bounded public readback convergence
Carl723000 Oct 10, 2026
1e24335
test(native): verify watched appends before opening panels
Carl723000 Oct 10, 2026
b667727
docs: align agent guidance and versioned data contracts
Carl723000 Oct 11, 2026
be40b9a
docs: explain provisional current-cycle equivalent estimates
Carl723000 Oct 11, 2026
27a761d
docs: preserve meaningful commits in future PR merges
Carl723000 Oct 12, 2026
f07a140
fix: recover achievement evidence and compact overview
Carl723000 Oct 12, 2026
05a5b78
feat: extend Claude-heavy achievement progression
Carl723000 Oct 12, 2026
c4dcc93
fix: bind calendar proof cache to indexed cursor
Carl723000 Oct 12, 2026
f973e11
fix: retain witnessed calendar bounds and accessible ranks
Carl723000 Oct 13, 2026
dd24ed8
test: align calendar fixture display and proof scopes
Carl723000 Oct 13, 2026
b8f014e
fix: reconcile achievement evidence and review presentation
Carl723000 Oct 13, 2026
78ba9ca
fix: recover Codex evidence and compact achievement controls
Carl723000 Oct 13, 2026
a80d503
fix: resolve final achievement review findings and preserve release g…
Carl723000 Oct 14, 2026
e079470
docs: prepare achievement release contracts and limitations
Carl723000 Oct 14, 2026
fffd24d
test: verify heatmap timezone contracts across Node runtimes
Carl723000 Oct 14, 2026
f530f8d
docs: default project PR integration to squash and merge
Carl723000 Oct 14, 2026
49f1af8
feat: add achievement history dates and local recalibration
Carl723000 Oct 15, 2026
0f469d3
feat: restore Codex usage from compressed rollouts
Carl723000 Oct 15, 2026
422e7b4
feat: refine achievement sharing and weekly ranks
Carl723000 Oct 15, 2026
f73b14f
fix: compact expanded achievement levels
Carl723000 Oct 15, 2026
3feaa42
docs: prepare 2.5.0 release and reconcile contributor credits
Carl723000 Oct 15, 2026
8bc07ef
test: follow Share and compare accessible chart names
Carl723000 Oct 15, 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
  •  
  •  
  •  
32 changes: 28 additions & 4 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -36,11 +36,23 @@ jobs:
run: npm ci
- name: Run Node tests
run: npm test
- name: Setup Node.js for native Zstd coverage
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4
with:
node-version: '22'
- name: Verify native compressed-log compatibility
run: |
node -e "if (!require('./out/providers/codex/codexZstd').supportsCodexZstd()) throw new Error('Native Zstd is unavailable')"
node --test out/test/codexZstd.test.js out/test/codexManifest.test.js out/test/codexCompressed*.test.js

ui:
name: UI Test
ui_shards:
name: UI Shard ${{ matrix.shard }}/4
runs-on: ubuntu-latest
timeout-minutes: 20
timeout-minutes: 35
strategy:
fail-fast: false
matrix:
shard: [1, 2, 3, 4]
container:
image: mcr.microsoft.com/playwright:v1.61.1-noble
options: --ipc=host
Expand All @@ -57,7 +69,19 @@ jobs:
- name: Install dependencies
run: npm ci
- name: Run full Webview gate
run: npm run test:ui
run: npm run test:ui -- --fully-parallel --workers=1 --shard=${{ matrix.shard }}/4

# Preserve the stable required check and fail closed on any failed,
# cancelled or skipped shard. Each shard has its own VM/server/storage.
ui:
name: UI Test
needs: [ui_shards]
if: always()
runs-on: ubuntu-latest
timeout-minutes: 5
steps:
- name: Require every UI shard to pass
run: test '${{ needs.ui_shards.result }}' = 'success'

package:
name: Release Package
Expand Down
101 changes: 81 additions & 20 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,34 @@ Simplified-Chinese review copy lives in [AGENTS.zh-CN.md](AGENTS.zh-CN.md).
the same provider-aware render functions and the same CSS contract.
- Prefer token-attribution accuracy over billing precision. Keep exact totals,
labelled estimates, and point-in-time quota observations as separate concepts.
- Keep the extension local-first, lightweight, and read-mostly. Never modify
Claude or Codex conversation JSONL files. Treat credential handling as security-sensitive
and preserve the existing reviewed behavior.
- Add no new runtime dependencies in v2.3.0.
- Keep the extension local-first, lightweight, and read-mostly. Usage ingestion
and derived-data clearing never rewrite or delete provider conversation JSONL.
The existing, separately opt-in Session Actions feature may move exactly one
confirmed Claude log to the OS trash; this is not authority for an agent to
delete logs. Codex source logs remain read-only. Treat credential handling as
security-sensitive and preserve the existing reviewed behavior.
- Add no new runtime dependencies for the current candidate without explicit
maintainer approval.

## Maintainer decisions and agent execution

- The maintainer owns user value, feature scope, defaults, disclosure and release
promises. Agents own implementation, counterexamples, regression tests,
performance measurements and evidence integration within the authorized scope.
Routine implementation choices do not require a new product decision.
- For a feature, identify the user question, observable result, default/off/reset
behavior and privacy/resource constraints. Prefer the smallest coherent change;
code size, badge counts and green-test totals are not measures of user benefit.
- Read documentation by task: `ARCHITECTURE.md` for module/data-flow changes,
`LOCAL-DATA.md` and its versioned baseline for retained/exported fields and
clearing, and `CONTRIBUTING.md` for test/package/release workflows. Small copy
edits do not require replaying every historical plan. Task-local worktree paths,
permissions and acceptance status belong in the current handoff, not this policy.
- Distinguish source integration, synthetic tests, native behavior and user
acceptance. Missing data is not zero; passing fixtures do not establish that
upstream logs always satisfy the same assumptions. Reuse relevant independent
findings; seek a new bounded assessment for a substantive unresolved question,
not for every routine fix or delivery.

## Architecture boundaries

Expand All @@ -28,8 +52,9 @@ Simplified-Chinese review copy lives in [AGENTS.zh-CN.md](AGENTS.zh-CN.md).
and content-analysis reducers retained for exact compatibility.
- `src/claudeIncrementalIndex.ts`: the production in-memory per-file Claude
usage index, append-tail parser, exact global deduplication, and materialized
dashboard aggregates. Runtime refreshes must not fall back to a full-corpus
body read or full-record aggregation.
dashboard aggregates. Unchanged warm refreshes must not fall back to a
full-corpus body read or full-record aggregation; documented correctness-first
content-analysis replay is a separate path, not the default for each watcher event.
- `src/providers/providerTypes.ts` and provider adapters: provider-neutral token,
coverage, confidence, and limit contracts. Do not erase provider semantics.
- `src/providers/codex/`: allowed-root discovery, schema guards, exact-request
Expand All @@ -41,7 +66,9 @@ Simplified-Chinese review copy lives in [AGENTS.zh-CN.md](AGENTS.zh-CN.md).
direct configuration reads.
- `src/statusBar.ts`: status-bar token/cost/quota/context presentation.
- `src/webview.ts`: the single provider-aware Claude/Codex dashboard HTML and
client behavior. Compare never sums cost or quota across providers.
client behavior, plus existing host-side receipt/notice ownership. New pure
calculations and eligibility rules belong in domain modules, not another
renderer or duplicated scan. Compare never sums cost or quota across providers.
- `src/i18n.ts`: all user-facing copy for all eight UI locales.
- `src/types.ts`: shared contracts.
- Read `ARCHITECTURE.md` before changing module ownership or the data flow. If
Expand All @@ -54,8 +81,9 @@ Simplified-Chinese review copy lives in [AGENTS.zh-CN.md](AGENTS.zh-CN.md).
session IDs, credentials, or local usernames. New v2.3.0 performance
diagnostics must not log them either; do not broaden older diagnostic output
without an explicit privacy review.
- Codex discovery is allowlisted to `$CODEX_HOME/sessions/**/*.jsonl` and
`$CODEX_HOME/archived_sessions/**/*.jsonl` (default `~/.codex`). Never read
- Codex usage discovery is allowlisted to `.jsonl` and `.jsonl.zst` regular files
recursively under `$CODEX_HOME/sessions` and `$CODEX_HOME/archived_sessions`
(default `~/.codex`); reject symlinks and non-regular files. Never read
`auth.json`, SQLite databases, config secrets, keychains, browser state, or
unknown files for Codex usage.
- Additionally, `$CODEX_HOME/session_index.jsonl` may be streamed solely to
Expand Down Expand Up @@ -102,11 +130,12 @@ Simplified-Chinese review copy lives in [AGENTS.zh-CN.md](AGENTS.zh-CN.md).
returns to the low-power incremental path.
- Claude runtime refreshes use the in-memory per-file index in
`claudeIncrementalIndex.ts`. An unchanged refresh reads zero JSONL bodies;
append/truncate/replace/move/delete work is limited to affected files and
affected aggregate groups while preserving the established response-identity
and content-analysis semantics. A new Extension Host may still perform one
cold in-memory build; this is distinct from rereading the corpus after every
watcher event.
an ordinary verified single-file append reads its tail and updates affected
groups. With content analysis enabled, unsafe truncation/replacement/deletion,
changed source order or UUID first-owner changes can require an ordered wider
replay to preserve exact semantics. Report that cost separately; never turn it
into unconditional full-corpus work on each watcher event. A new Extension Host
may still perform one cold in-memory build.
- Codex optimization advice uses structural numeric signals only. Never inspect
or persist prompt/response/command bodies or tool arguments.

Expand All @@ -128,6 +157,15 @@ npx @vscode/vsce package
- User-facing changes require a `CHANGELOG.md` entry and matching documentation.
- UI changes also require an F5 Extension Development Host smoke test; release
candidates require an installed-VSIX smoke test on macOS and Linux when available.
- Before F5, installation or a second Code instance uses fixtures, identify and
isolate every writable profile, extension/shared/agent store, global/workspace
storage, provider home, derived cache and lock path. A window or worktree alone
is not isolation. Follow `tests/native/README.md`, verify actual storage paths
and compare selected normal-state metadata/hashes before and after. Unexplained
differences remain unknown, not proof of non-disruption. Never replace the
daily installation or run a plain default-profile install as a test shortcut.
- Documentation-only edits verify affected facts, links and document/policy
tests. They do not establish new runtime, native, performance or release passes.

### UI rendering-environment fidelity

Expand All @@ -138,13 +176,16 @@ that invariant. Visual snapshots produced before this is true are not acceptance
evidence.
Variable values must come from the registered values of VS Code's built-in themes;
do not mix in another color system.
This is a necessary rendering-fidelity guard, not native acceptance for resource
URIs, fonts, screen readers, actual zoom or installed-package behavior.

### Interaction-state acceptance

Webview refresh is a full-page replacement. Every new user-interactive state
(expand/collapse, sorting, filtering, or selection) must use the existing
persistence mechanism and include an operation → reload → state-remains test.
A static assertion of the first render is not acceptance evidence.
Webview updates may use a full-page replacement or a provider-panel live patch.
Every new user-interactive state (expand/collapse, sorting, filtering, or
selection) must use the existing persistence mechanism and include an operation
→ update → reload → state-remains test, preserving relevant focus and scroll
anchors. A static assertion of the first render is not acceptance evidence.

## Localization and review documents

Expand All @@ -167,7 +208,27 @@ A static assertion of the first render is not acceptance evidence.
- Tracked files default to mode `100644` and LF endings. Use `100755` only for a
real directly executed program, register it in the repository policy test,
and verify modes with `git ls-files --stage` before committing.
- Keep commits focused. The repository squash-merges reviewed PRs to `main`.
- This project defaults to **Squash and merge**: each reviewed PR contributes
one commit to `main`, including multi-stage features, performance work and
version development. A normal merge or rebase merge is an exception only when
explicitly specified by the maintainer for that PR.
- Local progress commits are separate from the PR merge strategy. Preserve
meaningful implementation, test and fix commits until the PR is merged so
stages remain available for verification and rollback; do not pre-squash them
merely to prepare a PR. Preserving their original SHAs in `main` is not the default.
- Commit at meaningful, verifiable milestones, not per file, agent turn or
contribution-graph target. Keep a logical change with its regression tests and
necessary documentation together. Fold trivial formatting, wording and immediate
fixups into related unpublished work; retain separate commits for independently
useful fixes or evidence-backed milestones until merge. Do not rewrite published
history or shared branches to apply this default. Leave previously squashed
history unchanged; do not reconstruct or re-merge old commits merely to restore
contribution-graph counts.
- Preserve the original PR and truthful authorship when squashing: verify the
squash commit author and all applicable `Co-authored-by` trailers. Keep real
contributor credit on each Release change entry; an aggregate contributor list
is not a substitute. Squashing must not relabel another author's work as the
maintainer's or an assistant's.
- Never copy changes from a contributor pull request into a maintainer PR and
close the contributor PR as superseded. To preserve attribution, merge the
contributor's original pull request, or—with explicit authorization—update that
Expand Down Expand Up @@ -215,4 +276,4 @@ Co-authored-by: OpenAI Codex <215057067+openai-codex[bot]@users.noreply.github.c
privileged maintainer-only mention workflow.

## Codex 工具適配
瀏覽器操作使用當前 Codex browser/computer-use 工具;原文的 Claude MCP 工具名稱只描述操作意圖,不能直接呼叫。提問依目前模式使用可用工具;Git 操作仍需當次明確授權。
瀏覽器操作使用當前 Codex browser/computer-use 工具;原文的 Claude MCP 工具名稱只描述操作意圖,不能直接呼叫。提問依目前模式使用可用工具;已授權範圍內的本地小提交可保存進度,推送、PR、合併、tag 與發布仍須維護者明確授權。
Loading
Loading