Skip to content

feat(harness): add AForge parity across Python, Go, and TypeScript - #905

Draft
AbirAbbas wants to merge 5 commits into
mainfrom
agent/aforge-do-harness
Draft

feat(harness): add AForge parity across Python, Go, and TypeScript#905
AbirAbbas wants to merge 5 commits into
mainfrom
agent/aforge-do-harness

Conversation

@AbirAbbas

@AbirAbbas AbirAbbas commented Aug 10, 2026

Copy link
Copy Markdown
Contributor

Summary

  • adds AForge provider parity to the Python, Go, and TypeScript SDKs
  • makes direct aforge exec --json the default AForge adapter contract
  • retains AGENTFIELD_AFORGE_COMMAND=do as an explicit routed-workflow override
  • preserves stdin-only task delivery and maps both JSON envelopes into common AgentField result, usage, cost, and failure fields
  • pins supplied work and plan models for exec, keeps system prompts separate, and gives the CLI a timeout landing window
  • accepts usable exec budget/turn-cap landings while retaining strict do exit semantics
  • keeps caller environment overrides and per-invocation schema isolation intact

Dependencies

The default exec path depends on:

  • Agent-Field/aforge-v2#5 for the command contract
  • Agent-Field/aforge-v2#6 for the released downstream CLI image

Consumer rollout PRs:

Default contract

aforge exec --json -w <project-root> \
  --timeout <outer-minus-5s> --context-fill 60 --completion-reserve 65536

The task is written to stdin. A supplied system prompt is passed with --system; a supplied model is passed to both --model and --plan-model.

To use AForge routing instead:

AGENTFIELD_AFORGE_COMMAND=do

Verification

  • Python AForge provider: 20 tests passed
  • Go AForge provider: go test ./harness
  • TypeScript AForge provider: 15 tests passed
  • TypeScript: npm run lint and npm run build
  • live Python, Go, and TypeScript adapter canaries against the ported AForge binary

@github-actions

github-actions Bot commented Aug 10, 2026

Copy link
Copy Markdown
Contributor

Performance

SDK Memory Δ Latency Δ Tests Status
Python 9.0 KB - 0.30 µs -14%
Go 226 B -19% 0.64 µs -36%
TS 497 B +42% 1.62 µs -19%

Regression detected:

  • TypeScript memory: 350 B → 497 B (+42%)

@github-actions

github-actions Bot commented Aug 10, 2026

Copy link
Copy Markdown
Contributor

📊 Coverage gate

Thresholds from .coverage-gate.toml: per-surface ≥ 84%, aggregate ≥ 85%, max per-surface regression ≤ 1.0 pp, max aggregate regression ≤ 0.50 pp.

Surface Current Baseline Δ
control-plane 87.10% 87.40% ↓ -0.30 pp 🟡
sdk-go 92.70% 92.00% ↑ +0.70 pp 🟢
sdk-python 94.20% 93.73% ↑ +0.47 pp 🟢
sdk-typescript 91.26% 90.42% ↑ +0.84 pp 🟢
web-ui 84.76% 84.79% ↓ -0.03 pp 🟡
aggregate 85.62% 85.75% ↓ -0.13 pp 🟡

✅ Gate passed

No surface regressed past the allowed threshold and the aggregate stayed above the floor.

@github-actions

github-actions Bot commented Aug 10, 2026

Copy link
Copy Markdown
Contributor

📐 Patch coverage gate

Threshold: 80% on lines this PR touches vs origin/main (from .coverage-gate.toml:thresholds.min_patch).

Surface Touched lines Patch coverage Status
control-plane 0 ➖ no changes
sdk-go 282 90.00%
sdk-python 0 ➖ no changes
sdk-typescript 124 94.00%
web-ui 0 ➖ no changes

✅ Patch gate passed

Every surface whose lines were touched by this PR has patch coverage at or above the threshold.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant