Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
201 commits
Select commit Hold shift + click to select a range
00237b8
build: compile plugin sources into existing lib paths
Haoming9527 Oct 18, 2026
614eae6
refactor(native): [4a/16] split the kernel into workspace crates
Haoming9527 Oct 18, 2026
e637927
refactor: centralize typed capability and outcome contracts
Haoming9527 Oct 18, 2026
3247a0a
feat(native): [4b/16] version one-shot worker requests
Haoming9527 Oct 18, 2026
d1ea9af
feat(file): [3/16] render bounded Native text results
Haoming9527 Oct 18, 2026
8218a05
feat(config): select official replacements per tool
Haoming9527 Oct 18, 2026
e8ce4e9
test(native): compare canonical private staging permissions
Haoming9527 Oct 18, 2026
7caa716
chore: integrate Native projection and Rust kernel slices
Haoming9527 Oct 18, 2026
376462f
Merge branch 'codex/040-rust-crates' into codex/040-rust-kernel
Haoming9527 Oct 18, 2026
ab86e7d
Merge branch 'codex/040-rust-kernel' into codex/040-file-kernel-base
Haoming9527 Oct 18, 2026
929d4ba
test(file): assert encoding guidance through host permissions
Haoming9527 Oct 18, 2026
4fc6e89
test(file): include host encoding regression in file foundation
Haoming9527 Oct 18, 2026
6a42c73
feat(search): [5a/16] report coverage and validate continuations
Haoming9527 Oct 18, 2026
3e0c82b
feat(file): [5b/16] batch bounded reads and atomic edits
Haoming9527 Oct 18, 2026
8c63138
feat(file): [5b/16] batch bounded reads and atomic edits
Haoming9527 Oct 18, 2026
110616b
feat(search): expose typed continuation and Native coverage
Haoming9527 Oct 18, 2026
c629963
feat(file): expose batch reads and atomic edit contracts
Haoming9527 Oct 18, 2026
db05384
feat(file): integrate search coverage with batched file operations
Haoming9527 Oct 18, 2026
2cd8a53
test(cli): include batched file tools in routing reports
Haoming9527 Oct 18, 2026
b5e8460
feat(results): add private session snapshot references
Haoming9527 Oct 18, 2026
1a9b2c6
feat(kernel): bind result lifetime and bound shared worker calls
Haoming9527 Oct 18, 2026
b3af5db
Merge branch 'codex/040-file-batching' into codex/040-host-budgets
Haoming9527 Oct 18, 2026
8e77184
merge: integrate verified search and file batching
Haoming9527 Oct 18, 2026
e0e03a7
Merge branch 'codex/040-result-references' into codex/040-host-budgets
Haoming9527 Oct 18, 2026
ffa3cbf
fix(results): separate cache and business write authority
Haoming9527 Oct 18, 2026
7a0042e
fix(results): preserve session lifetime across reload and cancellation
Haoming9527 Oct 18, 2026
d270354
Merge commit 'ffa3cbf' into codex/040-host-budgets
Haoming9527 Oct 18, 2026
c49634c
feat(results): spill bounded output into session snapshots
Haoming9527 Oct 18, 2026
96309d0
Merge commit 'c49634c' into codex/040-host-budgets
Haoming9527 Oct 18, 2026
4621250
docs(results): clarify the host execution deadline
Haoming9527 Oct 18, 2026
0915244
test(results): canonicalize the private cache fixture
Haoming9527 Oct 18, 2026
38ac1f9
feat(result): expose scoped Native reference paging
Haoming9527 Oct 18, 2026
d3b7ed8
feat(ptc): add canonical outcome projection primitives
Haoming9527 Oct 18, 2026
dfaba5a
Merge commit '38ac1f9' into codex/040-ptc-outcomes
Haoming9527 Oct 18, 2026
a265a26
Merge commit '0915244' into codex/040-host-budgets
Haoming9527 Oct 18, 2026
e4969a2
Merge branch 'codex/040-host-budgets' into codex/040-native-reference…
Haoming9527 Oct 18, 2026
4a23ad2
feat(ptc): expose canonical file schemas through outcome definitions
Haoming9527 Oct 18, 2026
490ab77
fix(file): scope pager guidance to its visible projection
Haoming9527 Oct 18, 2026
0a9d3da
feat(ptc): generate checked SDK declarations from canonical schemas
Haoming9527 Oct 18, 2026
d73951f
Merge branch 'codex/040-native-reference-pages' into codex/040-ptc-ou…
Haoming9527 Oct 18, 2026
8d0f2b3
test(ptc): cover unavailable metadata timestamps
Haoming9527 Oct 18, 2026
d520593
docs(ptc): align SDK loading and execution limits
Haoming9527 Oct 18, 2026
0b91579
feat(ptc): publish independent scoped SDKs on demand
Haoming9527 Oct 18, 2026
3d7092c
feat(discovery): activate advanced tools in their owning scope
Haoming9527 Oct 18, 2026
f01dc12
fix(discovery): withdraw Native tools before PTC assembly
Haoming9527 Oct 18, 2026
4c96b0b
fix(discovery): coordinate scoped Native and PTC ownership
Haoming9527 Oct 18, 2026
4f29b25
feat(native): deduplicate reads with verified current-context evidence
Haoming9527 Oct 18, 2026
6e1417f
feat(native): keep the resident file surface small
Haoming9527 Oct 18, 2026
e4fe922
merge: integrate scoped discovery into context read deduplication
Haoming9527 Oct 18, 2026
0904998
test(native): load both readers through their owning components
Haoming9527 Oct 18, 2026
2476a4d
refactor(shell): expose cancellable execution handles
Haoming9527 Oct 18, 2026
c6770c5
feat(shell): reuse host approvals and background jobs
Haoming9527 Oct 18, 2026
e701dce
feat(shell): manage Bash as an optional runtime
Haoming9527 Oct 18, 2026
a29a604
refactor(shell): type host execution boundaries
Haoming9527 Oct 18, 2026
ab2f2f1
test(native): verify progressive resident tool contracts
Haoming9527 Oct 18, 2026
fa23240
Merge branch 'codex/040-resident-integrated' into codex/040-context-r…
Haoming9527 Oct 18, 2026
3e767b6
test(native): accept the compact failure value contract
Haoming9527 Oct 18, 2026
ef7ba77
fix(discovery): publish before the next provider snapshot
Haoming9527 Oct 18, 2026
17884f2
feat(documents): read bounded typed CSV and TSV rows
Haoming9527 Oct 18, 2026
5b46af9
test(discovery): cover always-loaded activation on the part eight sur…
Haoming9527 Oct 18, 2026
3a36aab
Merge branch 'codex/040-discovery-integrated' into codex/040-resident…
Haoming9527 Oct 18, 2026
2f8e01e
Merge branch 'codex/040-resident-integrated' into codex/040-context-r…
Haoming9527 Oct 18, 2026
42ae64c
Merge branch 'codex/040-resident-integrated' into codex/040-tool-repl…
Haoming9527 Oct 18, 2026
2057b73
fix(shell): return honest failures without replaying commands
Haoming9527 Oct 18, 2026
6985e53
feat(documents): expose scoped typed table readers
Haoming9527 Oct 18, 2026
8913d3e
feat(documents): read bounded DOCX main-body paragraphs
Haoming9527 Oct 18, 2026
72cd03c
Merge branch 'codex/040-context-read-integrated' into codex/040-shell…
Haoming9527 Oct 18, 2026
dfb83c9
test(native): accept the compact failure value contract
Haoming9527 Oct 18, 2026
c38dbff
docs(documents): state table failure value semantics
Haoming9527 Oct 18, 2026
ad302db
Merge branch 'codex/040-table-integrated' into codex/040-documents-in…
Haoming9527 Oct 18, 2026
5669d03
test(shell): measure the published host-compatible schema
Haoming9527 Oct 18, 2026
a6bbeaf
feat(documents): expose scoped DOCX paragraph readers
Haoming9527 Oct 18, 2026
5dd8668
feat(shell): leave PowerShell with the host
Haoming9527 Oct 18, 2026
f5ac53a
feat(documents): validate bounded classic PDF containers
Haoming9527 Oct 18, 2026
b018e85
fix(shell): describe returned failures in routing guidance
Haoming9527 Oct 18, 2026
dae878b
Merge branch 'codex/040-shell-integrated' into codex/040-host-pwsh-in…
Haoming9527 Oct 18, 2026
09ee80e
feat(documents): read bounded PDF text pages
Haoming9527 Oct 18, 2026
26b861d
feat(documents): expose scoped PDF text readers
Haoming9527 Oct 18, 2026
c9f1320
refactor(cli): migrate provisioning and reports to TypeScript
Haoming9527 Oct 18, 2026
72e07e8
test(shell): align host trial and startup fixtures
Haoming9527 Oct 18, 2026
2d3c9e6
refactor(runtime): type worker selection and Native lifecycle
Haoming9527 Oct 18, 2026
f1d11e1
refactor(shell): type runtime pins and execution helpers
Haoming9527 Oct 18, 2026
855afe0
refactor(file): type the trusted worker boundary
Haoming9527 Oct 18, 2026
059e0a2
refactor(shell): type executable resolution probes
Haoming9527 Oct 18, 2026
534446c
fix(gate): drain child output streams concurrently
Haoming9527 Oct 18, 2026
17eabb6
refactor(ptc): type confined worker execution
Haoming9527 Oct 18, 2026
0799ea8
fix(hiding): require exact native replacement ownership
Haoming9527 Oct 18, 2026
cdcf239
Merge branch 'codex/040-shell-integrated' into codex/040-host-pwsh-in…
Haoming9527 Oct 18, 2026
76c442e
fix(gate): drain child output streams concurrently
Haoming9527 Oct 18, 2026
e20da4d
refactor(build): type Cargo discovery and execution
Haoming9527 Oct 18, 2026
157c584
Merge commit 'dae878b' into codex/040-tool-replacements
Haoming9527 Oct 18, 2026
0a8e019
Merge commit '72e07e8' into codex/040-tool-replacements
Haoming9527 Oct 18, 2026
4f137fb
refactor(shell): type tool publication and session adapters
Haoming9527 Oct 18, 2026
3bd3c7f
feat(settings): expose validated persistent row forms
Haoming9527 Oct 18, 2026
ab5a164
refactor(tui): type bounded activity and rendering
Haoming9527 Oct 18, 2026
f100514
feat(settings): route runtime actions through the host gateway
Haoming9527 Oct 18, 2026
c099bb5
fix(panel): stop queued collection when disabled
Haoming9527 Oct 18, 2026
d538f73
refactor(shell): type Windows runtime and workspace preparation
Haoming9527 Oct 18, 2026
3d43642
Merge branch 'codex/040-host-pwsh-integrated' into codex/040-typescri…
Haoming9527 Oct 18, 2026
011fe8c
Merge commit '76c442e' into codex/040-tool-replacements
Haoming9527 Oct 18, 2026
ef7f0a2
merge: integrate typed host and document boundaries
Haoming9527 Oct 18, 2026
d415a7a
refactor(authority): migrate security helpers to strict TypeScript
Haoming9527 Oct 18, 2026
876e95b
feat(config): preserve profiles across seven-row defaults
Haoming9527 Oct 18, 2026
92a9984
Merge commit '011fe8cf66dfa0ffcc7a9d3bf47bcbeef193ff4d' into codex/04…
Haoming9527 Oct 18, 2026
023e5fd
refactor(core): type profile delegation and session temp helpers
Haoming9527 Oct 18, 2026
07b4894
feat(settings): add host configuration pages
Haoming9527 Oct 18, 2026
49475fc
feat(settings): add opt-in profile carrier migration
Haoming9527 Oct 18, 2026
211834e
refactor(types): type the component host entry
Haoming9527 Oct 18, 2026
ff19e32
feat(documents): read bounded typed CSV and TSV rows
Haoming9527 Oct 18, 2026
b6597e9
feat(documents): expose scoped typed table readers
Haoming9527 Oct 18, 2026
2f4845b
docs(documents): state table failure value semantics
Haoming9527 Oct 18, 2026
8631d01
merge: integrate settings with strict host types
Haoming9527 Oct 18, 2026
b39b25c
refactor(types): type panel collection and persisted records
Haoming9527 Oct 18, 2026
151e9d2
feat(documents): read bounded DOCX main-body paragraphs
Haoming9527 Oct 18, 2026
d3309f5
feat(documents): expose scoped DOCX paragraph readers
Haoming9527 Oct 18, 2026
cbf4442
refactor(config): type validation and component lifecycle boundaries
Haoming9527 Oct 18, 2026
88ced47
feat(documents): validate bounded classic PDF containers
Haoming9527 Oct 18, 2026
04da26e
feat(documents): read bounded PDF text pages
Haoming9527 Oct 18, 2026
4958350
feat(documents): expose scoped PDF text readers
Haoming9527 Oct 18, 2026
95b1af5
refactor(config): type validation and component lifecycle boundaries
Haoming9527 Oct 18, 2026
fb5ff30
build(types): require strict TypeScript plugin sources
Haoming9527 Oct 18, 2026
51b12a2
merge: align TypeScript completion with document slices
Haoming9527 Oct 18, 2026
5fffc55
Merge commit '51b12a234c5e96039f0906b1a3cc0d7262b384e6' into codex/04…
Haoming9527 Oct 18, 2026
7d2d04f
perf(native): compact fully returned file ranges
Haoming9527 Oct 18, 2026
7dad8fb
test(native): assert compact resident reader output
Haoming9527 Oct 18, 2026
4765c90
test(bench): add opt-in real-host acceptance gates
Haoming9527 Oct 18, 2026
fc2698f
test(bench): measure the installed optional Bash contract
Haoming9527 Oct 18, 2026
bd39773
docs(bench): record unresolved integrated acceptance gates
Haoming9527 Oct 18, 2026
00521c6
fix(native): preserve literal source escape sequences
Haoming9527 Oct 18, 2026
51a1699
test(bench): reject missing startup tools and invalid controls
Haoming9527 Oct 18, 2026
496b608
Merge commit '51a1699' into codex/040-release-docs
Haoming9527 Oct 18, 2026
c6b48cf
test(bench): run readiness regressions in manual CI
Haoming9527 Oct 18, 2026
86f7b6c
test(bench): require exactly five acceptance receipts
Haoming9527 Oct 18, 2026
745aaf5
fix(documents): preserve coverage and default discovery pools
Haoming9527 Oct 18, 2026
c9da482
fix(documents): carry table coverage corrections into DOCX slice
Haoming9527 Oct 18, 2026
32ff73e
fix(documents): carry table corrections into PDF validation slice
Haoming9527 Oct 18, 2026
7e560d5
fix(documents): carry table corrections into PDF reader slice
Haoming9527 Oct 18, 2026
20ae163
merge: preserve document coverage in the typed runtime
Haoming9527 Oct 18, 2026
d5da284
Merge commit '20ae163fa37e2133eb3cca2818680ce5ed4c4803' into codex/04…
Haoming9527 Oct 18, 2026
405193b
Merge commit 'd5da2840161c5aaddeba28b51f1530bd42e2e6a5' into codex/04…
Haoming9527 Oct 18, 2026
6414123
fix(documents): route table reads and validate projection coverage
Haoming9527 Oct 18, 2026
f54cac7
fix(documents): carry routing checks into DOCX slice
Haoming9527 Oct 18, 2026
66bb0a9
fix(documents): route DOCX reads and exercise typed receipts
Haoming9527 Oct 18, 2026
ec52d19
fix(documents): carry projection coverage into PDF foundation
Haoming9527 Oct 18, 2026
81df18d
fix(documents): carry projection coverage into PDF reader
Haoming9527 Oct 18, 2026
a8c10be
fix(documents): route PDF reads and exercise typed pages
Haoming9527 Oct 18, 2026
4a91080
merge: include document guidance and projection coverage
Haoming9527 Oct 18, 2026
d749880
test(documents): include catalogue readers in CLI routing checks
Haoming9527 Oct 18, 2026
26ccdae
test(documents): carry catalogue CLI checks into DOCX slice
Haoming9527 Oct 18, 2026
c87734b
test(documents): carry catalogue CLI checks into PDF foundation
Haoming9527 Oct 18, 2026
da50f22
test(documents): carry catalogue CLI checks into PDF reader
Haoming9527 Oct 18, 2026
1b8a660
merge: align CLI assertions with document inventory
Haoming9527 Oct 18, 2026
7ad37f1
Merge commit '1b8a660b29d5eecffe14fca8e9ed77cb7b501b9e' into codex/04…
Haoming9527 Oct 18, 2026
7b06ab4
test(native): decode rendered source escapes independently
Haoming9527 Oct 18, 2026
8b9df54
test(pack): retain child process failure diagnostics
Haoming9527 Oct 18, 2026
e27f676
test(documents): isolate concurrent table fixtures
Haoming9527 Oct 18, 2026
5514515
test(documents): carry isolated fixtures into DOCX slice
Haoming9527 Oct 18, 2026
a76d043
test(documents): carry isolated fixtures into PDF foundation
Haoming9527 Oct 18, 2026
5bbe808
test(documents): carry isolated fixtures into PDF reader
Haoming9527 Oct 18, 2026
30c4563
chore(release): prepare 0.4.0 candidate and acceptance record
Haoming9527 Oct 18, 2026
27dc6c3
merge: include deterministic parallel document fixtures
Haoming9527 Oct 18, 2026
8cbbd0f
Merge commit '27dc6c323498739484158b8aef13bbf56749fb5f' into codex/04…
Haoming9527 Oct 18, 2026
ea4bc9b
Merge commit '8b9df549843b89f1fb3a238851ba40c3164c0000' into codex/04…
Haoming9527 Oct 18, 2026
7e73cb4
test(release): follow the declared installer version
Haoming9527 Oct 18, 2026
4af9544
Merge commit '8cbbd0f9d6a5ee2f8ba75546c93d472bd1c306d1' into codex/04…
Haoming9527 Oct 18, 2026
5faed57
docs(release): align native document overview with implemented readers
Haoming9527 Oct 18, 2026
c547ab7
fix(ci): fetch pinned baseline history for acceptance checks
Haoming9527 Oct 18, 2026
30b38a2
Merge commit 'c547ab717035e91fa6a0aced1cff37366e8ccf39' into codex/04…
Haoming9527 Oct 18, 2026
245d738
fix(ci): include baseline history in remaining gate callers
Haoming9527 Oct 18, 2026
eeb4f56
Merge commit '245d738aea2f9a8792eb6bc814d8e00cd220d15b' into codex/04…
Haoming9527 Oct 18, 2026
4f92a16
docs(settings): name the validated Standard Schema contract
Haoming9527 Oct 18, 2026
186a8fe
fix(native): compact per-file revision receipts
Haoming9527 Oct 18, 2026
8389c3a
docs(release): record approved benchmark scope and receipt contract
Haoming9527 Oct 18, 2026
112e34e
test(bench): apply confirmed acceptance scopes
Haoming9527 Oct 18, 2026
cf4f30d
docs(bench): record approved-scope acceptance results
Haoming9527 Oct 18, 2026
bbefe5a
Merge commit 'cf4f30dca0a6ad41c91bf9e9d9b43e099384ab6c' into codex/04…
Haoming9527 Oct 18, 2026
3bc3ce1
Merge commit '00237b876beef06c7e40ed3b6ee2783ed7d31293' into merge/re…
T-Auto Oct 19, 2026
69bc764
Merge commit 'e6379270b9d1aa710570d927edae86b614903cbe' into merge/re…
T-Auto Oct 19, 2026
3491bb8
Merge commit '929d4ba2eec7dfeeaefdfedca1e7e97e08e4c642' into merge/re…
T-Auto Oct 19, 2026
d9d94b5
Merge commit '110616b9ea0981ab86ad5d58b830a4b271dc28cf' into merge/re…
T-Auto Oct 19, 2026
f389b38
Merge commit '2cd8a53c2d3d73146810bf1f2b372ba52d3ebb89' into merge/re…
T-Auto Oct 19, 2026
310bfdf
Merge commit '8e77184153450b21f9b909498cef54c7f726e92c' into merge/re…
T-Auto Oct 19, 2026
aeec5b3
Merge commit '0915244d596117d16d5904aa8c8c9c8eae2ada75' into merge/re…
T-Auto Oct 19, 2026
c92aa1f
Merge commit 'a265a26c34b8093485ee172c40e0d4cd9c64904c' into merge/re…
T-Auto Oct 19, 2026
f232df9
Merge commit '490ab77837f72f5409f6fb1635e77c20a2585e42' into merge/re…
T-Auto Oct 19, 2026
6078cb9
Merge commit '0b9157906ee4a24a90396e138288deda8d96e44b' into merge/re…
T-Auto Oct 19, 2026
a460901
Merge commit '5b46af91c3f5670f0093f4edf8e05f2302b53d38' into merge/re…
T-Auto Oct 19, 2026
09f5a69
Merge commit '3a36aab1ea7c9da0d211e65deea3149632b3e092' into merge/re…
T-Auto Oct 19, 2026
375ff1c
Merge commit '2f8e01ee2bff5e2cdc0cc4bd5943cd7bb71aa5f0' into merge/re…
T-Auto Oct 19, 2026
5182433
Merge commit '72e07e8be996e64204286b707be0e0c342fb2f4e' into merge/re…
T-Auto Oct 19, 2026
51338ca
Merge commit '76c442e2055b3dd8fa879b17fe0d501ba676fa01' into merge/re…
T-Auto Oct 19, 2026
62de366
Merge commit '011fe8cf66dfa0ffcc7a9d3bf47bcbeef193ff4d' into merge/re…
T-Auto Oct 19, 2026
aebf748
Merge commit '92a99843e4b05587c863b3e941f596f61ada2275' into merge/re…
T-Auto Oct 19, 2026
f3e56e3
Merge commit '49475fc34ce174ce7273451aa982ce034e970974' into merge/re…
T-Auto Oct 19, 2026
3edf698
Merge commit 'e27f6766b97d296d25a7164aad39e227517de8b7' into merge/re…
T-Auto Oct 19, 2026
719b881
Merge commit '55145153e41e807a7ae289fbfb91824a0dce4114' into merge/re…
T-Auto Oct 19, 2026
8fbfc58
Merge commit 'a76d0433ba42f565eb3276b941a1035a385beac1' into merge/re…
T-Auto Oct 19, 2026
4b087d4
Merge commit '5bbe8086b1111474f6bed6cba99a001d5f56a8ec' into merge/re…
T-Auto Oct 19, 2026
a6d37a1
Merge commit '27dc6c323498739484158b8aef13bbf56749fb5f' into merge/re…
T-Auto Oct 19, 2026
ade0cb9
Merge commit 'cf4f30dca0a6ad41c91bf9e9d9b43e099384ab6c' into merge/re…
T-Auto Oct 19, 2026
4c97253
Merge commit 'bbefe5afe471b8dec81b7d2e61b33273645f879e' into merge/re…
T-Auto Oct 19, 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
  •  
  •  
  •  
