Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
8da9545
Adding release and pull request information to contrib guide (#18)
bdemers Mar 16, 2026
5213191
chore(internal): tweak CI branches
stainless-app[bot] Mar 17, 2026
5871f8b
feat(api): api update
stainless-app[bot] Mar 18, 2026
993657b
chore(internal): update retry delay tests
stainless-app[bot] Mar 18, 2026
f86e1f2
fix(client): allow updating header/query affecting fields in `toBuild…
stainless-app[bot] Mar 18, 2026
ae8ff34
refactor(tests): switch from prism to steady
stainless-app[bot] Mar 20, 2026
f38504b
chore(internal): bump ktfmt
stainless-app[bot] Mar 20, 2026
a5530c1
codegen metadata
stainless-app[bot] Mar 20, 2026
0d022df
chore(tests): bump steady to v0.19.4
stainless-app[bot] Mar 21, 2026
d186f97
chore(tests): bump steady to v0.19.5
stainless-app[bot] Mar 21, 2026
c9b3d8f
chore(internal): update gitignore
stainless-app[bot] Mar 24, 2026
b5094e5
chore(tests): bump steady to v0.19.6
stainless-app[bot] Mar 24, 2026
d5942be
chore(ci): skip lint on metadata-only changes
stainless-app[bot] Mar 25, 2026
231a1a7
chore(tests): bump steady to v0.19.7
stainless-app[bot] Mar 25, 2026
9f53255
codegen metadata
stainless-app[bot] Mar 25, 2026
59fb8e2
codegen metadata
stainless-app[bot] Mar 26, 2026
abeec96
chore(internal): update multipart form array serialization
stainless-app[bot] Mar 27, 2026
b936990
chore(tests): bump steady to v0.20.1
stainless-app[bot] Apr 1, 2026
7dfba2e
chore(tests): bump steady to v0.20.2
stainless-app[bot] Apr 1, 2026
acfd5b0
feat(api): api update
stainless-app[bot] Apr 10, 2026
ab24278
release: 0.1.0-alpha.6
stainless-app[bot] Apr 10, 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
18 changes: 10 additions & 8 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
name: CI
on:
push:
branches-ignore:
- 'generated'
- 'codegen/**'
- 'integrated/**'
- 'stl-preview-head/**'
- 'stl-preview-base/**'
branches:
- '**'
- '!integrated/**'
- '!stl-preview-head/**'
- '!stl-preview-base/**'
- '!generated'
- '!codegen/**'
- 'codegen/stl/**'
pull_request:
branches-ignore:
- 'stl-preview-head/**'
Expand All @@ -17,7 +19,7 @@ jobs:
timeout-minutes: 15
name: lint
runs-on: ${{ github.repository == 'stainless-sdks/arcade-engine-java' && 'depot-ubuntu-24.04' || 'ubuntu-latest' }}
if: github.event_name == 'push' || github.event.pull_request.head.repo.fork
if: (github.event_name == 'push' || github.event.pull_request.head.repo.fork) && (github.event_name != 'push' || github.event.head_commit.message != 'codegen metadata')

steps:
- uses: actions/checkout@v6
Expand All @@ -44,7 +46,7 @@ jobs:
contents: read
id-token: write
runs-on: ${{ github.repository == 'stainless-sdks/arcade-engine-java' && 'depot-ubuntu-24.04' || 'ubuntu-latest' }}
if: github.event_name == 'push' || github.event.pull_request.head.repo.fork
if: (github.event_name == 'push' || github.event.pull_request.head.repo.fork) && (github.event_name != 'push' || github.event.head_commit.message != 'codegen metadata')

steps:
- uses: actions/checkout@v6
Expand Down
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
.prism.log
.stdy.log
.gradle
.idea
.kotlin
Expand Down
2 changes: 1 addition & 1 deletion .release-please-manifest.json
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
{
".": "0.1.0-alpha.5"
".": "0.1.0-alpha.6"
}
6 changes: 3 additions & 3 deletions .stats.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
configured_endpoints: 30
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/arcade-ai%2Farcade-engine-6ff494eafa2c154892716407682bb2296cff4f18c45765c5fb16bdf36f452ae1.yml
openapi_spec_hash: 63dde2481a7d51042a241bfba232b0b0
config_hash: bf64816643634a621cd0ffd93d9c4347
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/arcade-ai%2Farcade-engine-1ef78b1a5567d95e588e2e41522ada4568b5ef06258a7b1a752226f58d3c519e.yml
openapi_spec_hash: 7ad5c8d91d66b56d56b0788b5ef40d77
config_hash: 2d4163acdeacd75903f978cd79c35d14
35 changes: 35 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,40 @@
# Changelog

## 0.1.0-alpha.6 (2026-04-10)

Full Changelog: [v0.1.0-alpha.5...v0.1.0-alpha.6](https://github.com/ArcadeAI/arcade-java/compare/v0.1.0-alpha.5...v0.1.0-alpha.6)

### Features

* **api:** api update ([acfd5b0](https://github.com/ArcadeAI/arcade-java/commit/acfd5b0aedbb445e1269a6b879111ff19c8aeef5))
* **api:** api update ([5871f8b](https://github.com/ArcadeAI/arcade-java/commit/5871f8b7d0a2a89a6cbb57561a292b32381c74b6))


### Bug Fixes

* **client:** allow updating header/query affecting fields in `toBuilder()` ([f86e1f2](https://github.com/ArcadeAI/arcade-java/commit/f86e1f2dff33a369dd6d52119ce670747dfd2392))


### Chores

* **ci:** skip lint on metadata-only changes ([d5942be](https://github.com/ArcadeAI/arcade-java/commit/d5942be3ea63057a3267602dc72046e71d9a5855))
* **internal:** bump ktfmt ([f38504b](https://github.com/ArcadeAI/arcade-java/commit/f38504b554f72ac9f701716ff1ad40ec5f1a47b2))
* **internal:** tweak CI branches ([5213191](https://github.com/ArcadeAI/arcade-java/commit/521319108a7b064979e96ecf2fff5e74681b56bf))
* **internal:** update gitignore ([c9b3d8f](https://github.com/ArcadeAI/arcade-java/commit/c9b3d8f8b7825876526e6dca16859c9f12fcce37))
* **internal:** update multipart form array serialization ([abeec96](https://github.com/ArcadeAI/arcade-java/commit/abeec961730398bb0c49f01ea13312468be4787c))
* **internal:** update retry delay tests ([993657b](https://github.com/ArcadeAI/arcade-java/commit/993657b3ac45eafee6b85f76a578f2c6daaacfe2))
* **tests:** bump steady to v0.19.4 ([0d022df](https://github.com/ArcadeAI/arcade-java/commit/0d022dfe027631ea83e1794bcb9e79824ab28f0f))
* **tests:** bump steady to v0.19.5 ([d186f97](https://github.com/ArcadeAI/arcade-java/commit/d186f9769310ebff3584418642cc0b31a13e1d1c))
* **tests:** bump steady to v0.19.6 ([b5094e5](https://github.com/ArcadeAI/arcade-java/commit/b5094e5507917137cf7b30c90e1028c122bd1331))
* **tests:** bump steady to v0.19.7 ([231a1a7](https://github.com/ArcadeAI/arcade-java/commit/231a1a764782bb5bdcd1118630b3bbd544333aa4))
* **tests:** bump steady to v0.20.1 ([b936990](https://github.com/ArcadeAI/arcade-java/commit/b93699052685356a902c34f38d8e46a617e77454))
* **tests:** bump steady to v0.20.2 ([7dfba2e](https://github.com/ArcadeAI/arcade-java/commit/7dfba2ef15e2c5f6412a64f23cde8138159c42ea))


### Refactors

* **tests:** switch from prism to steady ([ae8ff34](https://github.com/ArcadeAI/arcade-java/commit/ae8ff343537d6ff24a3346fac27516c2bc3e07d9))

## 0.1.0-alpha.5 (2026-03-16)

Full Changelog: [v0.1.0-alpha.4...v0.1.0-alpha.5](https://github.com/ArcadeAI/arcade-java/compare/v0.1.0-alpha.4...v0.1.0-alpha.5)
Expand Down
21 changes: 20 additions & 1 deletion CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ Most tests require you to [run a mock server](https://github.com/stoplightio/pri
./scripts/mock --daemon
```

The mock serer will run in the background allowing you to run tests from the command line `./gradlew test` or from your IDE.
The mock server will run in the background allowing you to run tests from the command line `./gradlew test` or from your IDE.

To stop the mock server run:
```shell
Expand All @@ -62,3 +62,22 @@ To format and fix all issues automatically:
```sh
$ ./scripts/format
```

## Release and pull request process

As mentioned above, most of the code in this repository is generated. So the pull requests process may different from what you are expecting. Here are the steps:

- Custom code changes should target the `next` branch in [`ArcadeAI/arcade-java`](https://github.com/arcadeai/arcade-java).
- Be selective on what you are changing, as this may cause [merge conflicts](https://www.stainless.com/docs/sdks/configure/custom-code) with the generated code.
- Create a new pull request against `next`, CI will build and test it.
- Once it is merged to `next`, and when there have been upstream changes to the OpenAPI spec, you will see a pull request titled "release: <version>" (where `<version>` is the next version to be released)
- Review it, most of the changes will have been generated, make sure the changes from your pull request are included.
- Approve the PR, and merge it.
- The `next` branch will be rebased to `main`, so you will need to rewrite the branch, something like: `git fetch origin next && git reset --hard origin/next`
- Once changes are merged to `main` a CI job will deploy the version to [Maven Central](https://central.sonatype.com/search?q=arcade-java). There may be a delay between the time it is published until the time it shows up in the Maven Central search results.

## Troubleshooting tips

If you are running into issues deploying to Maven Central, run the [`Release Doctor`](https://github.com/ArcadeAI/arcade-java/actions/workflows/release-doctor.yml) CI job, this will check that the required environment variables are set correctly.

The [`CI` workflow](https://github.com/ArcadeAI/arcade-java/blob/main/.github/workflows/ci.yml), includes a couple of `if` statments that look like: `github.repository == 'stainless-sdks/arcade-engine-java'`. These are ONLY used for pre-release builds when the Stainless SDK code is generated. These are NOT used currently (in the future if there are multiple Java project repositories, this Maven repository could be used to test nightly builds). Otherwise, [build from source](#building-the-repository-from-source).
10 changes: 5 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@

<!-- x-release-please-start-version -->

[![Maven Central](https://img.shields.io/maven-central/v/dev.arcade/arcade-java)](https://central.sonatype.com/artifact/dev.arcade/arcade-java/0.1.0-alpha.5)
[![javadoc](https://javadoc.io/badge2/dev.arcade/arcade-java/0.1.0-alpha.5/javadoc.svg)](https://javadoc.io/doc/dev.arcade/arcade-java/0.1.0-alpha.5)
[![Maven Central](https://img.shields.io/maven-central/v/dev.arcade/arcade-java)](https://central.sonatype.com/artifact/dev.arcade/arcade-java/0.1.0-alpha.6)
[![javadoc](https://javadoc.io/badge2/dev.arcade/arcade-java/0.1.0-alpha.6/javadoc.svg)](https://javadoc.io/doc/dev.arcade/arcade-java/0.1.0-alpha.6)

<!-- x-release-please-end -->

Expand All @@ -13,7 +13,7 @@ It is generated with [Stainless](https://www.stainless.com/).

<!-- x-release-please-start-version -->

The REST API documentation can be found on [docs.arcade.dev](https://docs.arcade.dev). Javadocs are available on [javadoc.io](https://javadoc.io/doc/dev.arcade/arcade-java/0.1.0-alpha.5).
The REST API documentation can be found on [docs.arcade.dev](https://docs.arcade.dev). Javadocs are available on [javadoc.io](https://javadoc.io/doc/dev.arcade/arcade-java/0.1.0-alpha.6).

<!-- x-release-please-end -->

Expand All @@ -24,7 +24,7 @@ The REST API documentation can be found on [docs.arcade.dev](https://docs.arcade
### Gradle

```kotlin
implementation("dev.arcade:arcade-java:0.1.0-alpha.5")
implementation("dev.arcade:arcade-java:0.1.0-alpha.6")
```

### Maven
Expand All @@ -33,7 +33,7 @@ implementation("dev.arcade:arcade-java:0.1.0-alpha.5")
<dependency>
<groupId>dev.arcade</groupId>
<artifactId>arcade-java</artifactId>
<version>0.1.0-alpha.5</version>
<version>0.1.0-alpha.6</version>
</dependency>
```

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -453,13 +453,14 @@ private constructor(
headers.put("X-Stainless-Runtime", "JRE")
headers.put("X-Stainless-Runtime-Version", getJavaVersion())
headers.put("X-Stainless-Kotlin-Version", KotlinVersion.CURRENT.toString())
// We replace after all the default headers to allow end-users to overwrite them.
headers.replaceAll(this.headers.build())
queryParams.replaceAll(this.queryParams.build())
apiKey.let {
if (!it.isEmpty()) {
headers.put("Authorization", it)
headers.replace("Authorization", it)
}
}
headers.replaceAll(this.headers.build())
queryParams.replaceAll(this.queryParams.build())

return ClientOptions(
httpClient,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,13 @@ import java.util.Objects
import java.util.Optional
import kotlin.jvm.optionals.getOrNull

/** Returns a page of tools from the engine configuration, optionally filtered by toolkit */
/**
* Returns a page of tools from the engine configuration, optionally filtered by toolkit and/or
* metadata
*/
class ToolListParams
private constructor(
private val filter: String?,
private val includeAllVersions: Boolean?,
private val includeFormat: List<IncludeFormat>?,
private val limit: Long?,
Expand All @@ -27,6 +31,13 @@ private constructor(
private val additionalQueryParams: QueryParams,
) : Params {

/**
* JSON metadata filter. Array fields (service_domains, operations): shorthand array or object
* with any_of/all_of/none_of operators (case-insensitive). Boolean fields: read_only,
* destructive, idempotent, open_world. Extras: case-sensitive key-value subset match.
*/
fun filter(): Optional<String> = Optional.ofNullable(filter)

/** Include all versions of each tool */
fun includeAllVersions(): Optional<Boolean> = Optional.ofNullable(includeAllVersions)

Expand Down Expand Up @@ -64,6 +75,7 @@ private constructor(
/** A builder for [ToolListParams]. */
class Builder internal constructor() {

private var filter: String? = null
private var includeAllVersions: Boolean? = null
private var includeFormat: MutableList<IncludeFormat>? = null
private var limit: Long? = null
Expand All @@ -75,6 +87,7 @@ private constructor(

@JvmSynthetic
internal fun from(toolListParams: ToolListParams) = apply {
filter = toolListParams.filter
includeAllVersions = toolListParams.includeAllVersions
includeFormat = toolListParams.includeFormat?.toMutableList()
limit = toolListParams.limit
Expand All @@ -85,6 +98,17 @@ private constructor(
additionalQueryParams = toolListParams.additionalQueryParams.toBuilder()
}

/**
* JSON metadata filter. Array fields (service_domains, operations): shorthand array or
* object with any_of/all_of/none_of operators (case-insensitive). Boolean fields:
* read_only, destructive, idempotent, open_world. Extras: case-sensitive key-value subset
* match.
*/
fun filter(filter: String?) = apply { this.filter = filter }

/** Alias for calling [Builder.filter] with `filter.orElse(null)`. */
fun filter(filter: Optional<String>) = filter(filter.getOrNull())

/** Include all versions of each tool */
fun includeAllVersions(includeAllVersions: Boolean?) = apply {
this.includeAllVersions = includeAllVersions
Expand Down Expand Up @@ -266,6 +290,7 @@ private constructor(
*/
fun build(): ToolListParams =
ToolListParams(
filter,
includeAllVersions,
includeFormat?.toImmutable(),
limit,
Expand All @@ -282,6 +307,7 @@ private constructor(
override fun _queryParams(): QueryParams =
QueryParams.builder()
.apply {
filter?.let { put("filter", it) }
includeAllVersions?.let { put("include_all_versions", it.toString()) }
includeFormat?.let { put("include_format", it.joinToString(",") { it.toString() }) }
limit?.let { put("limit", it.toString()) }
Expand Down Expand Up @@ -433,6 +459,7 @@ private constructor(
}

return other is ToolListParams &&
filter == other.filter &&
includeAllVersions == other.includeAllVersions &&
includeFormat == other.includeFormat &&
limit == other.limit &&
Expand All @@ -445,6 +472,7 @@ private constructor(

override fun hashCode(): Int =
Objects.hash(
filter,
includeAllVersions,
includeFormat,
limit,
Expand All @@ -456,5 +484,5 @@ private constructor(
)

override fun toString() =
"ToolListParams{includeAllVersions=$includeAllVersions, includeFormat=$includeFormat, limit=$limit, offset=$offset, toolkit=$toolkit, userId=$userId, additionalHeaders=$additionalHeaders, additionalQueryParams=$additionalQueryParams}"
"ToolListParams{filter=$filter, includeAllVersions=$includeAllVersions, includeFormat=$includeFormat, limit=$limit, offset=$offset, toolkit=$toolkit, userId=$userId, additionalHeaders=$additionalHeaders, additionalQueryParams=$additionalQueryParams}"
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ import kotlin.jvm.optionals.getOrNull
*/
class FormattedListParams
private constructor(
private val filter: String?,
private val format: String?,
private val includeAllVersions: Boolean?,
private val limit: Long?,
Expand All @@ -25,6 +26,13 @@ private constructor(
private val additionalQueryParams: QueryParams,
) : Params {

/**
* JSON metadata filter. Array fields (service_domains, operations): shorthand array or object
* with any_of/all_of/none_of operators (case-insensitive). Boolean fields: read_only,
* destructive, idempotent, open_world. Extras: case-sensitive key-value subset match.
*/
fun filter(): Optional<String> = Optional.ofNullable(filter)

/** Provider format */
fun format(): Optional<String> = Optional.ofNullable(format)

Expand Down Expand Up @@ -62,6 +70,7 @@ private constructor(
/** A builder for [FormattedListParams]. */
class Builder internal constructor() {

private var filter: String? = null
private var format: String? = null
private var includeAllVersions: Boolean? = null
private var limit: Long? = null
Expand All @@ -73,6 +82,7 @@ private constructor(

@JvmSynthetic
internal fun from(formattedListParams: FormattedListParams) = apply {
filter = formattedListParams.filter
format = formattedListParams.format
includeAllVersions = formattedListParams.includeAllVersions
limit = formattedListParams.limit
Expand All @@ -83,6 +93,17 @@ private constructor(
additionalQueryParams = formattedListParams.additionalQueryParams.toBuilder()
}

/**
* JSON metadata filter. Array fields (service_domains, operations): shorthand array or
* object with any_of/all_of/none_of operators (case-insensitive). Boolean fields:
* read_only, destructive, idempotent, open_world. Extras: case-sensitive key-value subset
* match.
*/
fun filter(filter: String?) = apply { this.filter = filter }

/** Alias for calling [Builder.filter] with `filter.orElse(null)`. */
fun filter(filter: Optional<String>) = filter(filter.getOrNull())

/** Provider format */
fun format(format: String?) = apply { this.format = format }

Expand Down Expand Up @@ -251,6 +272,7 @@ private constructor(
*/
fun build(): FormattedListParams =
FormattedListParams(
filter,
format,
includeAllVersions,
limit,
Expand All @@ -267,6 +289,7 @@ private constructor(
override fun _queryParams(): QueryParams =
QueryParams.builder()
.apply {
filter?.let { put("filter", it) }
format?.let { put("format", it) }
includeAllVersions?.let { put("include_all_versions", it.toString()) }
limit?.let { put("limit", it.toString()) }
Expand All @@ -283,6 +306,7 @@ private constructor(
}

return other is FormattedListParams &&
filter == other.filter &&
format == other.format &&
includeAllVersions == other.includeAllVersions &&
limit == other.limit &&
Expand All @@ -295,6 +319,7 @@ private constructor(

override fun hashCode(): Int =
Objects.hash(
filter,
format,
includeAllVersions,
limit,
Expand All @@ -306,5 +331,5 @@ private constructor(
)

override fun toString() =
"FormattedListParams{format=$format, includeAllVersions=$includeAllVersions, limit=$limit, offset=$offset, toolkit=$toolkit, userId=$userId, additionalHeaders=$additionalHeaders, additionalQueryParams=$additionalQueryParams}"
"FormattedListParams{filter=$filter, format=$format, includeAllVersions=$includeAllVersions, limit=$limit, offset=$offset, toolkit=$toolkit, userId=$userId, additionalHeaders=$additionalHeaders, additionalQueryParams=$additionalQueryParams}"
}
Loading
Loading