Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
230 commits
Select commit Hold shift + click to select a range
44bbcfe
fix: Retry ClosedResourceError on isolated session (#2711)
elainegan-openai Mar 19, 2026
1bb5ff6
feat(mcp): expose auth and httpx_client_factory in SSE/StreamableHttp…
adityasingh2400 Mar 19, 2026
05dc068
fix: Retry MCP 408s on isolated session (#2709)
elainegan-openai Mar 19, 2026
5fa3fd4
Recover streamed nested agent output before cancellation fallback (#2…
elainegan-openai Mar 19, 2026
f25a4f9
Release 0.12.5 (#2716)
github-actions[bot] Mar 19, 2026
fc609e1
add PromptLayer integration link to tracing documentation (#2718)
adagradschool Mar 19, 2026
47ff1da
docs: update translated document pages (#2719)
github-actions[bot] Mar 19, 2026
58374fe
feat(mcp): expose session_id on MCPServerStreamableHttp (#2708)
adityasingh2400 Mar 19, 2026
230a9d6
Highlight gpt-realtime-1.5 in public docs (#2724)
teri-oai Mar 19, 2026
54444ad
docs: update translated document pages (#2726)
github-actions[bot] Mar 19, 2026
aa483fe
fix(memory): make SQLAlchemySession first writes race-safe (#2725)
felmonon Mar 20, 2026
c964926
fix(compaction): #2727 strip orphaned assistant message IDs after rea…
Ratnaditya-J Mar 20, 2026
bb817aa
docs: clarify cancel-after-turn streaming guidance (#2710)
felmonon Mar 20, 2026
a727b1f
docs: update translated document pages (#2730)
github-actions[bot] Mar 20, 2026
bac71c6
fix: #2729 avoid eager-task race in function tool batch executor (#2731)
seratch Mar 20, 2026
72ad8e3
chore: add agents/openai.yaml to skills
seratch Mar 20, 2026
f0df572
fix: default realtime websocket model to gpt-realtime-1.5 (#2737)
seratch Mar 20, 2026
34ff848
feat: #2669 add opt-in reasoning content replay for chat completion m…
seratch Mar 20, 2026
1005106
feat(mcp): expose list_resources, list_resource_templates, and read_r…
adityasingh2400 Mar 21, 2026
49f593b
fix: remove_all_tools missing MCP and reasoning item types (#2700)
joaquinhuigomez Mar 21, 2026
be9ce37
chore: add runtime behavior probe skill (#2743)
seratch Mar 21, 2026
8db2ed2
chore: imrpove pr-draft-summary trigger and runtime-behavior-probe tweak
seratch Mar 21, 2026
14090a2
chore: parallelize code-change-verification after format (#2751)
seratch Mar 22, 2026
85929c0
docs: rebrand Keywords AI to Respan (#2757)
drPod Mar 23, 2026
58d3ed2
fix: preserve streamed output guardrail tripwires in the run loop (#2…
seratch Mar 23, 2026
59d74e1
Release 0.13.0 (#2738)
github-actions[bot] Mar 23, 2026
6fc73a4
docs: add 0.13 changelog (#2744)
seratch Mar 23, 2026
d00f542
docs: update translated document pages (#2759)
github-actions[bot] Mar 23, 2026
681320e
fix: remove duplicate CompactionItem from RunItem union (#2761)
KanchiShimono Mar 23, 2026
0cc4805
fix: #2760 wait for realtime response.done before follow-up response.…
seratch Mar 24, 2026
8e1915e
fix: preserve static MCP meta in converted function tools (#2769)
seratch Mar 25, 2026
1c0ff59
feat: add any-llm model support with responses-compatible routing (#2…
seratch Mar 25, 2026
b8355b2
docs: add missing ref files
seratch Mar 25, 2026
687e974
fix: handle cancelled single function tools as tool failures (#2762)
elainegan-openai Mar 25, 2026
9088496
fix: optionize initialized notification tolerance (#2765)
elainegan-openai Mar 25, 2026
881f402
fix: harden example auto-runs against PATH and port conflicts (#2770)
seratch Mar 25, 2026
0a5b8c9
Release 0.13.1 (#2768)
github-actions[bot] Mar 25, 2026
13f4a74
docs: update pages to add any-llm adapter (#2715)
seratch Mar 25, 2026
7dc7fa2
docs: update translated document pages (#2771)
github-actions[bot] Mar 25, 2026
abd5cef
fix: pin liteLLM upper bound to 1.82.6 to mitigate supply chain attac…
gn00295120 Mar 25, 2026
8fdb45d
fix: update default reasoning effort for newer models (#2773)
seratch Mar 25, 2026
67fa4d8
chore: make sync
seratch Mar 26, 2026
9a96d9e
fix: #2778 keep LiteLLM reasoning_effort portable across providers (#…
seratch Mar 26, 2026
c2f6690
fix: #2776 keep private tool metadata out of persisted session items …
seratch Mar 26, 2026
570b114
docs: update readme
seratch Mar 26, 2026
c52d25f
feat: #2785 add external_web_access to WebSearchTool (#2786)
ymuichiro Mar 26, 2026
7fea1a5
fix: improve a flaky test for realtime module (#2787)
seratch Mar 26, 2026
c5e1321
fix: #2783 depend on griffelib directly for docstring parsing (#2791)
seratch Mar 26, 2026
dddbce1
Release 0.13.2 (#2774)
github-actions[bot] Mar 26, 2026
149f5ce
docs: add non-OpenAI provider code example (#2792)
Muttaqi110 Mar 27, 2026
a4db3e5
docs: update translated document pages (#2793)
github-actions[bot] Mar 27, 2026
ce0d792
docs: tweak for #2792 changes
seratch Mar 27, 2026
9ed6dad
chore: add Codex Stop hook for targeted Ruff tidy (#2795)
seratch Mar 27, 2026
a7b4851
fix: #2797 accept raw image_url content parts on chat completions inp…
seratch Mar 28, 2026
9f5575a
fix: #2798 avoid stale hydrated input ids in server conversation trac…
seratch Mar 28, 2026
d86c2e2
Release 0.13.3 (#2801)
github-actions[bot] Mar 31, 2026
5e0e6d2
fix: map extensions changes to the feature:extensions label (#2814)
seratch Mar 31, 2026
40aada1
fix: #2806 sanitize AnyLLM responses replay input before validation (…
seratch Mar 31, 2026
051c2ea
Release 0.13.4 (#2815)
github-actions[bot] Apr 1, 2026
976bcce
feat: #2807 support callable approval policies for local MCP servers …
seratch Apr 1, 2026
70939dc
chore(deps): bump openai/codex-action from 1.4 to 1.6 (#2819)
dependabot[bot] Apr 1, 2026
c940055
chore(deps): bump astral-sh/setup-uv from 7.3.1 to 8.0.0 (#2820)
dependabot[bot] Apr 1, 2026
f75a40e
docs: sync examples.md with current examples directory (#2827)
AbdullahBapra Apr 2, 2026
fe9e70f
fix: #2823 AnyLLM reasoning extraction for iterable vLLM/any-llm Reas…
ziqi-cn Apr 2, 2026
76f419f
docs: update translated document pages (#2828)
github-actions[bot] Apr 2, 2026
6a89f1b
fix: serialize SQLite session writes with shared file locks (#2843)
seratch Apr 4, 2026
7a3f6b7
feat: #2135 add public flush_traces API (#2844)
seratch Apr 4, 2026
b0ab25c
Release 0.13.5 (#2821)
github-actions[bot] Apr 6, 2026
e1d861c
docs: updates for #2844 changes (#2845)
seratch Apr 6, 2026
fa50899
docs: update translated document pages (#2847)
github-actions[bot] Apr 6, 2026
0386210
docs(tracing): add HoneyHive to tracing integrations list (#2851)
m1lestones Apr 7, 2026
aeb653e
docs: update translated document pages (#2853)
github-actions[bot] Apr 7, 2026
c06cd45
fix: harden SQLAlchemySession against transient SQLite locks (#2854)
seratch Apr 7, 2026
fb67680
fix: #2856 stop recursive trace preview truncation (#2860)
seratch Apr 8, 2026
690079e
fix: #2863 lazy-load SQLiteSession exports (#2864)
seratch Apr 9, 2026
bfc8c63
Release 0.13.6 (#2861)
github-actions[bot] Apr 9, 2026
111cbf1
docs: add Asqav to external tracing processors list (#2859)
jagmarques Apr 9, 2026
86739b1
docs: update translated document pages (#2870)
github-actions[bot] Apr 9, 2026
2d665c9
Sandbox Agents (#2889)
sdcoffey Apr 15, 2026
a7ccef4
Release 0.14.0 (#2890)
github-actions[bot] Apr 15, 2026
e336667
docs: update translated document pages (#2891)
github-actions[bot] Apr 15, 2026
4892211
docs: align translated sandbox nav and refresh generated refs (#2892)
seratch Apr 15, 2026
bd871cd
docs: clarify ToolContext availability in function-tool lifecycle hoo…
HuxleyHu98 Apr 15, 2026
5d05d5d
docs: update translated document pages (#2893)
github-actions[bot] Apr 15, 2026
83b3833
fix #2151 shield server-managed handoffs from unsupported history rew…
seratch Apr 15, 2026
9013480
fix: #2873 preserve computer driver compatibility for modifier keys (…
seratch Apr 15, 2026
fa049a2
fix: stop streamed tool execution after known input guardrail tripwir…
seratch Apr 15, 2026
0a100fb
ci: add sandbox auto-label mapping (#2894)
seratch Apr 15, 2026
2cef83b
fix: sanitize OpenAI tracing export payloads (#2896)
alfozan Apr 15, 2026
3dffa4b
Release 0.14.1 (#2895)
github-actions[bot] Apr 15, 2026
09ea6aa
fix: remove_all_tools missing hosted tool types (#2885)
javierdejesusda Apr 15, 2026
48ad4aa
fix: tolerate None text in ResponseOutputText content items (#2883)
beveradb Apr 15, 2026
47ecb38
feat: #2228 persist tool origin metadata in run items (#2654)
seratch Apr 15, 2026
6b14ebc
docs: clarify OpenAI provider configuration guidance (#2901)
seratch Apr 15, 2026
b9b0141
docs: update translated document pages (#2903)
github-actions[bot] Apr 15, 2026
5086b24
docs: sync sandbox translations and set doc translation default model…
seratch Apr 15, 2026
4f3c8a5
fix: #1876 LiteLLM extra_body forwarding (#2900)
yu2001-s Apr 16, 2026
3ad12bc
chore: Bump `temporalio` Dep in Temporal Example (#2918)
JasonSteving99 Apr 16, 2026
b58d059
fix: Trust filesystem permissions for Vercel roots (#2910)
scotttrinh Apr 17, 2026
b7ba446
fix: #604 handle None choices in ChatCompletion response (#2850)
Spectual Apr 17, 2026
f84ef7f
fix: normalize compacted Responses user inputs before session reuse (…
seratch Apr 17, 2026
67fb85a
feat(extensions): add MongoDB session backend (#2902)
alexbevi Apr 17, 2026
dd3f59e
Loosen sandbox compaction model parsing (#2930)
sdcoffey Apr 17, 2026
3772047
feat: support sandbox extra path grants (#2920)
qiyaoq-oai Apr 17, 2026
55c8900
docs: update translated document pages (#2935)
github-actions[bot] Apr 17, 2026
61443ca
fix: #2929 surface run-loop exceptions after stream_events() complete…
nileshpatil6 Apr 18, 2026
e80d2d2
Release 0.14.2 (#2899)
github-actions[bot] Apr 18, 2026
82eaf15
fix: #2938 make sandboxes importable on Windows (#2948)
seratch Apr 18, 2026
cebc763
docs: move module docstring to top of handoff_filters.py (#2950)
kuishou68 Apr 19, 2026
da82b2c
fix: #2951 warn for tool name character replacement (#2953)
seratch Apr 19, 2026
cc57bb1
fix: #2962 normalize sandbox paths and add Windows CI (#2963)
seratch Apr 20, 2026
12b5471
fix: prepare Daytona workspace root before start (#2956)
seratch Apr 20, 2026
66cc689
Add Datadog as an external tracer in the tracing docs (#2965)
jarbaugh5 Apr 20, 2026
35c497e
docs: update translated document pages (#2978)
github-actions[bot] Apr 20, 2026
5515283
fix: windows errors with #2956 (#2979)
seratch Apr 20, 2026
902c599
fix: tighten LocalSnapshot restorable checks (#2975)
matthewflint Apr 20, 2026
9d963e8
fix: bound manifest description truncation (#2974)
matthewflint Apr 20, 2026
5d300f0
Release 0.14.3 (#2980)
github-actions[bot] Apr 20, 2026
bf3e9d1
docs: remove duplicate word in voice interruptions section (#2981)
abhicris Apr 21, 2026
9e228fc
docs: update translated document pages (#2982)
github-actions[bot] Apr 21, 2026
2a515f0
test: add sandbox compatibility guards (#2984)
seratch Apr 21, 2026
106ef05
fix: ignore relative snapshot base overrides (#2976)
matthewflint Apr 21, 2026
4c5112c
feat: add BoxMount support (#2988)
alfozan Apr 21, 2026
3aad7eb
refactor: share sandbox ephemeral mount lifecycle (#2986)
seratch Apr 21, 2026
4c68780
refactor: share sandbox tar exclude arg generation (#2987)
seratch Apr 21, 2026
333721d
refactor: extract sandbox session helper operations (#2985)
seratch Apr 21, 2026
fdf2d00
docs: update translated document pages (#2996)
github-actions[bot] Apr 21, 2026
4e43cba
Release 0.14.4 (#2989)
github-actions[bot] Apr 21, 2026
734d424
docs: clarify lazy skill source host paths (#2998)
alfozan Apr 22, 2026
638388a
docs: update translated document pages (#2999)
github-actions[bot] Apr 22, 2026
81c57c5
fix: backfill streamed terminal output (#3000)
ankitphogat Apr 23, 2026
5be06a1
feat: #3001 add Modal sandbox idle timeout option (#3005)
seratch Apr 23, 2026
16e0409
fix: #3004 serve HITL resume tool outputs (#3006)
seratch Apr 23, 2026
fe3a5e6
Release 0.14.5 (#3007)
github-actions[bot] Apr 23, 2026
c2cb031
chore: harden uv dependency resolution (#3014)
mcgrew-oai Apr 23, 2026
5ffc1ec
relax websockets upper bound from <16 to <17 (#3013)
mathisobadia Apr 23, 2026
c88f339
Update examples and defaults to GPT-5.5 (#3016)
alfozan Apr 25, 2026
071e2b6
docs: update translated document pages (#3021)
github-actions[bot] Apr 25, 2026
1821bf8
docs: add MongoDB session documentation (#3015)
alexbevi Apr 25, 2026
9af6ad1
docs: update translated document pages (#3023)
github-actions[bot] Apr 25, 2026
9a207b6
Release 0.14.6 (#3022)
github-actions[bot] Apr 25, 2026
2eb8713
fix: tighten tar and zip member validation (#3028)
matthewflint Apr 26, 2026
5df41d3
feat: #2886 add convenience properties (tool_name, call_id) to tool i…
jawwad-ali Apr 26, 2026
ba889de
fix: reject symlinked LocalFile sources (#2972)
matthewflint Apr 26, 2026
8025ed0
Fix: remove unset fields from calls to Responses API (#3026)
s0rc3r3r01 Apr 27, 2026
b3688db
[sandbox] Raise Phase 2 memory consolidation turn limit (#3038)
andi-oai Apr 27, 2026
ebdb0f2
fix: add GPT-5.5 aliases to sandbox compaction (#3039)
alfozan Apr 28, 2026
8d7f05b
Release 0.14.7 (#3031)
github-actions[bot] Apr 28, 2026
0500433
fix: #3046 preserve MCP re-export import errors (#3048)
seratch Apr 29, 2026
0661c9e
fix: #3043 delimit sandbox prompt instruction sections (#3047)
seratch Apr 29, 2026
572c7bf
docs: fix typo in comment for WS event handler (#3050)
ateamofantsintheirprime Apr 29, 2026
7029ea8
Release 0.14.8 (#3049)
github-actions[bot] Apr 29, 2026
3a3f34f
docs: add missing space after period in MCPServerStdio docstring (#3053)
GopalGB Apr 30, 2026
2d40c09
fix: #3055 surface model refusals during run resolution (#3057)
seratch May 1, 2026
ec99da6
chore(deps): bump actions/github-script from 8.0.0 to 9.0.0 (#3059)
dependabot[bot] May 1, 2026
d996707
chore(deps): bump peter-evans/create-pull-request from 8.1.0 to 8.1.1…
dependabot[bot] May 1, 2026
7833715
chore(deps): bump pypa/gh-action-pypi-publish from 1.13.0 to 1.14.0 (…
dependabot[bot] May 1, 2026
498390a
chore(deps): bump openai/codex-action from 1.6 to 1.8 (#3060)
dependabot[bot] May 1, 2026
da3f157
ci: improve translation pipelone to be more robust
seratch May 1, 2026
f7410c8
Release 0.15.0 (#3063)
github-actions[bot] May 1, 2026
48d7e9c
docs: add 0.15 changelog (#3058)
seratch May 1, 2026
611d080
docs: update translated document pages (#3064)
github-actions[bot] May 1, 2026
841f72f
docs: improve quickstart documentation for Windows OS users (#3071)
seratch May 1, 2026
756fa43
docs: update translated document pages (#3072)
github-actions[bot] May 1, 2026
ae224b4
test: cover guardrail name fallback to function __name__ (#3073)
Quratulain-bilal May 1, 2026
42c3015
chore: harden Dapr Redis integration fixture loading (#3078)
Aphroq May 2, 2026
a47b7ea
fix: #3074 restore SIGINT defaults for UnixLocal PTY children (#3075)
Aphroq May 2, 2026
4b2881c
feat: expose Responses WebSocket keepalive options (#3080)
seratch May 2, 2026
41c646d
fix: restore UnixLocal PTY terminal signal defaults (#3082)
seratch May 2, 2026
ceb238f
Release 0.15.1 (#3083)
github-actions[bot] May 2, 2026
e9a3e36
docs: updates for #3080 (#3081)
seratch May 2, 2026
60b7bee
docs: update translated document pages (#3084)
github-actions[bot] May 2, 2026
f2fb9ff
test: improve coverage and organize test layout (#3085)
seratch May 2, 2026
044d44c
test: cover realtime tool timeout behaviors in realtime session (#3076)
Aphroq May 4, 2026
9d24382
test: add realtime tool output serialization edge cases (#3077)
Aphroq May 4, 2026
4b5a0b8
fix: reject string-like shell commands (#3092)
Aphroq May 4, 2026
4bb4400
fix: filter custom_tool_call types in remove_all_tools handoff filter…
Quratulain-bilal May 4, 2026
fbc5a44
test: cover on_handoff, on_tool_start, on_tool_end on RunHooks (#3098)
Quratulain-bilal May 4, 2026
63ebf5a
fix: make ToolContext hashable to match RunContextWrapper (#3097)
ioleksiuk May 4, 2026
3854c12
fix: only rewind matching session suffixes (#3090)
Aphroq May 4, 2026
54ec5f0
test: cover real Handoff object branch in visualization (#3100)
Quratulain-bilal May 4, 2026
b80d541
test: add direct unit tests for _tool_identity helpers (#3101)
Quratulain-bilal May 4, 2026
1b7d878
test: add direct unit tests for _mcp_tool_metadata helpers (#3102)
Quratulain-bilal May 4, 2026
ae60947
fix: redact MCP invalid JSON errors when tool logging is disabled (#3…
Aphroq May 4, 2026
9b57f05
fix: reject failed responses stream terminals (#3107)
Aphroq May 4, 2026
613b8f3
fix(mcp): isolate merged tool metadata (#3114)
felmonon May 5, 2026
7a5d32b
fix: block disabled function tools before execution (#3118)
Aphroq May 5, 2026
574a598
feat: add context management model setting (#3128)
seratch May 5, 2026
601ecf5
fix: #3123 avoid replaying assistant conversation item IDs for OpenAI…
seratch May 5, 2026
3d1231e
fix: redact function tool trace span errors (#3111)
Aphroq May 5, 2026
75da8e0
Release 0.15.2 (#3099)
github-actions[bot] May 6, 2026
02a6b21
docs: updates for #3128 (#3129)
seratch May 6, 2026
ce46235
docs: update translated document pages (#3131)
github-actions[bot] May 6, 2026
6e691ee
fix(mcp): avoid mutating tool input schemas (#3134)
adityasingh2400 May 6, 2026
e22f25a
fix(mcp): reject non-object tool input JSON (#3135)
adityasingh2400 May 6, 2026
9a2b4a9
fix(mcp): make duplicate tool errors deterministic (#3136)
adityasingh2400 May 6, 2026
0370fd3
test(realtime): cover overlapping tool response creates (#3140)
adityasingh2400 May 6, 2026
b1722a7
fix: tolerate audio deltas before audio format negotiation in ModelAu…
Quratulain-bilal May 6, 2026
e1cb2be
Release 0.15.3 (#3149)
github-actions[bot] May 6, 2026
bed924b
fix: reject external symlink targets during hydrate (#3094)
Aphroq May 6, 2026
b9cbab1
feat: allow disabling max_turns with None (#3132)
seratch May 6, 2026
fc2d208
feat: switch the default model to a newer mini model (affecting only …
seratch May 6, 2026
1a1b35d
docs: update translated document pages (#3151)
github-actions[bot] May 6, 2026
f903926
fix: make Permissions hashable to match User and Group (#3154)
ioleksiuk May 6, 2026
0466636
feat: #1167 add opt-in server-prefixed MCP tool names (#3019)
mavrickdeveloper May 6, 2026
8526723
feat: #1859 add runtime function tool concurrency config (#3152)
seratch May 6, 2026
ff8e3db
docs: update translated document pages (#3160)
github-actions[bot] May 6, 2026
8c8a2eb
fix: #3104 stabilize chat completions tool call output indexes (#3161)
seratch May 6, 2026
5a10e46
docs: realtime guardrail fallback behavior (#3157)
mindbomber May 6, 2026
e8856de
docs: update translated document pages (#3162)
github-actions[bot] May 7, 2026
9f361ba
Release 0.16.0 (#3150)
github-actions[bot] May 7, 2026
0ed4ee6
docs: updates for #3147 (#3148)
seratch May 7, 2026
1683357
docs: add 0.16.0 changelog (#3153)
seratch May 7, 2026
c5ebf80
docs: update translated document pages (#3163)
github-actions[bot] May 7, 2026
f185dfa
docs: document tool execution concurrency (#3164)
seratch May 7, 2026
eed9100
docs: update translated document pages (#3165)
github-actions[bot] May 7, 2026
0fb2e09
fix: restore session history after compaction replacement failures (#…
Aphroq May 7, 2026
516aa0c
fix: #3171 reject corrupt Dapr session state updates (#3173)
Aphroq May 7, 2026
6f5fbf6
fix: #3170 clean up git repo temp clones on failure (#3172)
Aphroq May 7, 2026
170ee73
fix: #3109 stabilize chat completions stream output indexes (#3176)
seratch May 7, 2026
3a11cf5
fix: reject non-object function tool input JSON (#3166)
ioleksiuk May 7, 2026
a67d95f
fix: #3174 count valid encrypted session items for limits (#3175)
Aphroq May 7, 2026
28de365
fix: #3168 validate MCP require_approval policies (#3179)
seratch May 7, 2026
bd84b65
Release 0.16.1 (#3167)
github-actions[bot] May 7, 2026
a91f630
fix: skip prerequisite-bound examples in auto runs
seratch May 7, 2026
ee36d43
Fix Responses extra_args collision with omitted kwargs (#3185)
alfozan May 7, 2026
bfe244f
feat(streaming): emit ReasoningDeltaEvent for reasoning/thinking delt…
Apr 14, 2026
57b7e97
fix: address CodeRabbit review comments on PR #3
Apr 14, 2026
da406c2
test(reasoning-delta): tighten vacuous-pass assertions
adityasingh2400 Apr 22, 2026
5c36515
chore: ruff format/isort fixes after rebase
adityasingh2400 Apr 26, 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
  •  
  •  
  •  
13 changes: 8 additions & 5 deletions .agents/skills/code-change-verification/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,22 +14,25 @@ Ensure work is only marked complete after formatting, linting, type checking, an
1. Keep this skill at `./.agents/skills/code-change-verification` so it loads automatically for the repository.
2. macOS/Linux: `bash .agents/skills/code-change-verification/scripts/run.sh`.
3. Windows: `powershell -ExecutionPolicy Bypass -File .agents/skills/code-change-verification/scripts/run.ps1`.
4. If any command fails, fix the issue, rerun the script, and report the failing output.
5. Confirm completion only when all commands succeed with no remaining issues.
4. The scripts run `make format` first, then run `make lint`, `make typecheck`, and `make tests` in parallel with fail-fast semantics.
5. While the parallel steps are still running, the scripts emit periodic heartbeat updates so you can tell that work is still in progress.
6. If any command fails, fix the issue, rerun the script, and report the failing output.
7. Confirm completion only when all commands succeed with no remaining issues.

## Manual workflow

- If dependencies are not installed or have changed, run `make sync` first to install dev requirements via `uv`.
- Run from the repository root in this order: `make format`, `make lint`, `make typecheck`, `make tests`.
- Run from the repository root with `make format` first, then `make lint`, `make typecheck`, and `make tests`.
- Do not skip steps; stop and fix issues immediately when a command fails.
- If you run the steps manually, you may parallelize `make lint`, `make typecheck`, and `make tests` after `make format` completes, but you must stop the remaining steps as soon as one fails.
- Re-run the full stack after applying fixes so the commands execute in the required order.

## Resources

### scripts/run.sh

- Executes the full verification sequence with fail-fast semantics from the repository root. Prefer this entry point to ensure the required commands run in the correct order.
- Executes `make format` first, then runs `make lint`, `make typecheck`, and `make tests` in parallel with fail-fast semantics from the repository root. It also emits periodic heartbeat updates while the parallel steps are still running. Prefer this entry point to preserve the required ordering while reducing total runtime.

### scripts/run.ps1

- Windows-friendly wrapper that runs the same verification sequence with fail-fast semantics. Use from PowerShell with execution policy bypass if required by your environment.
- Windows-friendly wrapper that runs the same sequence with `make format` first and the remaining steps in parallel with fail-fast semantics, plus periodic heartbeat updates while work is still running. Use from PowerShell with execution policy bypass if required by your environment.
4 changes: 4 additions & 0 deletions .agents/skills/code-change-verification/agents/openai.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
interface:
display_name: "Code Change Verification"
short_description: "Run the required local verification stack"
default_prompt: "Use $code-change-verification to run the required local verification stack and report any failures."
186 changes: 178 additions & 8 deletions .agents/skills/code-change-verification/scripts/run.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -11,28 +11,198 @@ try {
}

if (-not $repoRoot) {
$repoRoot = Resolve-Path (Join-Path $scriptDir "..\\..\\..\\..")
$repoRoot = (Resolve-Path (Join-Path $scriptDir "..\\..\\..\\..")).Path
} else {
$repoRoot = ([string]$repoRoot).Trim()
}

Set-Location $repoRoot

$logDir = Join-Path ([System.IO.Path]::GetTempPath()) ("code-change-verification-" + [System.Guid]::NewGuid().ToString("N"))
New-Item -ItemType Directory -Path $logDir | Out-Null

$steps = New-Object System.Collections.Generic.List[object]
$heartbeatIntervalSeconds = 10
if ($env:CODE_CHANGE_VERIFICATION_HEARTBEAT_SECONDS) {
$heartbeatIntervalSeconds = [int]$env:CODE_CHANGE_VERIFICATION_HEARTBEAT_SECONDS
}

function Resolve-MakeInvocation {
$command = Get-Command make -ErrorAction Stop

while ($command.CommandType -eq [System.Management.Automation.CommandTypes]::Alias) {
$command = $command.ResolvedCommand
}

if ($command.CommandType -in @(
[System.Management.Automation.CommandTypes]::Application,
[System.Management.Automation.CommandTypes]::ExternalScript
)) {
$commandPath = if ($command.Path) { $command.Path } else { $command.Source }
return [PSCustomObject]@{
FilePath = $commandPath
ArgumentList = @()
}
}

if ($command.CommandType -eq [System.Management.Automation.CommandTypes]::Function) {
$shellPath = (Get-Process -Id $PID).Path
if (-not $shellPath) {
throw "Unable to resolve the current PowerShell executable for make wrapper launches."
}

$wrapperPath = Join-Path $logDir "invoke-make.ps1"
$escapedRepoRoot = $repoRoot -replace "'", "''"
$wrapperTemplate = @'
Set-StrictMode -Version Latest
$ErrorActionPreference = "Stop"
Set-Location -LiteralPath '{0}'
function global:make {{
{1}
}}
& make @args
exit $LASTEXITCODE
'@
$wrapperScript = $wrapperTemplate -f $escapedRepoRoot, $command.Definition.TrimEnd()
Set-Content -Path $wrapperPath -Value $wrapperScript -Encoding UTF8

return [PSCustomObject]@{
FilePath = $shellPath
ArgumentList = @("-NoLogo", "-NoProfile", "-File", $wrapperPath)
}
}

throw "code-change-verification: make must resolve to an application, script, alias, or function."
}

$script:MakeInvocation = Resolve-MakeInvocation

function Invoke-MakeStep {
param(
[Parameter(Mandatory = $true)][string]$Step
)

Write-Host "Running make $Step..."
& make $Step
& $script:MakeInvocation.FilePath @($script:MakeInvocation.ArgumentList + $Step)

if ($LASTEXITCODE -ne 0) {
Write-Error "code-change-verification: make $Step failed with exit code $LASTEXITCODE."
exit $LASTEXITCODE
Write-Host "code-change-verification: make $Step failed with exit code $LASTEXITCODE."
return $LASTEXITCODE
}

return 0
}

function Start-MakeStep {
param(
[Parameter(Mandatory = $true)][string]$Step
)

$stdoutLogPath = Join-Path $logDir "$Step.stdout.log"
$stderrLogPath = Join-Path $logDir "$Step.stderr.log"
Write-Host "Running make $Step..."
$process = Start-Process -FilePath $script:MakeInvocation.FilePath -ArgumentList @($script:MakeInvocation.ArgumentList + $Step) -RedirectStandardOutput $stdoutLogPath -RedirectStandardError $stderrLogPath -PassThru
$steps.Add([PSCustomObject]@{
Name = $Step
Process = $process
StdoutLogPath = $stdoutLogPath
StderrLogPath = $stderrLogPath
StartTime = Get-Date
})
}

Invoke-MakeStep -Step "format"
Invoke-MakeStep -Step "lint"
Invoke-MakeStep -Step "typecheck"
Invoke-MakeStep -Step "tests"
function Stop-RunningSteps {
foreach ($step in $steps) {
if ($null -eq $step.Process) {
continue
}

& taskkill /PID $step.Process.Id /T /F *> $null
}

foreach ($step in $steps) {
if ($null -eq $step.Process) {
continue
}

try {
$step.Process.WaitForExit()
} catch {
}
}
}

function Wait-ForParallelSteps {
$pending = New-Object System.Collections.Generic.List[object]
foreach ($step in $steps) {
$pending.Add($step)
}
$nextHeartbeatAt = (Get-Date).AddSeconds($heartbeatIntervalSeconds)

while ($pending.Count -gt 0) {
foreach ($step in @($pending)) {
$step.Process.Refresh()
if (-not $step.Process.HasExited) {
continue
}

$duration = [int]((Get-Date) - $step.StartTime).TotalSeconds
if ($step.Process.ExitCode -eq 0) {
Write-Host "make $($step.Name) passed in ${duration}s."
[void]$pending.Remove($step)
continue
}

Write-Host "code-change-verification: make $($step.Name) failed with exit code $($step.Process.ExitCode) after ${duration}s."
if (Test-Path $step.StderrLogPath) {
Write-Host "--- $($step.Name) stderr log (last 80 lines) ---"
Get-Content $step.StderrLogPath -Tail 80
}
if (Test-Path $step.StdoutLogPath) {
Write-Host "--- $($step.Name) stdout log (last 80 lines) ---"
Get-Content $step.StdoutLogPath -Tail 80
}

Stop-RunningSteps
return $step.Process.ExitCode
}

if ($pending.Count -gt 0) {
if ((Get-Date) -ge $nextHeartbeatAt) {
$running = @()
foreach ($step in $pending) {
$elapsed = [int]((Get-Date) - $step.StartTime).TotalSeconds
$running += "$($step.Name) (${elapsed}s)"
}
Write-Host ("code-change-verification: still running: " + ($running -join ", ") + ".")
$nextHeartbeatAt = (Get-Date).AddSeconds($heartbeatIntervalSeconds)
}
Start-Sleep -Seconds 1
}
}

return 0
}

$exitCode = 0

try {
$exitCode = Invoke-MakeStep -Step "format"
if ($exitCode -eq 0) {
Write-Host "Running make lint, make typecheck, and make tests in parallel..."
Start-MakeStep -Step "lint"
Start-MakeStep -Step "typecheck"
Start-MakeStep -Step "tests"

$exitCode = Wait-ForParallelSteps
}
} finally {
Stop-RunningSteps
Remove-Item $logDir -Recurse -Force -ErrorAction SilentlyContinue
}

if ($exitCode -ne 0) {
exit $exitCode
}

Write-Host "code-change-verification: all commands passed."
Loading
Loading