Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
82 commits
Select commit Hold shift + click to select a range
97162cc
fix(file): reserve audit-store components in absolute paths (#329)
ccch1mneyyy Oct 20, 2026
947eb46
fix(discovery): avoid reprobing unchanged agents on attach (#333)
ccch1mneyyy Oct 20, 2026
537df22
docs(provenance): name the object of every published checksum (#300)
ViscaOwO Oct 21, 2026
5649b39
fix(ptc): re-probe only the agents a change touches
ikliml666 Oct 22, 2026
aa78b54
feat(ptc): support macOS Intel (darwin-x64)
OldLigant Oct 22, 2026
62f27a0
fix(ptc): assert a still-foreign target after darwin-x64 support
OldLigant Oct 22, 2026
e99d64b
ci: run macOS Intel as a non-blocking signal
OldLigant Oct 22, 2026
db197b3
docs: document macOS Intel support on macOS 13+
OldLigant Oct 22, 2026
5809807
fix(ci): close the Intel shell-payload check command
OldLigant Oct 22, 2026
bf66158
fix(ptc): keep republish state out of the live-validity guards
ikliml666 Oct 23, 2026
0252333
fix(ptc): probe only the agents a pass names, and share the surface s…
ikliml666 Oct 23, 2026
9145e59
fix(ptc): key the surface by the scope view and its definition identity
ikliml666 Oct 24, 2026
3c3219d
perf(prompt): read visible tool names through the scope view
ikliml666 Oct 24, 2026
08c7c3f
feat(bench): make A/B sealing opt-in and wire it to the runner
Richeir Oct 24, 2026
4500ad8
docs(bench): document the current workflow and rewrite the overlay te…
Richeir Oct 24, 2026
b1594ce
feat(bench): default the sweep to one repeat per task
Richeir Oct 24, 2026
eaec3e1
feat(bench): date-stamp the default group folder and auto-write the s…
Richeir Oct 24, 2026
9aa1703
feat(bench): show each task's wall-clock in the report's first table
Richeir Oct 24, 2026
a598ee9
docs(bench): fold the bench docs into one short README
Richeir Oct 24, 2026
f9324b6
feat(bench): report title (beta), ops labels, and a 12-stage gate-rep…
Richeir Oct 24, 2026
a878add
merge: preserve discovery incremental fix from #345
T-Auto Oct 24, 2026
2817f99
merge: retain PTC and name-only improvements from #368 and #378
T-Auto Oct 24, 2026
646e1bc
feat(bench): add the per-request overhead table and slim the report
Richeir Oct 24, 2026
7f17d05
docs(bench): describe every task in the README
Richeir Oct 24, 2026
45a5f19
fix(discovery): attribute owned tool changes without invalidating sib…
T-Auto Oct 24, 2026
e164a12
fix(ptc): publish only affected inheritance families
T-Auto Oct 24, 2026
24080b5
fix(shell): retain unchanged per-session Bash layers
T-Auto Oct 24, 2026
86f51ce
docs: describe incremental publication boundaries for issue 333
T-Auto Oct 24, 2026
f1dafcc
docs(bench): retitle the manual and add a where-to-look section
Richeir Oct 24, 2026
37c4b3e
fix(ptc): revalidate same-surface presentation transitions
T-Auto Oct 24, 2026
b4155cb
fix(discovery): consume attribution at the host dispatch boundary
T-Auto Oct 24, 2026
2a9a026
fix(ptc): close presentation and nested mask invalidation gaps
T-Auto Oct 24, 2026
fe06fa4
Merge remote-tracking branch 'origin/main' into work/issue-sessions-r…
Haoming9527 Oct 24, 2026
892b0f0
merge: refresh checksum documentation against main
Haoming9527 Oct 24, 2026
4fd5eee
fix(bash-ipc): preserve access to user shared sections
Haoming9527 Oct 24, 2026
211dc3e
fix(session): defer Bash publication and accept text-only prompt hooks
Haoming9527 Oct 24, 2026
5da1cf5
merge: refresh audit-store path protection against main
Haoming9527 Oct 24, 2026
dd357dc
feat(shell): present captured Bash calls as terminal cards
Haoming9527 Oct 24, 2026
98d12b1
fix(shell): preserve caller PATH and close empty stdin
Haoming9527 Oct 24, 2026
75ef8ac
feat(shell): summarize intact JSON spills for Native calls
Haoming9527 Oct 24, 2026
3cb716b
feat(search): support honest bounded grep scans
Haoming9527 Oct 24, 2026
8b4d543
Merge Bash presentation with JSON output projection
Haoming9527 Oct 24, 2026
dd5dd60
docs: clarify upgrades removal and 0.4 migration
Haoming9527 Oct 24, 2026
fdef3ec
fix(metadata): declare tested hosts and export component icons
Haoming9527 Oct 24, 2026
a4d606f
test(shell): accept POSIX socket-backed stdin pipes
Haoming9527 Oct 24, 2026
8848b48
fix(catalogue): enforce shared publication and settings facts
Haoming9527 Oct 24, 2026
70d9f81
merge: reconcile macOS Intel support with current main
Haoming9527 Oct 24, 2026
edf70d8
fix(session): await deferred publication and defer append-time teardown
Haoming9527 Oct 24, 2026
d395840
test(ptc): verify Intel staging and qualify platform evidence
Haoming9527 Oct 24, 2026
7b16391
docs(shell): record clarified schema measurement
Haoming9527 Oct 24, 2026
28a80a6
fix(bench): record platform facts and guard incompatible comparisons
Haoming9527 Oct 24, 2026
1748e62
feat(bench): route and separate model reasoning conditions
Haoming9527 Oct 24, 2026
baaacbf
docs: explain host tool scope and discovery failure boundaries
Haoming9527 Oct 24, 2026
0eaa87d
fix(ci): validate every PR target and document required-check enforce…
Haoming9527 Oct 24, 2026
fb32be6
Merge benchmark portability with condition matrices
Haoming9527 Oct 24, 2026
6fa6738
Merge main into benchmark condition work
Haoming9527 Oct 24, 2026
80f210e
Merge remote-tracking branch 'origin/main' into work/benchmark-portab…
Haoming9527 Oct 24, 2026
ddbc750
Merge refreshed benchmark portability history
Haoming9527 Oct 24, 2026
778358d
feat(review): add bounded PR snapshot CLI
Haoming9527 Oct 24, 2026
4901b27
merge: integrate reviewed PR #383 locally
Haoming9527 Oct 24, 2026
2faca52
merge: integrate reviewed PR #344 locally
Haoming9527 Oct 24, 2026
5a2fdda
merge: integrate reviewed PR #388 locally
Haoming9527 Oct 24, 2026
2732b9a
merge: integrate reviewed PR #389 locally
Haoming9527 Oct 24, 2026
f213cef
merge: integrate reviewed PR #390 locally
Haoming9527 Oct 24, 2026
28ed00a
merge: integrate reviewed PR #396 locally
Haoming9527 Oct 24, 2026
e445c17
merge: integrate reviewed PR #392 locally
Haoming9527 Oct 24, 2026
15ff578
merge: integrate reviewed PR #393 locally
Haoming9527 Oct 24, 2026
d28a723
merge: integrate reviewed PR #394 locally
Haoming9527 Oct 24, 2026
e269dfd
merge: integrate reviewed PR #395 locally
Haoming9527 Oct 24, 2026
b3af678
merge: integrate reviewed PR #397 locally
Haoming9527 Oct 24, 2026
7177b4a
merge: integrate reviewed PR #398 locally
Haoming9527 Oct 24, 2026
f8cdbad
merge: integrate reviewed PR #399 locally
Haoming9527 Oct 24, 2026
7071bb3
merge: integrate reviewed PR #400 locally
Haoming9527 Oct 24, 2026
0ab4394
feat(bench): configure and compare candidate component switches
Haoming9527 Oct 24, 2026
08aac16
Merge commit 'ddbc750c9738409c718bcc46ddea2d3bc654d6c2' into work/ben…
Haoming9527 Oct 24, 2026
cd56d12
merge: integrate reviewed PR #401 locally
Haoming9527 Oct 24, 2026
8481d91
Merge commit '0eaa87db05be28bb8adb6f0cc2cf78fd40649283' into work/ben…
Haoming9527 Oct 24, 2026
30fb526
merge: integrate reviewed PR #402 locally
Haoming9527 Oct 24, 2026
9f15bd1
merge: integrate reviewed PR #403 locally
Haoming9527 Oct 24, 2026
cb162e5
fix(session): isolate presentation reconciliation by scope family
Haoming9527 Oct 24, 2026
2a0717b
merge: integrate reviewed PR #404 locally
Haoming9527 Oct 24, 2026
2e26103
merge: integrate reviewed PR #405 locally
Haoming9527 Oct 24, 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
33 changes: 33 additions & 0 deletions .github/required-ci-ruleset.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
{
"name": "Require validated pull requests",
"target": "branch",
"enforcement": "active",
"bypass_actors": [],
"conditions": {
"ref_name": {
"include": ["refs/heads/main", "refs/heads/0.3.2", "refs/heads/release/0.4.0"],
"exclude": []
}
},
"rules": [
{
"type": "pull_request",
"parameters": {
"dismiss_stale_reviews_on_push": false,
"require_code_owner_review": false,
"require_last_push_approval": false,
"required_approving_review_count": 0,
"required_review_thread_resolution": false
}
},
{
"type": "required_status_checks",
"parameters": {
"required_status_checks": [{ "context": "CI required", "integration_id": 15368 }],
"strict_required_status_checks_policy": true,
"do_not_enforce_on_create": false
}
},
{ "type": "non_fast_forward" }
]
}
89 changes: 76 additions & 13 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,9 @@ on:
# staging branch before the final release PR.
push:
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 a release branch run the gate at all.
# Every PR needs evidence, including stacked changes targeting a feature branch.
# No target-branch or path filter: an omitted run cannot satisfy CI required.
pull_request:
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 All @@ -37,8 +35,8 @@ concurrency:
# because a half-built release branch is worse than a queued one.
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
jobs:
# The POSIX legs are the gate: a red Linux or macOS run fails `ci-required` and blocks the merge.
# Windows is split into its own, non-blocking job directly below (#316).
# The blocking POSIX legs are Linux x64 and macOS arm64: a red one fails `ci-required`.
# macOS Intel and Windows are separate non-blocking signals below (#316).
validate-posix:
strategy:
fail-fast: false
Expand Down Expand Up @@ -103,6 +101,56 @@ jobs:
if-no-files-found: error
retention-days: 7

# macOS Intel is a signal, not a gate: this leg measured 318 s on the PR run that added
# it, past the approved ">300 s -> non-blocking" line (#316). It still runs on every push,
# pull request and merge group, and uploads the darwin-x64 artifact for the release job.
validate-macos-intel:
runs-on: macos-15-intel
continue-on-error: true
timeout-minutes: 35
env:
CARGO_BUILD_JOBS: '3'
DSH_OPS_SUITE_TIMEOUT_MS: '300000'
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'
- name: Verify runner identity
run: node -e "if(process.platform+'-'+process.arch!=='darwin-x64')throw Error('Unexpected runner'); console.log(process.platform,process.arch)"
- name: Set up pinned Rust
shell: bash
run: rustup toolchain install 1.97.1 --profile minimal && rustup default 1.97.1
- name: Reuse exact locked Rust build cache
uses: actions/cache@v6
with:
path: |
~/.cargo/registry
~/.cargo/git
native/target
key: ops-031-${{ runner.os }}-${{ runner.arch }}-${{ hashFiles('native/Cargo.lock') }}
restore-keys: ops-031-${{ runner.os }}-${{ runner.arch }}-
- name: Install locked dependencies
run: npm ci --ignore-scripts --registry=https://registry.npmjs.org
- name: Functional gate (skips, suite inventory, packed artifact)
shell: bash
run: node scripts/verify-gate.mjs --skip-install
- name: Verify native staged closure
run: node bin/native-runtime.mjs check --platform darwin-x64
- name: Check shell payload platform filtering
shell: bash
run: node -e "const fs=require('fs');if(process.platform!=='win32'){for(const n of ['bash','pwsh'])if(fs.existsSync('node_modules/@dsh-ops/'+n+'-win32-x64'))throw Error('Windows shell installed on POSIX')}"
- uses: actions/upload-artifact@v7
with:
name: native-darwin-x64
path: runtime/darwin-x64/
if-no-files-found: error
retention-days: 7

# Windows still runs on every push, pull request and merge group — it is never skipped — but its
# result is a **signal, not a gate**. The job is `continue-on-error: true`, and `ci-required` does
# not list it in `needs`, so the aggregate neither waits for it nor fails with it. That is what
Expand Down Expand Up @@ -238,8 +286,9 @@ jobs:
retention-days: 7

# The bench smoke: `workflow_dispatch` only, off by default, and informational (like `tools-trial`
# above). One platform is enough, because it exercises the harness rather than the platform — the
# `validate-posix` matrix is the gate and `validate-windows` its non-blocking counterpart. Both
# above). Three host platforms exercise the portable harness; the
# `validate-posix` matrix is the gate, with `validate-windows` and `validate-macos-intel` as
# non-blocking counterparts. Both
# sides are the *same* staged worker, so the run
# proves only what a harness self-check can prove: the corpus builds and is removed, the worker
# answers identically twice, and every query lands on `MATCH` or a declared `EXPECTED_*`. It cannot
Expand All @@ -248,7 +297,20 @@ jobs:
# **never** run in CI.
bench-smoke:
if: ${{ github.event_name == 'workflow_dispatch' && inputs.bench }}
runs-on: ubuntu-24.04
strategy:
fail-fast: false
matrix:
include:
- os: ubuntu-24.04
target: linux-x64
worker: dsh-ops-worker
- os: windows-latest
target: win32-x64
worker: dsh-ops-worker.exe
- os: macos-latest
target: darwin-arm64
worker: dsh-ops-worker
runs-on: ${{ matrix.os }}
continue-on-error: true
timeout-minutes: 30
env:
Expand Down Expand Up @@ -293,7 +355,7 @@ jobs:
- name: Tool-level comparison, one binary on both sides
shell: bash
run: |
worker="runtime/linux-x64/dsh-ops-worker"
worker="runtime/${{ matrix.target }}/${{ matrix.worker }}"
mkdir -p bench/runs/smoke/fixtures
node bench/cli.mjs tools \
--baseline "$worker" --candidate "$worker" \
Expand All @@ -309,7 +371,7 @@ jobs:
- uses: actions/upload-artifact@v7
if: always()
with:
name: bench-smoke-report
name: bench-smoke-${{ matrix.target }}-report
path: |
bench/runs/smoke/**
bench/runs/*/run.json
Expand Down Expand Up @@ -383,7 +445,8 @@ jobs:
# names in sync — and silently losing the gate when a runner label changes. This job collapses them.
#
# It waits **only** on blocking jobs. Every `continue-on-error: true` job — `validate-windows`,
# `tools-trial`, `bench-smoke` — is deliberately absent from `needs` and from the loop below:
# `validate-macos-intel`, `tools-trial`, `bench-smoke` — is deliberately absent from `needs` and
# from the loop below:
# listing one here would keep the required check pending until that job finished, which is a gate
# in everything but name. `scripts/check-workflows.mjs` enforces both halves of that rule.
ci-required:
Expand All @@ -410,7 +473,7 @@ jobs:
done
# Not in `needs` on purpose: this check must never wait for them, so their result is not
# available here. Read them on their own jobs; a red one is a signal, not a merge blocker.
echo "validate-windows, tools-trial, bench-smoke: non-blocking (continue-on-error), not waited on by this check"
echo "validate-windows, validate-macos-intel, tools-trial, bench-smoke: non-blocking (continue-on-error), not waited on by this check"
if [ "$failed" != 0 ]; then
echo "::error::a blocking job did not succeed; read the failing job above"
exit 1
Expand Down
12 changes: 9 additions & 3 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,8 @@ name: Release
# checksum manifest (docs/PROVENANCE.md), not a second, unmaintained mechanism, and an
# attestation would need `id-token: write` / `attestations: write` on the repository.
#
# SCOPE: exactly the three declared targets in lib/ptc/runtime.js — win32-x64,
# linux-x64, darwin-arm64. Intel macOS, Windows arm64 and Linux arm64 are outside the
# SCOPE: exactly the four declared targets in lib/ptc/runtime.js — win32-x64,
# linux-x64, darwin-arm64 and darwin-x64. Windows arm64 and Linux arm64 are outside the
# matrix; `bin/native-runtime.mjs` refuses them, and `bin/check-release.mjs` fails the
# run if any other target appears under `runtime/`.
on:
Expand Down Expand Up @@ -57,6 +57,7 @@ jobs:
- { runner: windows-latest, target: win32-x64, triple: x86_64-pc-windows-msvc }
- { runner: ubuntu-24.04, target: linux-x64, triple: x86_64-unknown-linux-gnu }
- { runner: macos-latest, target: darwin-arm64, triple: aarch64-apple-darwin }
- { runner: macos-15-intel, target: darwin-x64, triple: x86_64-apple-darwin }
runs-on: ${{ matrix.runner }}
timeout-minutes: 45
env:
Expand Down Expand Up @@ -166,6 +167,11 @@ jobs:
name: native-darwin-arm64
path: runtime/darwin-arm64

- uses: actions/download-artifact@v8
with:
name: native-darwin-x64
path: runtime/darwin-x64

- name: Prepare the host worker for functional suites
# Boundary suites intentionally resolve their checkout-local host build.
# This build is test-only; the staged release runtimes remain the cold matrix artifacts.
Expand All @@ -184,7 +190,7 @@ jobs:
# Publishing must not start before this step is green — it is the only reason
# the `publish` job sits behind `needs`. `verify:release` is
# `validate-manifest` + the full repository suite + `bin/check-release.mjs`,
# which demands all three declared targets, matches every receipt hash against
# which demands all four declared targets, matches every receipt hash against
# the staged bytes, and re-checks the Windows IPC binary and source digests.
# A partial download, a foreign-architecture binary, a stale receipt or a
# manifest/target disagreement fails here instead of shipping.
Expand Down
9 changes: 8 additions & 1 deletion README.en.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,9 @@ OPS adds bounded file and document tools to DSH. Native mode returns compact, li
PTC code receives typed Outcome values from the same one-shot Rust worker. Host integration is
strict TypeScript, compiled to the existing JavaScript package paths.

Supported: Windows x64, Linux x64, and macOS 13+ on Apple Silicon or Intel
(`darwin-arm64`, `darwin-x64`). See [macOS](docs/macos.md).

> [!IMPORTANT]
> This branch is the **0.4.0 release candidate**, not a published release. Approved acceptance requires
> at least 40% less BM-01 output than OPS 0.3.x; the official reader is a separate comparison.
Expand Down Expand Up @@ -97,6 +100,10 @@ A regular DSH CLI cannot manage the reserved `desktop` profile; do not confuse i

#### Update

Host compatibility is declared for DSH **0.2.0-rc.2 and 0.2.1-rc.2**. See
[host versions and display metadata](docs/usage.md#host-compatibility-and-display-metadata)
for component icon exports, profile refresh and config/schema checks.

Re-run the same `npx --yes dsh-ops@latest install --profile ...`, or use the official CLI `add dsh-ops@latest`. Reload when the app asks; restart the app when replacing code that is already loaded.

#### Uninstall and status
Expand Down Expand Up @@ -166,4 +173,4 @@ Versions before 0.3.2 bundled and distributed [yc-duan](https://github.com/yc-du

## Star trend

[![Star trend chart](https://api.star-history.com/svg?repos=T-Auto/dsh-ops&type=Date)](https://star-history.com/#T-Auto/dsh-ops&Date)
[![Star trend chart](https://api.star-history.com/svg?repos=T-Auto/dsh-ops&type=Date)](https://star-history.com/#T-Auto/dsh-ops&Date)
4 changes: 4 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,10 @@ dsh plugin --profile dsh-tui add dsh-ops

#### 更新方法

宿主兼容范围明确声明为 DSH **0.2.0-rc.2 与 0.2.1-rc.2**。
组件图标导出、profile 刷新及配置/schema 检查见
[宿主兼容范围与展示元数据](docs/使用指南.md#宿主兼容范围与展示元数据)。

重新运行相同的 `npx --yes dsh-ops@latest install --profile ...`,或用官方 CLI `add dsh-ops@latest`。按应用提示重载;替换已加载代码时重启应用。

#### 卸载与查看状态
Expand Down
6 changes: 6 additions & 0 deletions README.zh.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,8 @@

OPS 为 DSH 增加有界文件与文档工具。Native 模式返回紧凑、带行号的文本;PTC 代码从同一个按调用启动的 Rust worker 获取类型化 Outcome。宿主集成使用严格 TypeScript,编译后保持已有 JavaScript 包路径。

支持:Windows x64、Linux x64,以及 macOS 13+ 的 Apple Silicon 与 Intel(`darwin-arm64`、`darwin-x64`)。见 [macOS](docs/macos.zh.md)。

> [!IMPORTANT]
> 本分支是 **0.4.0 发布候选**,尚未发布。已批准的验收范围为:BM-01 相比 OPS 0.3.x 输出减少至少 40%,官方读取另列对照;BM-03 对文件/发现 schema 执行 400 token 上限,同时保留 Bash 启动常驻并单列完整总数。最终实测证据与功能 CI 缺一不可。
> 详情见[发布状态与限制](docs/0.4.0发布候选.md)。下方 `@latest` 命令安装已发布版本;评估候选版本需自行构建本检出目录并打包。
Expand Down Expand Up @@ -77,6 +79,10 @@ dsh plugin --profile dsh-tui add dsh-ops

#### 更新方法

宿主兼容范围明确声明为 DSH **0.2.0-rc.2 与 0.2.1-rc.2**。
组件图标导出、profile 刷新及配置/schema 检查见
[宿主兼容范围与展示元数据](docs/使用指南.md#宿主兼容范围与展示元数据)。

重新运行相同的 `npx --yes dsh-ops@latest install --profile ...`,或用官方 CLI `add dsh-ops@latest`。按应用提示重载;替换已加载代码时重启应用。

#### 卸载与查看状态
Expand Down
Loading
Loading