62 changes: 62 additions & 0 deletions .github/workflows/benchmark-gates.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
name: Opt-in OPS acceptance benchmarks
on:
workflow_dispatch:
permissions:
contents: read
jobs:
benchmark-gates:
strategy:
fail-fast: false
matrix:
include:
- { runner: windows-latest, target: win32-x64, suffix: '.exe' }
- { runner: ubuntu-24.04, target: linux-x64, suffix: '' }
- { runner: macos-latest, target: darwin-arm64, suffix: '' }
runs-on: ${{ matrix.runner }}
timeout-minutes: 30
env:
CARGO_BUILD_JOBS: '3'
steps:
- uses: actions/checkout@v7
with:
fetch-depth: 0
- uses: actions/setup-node@v7
with:
node-version: '24'
- name: Set up pinned Rust
shell: bash
run: rustup toolchain install 1.97.1 --profile minimal && rustup default 1.97.1
- name: Install locked dependencies
run: npm ci --ignore-scripts
- name: Build candidate host
run: npm run build
- name: Acquire optional pinned Windows Bash fixture
if: runner.os == 'Windows'
shell: pwsh
run: |
$env:DSH_HOME = Join-Path $env:RUNNER_TEMP 'ops-benchmark-bash'
node bin/dsh-ops.mjs bash-runtime install
if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE }
$fixture = node --input-type=module -e "import {pinnedBashExecutable} from './lib/shells/pinned.js'; console.log(pinnedBashExecutable())"
if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE }
"DSH_OPS_TEST_BASH=$fixture" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
- name: Build candidate worker
run: npm run build:ptc
- name: Materialize exact 0.3.1 source blobs
run: node bench/gates/prepare-baseline.mjs baseline-031
- name: Build independent 0.3.1 worker
run: cargo build --release --locked --manifest-path baseline-031/native/Cargo.toml
- name: Verify benchmark harness integrity
run: node test/run.mjs bench-gates bench-integrity
- name: Run all five real-host acceptance gates
run: node bench/cli.mjs gates --baseline-source baseline-031 --baseline-worker baseline-031/native/target/release/dsh-ops-worker${{ matrix.suffix }} --output benchmark-gates.json
- name: Upload exact evidence even when a gate fails
if: always()
uses: actions/upload-artifact@v7
with:
name: benchmark-gates-${{ matrix.target }}
path: |
benchmark-gates.json
benchmark-gates.json.md
if-no-files-found: error
retention-days: 30
39 changes: 20 additions & 19 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,15 @@ name: Cross-platform validation
on:
# A merge must validate itself. Without this, a branch was only ever checked when someone
# remembered to dispatch the workflow by hand — which is how a stale number shipped in #134.
# `0.3.2` is this cycle's release branch: what lands there is what ships, so it validates on
# push exactly like `main`.
# Release branches validate on push exactly like `main`; each 0.4.0 slice lands on its
# staging branch before the final release PR.
push:
branches: [main, 0.3.2]
branches: [main, 0.3.2, release/0.4.0]
# And a pull request has to show its result before it is merged, not after. GitHub reads this
# file from the pull request's own head, so listing the release branch here is what makes a
# pull request against `0.3.2` run the gate at all.
# pull request against a release branch run the gate at all.
pull_request:
branches: [main, 0.3.2]
branches: [main, 0.3.2, release/0.4.0]
# A merge queue builds the queued commits before they reach `main`, and it only accepts a group
# whose required checks passed there. Without this trigger the workflow simply never runs for a
# queued group, so enabling a merge queue would silently un-gate every merge.
Expand Down Expand Up @@ -56,6 +56,9 @@ jobs:
DSH_OPS_RETRY_TIMEOUTS: '1'
steps:
- uses: actions/checkout@v7
with:
# The provenance regression verifies exact blobs from the pinned 0.3.1 commit.
fetch-depth: 0
- uses: actions/setup-node@v7
with:
node-version: '24'
Expand All @@ -79,18 +82,11 @@ jobs:
run: sudo apt-get update && sudo apt-get install -y acl
- name: Install locked dependencies
run: npm ci --ignore-scripts --registry=https://registry.npmjs.org
- name: Build and test native worker
shell: bash
run: |
cargo test --locked --manifest-path native/Cargo.toml
npm run build:ptc
- name: Windows IPC build
if: runner.os == 'Windows'
run: npm run build:bash-ipc
# The gate, not `npm run verify`: it runs the same suites with `DSH_OPS_REQUIRE_RUNTIME=1`
# on POSIX (a runtime-absence skip is a failure, not a pass), refuses any skip outside this
# platform's known set, fails when a suite file on disk was never collected, and checks the
# packed artifact. Build success is not behaviour.
# packed artifact. It builds the plugin before its CLI, then builds/tests the worker and
# Windows IPC proxies using an explicitly downloaded pinned Bash fixture (or DSH_OPS_TEST_BASH). Build success is not behaviour.
- name: Functional gate (skips, suite inventory, packed artifact)
shell: bash
run: node scripts/verify-gate.mjs --skip-install
Expand Down Expand Up @@ -136,6 +132,8 @@ jobs:
restore-keys: ops-031-${{ runner.os }}-${{ runner.arch }}-
- name: Install locked dependencies
run: npm ci --ignore-scripts --registry=https://registry.npmjs.org
- name: Build the plugin
run: npm run build
- name: Build the native worker
shell: bash
run: npm run build:ptc
Expand Down Expand Up @@ -169,6 +167,9 @@ jobs:
CARGO_BUILD_JOBS: '3'
steps:
- uses: actions/checkout@v7
with:
# Included benchmark tests verify the pinned historical baseline.
fetch-depth: 0
- uses: actions/setup-node@v7
with:
node-version: '24'
Expand All @@ -186,6 +187,8 @@ jobs:
restore-keys: ops-031-${{ runner.os }}-${{ runner.arch }}-
- name: Install locked dependencies
run: npm ci --ignore-scripts --registry=https://registry.npmjs.org
- name: Build the plugin
run: npm run build
- name: Build the native worker
shell: bash
run: npm run build:ptc
Expand Down Expand Up @@ -268,6 +271,9 @@ jobs:
DSH_OPS_RETRY_TIMEOUTS: '1'
steps:
- uses: actions/checkout@v7
with:
# The provenance regression verifies exact blobs from the pinned 0.3.1 commit.
fetch-depth: 0
- uses: actions/setup-node@v7
with:
node-version: '22.19'
Expand All @@ -276,11 +282,6 @@ jobs:
run: rustup toolchain install 1.97.1 --profile minimal && rustup default 1.97.1
- name: Install locked dependencies
run: npm ci --ignore-scripts --registry=https://registry.npmjs.org
- name: Build and test native worker
shell: bash
run: |
cargo test --locked --manifest-path native/Cargo.toml
npm run build:ptc
- name: Functional gate (skips, suite inventory, packed artifact)
shell: bash
run: node scripts/verify-gate.mjs --skip-install
Expand Down
34 changes: 22 additions & 12 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@ name: Release
# not be read as evidence that a tag produces a release. Enabling it is an admin step,
# and the first run must be a dispatch on `main` — see docs/release-process.md.
#
# WHAT IT PUBLISHES: the GitHub Release for the tag — title, generated notes, the three
# installable tarballs and `SHA256SUMS`. npm is a separate channel and is deliberately
# WHAT IT PUBLISHES: the GitHub Release for the tag — title, generated notes, the installable
# tarballs and `SHA256SUMS`. npm is a separate channel and is deliberately
# NOT published here: `npm publish` needs an `NPM_TOKEN` secret that this repository
# does not grant to Actions, and docs/PROVENANCE.md records that GitHub publication
# does not automatically publish npm. Adding npm publication later needs an admin to
Expand Down Expand Up @@ -82,13 +82,13 @@ jobs:
run: rustup target add ${{ matrix.triple }}

