Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
513 commits
Select commit Hold shift + click to select a range
776ed16
fix(agentserver): remove output-persistence dead code (SOT §11/§20 dr…
Jun 14, 2026
2fc7a88
fix(agentserver): resolve all SOT-vs-impl drift items (D-1 .. D-4)
Jun 14, 2026
60aaedb
Merge remote-tracking branch 'origin/main' into feature/agentserver-d…
Jun 14, 2026
e09d5ba
agentserver: finalize feature branch — scrub internal-spec refs, vers…
Jun 14, 2026
b35483c
agentserver: refresh @task preview wheels for 2.0.0b7 / 1.0.0b6
Jun 14, 2026
d026cf6
agentserver: spec 022 final — zero skips, zero legacy, all tests green
Jun 14, 2026
eb75e31
[agentserver] responses: add authoritative durability SOT spec
Jun 14, 2026
99a06a3
[agentserver] responses: tidy developer guides to be standalone + dri…
Jun 14, 2026
a2648d9
[agentserver] responses: SOT spec — document the two valid handler ex…
Jun 14, 2026
e37a1c5
[agentserver] responses: merge feature/agentserver-durable-tasks (spe…
Jun 14, 2026
83deeb7
[agentserver] responses: add RED conformance tests for spec 023 migra…
Jun 14, 2026
8d6512f
[agentserver] responses: per-request primitive dispatch (spec 023 Pha…
Jun 14, 2026
242e86d
[agentserver] responses: tidy unit tests for spec 023 migration
Jun 14, 2026
aa0dbda
[agentserver] responses: sync SOT spec + dev guides + CHANGELOG for s…
Jun 14, 2026
e63ec19
[agentserver] responses: black formatting + spec 023 checkbox sync
Jun 14, 2026
d55a230
[agentserver] responses: add Row 5 e2e depth-coverage tests (audit ga…
Jun 14, 2026
0334b98
[agentserver] responses: RED conformance tests for spec 024 bookkeepi…
invalid-email-address Jun 15, 2026
63e7a4a
[agentserver] responses: bookkeeping unification (spec 024 Phase 2)
invalid-email-address Jun 15, 2026
f54fb98
[agentserver] RED tests for spec 024 Phase 3a (storage-root rename)
invalid-email-address Jun 15, 2026
ff592d9
spec 024 Phase 3: storage-root rename + file-backed response store as…
invalid-email-address Jun 15, 2026
97bf94f
spec 024 Phase 4: durable_background default False + composition-guar…
invalid-email-address Jun 15, 2026
8c230e6
[agentserver] responses: public API simplification per spec 024 §A (s…
RaviPidaparthi Jun 15, 2026
d2a3cb7
[agentserver] responses: SOT spec architectural rewrite post-unificat…
RaviPidaparthi Jun 15, 2026
c64729f
[agentserver] responses: conformance test gap closure (spec 024 Phase 7)
RaviPidaparthi Jun 15, 2026
8c11d2b
[agentserver] responses: black formatter sweep (spec 024 Phase 8)
RaviPidaparthi Jun 15, 2026
b69096f
[agentserver] responses: spec 024 self-audit gate remediations (spec …
RaviPidaparthi Jun 15, 2026
7173cc5
[agentserver] responses: CHANGELOG entry for spec 024 (spec 024 Phase…
RaviPidaparthi Jun 15, 2026
7b93b7a
[agentserver] responses: spec 024 final quality-gate sweep (spec 024 …
RaviPidaparthi Jun 15, 2026
55c27c8
[agentserver] responses: final-audit closure (spec 024 Phase 10)
RaviPidaparthi Jun 15, 2026
76c5614
[agentserver] responses: docs audit pass — strip internal-spec refs, …
RaviPidaparthi Jun 15, 2026
ca37c24
[agentserver] responses: restore shipped 3-arg handler signature + de…
RaviPidaparthi Jun 15, 2026
b6b9b43
[agentserver] core: unified storage_paths + AGENTSERVER_TASKS_BACKEND…
RaviPidaparthi Jun 15, 2026
f7b4f12
Merge branch 'feature/agentserver-durable-tasks' into feature/agentse…
RaviPidaparthi Jun 15, 2026
b30018e
[agentserver] core: refresh 2.0.0b7 preview wheels (storage_paths + A…
RaviPidaparthi Jun 15, 2026
077293f
Merge branch 'feature/agentserver-durable-tasks' into feature/agentse…
RaviPidaparthi Jun 15, 2026
49ed697
[agentserver] responses: remove Claude sample + simplify steering che…
RaviPidaparthi Jun 15, 2026
937eb3d
[agentserver] responses: fix 4 pre-existing baseline failures (persis…
RaviPidaparthi Jun 15, 2026
38ba06d
[agentserver] core CHANGELOG: add storage_paths + AGENTSERVER_TASKS_B…
RaviPidaparthi Jun 15, 2026
1cab231
[agentserver] core CHANGELOG: add storage_paths + AGENTSERVER_TASKS_B…
RaviPidaparthi Jun 15, 2026
09a42d2
[agentserver] core: black formatter pass on storage_paths + _manager …
RaviPidaparthi Jun 15, 2026
ecb1a10
[agentserver] core: refresh 2.0.0b7 wheels post-black format
RaviPidaparthi Jun 15, 2026
5a26ad0
Merge branch 'feature/agentserver-durable-tasks' into feature/agentse…
RaviPidaparthi Jun 15, 2026
fcb2b64
[agentserver] responses: tighten Phase-1 persistence-failure stamp or…
RaviPidaparthi Jun 15, 2026
57ca8f7
[agentserver] invocations: propagate agent_session_id into request.st…
RaviPidaparthi Jun 15, 2026
bcd1267
[agentserver] invocations: refresh 1.0.0b6 wheels with session_id pro…
RaviPidaparthi Jun 15, 2026
f1f808a
Merge branch 'feature/agentserver-durable-tasks' into feature/agentse…
RaviPidaparthi Jun 15, 2026
f98402b
[agentserver] invocations: regression tests for agent_session_id prop…
RaviPidaparthi Jun 15, 2026
72fd18f
Merge branch 'feature/agentserver-durable-tasks' into feature/agentse…
RaviPidaparthi Jun 15, 2026
ae1895a
[agentserver] invocations: source session_id for cancel/get from env …
RaviPidaparthi Jun 15, 2026
8577e85
[agentserver] invocations: refresh 1.0.0b6 wheels with env-var sessio…
RaviPidaparthi Jun 15, 2026
6f4a0a2
Merge branch 'feature/agentserver-durable-tasks' into feature/agentse…
RaviPidaparthi Jun 15, 2026
036dca6
[agentserver] core: move sdk/agentserver/wheels/ off durable-tasks br…
RaviPidaparthi Jun 15, 2026
f63d6f4
Merge branch 'feature/agentserver-durable-tasks' into feature/agentse…
RaviPidaparthi Jun 15, 2026
5207960
[agentserver] core: move standalone skill files off durable-tasks branch
RaviPidaparthi Jun 15, 2026
460bd6b
Merge branch 'feature/agentserver-durable-tasks' into feature/agentse…
RaviPidaparthi Jun 15, 2026
3836cc8
[agentserver] responses spec-025 Phase 1: internal_metadata bags + re…
RaviPidaparthi Jun 16, 2026
32fe307
[agentserver] responses spec-025 Phase 2: strip internal_metadata on …
RaviPidaparthi Jun 16, 2026
6c886f5
[agentserver] responses spec-025 Phase 3: developer checkpoint primitive
RaviPidaparthi Jun 16, 2026
ea6f5be
feat(responses): unified exit_for_recovery() raise-internally recover…
RaviPidaparthi Jun 16, 2026
7481493
docs(responses): adopt unified exit_for_recovery() idiom in samples +…
RaviPidaparthi Jun 16, 2026
2531c1e
test(responses): map test_explicit_exit_for_recovery in CONTRACT_COVE…
RaviPidaparthi Jun 16, 2026
30e1a98
feat(responses): durability-contract Row 11 — developer checkpoint wr…
RaviPidaparthi Jun 16, 2026
d665637
fix(responses): make recovery output-seeding work per spec §6 (not re…
RaviPidaparthi Jun 16, 2026
b2024ad
docs(responses): checkpoint-driven recovery + metadata-facility guide…
RaviPidaparthi Jun 16, 2026
c3ef8d9
docs(responses): clean-room CHANGELOG for the unreleased durability p…
RaviPidaparthi Jun 16, 2026
5275cfa
docs(responses): current-state framing for the _responses.background …
RaviPidaparthi Jun 16, 2026
99dc5c9
style(responses): black-format spec-025 egress strip sites in _endpoi…
RaviPidaparthi Jun 16, 2026
6004f34
docs(responses): complete durable_metadata->conversation_chain_metada…
RaviPidaparthi Jun 16, 2026
10918e3
fix(core/durable): track post-reclaim etag on cold-start recovery
RaviPidaparthi Jun 16, 2026
2155081
fix(core/durable): track post-reclaim etag on cold-start recovery
RaviPidaparthi Jun 16, 2026
17437a1
Sync durable_research sample to unified .durable storage path
RaviPidaparthi Jun 16, 2026
5988bae
Remove orphan bundled wheels from responses-spec016
RaviPidaparthi Jun 16, 2026
79976b8
fix(responses/durable): no duplicate response.created on recovery + g…
RaviPidaparthi Jun 16, 2026
fc9a757
docs+test(spec 026): contract clauses + guides + conformance assertion
RaviPidaparthi Jun 16, 2026
f01b5f9
docs(SOT): spec 026 recovery clauses in responses-durability-spec + c…
RaviPidaparthi Jun 17, 2026
f2e2278
docs(SOT): establish single normative ownership between the two durab…
RaviPidaparthi Jun 17, 2026
4e5fa78
Spec 026: add drop + created-gate conformance tests
RaviPidaparthi Jun 17, 2026
40b3e95
Spec 027: stream cursor is the seq-number SOT; retire dead last_seque…
RaviPidaparthi Jun 17, 2026
de2d90c
Spec 028: normalize FileResponseStore — one item copy under items/, p…
RaviPidaparthi Jun 17, 2026
0a15ce4
Spec 028 (FR-028-8): drop redundant per-response history.json
RaviPidaparthi Jun 17, 2026
ddb824c
Spec 028 SOT: document FileResponseStore normalized layout (§16.2.1) …
RaviPidaparthi Jun 17, 2026
d6e663a
Type the steering acceptance hook to return ResponseObject (not a loo…
RaviPidaparthi Jun 17, 2026
9ee3d76
Spec 029: restructure durability guides — fix drift, loosen over-mand…
RaviPidaparthi Jun 17, 2026
ab4d493
docs(handler-guide): fix yield-from for convenience generators to mat…
RaviPidaparthi Jun 17, 2026
4856d69
test(durability): Row 1 conformance under SSE keep-alive (RED)
RaviPidaparthi Jun 18, 2026
6743f4d
fix(durability): create durable task for stored streams under SSE kee…
RaviPidaparthi Jun 18, 2026
4bc5c96
test(durable): RED conformance for pending_input_count + steering wri…
RaviPidaparthi Jun 18, 2026
352b6c4
fix(durable): wire pending_input_count + serialize steering writes (s…
RaviPidaparthi Jun 18, 2026
f8cd2b4
fix(durable): finish spec 031 — drain conflict recovery, metadata ret…
RaviPidaparthi Jun 18, 2026
8801899
Merge branch 'feature/agentserver-durable-tasks' into feature/agentse…
RaviPidaparthi Jun 18, 2026
d351a44
test(durable): faithful local-provider lease rule exposes hosted drai…
RaviPidaparthi Jun 18, 2026
af72411
fix(durable): steering drain flips suspended->in_progress so the stee…
RaviPidaparthi Jun 18, 2026
f3a36c5
Merge branch 'feature/agentserver-durable-tasks' into feature/agentse…
RaviPidaparthi Jun 18, 2026
e8d8fc1
docs(durable): SOT — steering drain flips suspended->in_progress; lea…
RaviPidaparthi Jun 18, 2026
378153a
Merge branch 'feature/agentserver-durable-tasks' into feature/agentse…
RaviPidaparthi Jun 18, 2026
5679367
test(responses-durability): spec 032 P1 — hard depth gate + recovery-…
RaviPidaparthi Jun 18, 2026
1fcfa5b
test(durability): close B3 client-cancel-during-recovery + reconcile …
RaviPidaparthi Jun 18, 2026
06b6aa0
fix(responses-durable): normalize agent_reference before persisting d…
RaviPidaparthi Jun 18, 2026
a8a1813
test(responses-durable): close conformance gap — recovery with reques…
RaviPidaparthi Jun 18, 2026
042ef86
Merge remote-tracking branch 'origin/main' into feature/agentserver-d…
RaviPidaparthi Jun 19, 2026
4bc53a4
Merge branch 'feature/agentserver-durable-tasks' into feature/agentse…
RaviPidaparthi Jun 19, 2026
5fe5b8c
fix(core-streaming): reopen FileBackedReplayEventStream after compact…
RaviPidaparthi Jun 19, 2026
6e2ddf0
fix(responses-durable): _persist_crash_failed terminal lands in clien…
RaviPidaparthi Jun 19, 2026
fc274be
Merge branch 'feature/agentserver-durable-tasks' into feature/agentse…
RaviPidaparthi Jun 19, 2026
74b0ec6
Spec 033 Phase 0: typed durable-recovery boundary (DurableResponseInput)
RaviPidaparthi Jun 24, 2026
fb36cd4
Spec 033 Phase 1: centralize durable dispatch (decide_disposition)
RaviPidaparthi Jun 24, 2026
e3cf818
Spec 033 Phase 2: decompose orchestrator god-methods (FR-005)
RaviPidaparthi Jun 24, 2026
9909fa1
fix(durability): preserve provider_created across cancel at created-t…
RaviPidaparthi Jun 24, 2026
f981511
test(durability): Spec 033 Phase 3 — pin streaming-wire seq single-au…
RaviPidaparthi Jun 24, 2026
8904ce6
style: black-format cancel-race regression test
RaviPidaparthi Jun 24, 2026
2674f7a
feat(core): public platform-contract surface for composed protocol la…
RaviPidaparthi Jun 24, 2026
79e5372
Merge branch 'feature/agentserver-durable-tasks' into feature/agentse…
RaviPidaparthi Jun 24, 2026
9308462
refactor(responses): consume public core platform-contract surface (F…
RaviPidaparthi Jun 24, 2026
0d1e184
refactor(responses): drop vestigial ctx_params dict in primitive sele…
RaviPidaparthi Jun 24, 2026
b56ce6e
refactor(core): reframe durable->resilient terminology (spec 034 Phas…
RaviPidaparthi Jun 25, 2026
934db85
Merge branch 'feature/agentserver-durable-tasks' into feature/agentse…
RaviPidaparthi Jun 25, 2026
fd02683
refactor(responses): reframe durable->resilient terminology (Spec 034…
RaviPidaparthi Jun 25, 2026
2cc45a6
refactor(core): storage-prose accuracy in reframe (Spec 034 §2.9a)
RaviPidaparthi Jun 25, 2026
7f6b1b0
Merge branch 'feature/agentserver-durable-tasks' into feature/agentse…
RaviPidaparthi Jun 25, 2026
f441cd2
refactor(responses): storage-prose accuracy in reframe (Spec 034 §2.9a)
RaviPidaparthi Jun 25, 2026
a53ff27
refactor(responses): storage-prose in CHANGELOG (Spec 034 §2.9a)
RaviPidaparthi Jun 25, 2026
14287d6
docs(constitution): reframe durable->resilient terminology (Spec 034 …
RaviPidaparthi Jun 25, 2026
275619c
Merge branch 'feature/agentserver-durable-tasks' into feature/agentse…
RaviPidaparthi Jun 25, 2026
f3b23f9
Merge branch 'feature/agentserver-durable-tasks' into feature/agentse…
RaviPidaparthi Jun 25, 2026
9a863bb
docs(core): drop fake "Resilient Functions" product name from reframe…
RaviPidaparthi Jun 25, 2026
34e5ad5
Merge branch 'feature/agentserver-durable-tasks' into feature/agentse…
RaviPidaparthi Jun 25, 2026
d23b123
fix(core): correct logger namespace mis-swap from reframe (Spec 034)
RaviPidaparthi Jun 25, 2026
be5fdc1
fix(responses): correct module-path mis-swap in import-lint docstring…
RaviPidaparthi Jun 25, 2026
a38cb73
fix(samples): install local preview agentserver packages for response…
RaviPidaparthi Jun 25, 2026
4b15a8a
refactor(invocations): move durable->resilient sample/test reframe to…
RaviPidaparthi Jun 25, 2026
a22e7b0
Merge branch 'feature/agentserver-durable-tasks' into feature/agentse…
RaviPidaparthi Jun 25, 2026
d294849
fix(samples): invocation-id dedup for resilient_copilot (fixes stuck …
RaviPidaparthi Jun 25, 2026
9e28ff0
Merge branch 'feature/agentserver-durable-tasks' into feature/agentse…
RaviPidaparthi Jun 25, 2026
40174e4
fix(samples): make Copilot history the source of truth for resilient_…
RaviPidaparthi Jun 25, 2026
a8f70e1
Merge branch 'feature/agentserver-durable-tasks' into feature/agentse…
RaviPidaparthi Jun 25, 2026
477b7c3
fix(samples): close resilient_copilot SSE stream after turn completes
RaviPidaparthi Jun 25, 2026
2cdc5de
Merge branch 'feature/agentserver-durable-tasks' into feature/agentse…
RaviPidaparthi Jun 25, 2026
f879e16
fix(samples): close SSE stream producer-side when invocation completes
RaviPidaparthi Jun 25, 2026
859505d
Merge branch 'feature/agentserver-durable-tasks' into feature/agentse…
RaviPidaparthi Jun 25, 2026
03127a4
docs(samples): correct stream-close rationale comment
RaviPidaparthi Jun 25, 2026
078d2a4
Merge branch 'feature/agentserver-durable-tasks' into feature/agentse…
RaviPidaparthi Jun 25, 2026
738a7b6
docs(samples): use raw docstrings so usage curl commands copy-paste c…
RaviPidaparthi Jun 25, 2026
7bd2f49
Merge branch 'feature/agentserver-durable-tasks' into feature/agentse…
RaviPidaparthi Jun 25, 2026
60be586
docs(samples): use raw docstrings so responses usage curls copy-paste…
RaviPidaparthi Jun 25, 2026
1db2edd
chore(agentserver): remove formatting churn and rewrite changelogs
RaviPidaparthi Jun 25, 2026
5b4a6af
fix(agentserver-core): resolve pylint/mypy/pyright findings in tasks …
RaviPidaparthi Jun 26, 2026
547c4b9
Merge branch 'feature/agentserver-durable-tasks' into feature/agentse…
RaviPidaparthi Jun 26, 2026
4a0c94c
Merge remote-tracking branch 'origin/main' into feature/agentserver-d…
RaviPidaparthi Jun 26, 2026
e8967c7
Merge branch 'feature/agentserver-durable-tasks' into feature/agentse…
RaviPidaparthi Jun 26, 2026
0626e4b
refactor(agentserver-core): fold state-path resolution into _config, …
RaviPidaparthi Jun 26, 2026
b784e6f
Merge branch 'feature/agentserver-durable-tasks' into feature/agentse…
RaviPidaparthi Jun 26, 2026
6f90aab
fix(agentserver-responses): import resolve_state_subdir from core._co…
RaviPidaparthi Jun 26, 2026
ceddd92
feat(tasks): add TaskManagerNotInitialized typed exception
RaviPidaparthi Jun 26, 2026
74cc640
Merge branch 'feature/agentserver-durable-tasks' into feature/agentse…
RaviPidaparthi Jun 26, 2026
becb59e
fix(responses): fail fast when a resilient task fails to start
RaviPidaparthi Jun 26, 2026
dd72380
docs(tasks-spec): correct LocalFileTaskProvider on-disk paths
RaviPidaparthi Jun 29, 2026
cbc47d9
Merge branch 'feature/agentserver-durable-tasks' into feature/agentse…
RaviPidaparthi Jun 29, 2026
042bb8d
docs(resilience-contract): codify request-time fail-fast on resilient…
RaviPidaparthi Jun 29, 2026
05e62cd
fix(responses): stable conversation_chain_id from embedded partition key
RaviPidaparthi Jun 30, 2026
c3d7e7e
fix(responses): coerce AgentReference to JSON-safe dict in status-onl…
RaviPidaparthi Jun 30, 2026
eb699cc
fix(steering): host first steerable turn on the multi-turn primitive
RaviPidaparthi Jun 30, 2026
54a95ae
test(core-tasks): RED — RetryPolicy hard caps + module preset parity …
RaviPidaparthi Jul 1, 2026
1928359
feat(core-tasks): RetryPolicy hard caps (<=10 attempts, <=1h delay) +…
RaviPidaparthi Jul 1, 2026
1471338
test(core-tasks): RED — required name, timeout default/cap, input_id …
RaviPidaparthi Jul 1, 2026
118de5f
feat(core-tasks): required task name + 1-day timeout default/cap + in…
RaviPidaparthi Jul 1, 2026
9768b1c
test(core-tasks): RED — per-attachment cap raised to 10 MiB (spec 037…
RaviPidaparthi Jul 1, 2026
25bbf00
feat(core-tasks): raise per-attachment cap 2 MiB -> 10 MiB (spec 037 …
RaviPidaparthi Jul 1, 2026
fbc2a3a
docs(core-tasks): align task()/multi_turn_task() docstrings + overloa…
RaviPidaparthi Jul 1, 2026
fca2920
test(core-streaming): RED — terminal sentinel without emit_time + fil…
RaviPidaparthi Jul 1, 2026
4facb49
feat(core-streaming): durable terminal sentinel + stream-id filename …
RaviPidaparthi Jul 1, 2026
632e187
feat(core-streaming): ergonomic defaults for use_file_backed_replay (…
RaviPidaparthi Jul 1, 2026
83cea06
test(core-streaming): use_file_backed_replay ergonomic defaults (spec…
RaviPidaparthi Jul 1, 2026
a568f8d
docs(core): remove stale timeout-watchdog known-gap + clarify per-tur…
RaviPidaparthi Jul 1, 2026
8f3bcf5
fix(invocations-sample): remove unreachable 410 branch + adopt file-b…
RaviPidaparthi Jul 1, 2026
ff837f6
fix(core-tasks): keep two @overload defs (name required in both) so m…
RaviPidaparthi Jul 1, 2026
3836b19
fix(spec037 review): mark async input_id tests + close _safe_stream_f…
RaviPidaparthi Jul 1, 2026
7850ccf
Merge branch 'feature/agentserver-durable-tasks' into feature/agentse…
RaviPidaparthi Jul 1, 2026
94af4a7
Merge remote-tracking branch 'origin/main' into feature/agentserver-d…
RaviPidaparthi Jul 1, 2026
e233bd0
Merge branch 'feature/agentserver-durable-tasks' into feature/agentse…
RaviPidaparthi Jul 1, 2026
d7393b0
fix(responses): resilient persists use call_id=None + stamp record us…
RaviPidaparthi Jul 2, 2026
de35995
fix(responses): persist create-time call_id and reuse across resilien…
RaviPidaparthi Jul 2, 2026
9ae79ae
docs(responses): update living docs for protocol 2.0.0 platform_context
RaviPidaparthi Jul 2, 2026
04b0a3d
feat(core-tasks): task-record schema cleanup — drop `_` key prefixes,…
RaviPidaparthi Jul 3, 2026
873f605
Merge branch 'feature/agentserver-durable-tasks' into feature/agentse…
RaviPidaparthi Jul 3, 2026
3ab813a
feat(responses): native per-case conversation chain ids (Spec 038 cha…
RaviPidaparthi Jul 3, 2026
e096c8a
docs(responses): finish Spec 038 chain-id update in resilience SOT (4…
RaviPidaparthi Jul 3, 2026
36e87df
docs(core): complete Spec 038 wire-key update in task-streaming SOT (…
RaviPidaparthi Jul 3, 2026
79b4717
Merge branch 'feature/agentserver-durable-tasks' into feature/agentse…
RaviPidaparthi Jul 3, 2026
4fe24c7
docs(responses): de-underscore payload.steering ref in resilience SOT…
RaviPidaparthi Jul 3, 2026
89f994f
fix(core-tasks): Spec 038 code-review remediation (pre-push gate + re…
RaviPidaparthi Jul 3, 2026
30f2190
Merge branch 'feature/agentserver-durable-tasks' into feature/agentse…
RaviPidaparthi Jul 3, 2026
17a6bc6
fix(responses): Spec 038 chain-id review finding — enforce strict Tas…
RaviPidaparthi Jul 3, 2026
142dfc3
chore(responses): remove stray demo build-context wheels from respons…
RaviPidaparthi Jul 3, 2026
01352c2
docs(core): document retry hard caps in tasks-guide; drop stale qualn…
RaviPidaparthi Jul 3, 2026
3df89fe
Merge branch 'feature/agentserver-durable-tasks' into feature/agentse…
RaviPidaparthi Jul 3, 2026
2c52b22
fix(responses): preserve handler-owned fields on framework-built term…
RaviPidaparthi Jul 10, 2026
b22a196
fix(core): normalize payload.turn_started_at to +00:00 offset (Spec 0…
RaviPidaparthi Jul 14, 2026
9c9adba
Merge branch 'feature/agentserver-durable-tasks' into feature/agentse…
RaviPidaparthi Jul 14, 2026
e6700bf
fix(responses): drop the _responses metadata mirror; source recovery …
RaviPidaparthi Jul 14, 2026
7f03ecd
docs(responses): fix two stale disposition-metadata refs missed in Sp…
RaviPidaparthi Jul 14, 2026
13fb297
samples(responses): fix broken registration, leverage resilience prim…
RaviPidaparthi Jul 15, 2026
443c1fa
samples(responses): rewrite sample_21 as real-time streaming LangGrap…
RaviPidaparthi Jul 15, 2026
32372fa
test(responses): replace stale mock recovery tests for samples 19 & 2…
RaviPidaparthi Jul 15, 2026
8b32c81
test(responses): add real crash-harness e2e for samples 20 & 22 — res…
RaviPidaparthi Jul 15, 2026
aaac966
core+invocations: PY-1/PY-2 file-backed replay parity + delete copilo…
RaviPidaparthi Jul 15, 2026
6b8742f
test(responses): remove phantom sample_17 references (Spec 041 PY-4)
RaviPidaparthi Jul 15, 2026
f93cef4
samples(invocations): fix resilient_langgraph crash-recovery integrat…
RaviPidaparthi Jul 15, 2026
acfe581
samples(responses): fix latent checkpoint_ns KeyError in sample_21 fo…
RaviPidaparthi Jul 15, 2026
cb0988c
docs(core): add LangGraph fork / checkpoint_ns FAQ to tasks-guide (Sp…
RaviPidaparthi Jul 15, 2026
3c63318
core(tasks): auto-generate per-turn input_id for multi-turn tasks (Sp…
RaviPidaparthi Jul 15, 2026
3049ada
Merge branch 'feature/agentserver-durable-tasks' into feature/agentse…
RaviPidaparthi Jul 15, 2026
76ccb83
Merge remote-tracking branch 'origin/main' into feature/agentserver-d…
RaviPidaparthi Jul 15, 2026
1eabb19
chore(agentserver): bump versions post main-merge (b7/b6/b8 already r…
RaviPidaparthi Jul 15, 2026
7fae6a6
Merge core (with origin/main) into responses; resolve conflicts + ver…
RaviPidaparthi Jul 15, 2026
65265fc
feat(agentserver-core): expose resolve_state_subdir on public core su…
RaviPidaparthi Jul 16, 2026
fe1b369
Merge branch 'feature/agentserver-durable-tasks' into feature/agentse…
RaviPidaparthi Jul 16, 2026
0673706
fix(agentserver-responses): consume public core resolve_state_subdir …
RaviPidaparthi Jul 16, 2026
0716b89
test(agentserver-responses): add crash-while-steering resilience e2e
RaviPidaparthi Jul 16, 2026
bee217e
fix(agentserver): unblock+correct api.md generation (core, invocations)
RaviPidaparthi Jul 16, 2026
a490865
Merge branch 'feature/agentserver-durable-tasks' into feature/agentse…
RaviPidaparthi Jul 16, 2026
06423d4
chore(agentserver-responses): regenerate api.md (was stale since b29a…
RaviPidaparthi Jul 16, 2026
0952c12
Merge main into feature/agentserver-durable-tasks
shanmukha1200 Jul 22, 2026
a8d1922
Merge feature/agentserver-durable-tasks into feature/agentserver-resp…
shanmukha1200 Jul 22, 2026
5bcd35c
Bump agentserver invocations to 1.0.0b8
shanmukha1200 Jul 22, 2026
a689ee7
Merge durable-tasks bump and advance responses to 1.0.0b10
shanmukha1200 Jul 22, 2026
7e0a0db
Merge remote-tracking branch 'origin/main' into pr-47275
Jul 28, 2026
321f831
fix(agentserver-responses): resolve pyright errors against merged core
Jul 28, 2026
bbdb659
fix(agentserver-responses): resolve pylint findings (docstrings + hyg…
Jul 28, 2026
8b2db96
fix(agentserver-responses): use pyright:ignore for dynamic __all__ (m…
Jul 28, 2026
56fed4f
style(agentserver-responses): apply black formatting (line-length 120)
Jul 28, 2026
472d890
Fix sphinx duplicate-object warnings in responses store subpackage
Jul 28, 2026
082093b
Add cspell override for azure-ai-agentserver-responses jargon
Jul 28, 2026
e44a213
Allow relative links in agent-server responses design docs
Jul 28, 2026
09dcebc
Fix responses CI Analyze + test failures
Jul 28, 2026
ae6f1bb
Platform-gate the POSIX-only crash-harness e2e tests (test side)
Jul 29, 2026
b3cef38
Merge origin/main into responses PR; migrate responses cspell words t…
Jul 29, 2026
e1d8124
Fully gate POSIX-only responses tests on Windows
Jul 29, 2026
896e633
Set azure-ai-agentserver-responses 1.0.0b10 release date (2026-07-28)
Jul 29, 2026
3854a59
Merge origin/main into responses PR; align to 2.0.0b0
Jul 29, 2026
4123499
Merge origin/main into responses PR (adopt dict-native TypedDict models)
Jul 29, 2026
afe555b
Port responses feature to dict-native TypedDict models (post-merge)
Jul 29, 2026
93cac82
Fix CI failures for dict-native responses port
Jul 29, 2026
500bfd3
Merge remote-tracking branch 'origin/main' into pr-47275
Jul 29, 2026
918a3d6
Use absolute doc links; revert eng/common change
Jul 30, 2026
39f389f
Address review: validate store paths; propagate late acceptance hook
Jul 30, 2026
a3fbe01
Address review: store-corruption 500 (not 404); steerable first-turn …
Jul 30, 2026
09c3b72
Revert steerable first-turn session change (regressed crash-while-ste…
Jul 30, 2026
f51afd8
Clarify call_id docstrings (per-request identity handle, not per-resp…
Jul 30, 2026
d94be45
Merge branch 'main' into feature/agentserver-responses-spec016
Nathandrake229 Jul 30, 2026
63fd7c9
Merge branch 'main' into feature/agentserver-responses-spec016
Nathandrake229 Jul 30, 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
97 changes: 96 additions & 1 deletion sdk/agentserver/azure-ai-agentserver-responses/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,83 @@
- Added local `TypedDict` model contract generation for the Responses protocol, including generated type aliases, union aliases, and `py.typed` packaging support.
- Added dict-native wire payload helpers and request validators for validating protocol payloads without depending on generated model internals.

- `ResponseContext.conversation_chain_id` (and the resilient task id it backs) now follows the native id convention: `cchain_<partition><scope>` for conversation-scoped chains, `rchain_<partition><scope>` for steerable response-linkage chains, or the `response_id` verbatim for a non-steerable one-shot. The id embeds the chain's partition key for co-location and carries a deterministic `(agent, session)` scope; `task_id == conversation_chain_id` exactly. Replaces the previous opaque `resilient-resp-<32-hex>` form.

- **Resilient background responses.** `ResponsesServerOptions(resilient_background=True)`
makes `store=true`, `background=true` responses survive process crashes:
the framework persists handler progress and re-invokes the registered
handler on the next process start when a prior attempt did not reach a
terminal event. Defaults to `False`.

- **Steerable conversations.** `ResponsesServerOptions(steerable_conversations=True)`
lets clients post a new turn on an in-flight conversation; the running
handler is woken (via the cancellation signal, distinguished by
`context.pending_input_count > 0`), drains the queued input on a fresh
invocation, and the turns are linked in a stable conversation chain.
Defaults to `False`.

- **`ResponseContext` resilience + steering surface.** Flat fields stamped on
each invocation: `context.is_recovery`, `context.is_steered_turn`,
`context.pending_input_count`, and `context.conversation_chain_id` (a stable
identifier shared by every turn of a conversation chain, usable as a key into
application-side session state).

- **Developer checkpoints.** `yield stream.checkpoint()` persists the
current response snapshot at a developer-chosen boundary (gated to resilient
background responses; a no-op otherwise; backpressured and idempotent). On a
recovered entry, `context.persisted_response` exposes the last persisted
snapshot so the handler can seed its stream and resume — the basis of the
one-`OutputItem`-per-phase recovery pattern.

- **`internal_metadata`.** A single-turn, platform-internal `MutableMapping[str, Any]`
on output items (`item.internal_metadata`) and on the response
(`stream.internal_metadata`). It is persisted with the response (so it is
available on recovery) and is always stripped before any client-facing
HTTP/SSE payload, and on ingress. Distinct from the public
`ResponseObject.metadata`.

- **`context.conversation_chain_metadata`.** Cross-turn, named-scope,
explicit-`flush()` resilient metadata over a conversation chain, typed by the
public `ConversationChainMetadataNamespace` Protocol.

- **`await context.exit_for_recovery()`.** A single uniform graceful-shutdown
recovery primitive that works in every handler shape (coroutine, async
generator, sync) — it raises `ResponseExitForRecovery` internally to leave
the response `in_progress` for next-lifetime recovery.

- **Stream recovery.** SSE events are persisted incrementally; clients reconnect
with `GET /responses/{id}?stream=true&starting_after=<event_id>` and resume
from their last received event.

- **Response acceptor hook.** Register `@app.response_acceptor` to customize the
response shape returned when a turn is queued behind an active steerable
conversation.

- **Storage.** `FileResponseStore` is exported from
`azure.ai.agentserver.responses` and is the default local-development store
(under `${AGENTSERVER_STATE_ROOT:-~/.agentserver}/responses/`) when no `store=`
is supplied in a non-hosted environment; pass
`store=InMemoryResponseProvider()` to opt out. The `AGENTSERVER_STATE_ROOT`
environment variable sets the local state storage root. A typed
`ResponseAlreadyExistsError` is raised by the response-store providers on a
duplicate `create_response` (the idempotent-create signal on recovery).

- **Handlers are `async def`.** `@app.response_handler` requires an async
handler with the `(request, context, cancellation_signal)` signature so it can
observe the `asyncio.Event` cancellation signal.

### Breaking Changes

- Removed a-prefixed async convenience generator methods from the sync `ResponseEventStream` and sync builder classes. Use `azure.ai.agentserver.responses.aio.ResponseEventStream` for async streaming convenience methods.
- Replaced generated model classes in `azure.ai.agentserver.responses.models` with dict-native `TypedDict` contracts. Model constructors such as `ItemMessage(...)` and `CreateResponse(...)` now produce plain dictionaries instead of generated model instances.
- Removed runtime model-class behavior from response protocol models. Code should no longer rely on attribute access, `isinstance(..., ModelType)`, `.as_dict()`, or generated model base-class behavior.
- Replaced most generated enum classes with string literal type aliases. Use string values directly for protocol fields, for example `"completed"`, `"message"`, or `"function_call_output"`.

- The resilient-task input persisted for a `store=true` background response now
carries a single `user_id_key` (the durable per-user partition key) instead of
the previous `user_isolation_key` / `chat_isolation_key` pair; conversation
scoping continues to use `conversation_id`.

### Migration Guide

Async response event stream helpers now live under the `aio` namespace and no longer use the `a` prefix.
Expand Down Expand Up @@ -77,8 +147,33 @@ After:
status = "completed"
```

### Bugs Fixed

- **Steering now works on the first turn of a conversation.** In a
`steerable_conversations=true` deployment, the first turn (a request with no
`conversation_id` and no `previous_response_id`) is now hosted on the
multi-turn chain primitive instead of a one-shot task. Because all turns of a
chain share a stable `conversation_chain_id` — and therefore the same backing
task — a steered turn posted onto an in-flight first turn previously queued
onto a one-shot task that completed and auto-deleted before draining the
queued input, leaving the steered turn stuck `in_progress`. The first turn now
suspends between turns and drains queued steering inputs correctly.

- **`context.conversation_chain_id` is now stable across every turn of a
conversation.** Previously it returned the raw `previous_response_id` (the
immediate predecessor), so it shifted on every turn after the second — breaking
its use as a stable per-conversation key (e.g. an upstream SDK session id). It
is now derived from the partition key embedded in the chain's response IDs
(which every turn shares), so all turns of a chain — and the resilient task
that backs them — resolve to the same identity. The value is now an opaque,
agent/session-scoped hash rather than a raw id. (Known limitation: a client
that supplies its own `response_id` with a mismatched embedded partition can
shift the chain identity for later turns.)

### Other Changes

- Bumped the minimum `azure-ai-agentserver-core` dependency to `>=2.0.0b9`.
- Reworked the resilient responses samples: `sample_21_resilient_langgraph` is now a real-time streaming LangGraph agent that composes LangGraph's checkpointer with the framework's response checkpoints (see the "Composing an External Durable Engine" section of the handler guide), added real crash-harness e2e coverage for samples 19–22, and removed the copilot sample.
- Updated response hosting, persistence, streaming, validation, samples, and tests to operate on JSON-compatible wire dictionaries.
- Updated model generation tooling to use TypeSpec Python `models-mode=typeddict` and removed generated model shim files.

Expand Down Expand Up @@ -150,7 +245,7 @@ status = "completed"

### Bugs Fixed

- `DELETE /responses/{id}` no longer returns intermittent 404 when the background task's eager eviction races with the delete handler. Previously, `try_evict` could remove the record from in-memory state between the handler's `get()` and `delete()` calls, causing `delete()` to return `False` and producing a spurious 404. The handler now falls through to the durable provider when the in-memory delete fails due to a concurrent eviction.
- `DELETE /responses/{id}` no longer returns intermittent 404 when the background task's eager eviction races with the delete handler. Previously, `try_evict` could remove the record from in-memory state between the handler's `get()` and `delete()` calls, causing `delete()` to return `False` and producing a spurious 404. The handler now falls through to the resilient provider when the in-memory delete fails due to a concurrent eviction.
- `POST /responses` with `background=true, stream=false` now correctly returns `status: "in_progress"` instead of `"completed"`. Handlers that yield events synchronously (no `await` between yields — the normal pattern with `ResponseEventStream`) would cause the background task to run to completion before `run_background` captured the initial snapshot. A cooperative yield after `response_created_signal.set()` now ensures the POST handler resumes promptly.
- Conversation history IDs (`previous_response_id`, `conversation_id`) are now validated eagerly before the handler is invoked. A nonexistent reference now returns a 404 error to the client immediately, instead of being silently ignored or surfacing as an opaque error deep inside the handler. The prefetched IDs are reused by `ResponseContext.get_history()`, eliminating a redundant provider call.

Expand Down
41 changes: 35 additions & 6 deletions sdk/agentserver/azure-ai-agentserver-responses/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,12 +24,20 @@ This automatically installs `azure-ai-agentserver-core` as a dependency.

```python
@app.response_handler
def my_handler(
request: CreateResponse, context: ResponseContext, cancellation_signal: asyncio.Event
):
async def my_handler(request: CreateResponse, context: ResponseContext, cancellation_signal: asyncio.Event):
...
```

Handlers MUST be `async def` and take exactly three positional parameters
(`request`, `context`, `cancellation_signal`). Sync handlers and the 2-arg
signature `(request, context)` are hard-rejected at decoration time.
Cancellation is observed via the `cancellation_signal` event (set on
client cancel, `/cancel` API, or steering pressure). Server shutdown is
a **distinct** signal observed via `context.shutdown` — shutdown does
NOT fire the cancellation signal; handlers that care about both must
inspect each independently. See the handler implementation guide for
the full surface.

### Protocol endpoints

| Method | Route | Description |
Expand Down Expand Up @@ -90,14 +98,29 @@ The `ResponseContext` provides request-scoped state:
| Property / Method | Description |
|---|---|
| `response_id` | Unique ID for this response |
| `conversation_id` / `conversation_chain_id` | Conversation identifiers; `conversation_chain_id` is the framework-computed stable id shared by every turn in a chain |
| `is_shutdown_requested` | Whether the server is draining |
| `platform_context` | `PlatformContext` with `user_id_key` (from `x-agent-user-id`) and `call_id` (from `x-agent-foundry-call-id`) for multi-tenant state partitioning and per-request caller-context forwarding |
| `client_headers` | Dictionary of `x-client-*` headers forwarded from the platform (keys normalized to lowercase) |
| `query_parameters` | Dictionary of query string parameters |
| `shutdown` | `asyncio.Event` set on graceful server shutdown — distinct from the per-request cancellation signal |
| `client_cancelled` | `bool` set when the cancel cause is `/cancel` endpoint or non-bg POST disconnect |
| `is_recovery` | `bool` set on a crash-recovered re-entry |
| `is_steered_turn` | `bool` set on the drain re-entry that follows a steering input |
| `pending_input_count` | `int` count of queued steering inputs |
| `conversation_chain_metadata` | `ConversationChainMetadataNamespace` for handler-managed checkpoint state |
| `exit_for_recovery()` | `await` to opt into the graceful-shutdown recovery path |
| `get_input_items()` | Load resolved input items as `Item` subtypes |
| `get_input_text()` | Extract all text content from input items as a single string |
| `get_history()` | Load conversation history items |

The per-request cancellation signal is delivered as the **3rd
positional handler argument** (`cancellation_signal: asyncio.Event`),
not via a `ResponseContext` attribute. It fires on client cancel
(`/cancel` API or non-bg POST disconnect) or steering pressure; it
does NOT fire on server shutdown — `context.shutdown` is the
independent surface for that case.

### Streaming and background modes

The SDK automatically handles all combinations of `stream` and `background` flags:
Expand All @@ -113,13 +136,15 @@ The library orchestrates the complete response lifecycle: `created` → `in_prog

For detailed handler implementation guidance, see [docs/handler-implementation-guide.md](https://github.com/Azure/azure-sdk-for-python/blob/main/sdk/agentserver/azure-ai-agentserver-responses/docs/handler-implementation-guide.md).

### Resilience

Crash recovery is **opt-in** via `ResponsesServerOptions(resilient_background=True)`. When opted in, background responses with `store=True` are crash-recoverable: the handler is re-invoked on restart and the recovered context exposes `context.is_recovery == True`. Stream events are persisted incrementally so clients can reconnect and resume from where they left off. Without the opt-in (the default), a crash mid-handler marks the response `failed` instead of re-invoking the handler. For advanced scenarios (metadata checkpointing, multi-turn steering), see the [Resilient Responses Developer Guide](https://github.com/Azure/azure-sdk-for-python/blob/main/sdk/agentserver/azure-ai-agentserver-responses/docs/resilient-responses-developer-guide.md).

## Examples

### Echo handler

```python
import asyncio

from azure.ai.agentserver.responses import (
CreateResponse,
ResponseContext,
Expand Down Expand Up @@ -230,7 +255,7 @@ app = ResponsesAgentServerHost(options=options)
### Common errors

- **400 Bad Request**: The request body failed validation. Check that optional fields such as `model` (when provided) are valid and that `input` items are well-formed.
- **404 Not Found**: The response ID does not exist or has expired past the configured TTL.
- **404 Not Found**: The response ID does not exist. In hosted deployments persisted responses live in the Foundry hosted responses store; in local development they live under `${AGENTSERVER_STATE_ROOT:-~/.agentserver}/responses/` by default. A missing record may indicate the response was never persisted or was deleted via `DELETE /responses/{id}`.
- **400 Bad Request** (cancel): The response was not created with `background=true`, or it has already reached a terminal state.

### Reporting issues
Expand All @@ -256,6 +281,10 @@ Visit the [Samples](https://github.com/Azure/azure-sdk-for-python/tree/main/sdk/
| [File Inputs](https://github.com/Azure/azure-sdk-for-python/tree/main/sdk/agentserver/azure-ai-agentserver-responses/samples/sample_14_file_inputs.py) | Receive files via base64 data URL, URL, or file ID |
| [Annotations](https://github.com/Azure/azure-sdk-for-python/tree/main/sdk/agentserver/azure-ai-agentserver-responses/samples/sample_15_annotations.py) | Attach file_path, file_citation, and url_citation annotations |
| [Structured Outputs](https://github.com/Azure/azure-sdk-for-python/tree/main/sdk/agentserver/azure-ai-agentserver-responses/samples/sample_16_structured_outputs.py) | Return structured JSON as a `structured_outputs` item |
| [Resilient Streaming](https://github.com/Azure/azure-sdk-for-python/tree/main/sdk/agentserver/azure-ai-agentserver-responses/samples/sample_19_resilient_streaming.py) | Framework-checkpoint handler — one item per phase + `stream.checkpoint()`, recovery via `context.persisted_response` |
| [Resilient Steering](https://github.com/Azure/azure-sdk-for-python/tree/main/sdk/agentserver/azure-ai-agentserver-responses/samples/sample_20_resilient_steering.py) | `context.is_steered_turn` on the drain re-entry with `resilient_background=True, steerable_conversations=True`; naive re-run recovery |
| [Resilient LangGraph](https://github.com/Azure/azure-sdk-for-python/tree/main/sdk/agentserver/azure-ai-agentserver-responses/samples/sample_21_resilient_langgraph.py) | Real-time streaming LangGraph agent composing `AsyncSqliteSaver` with framework `stream.checkpoint()` / `context.persisted_response`; graph checkpoint id stored in `internal_metadata` so recovery rewinds to the persisted point (no divergence window) |
| [Resilient Multi-turn](https://github.com/Azure/azure-sdk-for-python/tree/main/sdk/agentserver/azure-ai-agentserver-responses/samples/sample_22_resilient_multiturn.py) | Multi-turn conversation with `resilient_background=True, steerable_conversations=False` |

- [Handler implementation guide](https://github.com/Azure/azure-sdk-for-python/blob/main/sdk/agentserver/azure-ai-agentserver-responses/docs/handler-implementation-guide.md) — Detailed reference for building handlers

Expand Down
Loading
Loading