release: 0.7.8#23
Conversation
559d9c4 to
11b16d2
Compare
|
🧪 Testing To try out this version of the SDK: Expires at: Fri, 08 May 2026 05:00:59 GMT |
There was a problem hiding this comment.
5 issues found across 59 files
Prompt for AI agents (unresolved issues)
Check if these issues are valid — if so, understand the root cause of each and fix them. If appropriate, use sub-agents to investigate and fix each issue separately.
<file name="pkg/cmd/flagoptions.go">
<violation number="1" location="pkg/cmd/flagoptions.go:145">
P1: `FilePathValue` ignores `EmbedIOReader` and coerces files to strings, causing multipart file inputs to be encoded as text fields instead of file parts.</violation>
</file>
<file name="pkg/cmd/flagoptions_test.go">
<violation number="1" location="pkg/cmd/flagoptions_test.go:16">
P2: Parallel subtests in this range loop capture the reused `tt` variable, which can cause subtests to read the wrong inputs. Capture `tt` inside the loop before launching parallel subtests.</violation>
</file>
<file name="pkg/cmd/cmdutil.go">
<violation number="1" location="pkg/cmd/cmdutil.go:211">
P2: Terminal detection still uses `os.Stdout` instead of the injected `stdout`, so output behavior can diverge when a custom writer is passed.</violation>
</file>
<file name="pkg/cmd/podthread.go">
<violation number="1" location="pkg/cmd/podthread.go:20">
P3: The command usage string is a placeholder (`"**CLI:**"`) instead of an actionable description, which degrades `--help` output for this command.</violation>
</file>
<file name="pkg/cmd/podmetric_test.go">
<violation number="1" location="pkg/cmd/podmetric_test.go:12">
P2: This test is unconditionally skipped, so the rest of the test is unreachable and will never run. If you only want to skip in specific cases, gate the skip behind a condition (e.g., short tests) or remove it so coverage isn’t silently lost.</violation>
</file>
Reply with feedback, questions, or to request a fix. Tag @cubic-dev-ai to re-run a review, or fix all with cubic.
| if isStdinPath(s) { | ||
| content, err := stdin.readAll() | ||
| if err != nil { | ||
| return v, err | ||
| } | ||
| return reflect.ValueOf(string(content)), nil | ||
| } | ||
| content, err := os.ReadFile(s) | ||
| if err != nil { | ||
| return v, err | ||
| } | ||
| return reflect.ValueOf(string(content)), nil |
There was a problem hiding this comment.
P1: FilePathValue ignores EmbedIOReader and coerces files to strings, causing multipart file inputs to be encoded as text fields instead of file parts.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At pkg/cmd/flagoptions.go, line 145:
<comment>`FilePathValue` ignores `EmbedIOReader` and coerces files to strings, causing multipart file inputs to be encoded as text fields instead of file parts.</comment>
<file context>
@@ -98,6 +134,28 @@ func embedFilesValue(v reflect.Value, embedStyle FileEmbedStyle) (reflect.Value,
+ if s == "" {
+ return v, nil
+ }
+ if isStdinPath(s) {
+ content, err := stdin.readAll()
+ if err != nil {
</file context>
| if isStdinPath(s) { | |
| content, err := stdin.readAll() | |
| if err != nil { | |
| return v, err | |
| } | |
| return reflect.ValueOf(string(content)), nil | |
| } | |
| content, err := os.ReadFile(s) | |
| if err != nil { | |
| return v, err | |
| } | |
| return reflect.ValueOf(string(content)), nil | |
| if isStdinPath(s) { | |
| content, err := stdin.readAll() | |
| if err != nil { | |
| return v, err | |
| } | |
| if embedStyle == EmbedIOReader { | |
| return reflect.ValueOf(io.NopCloser(bytes.NewReader(content))), nil | |
| } | |
| return reflect.ValueOf(string(content)), nil | |
| } | |
| if embedStyle == EmbedIOReader { | |
| file, err := os.Open(s) | |
| if err != nil { | |
| return v, err | |
| } | |
| return reflect.ValueOf(file), nil | |
| } | |
| content, err := os.ReadFile(s) | |
| if err != nil { | |
| return v, err | |
| } | |
| return reflect.ValueOf(string(content)), nil |
| ) | ||
|
|
||
| func TestIsUTF8TextFile(t *testing.T) { | ||
| t.Parallel() |
There was a problem hiding this comment.
P2: Parallel subtests in this range loop capture the reused tt variable, which can cause subtests to read the wrong inputs. Capture tt inside the loop before launching parallel subtests.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At pkg/cmd/flagoptions_test.go, line 16:
<comment>Parallel subtests in this range loop capture the reused `tt` variable, which can cause subtests to read the wrong inputs. Capture `tt` inside the loop before launching parallel subtests.</comment>
<file context>
@@ -2,15 +2,19 @@ package cmd
)
func TestIsUTF8TextFile(t *testing.T) {
+ t.Parallel()
+
tests := []struct {
</file context>
| // writeBinaryResponse writes a binary response to stdout or a file. | ||
| // | ||
| // Takes in a stdout reference so we can test this function without overriding os.Stdout in tests. | ||
| func writeBinaryResponse(response *http.Response, stdout io.Writer, outfile string) (string, error) { |
There was a problem hiding this comment.
P2: Terminal detection still uses os.Stdout instead of the injected stdout, so output behavior can diverge when a custom writer is passed.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At pkg/cmd/cmdutil.go, line 211:
<comment>Terminal detection still uses `os.Stdout` instead of the injected `stdout`, so output behavior can diverge when a custom writer is passed.</comment>
<file context>
@@ -196,21 +205,24 @@ func streamToStdout(generateOutput func(w *os.File) error) error {
+// writeBinaryResponse writes a binary response to stdout or a file.
+//
+// Takes in a stdout reference so we can test this function without overriding os.Stdout in tests.
+func writeBinaryResponse(response *http.Response, stdout io.Writer, outfile string) (string, error) {
defer response.Body.Close()
body, err := io.ReadAll(response.Body)
</file context>
| ) | ||
|
|
||
| func TestPodsMetricsQuery(t *testing.T) { | ||
| t.Skip("Mock server tests are disabled") |
There was a problem hiding this comment.
P2: This test is unconditionally skipped, so the rest of the test is unreachable and will never run. If you only want to skip in specific cases, gate the skip behind a condition (e.g., short tests) or remove it so coverage isn’t silently lost.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At pkg/cmd/podmetric_test.go, line 12:
<comment>This test is unconditionally skipped, so the rest of the test is unreachable and will never run. If you only want to skip in specific cases, gate the skip behind a condition (e.g., short tests) or remove it so coverage isn’t silently lost.</comment>
<file context>
@@ -0,0 +1,27 @@
+)
+
+func TestPodsMetricsQuery(t *testing.T) {
+ t.Skip("Mock server tests are disabled")
+ t.Run("regular flags", func(t *testing.T) {
+ mocktest.TestRunMockTestWithFlags(
</file context>
| var podsThreadsRetrieve = cli.Command{ | ||
| Name: "retrieve", | ||
| Usage: "Get Thread", | ||
| Usage: "**CLI:**", |
There was a problem hiding this comment.
P3: The command usage string is a placeholder ("**CLI:**") instead of an actionable description, which degrades --help output for this command.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At pkg/cmd/podthread.go, line 20:
<comment>The command usage string is a placeholder (`"**CLI:**"`) instead of an actionable description, which degrades `--help` output for this command.</comment>
<file context>
@@ -17,7 +17,7 @@ import (
var podsThreadsRetrieve = cli.Command{
Name: "retrieve",
- Usage: "Get Thread",
+ Usage: "**CLI:**",
Suggest: true,
Flags: []cli.Flag{
</file context>
| Usage: "**CLI:**", | |
| Usage: "Get Thread", |
|
🤖 Release is at https://github.com/agentmail-to/agentmail-cli/releases/tag/v0.7.8 🌻 |
Automated Release PR
0.7.8 (2026-04-08)
Full Changelog: v0.7.7...v0.7.8
Features
-as value representing stdin to binary-only file parameters in CLIs (4fb771a)*_BASE_URL/--base-url(57e1a52)Bug Fixes
--format explore(2852394)RawJSONwhen iterating items with--format explorein the CLI (13259ac)Chores
t.Parallel()(132e0f5)os.Stdoutisn't necessary (f488623)os.Chdirtot.Chdir(6f4709d)This pull request is managed by Stainless's GitHub App.
The semver version number is based on included commit messages. Alternatively, you can manually set the version number in the title of this pull request.
For a better experience, it is recommended to use either rebase-merge or squash-merge when merging this pull request.
🔗 Stainless website
📚 Read the docs
🙋 Reach out for help or questions
Summary by cubic
Release 0.7.8 expands the CLI with new list and API key management commands, improves file and JSON handling, and adds stricter base URL validation. It also fixes edge cases in the explore viewer and improves CI reliability.
New Features
lists,inboxes:lists, andpods:lists(create/retrieve/list/delete).inboxes:api-keysandpods:api-keys(create/retrieve/list/delete).pods:metrics query, domain updates (domains update,pods:domains retrieve/update), draft attachment download (drafts get-attachment,inboxes:drafts get-attachment,pods:drafts get-attachment), and thread deletion (threads delete,pods:threads delete).-to read from stdin.--base-urlandAGENTMAIL_BASE_URLwith clear errors if scheme is missing.--format exploreimproved with better table rendering and raw JSON handling.github.com/agentmail-to/agentmail-gov0.6.0.Bug Fixes
--format explorenow handles empty datasets and iterates items via RawJSON.Written for commit 559d9c4. Summary will update on new commits.