- name: Install locked dependencies
# Only the Windows job needs node_modules: the IPC proxies link against the
# pinned shell payload. The other two targets build from the committed Rust
# sources alone, so they skip the install. `--ignore-scripts` keeps an install
# hook out of the release path, matching ci.yml.
if: matrix.target == 'win32-x64'
# Every target builds the host JS consumed by the runtime staging CLI.
# Windows also needs the pinned shell payload for its IPC proxies.
run: npm ci --ignore-scripts --registry=https://registry.npmjs.org

- name: Build the plugin
run: npm run build

- name: Build the native worker
shell: bash
run: cargo build --release --locked --manifest-path native/Cargo.toml --target ${{ matrix.triple }}
Expand All @@ -99,6 +99,10 @@ jobs:
shell: bash
run: node bin/native-runtime.mjs stage --platform ${{ matrix.target }} --input native/target/${{ matrix.triple }}/release

- name: Acquire optional pinned Bash fixture
if: matrix.target == 'win32-x64'
run: node bin/dsh-ops.mjs bash-runtime install

- name: Build the Windows Bash IPC proxies
# Only the Windows target carries the IPC proxies; their receipt is verified
# against the committed native/bash-ipc sources by the gate below. Fails when
Expand All @@ -117,15 +121,16 @@ jobs:
gate:
name: Verify the release closure and assemble the publish directory
needs: native
# Assembly is Windows-only by design: the two platform payload packages this
# release publishes are Windows payloads. The gate reads every target's bytes and
# does not need to execute them.
# Windows validates the IPC payload while checking every target artifact.
runs-on: windows-latest
timeout-minutes: 45
env:
DIST: dist-release
steps:
- uses: actions/checkout@v7
with:
# Included benchmark tests verify the pinned historical baseline.
fetch-depth: 0

