Skip to content

Commit 9daedbe

Browse files
committed
Merge main and move every unreleased SDK change log entry to 1.43
#1541 added SDK entries for 1.41 and 1.42, which will never be tagged: the next shared release is 1.43.0. Fold the Go 1.41 Breaking items into the Go 1.43 entry, rename the Python, TypeScript, Rust, and Java entries to 1.43, and fix the version markers: Python FlowConfig is changed in 1.43.0, and the Go ErrorWithStack change already shipped in 1.40.2.
2 parents caa323b + d292b85 commit 9daedbe

681 files changed

Lines changed: 22003 additions & 10360 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

‎.cursor/rules/project-core.mdc‎

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -173,9 +173,7 @@ still not describe downstream products.
173173
## User-Facing Concept Boundary
174174

175175
User-facing docs, examples and skills describe Dex concepts and guarantees only.
176-
Do not mention Continue-As-New except in the Flow options reference for the
177-
Continue-As-New threshold and the TriggerContinueAsNew Client API reference. Do
178-
not describe server-zd engine internals (apply, commands, partitions, history
176+
Do not describe server-zd engine internals (apply, commands, partitions, history
179177
mechanics) as part of the application model; state the Dex behavior instead.
180178
Deployment and operations guidance may name server-zd and its configuration.
181179

‎.github/workflows/agents-ci.yml‎

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,14 +35,15 @@ jobs:
3535
packages: ${{ steps.discover.outputs.packages }}
3636
steps:
3737
- uses: actions/checkout@v7
38-
# Every package with an executable agents/<language>/<package>/ci.sh gets a matrix job.
38+
# Every package with an executable agents/<language>/<package>/ci.sh or
39+
# agents/cli/<language>/<package>/ci.sh gets a matrix job.
3940
- name: List packages with an executable ci.sh
4041
id: discover
4142
run: |
4243
set -euo pipefail
4344
shopt -s nullglob
4445
package_paths=()
45-
for script in agents/*/*/ci.sh; do
46+
for script in agents/*/*/ci.sh agents/cli/*/*/ci.sh; do
4647
if [[ ! -x "$script" ]]; then
4748
echo "::error file=$script::$script is not executable; run chmod +x and commit it"
4849
exit 1
@@ -56,7 +57,10 @@ jobs:
5657
packages="$(printf '%s\n' "${package_paths[@]}" | jq -R -s -c '
5758
split("\n")
5859
| map(select(length > 0))
59-
| map({path: ., language: (split("/")[1]), name: (split("/")[2])})
60+
| map(if (split("/") | length) == 4
61+
then {path: ., language: (split("/")[2]), name: ("cli-" + split("/")[3])}
62+
else {path: ., language: (split("/")[1]), name: (split("/")[2])}
63+
end)
6064
')"
6165
echo "packages=$packages" >> "$GITHUB_OUTPUT"
6266
jq . <<<"$packages"

‎AGENTS.md‎

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -322,9 +322,7 @@ still not describe downstream products.
322322
### User-Facing Concept Boundary
323323

324324
User-facing docs, examples and skills describe Dex concepts and guarantees only.
325-
Do not mention Continue-As-New except in the Flow options reference for the
326-
Continue-As-New threshold and the TriggerContinueAsNew Client API reference. Do
327-
not describe server-zd engine internals (apply, commands, partitions, history
325+
Do not describe server-zd engine internals (apply, commands, partitions, history
328326
mechanics) as part of the application model; state the Dex behavior instead.
329327
Deployment and operations guidance may name server-zd and its configuration.
330328

‎CLAUDE.md‎

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -245,9 +245,7 @@ still not describe downstream products.
245245
## User-Facing Concept Boundary
246246

247247
User-facing docs, examples and skills describe Dex concepts and guarantees only.
248-
Do not mention Continue-As-New except in the Flow options reference for the
249-
Continue-As-New threshold and the TriggerContinueAsNew Client API reference. Do
250-
not describe server-zd engine internals (apply, commands, partitions, history
248+
Do not describe server-zd engine internals (apply, commands, partitions, history
251249
mechanics) as part of the application model; state the Dex behavior instead.
252250
Deployment and operations guidance may name server-zd and its configuration.
253251

‎agents/CHANGELOG.md‎

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,62 @@ for the Dex SDK and framework versions each release supports.
3636
polling. It used to fail the poll attempt.
3737
- `agents/conformance/mcp_dex_conventions.json` fixes the conventions for every
3838
core.
39+
- TypeScript core: **McpToolSource.executeDeferredToolCall** takes an optional
40+
second argument, `executeDeferredToolCall(call, { requestMeta })`, and
41+
**McpToolCallOptions** has `requestMeta`: more entries for the `tools/call`
42+
request's `_meta`, such as the identity the caller expects the tool to have.
43+
The idempotency key entry wins on a name clash.
44+
- TypeScript core: new **McpToolSource.willResumeToolTaskWithoutSending(call)**
45+
is `true` only when `executeDeferredToolCall` will return a session-polled
46+
task that an earlier attempt started and can never send `tools/call` for the
47+
call. A task polled inside the tool Step, such as one bound to a protocol
48+
session, may be called again when the server no longer knows it.
49+
50+
### Images
51+
52+
- Python and TypeScript cores: user messages and tool results can carry
53+
images. Session state stores only an **AgentImageReference**
54+
(`{"type": "image", "uri", "mime_type", "sha256", "size_bytes"}`); the bytes
55+
live in a **MediaStore**, one object per image under
56+
`<prefix>/sha256/<sha256>`, so uploads are idempotent and a replay reads the
57+
same bytes.
58+
- New fields, all empty by default: **AgentUserMessage.images**,
59+
**AgentMessage.images** (display copy), **AgentToolCall.images**,
60+
**ToolExecutionResult.images**, and **FrameworkMessage.images**. Every
61+
writer now stores `"images": []`; earlier Workers ignore the field, so send
62+
images only after every Worker of the Flow type runs 0.5.0.
63+
- **S3MediaStore** (`dex_agents.s3`, extra `dex-agents[s3]`;
64+
`@superdurable/dex-agents/s3`, optional peer `@aws-sdk/client-s3`) keeps
65+
images in AWS S3 or an S3-compatible bucket, with credentials from the
66+
standard AWS chain. **InMemoryMediaStore** is for tests.
67+
- PNG, JPEG, GIF, and WebP, detected from the bytes with a cheap structural
68+
check, up to **MAX_IMAGE_BYTES** (`maxImageBytes`, 3,750,000 bytes,
69+
5,000,000 bytes as base64) each, and at most **MAX_IMAGES_PER_MESSAGE**
70+
(`maxImagesPerMessage`, 20) per message or tool result. A `uri` is at most
71+
**MAX_IMAGE_URI_LENGTH** (`maxImageUriLength`, 1024) bytes as UTF-8.
72+
**ImageValidationError** names what is wrong.
73+
- Reads check the SHA-256, the size, and the type: **verify_image_bytes**
74+
(`verifyImageBytes`) refuses bytes that are not a well-formed image of the
75+
reference's `mime_type`. **S3MediaStore** uploads with `If-None-Match: *`
76+
(412 means stored; a 409 conflict retries, then needs a `HEAD` that finds
77+
the object),
78+
refuses an object whose `Content-Length` differs from the reference, and
79+
reads at most one byte past `size_bytes`. It takes explicit credentials
80+
(`access_key_id` and `secret_access_key`; `credentials`) for a local
81+
development bucket, and the standard AWS chain by default.
82+
- The session checks the images of every `FrameworkMessage` a runner returns
83+
before it stores any. Keep each object for as long as sessions can replay
84+
it; a missing object fails the turn with **MediaStoreError**.
85+
- `send_user_message` returns `false` for invalid images, or for images when
86+
the runner does not implement **ImageUserMessageBuilder**
87+
(`buildUserMessageWithImages`). No built-in runner implements it yet; image
88+
input for Stepwise and the framework adapters comes later.
89+
- Runners read bytes with **load_images** (`loadImages`) and may choose them
90+
with **collect_turn_images** (`collectTurnImages`).
91+
- Go core: no image input. Its values carry `images`, so a value written by
92+
another core round-trips, and `send_user_message` returns `false` for a
93+
message with images.
94+
- Shared cases: `agents/conformance/images.json`.
3995

4096
### Changed
4197

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
dist/
2+
node_modules/
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
install-links=true
Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
# License
2+
3+
Copyright (c) 2026 Super Durable, Inc.
4+
5+
Portions of this software are licensed as follows:
6+
7+
- Legacy Materials remain under their original licenses as described in
8+
`LEGACY_NOTICES.md`.
9+
- Third-Party Materials remain under the licenses provided by their owners.
10+
- The `docs/` and `examples/` directories are not licensed under the
11+
Sustainable Use License and retain their existing licensing status.
12+
- All other material owned or licensable by Super Durable, Inc. is available
13+
under the Sustainable Use License below.
14+
15+
See `LEGACY_NOTICES.md` for the applicable legacy and third-party notices.
16+
17+
## Sustainable Use License
18+
19+
Version 1.0
20+
21+
### Acceptance
22+
23+
By using the software, you agree to all of the terms and conditions below.
24+
25+
### Copyright License
26+
27+
The licensor grants you a non-exclusive, royalty-free, worldwide,
28+
non-sublicensable, non-transferable license to use, copy, distribute, make
29+
available, and prepare derivative works of the software, in each case subject
30+
to the limitations below.
31+
32+
### Limitations
33+
34+
You may use or modify the software only for your own internal business purposes
35+
or for non-commercial or personal use. You may distribute the software or
36+
provide it to others only if you do so free of charge for non-commercial
37+
purposes. You may not alter, remove, or obscure any licensing, copyright, or
38+
other notices of the licensor in the software. Any use of the licensor's
39+
trademarks is subject to applicable law.
40+
41+
### Patents
42+
43+
The licensor grants you a license, under any patent claims the licensor can
44+
license, or becomes able to license, to make, have made, use, sell, offer for
45+
sale, import and have imported the software, in each case subject to the
46+
limitations and conditions in this license. This license does not cover any
47+
patent claims that you cause to be infringed by modifications or additions to
48+
the software.
49+
50+
If you or your company make any written claim that the software infringes or
51+
contributes to infringement of any patent, your patent license for the software
52+
granted under these terms ends immediately. If your company makes such a claim,
53+
your patent license ends immediately for work on behalf of your company.
54+
55+
### Notices
56+
57+
You must ensure that anyone who gets a copy of any part of the software from
58+
you also gets a copy of these terms. If you modify the software, you must
59+
include in any modified copies of the software a prominent notice stating that
60+
you have modified the software.
61+
62+
### No Other Rights
63+
64+
These terms do not imply any licenses other than those expressly granted in
65+
these terms.
66+
67+
### Termination
68+
69+
If you use the software in violation of these terms, such use is not licensed,
70+
and your license will automatically terminate. If the licensor provides you
71+
with a notice of your violation, and you cease all violation of this license no
72+
later than 30 days after you receive that notice, your license will be
73+
reinstated retroactively. However, if you violate these terms after such
74+
reinstatement, any additional violation of these terms will cause your license
75+
to terminate automatically and permanently.
76+
77+
### No Liability
78+
79+
As far as the law allows, the software comes as is, without any warranty or
80+
condition, and the licensor will not be liable to you for any damages arising
81+
out of these terms or the use or nature of the software, under any kind of
82+
legal claim.
83+
84+
### Definitions
85+
86+
The "licensor" is the entity offering these terms.
87+
88+
The "software" is the software the licensor makes available under these terms,
89+
including any portion of it.
90+
91+
"You" refers to the individual or entity agreeing to these terms.
92+
93+
"Your company" is any legal entity, sole proprietorship, or other kind of
94+
organization that you work for, plus all organizations that have control over,
95+
are under the control of, or are under common control with that organization.
96+
Control means ownership of substantially all the assets of an entity, or the
97+
power to direct its management and policies by vote, contract, or otherwise.
98+
Control can be direct or indirect.
99+
100+
"Your license" is the license granted to you for the software under these
101+
terms.
102+
103+
"Use" means anything you do with the software requiring your license.
104+
105+
"Trademark" means trademarks, service marks, and similar rights.

0 commit comments

Comments
 (0)