- uses: actions/setup-node@v7
with:
Expand Down Expand Up @@ -170,6 +175,11 @@ jobs:
rustup default 1.97.1
cargo build --release --locked --manifest-path native/Cargo.toml

- name: Build plugin and acquire optional pinned Bash fixture
run: |
npm run build
node bin/dsh-ops.mjs bash-runtime install

- name: Release gate (manifest, suites, runtime closure)
# Publishing must not start before this step is green — it is the only reason
# the `publish` job sits behind `needs`. `verify:release` is
Expand All @@ -181,8 +191,8 @@ jobs:
run: npm run verify:release

- name: Assemble and pack the publish directory
# Materializes the two Windows platform packages from their pinned upstream
# assets, packs everything, and writes provenance.json + SHA256SUMS under
# Packs the main plugin without shell payload dependencies and writes
# provenance.json + SHA256SUMS under
# $env:DIST. A non-zero exit fails the run; nothing is published from here.
run: node scripts/build-platform-packages.mjs --dist "$env:DIST"

Expand Down
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,9 @@ native/target/
# Dependencies
node_modules/

# Compiled plugin source (edit src/ and run npm run build)
/lib/

# Scratch trees used by the suites and by hand
.tmp-*
*.scratch.*
Expand Down
98 changes: 98 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
# AGENTS.md

Instructions for AI coding agents working in this repository. Humans: see
[docs/CONTRIBUTING.md](docs/CONTRIBUTING.md) (中文:[docs/贡献指南.md](docs/贡献指南.md)), which this file
summarizes and never overrides.

## What dsh-ops is

A DSH tool-enhancement plugin. Its purpose is to save the model's tokens, contain context growth,
shorten task time and make the model more capable — by giving it low-cognitive-load tools with small
inputs/outputs, honest feedback that stops retry loops, and progressive disclosure of advanced
capabilities.

- **Minimal and low-intrusion.** It only adds `ops_*` tools (including `ops_bash` on Windows) and can
optionally replace some official tools. It does not change host logic, rewrite the shared tool
registry, or depend on other plugins; integration code with other plugins lives apart from the core.
- **Native and PTC are separate projections of one kernel.** Native mode output is read by the model
(compact, line-numbered text); PTC output is read by sandboxed code (strict typed data). Do not
make one shape serve both. See issue #261 for the 0.4.0 design.

## Hard rules

1. **No code file over 1000 lines.** `node scripts/check-file-size.mjs` (`npm run check:size`) runs
in CI over every git-tracked `.js .mjs .cjs .ts .mts .cts .rs .ps1 .sh .py .cpp .h .hpp .cc` file
outside `node_modules/ native/target/ runtime/ licenses/ docs/ dist/`. When a file approaches the
limit, split it into modules and group them in a folder (see `src/shells/`,
`scripts/lib/build/`, `bench/lib/fixtures/`). Do not raise the limit or add exclusions.
2. **A PR adds at most ~1000 implementation lines** (tests and byte-identical moves excluded) and
touches only the files its issue names. Large work is split into slices on a staging branch
(for 0.4.0: `release/0.4.0`).
3. **No AI attribution** in commits, PRs, issues or comments: no `Co-authored-by:` lines naming an
agent/model/bot, no "Generated with/Made with" footers. Commits use the user's own identity.
4. **Every new behaviour has an assertion** that fails when the change is reverted. No silent skips,
no retries to hide flaky concurrency — fix the cause.
5. **Do not edit generated output.** `lib/` is built from `src/`; `runtime/` is staged worker output.

## Layout

| Path | Contents |
| --- | --- |
| `src/` | Plugin source (strict TypeScript and TSX). Compiled by `tsc` to `lib/` |
| `lib/` | Build output that is shipped and imported by tests — gitignored, never edited by hand |
| `src/components/<name>/` | One directory per DSH component row (`shell`, `file`, `ptc`, `panel`, `tui`, `hide-official`, …): entry, `package.json`, `locale/`, `icon.png` |
| `native/` | Rust worker (`dsh-ops-worker`); one JSON request on stdin, one JSON result on stdout, spawned per call through the host subprocess/sandbox |
| `test/` | One `*.test.mjs` file = one suite = one process; shared helpers in `test/lib/` (never named `*.test.mjs`) |
| `bench/` | Repository-only benchmarks; never shipped, never part of the default gate |
| `scripts/`, `bin/` | Gate, manifest validation, packaging, CLI |
| `docs/` | Bilingual docs: every document exists in English and Chinese |

## Commands

```console
npm ci --ignore-scripts # install (locked)
npm run build # src/ -> lib/ (tsc + assets)
cargo test --workspace --locked --manifest-path native/Cargo.toml # Rust unit tests
npm run build:ptc # build + stage the native worker (needed by most suites)
npm run build:bash-ipc # Windows only
npm run verify # build + manifest check + all suites
node test/run.mjs <filter> # only suites whose file name contains <filter>
npm run check:size # the 1000-line gate
node scripts/verify-gate.mjs --skip-install # the full release gate, exactly what CI runs
```

- Suites without a built worker **skip**; a skip is not a pass. On Linux/macOS the gate sets
`DSH_OPS_REQUIRE_RUNTIME=1`, which turns those skips into failures.
- `DSH_HOME` must point into the system temp directory when running a suite directly; the harness
refuses anything else. `node test/run.mjs` creates one per suite.

## Code conventions

- English for code, comments, CLI output and commit messages; user-facing docs in both languages,
updated in the same PR.
- Tool names always come from `publicToolName()` in `src/policy.ts`; never hand-write `ops_`.
- Config is validated in `src/config.ts`; unknown keys are errors that name the key. Defaults in
`cordis.patch.yml` must equal the defaults in code.
- The host half must not import `@deepseek-ai/*` values at load time; use `ctx.inject` / `ctx.get`.
Publish tools only through this plugin's own scoped `ctx.tools.register`.
- Tool failures are returned values (`status`, `error.code`, `effectState`), never thrown. Never
report a partial or early-stopped result as complete.
- Do not remove tool contracts (argument semantics, defaults, path base, paging completeness,
permission boundaries) to save schema bytes.
- New dependencies need a reason in the PR, an exact version published at least 7 days earlier, and
no change to security settings.

## Commits and PRs

- Conventional, imperative English subjects, e.g. `fix(file): classify oversized grep files`.
- A PR links a claimed issue, fills `.github/PULL_REQUEST_TEMPLATE.md`, and puts real command output
(pass/skip/fail counts) in its Validation section.
- Add a `docs/CHANGELOG.md` `## [Unreleased]` entry when behaviour or shipped docs change.
- Never force-push shared branches, rewrite pushed history, or merge PRs without the maintainers.

## Windows notes

- Run `npm`/`git` from PowerShell if the Git Bash environment resolves `npm` to WSL or lacks the git
identity/CA bundle.
- A local `tar` may fail to unpack the packed tarball on non-ASCII doc filenames; CI is the reference
for that gate step.
Loading
Loading