diff --git a/.github/actions/setup-copilot/action.yml b/.github/actions/setup-copilot/action.yml
index dcc99b8a70..1288a1d89b 100644
--- a/.github/actions/setup-copilot/action.yml
+++ b/.github/actions/setup-copilot/action.yml
@@ -4,15 +4,36 @@ outputs:
cli-path:
description: "Path to the Copilot CLI executable"
value: ${{ steps.cli-path.outputs.path }}
+ cli-version:
+ description: "Pinned @github/copilot version installed (read from pom.xml)"
+ value: ${{ steps.cli-version.outputs.version }}
runs:
using: "composite"
steps:
- - uses: actions/setup-node@v6
+ - uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v6
with:
node-version: 22
- - name: Install Copilot CLI
- run: npm install -g @github/copilot
+ - name: Read pinned @github/copilot version from pom.xml
+ id: cli-version
shell: bash
+ # The version is the SINGLE SOURCE OF TRUTH for the Copilot CLI version
+ # used across all CI paths. It is kept in sync with the reference
+ # implementation pinned in .lastmerge by
+ # .github/scripts/reference-impl-sync/sync-cli-version-from-reference-impl.sh.
+ run: |
+ PROP="readonly-copilot-sdk-ref-impl-version-from-lastmerge-file-updated-by-reference-impl-sync"
+ VERSION=$(sed -n "s|.*<${PROP}>\(.*\)${PROP}>.*|\1|p" pom.xml | head -n 1 | tr -d '[:space:]')
+ if [[ -z "$VERSION" || "$VERSION" == "PRIMER_TO_REPLACE" ]]; then
+ echo "::error::Could not read pinned @github/copilot version from pom.xml property <${PROP}>" >&2
+ exit 1
+ fi
+ echo "Pinned @github/copilot version: $VERSION"
+ echo "version=$VERSION" >> "$GITHUB_OUTPUT"
+ - name: Install Copilot CLI (pinned to pom.xml version)
+ shell: bash
+ env:
+ CLI_VERSION: ${{ steps.cli-version.outputs.version }}
+ run: npm install -g "@github/copilot@${CLI_VERSION}"
- name: Set CLI path
id: cli-path
run: echo "path=$(which copilot)" >> $GITHUB_OUTPUT
diff --git a/.github/aw/actions-lock.json b/.github/aw/actions-lock.json
index 11e06d9b9e..8bf544f4d1 100644
--- a/.github/aw/actions-lock.json
+++ b/.github/aw/actions-lock.json
@@ -1,5 +1,15 @@
{
"entries": {
+ "actions/checkout@v6.0.2": {
+ "repo": "actions/checkout",
+ "version": "v6.0.2",
+ "sha": "de0fac2e4500dabe0009e67214ff5f5447ce83dd"
+ },
+ "actions/download-artifact@v8.0.1": {
+ "repo": "actions/download-artifact",
+ "version": "v8.0.1",
+ "sha": "3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c"
+ },
"actions/github-script@v8": {
"repo": "actions/github-script",
"version": "v8",
@@ -20,6 +30,11 @@
"version": "v4",
"sha": "49933ea5288caeca8642d1e84afbd3f7d6820020"
},
+ "actions/upload-artifact@v7.0.1": {
+ "repo": "actions/upload-artifact",
+ "version": "v7.0.1",
+ "sha": "043fb46d1a93c77aae656e7c1c64a875d1fc6a0a"
+ },
"github/gh-aw-actions/setup-cli@v0.68.3": {
"repo": "github/gh-aw-actions/setup-cli",
"version": "v0.68.3",
diff --git a/.github/badges/jacoco.svg b/.github/badges/jacoco.svg
index 620c8d52a2..16199628b9 100644
--- a/.github/badges/jacoco.svg
+++ b/.github/badges/jacoco.svg
@@ -12,7 +12,7 @@
coveragecoverage
- 82.7%
- 82.7%
+ 81.5%
+ 81.5%
diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md
index d029784219..7b304f2677 100644
--- a/.github/copilot-instructions.md
+++ b/.github/copilot-instructions.md
@@ -222,6 +222,8 @@ Test method names are converted to lowercase snake_case for snapshot filenames t
- **DO NOT** modify test snapshots in `target/copilot-sdk/test/snapshots/` - these come from reference implementation
- **DO NOT** alter the Eclipse formatter configuration in `pom.xml` without team consensus
- **DO NOT** remove or skip Checkstyle or Spotless checks
+- **YOU MUST ALWAYS** run `gh aw compile ` after editing any `.github/workflows/*.md` agentic workflow source file to regenerate the corresponding `.lock.yml`. The lock file contains a content hash of the frontmatter — any edit to the `.md` without recompiling will cause the workflow to fail at runtime with a "lock file out of sync" error.
+- **DO NOT** edit `.github/workflows/*.lock.yml` directly — these are auto-generated by `gh aw compile` from the `.md` source files.
### Security Guidelines
diff --git a/.github/dependabot.yml b/.github/dependabot.yml
index 03f0f715ae..04d5ab5f47 100644
--- a/.github/dependabot.yml
+++ b/.github/dependabot.yml
@@ -1,13 +1,5 @@
version: 2
updates:
- - package-ecosystem: "npm"
- directory: "/scripts/codegen"
- schedule:
- interval: "daily"
- open-pull-requests-limit: 1
- allow:
- - dependency-name: "@github/copilot"
-
- package-ecosystem: "github-actions"
directory: "/"
schedule:
diff --git a/.github/prompts/coding-agent-merge-reference-impl-instructions.md b/.github/prompts/coding-agent-merge-reference-impl-instructions.md
index c93af9a1a5..5ae1621db6 100644
--- a/.github/prompts/coding-agent-merge-reference-impl-instructions.md
+++ b/.github/prompts/coding-agent-merge-reference-impl-instructions.md
@@ -1,5 +1,5 @@
-
-
+
+
Follow the agentic-merge-reference-impl prompt at .github/prompts/agentic-merge-reference-impl.prompt.md
to port reference implementation changes to the Java SDK.
diff --git a/.github/scripts/reference-impl-sync/merge-reference-impl-finish.sh b/.github/scripts/reference-impl-sync/merge-reference-impl-finish.sh
index 480d43bc0a..2dda8da07f 100755
--- a/.github/scripts/reference-impl-sync/merge-reference-impl-finish.sh
+++ b/.github/scripts/reference-impl-sync/merge-reference-impl-finish.sh
@@ -5,8 +5,12 @@
# Finalises a reference implementation merge:
# 1. Runs format + test + build (via format-and-test.sh)
# 2. Updates .lastmerge to reference implementation HEAD
-# 3. Commits the .lastmerge update
-# 4. Pushes the branch to origin
+# 3. Syncs the @github/copilot version property in pom.xml from the
+# cloned reference implementation's nodejs/package.json
+# 4. Syncs scripts/codegen/package.json to the same @github/copilot
+# version so the code generator uses matching schemas
+# 5. Commits the .lastmerge + pom.xml + codegen package updates
+# 6. Pushes the branch to origin
#
# Usage: ./.github/scripts/reference-impl-sync/merge-reference-impl-finish.sh
# ./.github/scripts/reference-impl-sync/merge-reference-impl-finish.sh --skip-tests
@@ -48,8 +52,22 @@ echo "▸ Updating .lastmerge…"
NEW_COMMIT=$(cd "$REFERENCE_IMPL_DIR" && git rev-parse origin/main)
echo "$NEW_COMMIT" > "$ROOT_DIR/.lastmerge"
-git add .lastmerge
-git commit -m "Update .lastmerge to $NEW_COMMIT"
+# ── 2b. Sync pom.xml @github/copilot version ─────────────────
+# Keeps the canonical CLI version in pom.xml aligned with what the
+# reference implementation pinned in .lastmerge depends on.
+echo "▸ Syncing @github/copilot version in pom.xml from reference implementation…"
+"$ROOT_DIR/.github/scripts/reference-impl-sync/sync-cli-version-from-reference-impl.sh" "$REFERENCE_IMPL_DIR"
+
+# ── 2c. Sync scripts/codegen @github/copilot version ─────────
+# Keeps scripts/codegen/package.json in lockstep so the code generator
+# uses schemas from the same CLI version that the tests run against.
+# This eliminates the gap where Dependabot could race ahead of the
+# reference implementation sync.
+echo "▸ Syncing @github/copilot version in scripts/codegen/package.json…"
+"$ROOT_DIR/.github/scripts/reference-impl-sync/sync-codegen-version.sh" "$REFERENCE_IMPL_DIR"
+
+git add .lastmerge pom.xml scripts/codegen/package.json scripts/codegen/package-lock.json
+git commit -m "Update .lastmerge to $NEW_COMMIT, sync pom.xml CLI version, and update scripts/codegen @github/copilot version"
# ── 3. Push branch ───────────────────────────────────────────
echo "▸ Pushing branch $BRANCH_NAME to origin…"
diff --git a/.github/scripts/reference-impl-sync/sync-cli-version-from-reference-impl.sh b/.github/scripts/reference-impl-sync/sync-cli-version-from-reference-impl.sh
new file mode 100755
index 0000000000..1d15d8aee9
--- /dev/null
+++ b/.github/scripts/reference-impl-sync/sync-cli-version-from-reference-impl.sh
@@ -0,0 +1,80 @@
+#!/usr/bin/env bash
+# ──────────────────────────────────────────────────────────────
+# sync-cli-version-from-reference-impl.sh
+#
+# Reads the @github/copilot version specifier from the cloned
+# reference implementation's nodejs/package.json, and updates the
+# corresponding property in pom.xml:
+#
+#
+#
+# This keeps the canonical Copilot CLI version (declared in pom.xml)
+# in sync with whatever the reference implementation pinned in
+# .lastmerge depends on. All workflows that install the Copilot CLI
+# (build-test.yml — implicitly via cloned SDK, run-smoke-test.yml and
+# update-copilot-dependency.yml — via the setup-copilot action) read
+# this single property so every CI path uses the same CLI version.
+#
+# Usage:
+# ./sync-cli-version-from-reference-impl.sh
+#
+# Or, when invoked from merge-reference-impl-finish.sh, sources
+# REFERENCE_IMPL_DIR from the .merge-env file.
+# ──────────────────────────────────────────────────────────────
+set -euo pipefail
+
+# Locate the repo root by walking up from this script until we find a pom.xml.
+# This is resilient to the script being moved to a different depth under
+# .github/scripts/ in the future.
+find_repo_root() {
+ local dir
+ dir="$(cd "$(dirname "$0")" && pwd)"
+ while [[ "$dir" != "/" ]]; do
+ if [[ -f "$dir/pom.xml" ]]; then
+ echo "$dir"
+ return 0
+ fi
+ dir="$(dirname "$dir")"
+ done
+ echo "❌ Could not locate repo root (no pom.xml found above $(dirname "$0"))" >&2
+ return 1
+}
+ROOT_DIR="$(find_repo_root)"
+
+REFERENCE_IMPL_DIR="${1:-${REFERENCE_IMPL_DIR:-}}"
+if [[ -z "$REFERENCE_IMPL_DIR" ]]; then
+ echo "❌ Usage: $0 " >&2
+ echo " or set REFERENCE_IMPL_DIR in the environment." >&2
+ exit 1
+fi
+
+PKG_JSON="$REFERENCE_IMPL_DIR/nodejs/package.json"
+if [[ ! -f "$PKG_JSON" ]]; then
+ echo "❌ Cannot find $PKG_JSON" >&2
+ exit 1
+fi
+
+# node is always available since the reference implementation uses npm.
+CLI_VERSION=$(node -e \
+ "const fs=require('fs');const p=JSON.parse(fs.readFileSync(process.argv[1],'utf8'));const v=(p.dependencies&&p.dependencies['@github/copilot'])||(p.devDependencies&&p.devDependencies['@github/copilot']);process.stdout.write(v||'');" \
+ "$PKG_JSON")
+
+if [[ -z "$CLI_VERSION" ]]; then
+ echo "❌ Could not extract @github/copilot version from $PKG_JSON" >&2
+ exit 1
+fi
+
+POM="$ROOT_DIR/pom.xml"
+PROP="readonly-copilot-sdk-ref-impl-version-from-lastmerge-file-updated-by-reference-impl-sync"
+
+if ! grep -q "<${PROP}>" "$POM"; then
+ echo "❌ Property <${PROP}> not found in $POM" >&2
+ exit 1
+fi
+
+# Use a portable sed invocation (works on both BSD/macOS and GNU/Linux).
+TMP="$(mktemp)"
+sed -E "s|<${PROP}>[^<]*${PROP}>|<${PROP}>${CLI_VERSION}${PROP}>|" "$POM" > "$TMP"
+mv "$TMP" "$POM"
+
+echo "▸ Updated pom.xml: <${PROP}> = ${CLI_VERSION}"
diff --git a/.github/scripts/reference-impl-sync/sync-codegen-version.sh b/.github/scripts/reference-impl-sync/sync-codegen-version.sh
new file mode 100755
index 0000000000..09e182bb24
--- /dev/null
+++ b/.github/scripts/reference-impl-sync/sync-codegen-version.sh
@@ -0,0 +1,71 @@
+#!/usr/bin/env bash
+# ──────────────────────────────────────────────────────────────
+# sync-codegen-version.sh
+#
+# Updates the @github/copilot dependency in scripts/codegen/package.json
+# to match the version used by the reference implementation. This keeps
+# the code generator schemas in lockstep with the CLI version used for
+# testing, eliminating the gap where Dependabot could race ahead.
+#
+# Usage:
+# ./sync-codegen-version.sh
+#
+# Or, when invoked from merge-reference-impl-finish.sh, the directory
+# is passed as $1.
+# ──────────────────────────────────────────────────────────────
+set -euo pipefail
+
+# Locate the repo root by walking up from this script until we find a pom.xml.
+find_repo_root() {
+ local dir
+ dir="$(cd "$(dirname "$0")" && pwd)"
+ while [[ "$dir" != "/" ]]; do
+ if [[ -f "$dir/pom.xml" ]]; then
+ echo "$dir"
+ return 0
+ fi
+ dir="$(dirname "$dir")"
+ done
+ echo "❌ Could not locate repo root (no pom.xml found above $(dirname "$0"))" >&2
+ return 1
+}
+ROOT_DIR="$(find_repo_root)"
+
+REFERENCE_IMPL_DIR="${1:-${REFERENCE_IMPL_DIR:-}}"
+if [[ -z "$REFERENCE_IMPL_DIR" ]]; then
+ echo "❌ Usage: $0 " >&2
+ echo " or set REFERENCE_IMPL_DIR in the environment." >&2
+ exit 1
+fi
+
+PKG_JSON="$REFERENCE_IMPL_DIR/nodejs/package.json"
+if [[ ! -f "$PKG_JSON" ]]; then
+ echo "❌ Cannot find $PKG_JSON" >&2
+ exit 1
+fi
+
+# Extract the @github/copilot version from the reference implementation.
+CLI_VERSION=$(node -e \
+ "const fs=require('fs');const p=JSON.parse(fs.readFileSync(process.argv[1],'utf8'));const v=(p.dependencies&&p.dependencies['@github/copilot'])||(p.devDependencies&&p.devDependencies['@github/copilot']);process.stdout.write(v||'');" \
+ "$PKG_JSON")
+
+if [[ -z "$CLI_VERSION" ]]; then
+ echo "❌ Could not extract @github/copilot version from $PKG_JSON" >&2
+ exit 1
+fi
+
+CODEGEN_DIR="$ROOT_DIR/scripts/codegen"
+CODEGEN_PKG="$CODEGEN_DIR/package.json"
+
+if [[ ! -f "$CODEGEN_PKG" ]]; then
+ echo "❌ Cannot find $CODEGEN_PKG" >&2
+ exit 1
+fi
+
+# Update scripts/codegen/package.json with the new version and regenerate the lock file.
+# Intentionally omit --save-exact to preserve the version specifier used by the reference
+# implementation (e.g. a caret range like '^1.0.36-0' rather than an exact pin '1.0.36-0').
+echo "▸ Updating scripts/codegen/package.json: @github/copilot → ${CLI_VERSION}"
+cd "$CODEGEN_DIR"
+npm install "@github/copilot@${CLI_VERSION}"
+echo "▸ Updated scripts/codegen to @github/copilot@${CLI_VERSION}"
diff --git a/.github/workflows/build-test.yml b/.github/workflows/build-test.yml
index 1143634f69..9154375a9a 100644
--- a/.github/workflows/build-test.yml
+++ b/.github/workflows/build-test.yml
@@ -89,6 +89,39 @@ jobs:
COPILOT_CLI_PATH: ${{ steps.setup-copilot.outputs.path }}
run: mvn verify
+ - name: Validate reference-impl-sync completeness
+ if: >-
+ github.event_name == 'pull_request' &&
+ contains(github.event.pull_request.labels.*.name, 'reference-impl-sync')
+ run: |
+ git fetch origin main --depth=1
+ CHANGED=$(git diff --name-only origin/main...HEAD)
+
+ # 1. .lastmerge must be updated (proves finish script ran)
+ if echo "$CHANGED" | grep -q '^\\.lastmerge$'; then
+ echo "✅ .lastmerge was updated (finish script ran)"
+ else
+ echo "❌ .lastmerge was not updated. The merge-reference-impl-finish.sh script"
+ echo " must be run before this PR can merge. This script updates .lastmerge,"
+ echo " syncs the CLI version in pom.xml, and syncs scripts/codegen/package.json."
+ exit 1
+ fi
+
+ # 2. If codegen inputs changed, generated output must also have changed
+ if echo "$CHANGED" | grep -q '^scripts/codegen/'; then
+ if echo "$CHANGED" | grep -q '^src/generated/java/'; then
+ echo "✅ Codegen inputs changed and generated files were regenerated"
+ else
+ echo "❌ scripts/codegen/ was updated but src/generated/java/ has no changes."
+ echo " The Codegen Check workflow should regenerate these files automatically."
+ echo " If it hasn't run yet, wait for it to complete and push regenerated files."
+ echo " Or run manually: cd scripts/codegen && npm ci && npm run generate"
+ exit 1
+ fi
+ else
+ echo "✅ No codegen input changes — regeneration not needed"
+ fi
+
- name: Upload test results for site generation
if: success() && github.ref == 'refs/heads/main'
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
diff --git a/.github/workflows/codegen-agentic-fix.lock.yml b/.github/workflows/codegen-agentic-fix.lock.yml
index b44681eb74..958f3cd155 100644
--- a/.github/workflows/codegen-agentic-fix.lock.yml
+++ b/.github/workflows/codegen-agentic-fix.lock.yml
@@ -1,4 +1,4 @@
-# gh-aw-metadata: {"schema_version":"v3","frontmatter_hash":"e9707f96f0d1dc7a2c4bbd2c193b917ff5793901b14d055a1fef0da62dd2b928","compiler_version":"v0.68.3","strict":true,"agent_id":"copilot"}
+# gh-aw-metadata: {"schema_version":"v3","frontmatter_hash":"70880e5fb9ec78342cf56974b2414d8cf0a516533e201e437835164543ef58c0","compiler_version":"v0.68.3","strict":true,"agent_id":"copilot"}
# gh-aw-manifest: {"version":1,"secrets":["COPILOT_GITHUB_TOKEN","GH_AW_CI_TRIGGER_TOKEN","GH_AW_GITHUB_MCP_SERVER_TOKEN","GH_AW_GITHUB_TOKEN","GITHUB_TOKEN"],"actions":[{"repo":"actions/checkout","sha":"de0fac2e4500dabe0009e67214ff5f5447ce83dd","version":"v6.0.2"},{"repo":"actions/download-artifact","sha":"3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c","version":"v8.0.1"},{"repo":"actions/github-script","sha":"373c709c69115d41ff229c7e5df9f8788daa9553","version":"v9"},{"repo":"actions/upload-artifact","sha":"043fb46d1a93c77aae656e7c1c64a875d1fc6a0a","version":"v7.0.1"},{"repo":"github/gh-aw-actions/setup","sha":"ba90f2186d7ad780ec640f364005fa24e797b360","version":"v0.68.3"}],"containers":[{"image":"ghcr.io/github/gh-aw-firewall/agent:0.25.20"},{"image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.25.20"},{"image":"ghcr.io/github/gh-aw-firewall/squid:0.25.20"},{"image":"ghcr.io/github/gh-aw-mcpg:v0.2.19"},{"image":"ghcr.io/github/github-mcp-server:v0.32.0"},{"image":"node:lts-alpine"}]}
# ___ _ _
# / _ \ | | (_)
@@ -178,19 +178,19 @@ jobs:
run: |
bash "${RUNNER_TEMP}/gh-aw/actions/create_prompt_first.sh"
{
- cat << 'GH_AW_PROMPT_89262d074598e425_EOF'
+ cat << 'GH_AW_PROMPT_d94a435f1fbdc38f_EOF'
- GH_AW_PROMPT_89262d074598e425_EOF
+ GH_AW_PROMPT_d94a435f1fbdc38f_EOF
cat "${RUNNER_TEMP}/gh-aw/prompts/xpia.md"
cat "${RUNNER_TEMP}/gh-aw/prompts/temp_folder_prompt.md"
cat "${RUNNER_TEMP}/gh-aw/prompts/markdown.md"
cat "${RUNNER_TEMP}/gh-aw/prompts/safe_outputs_prompt.md"
- cat << 'GH_AW_PROMPT_89262d074598e425_EOF'
+ cat << 'GH_AW_PROMPT_d94a435f1fbdc38f_EOF'
- Tools: add_comment(max:5), push_to_pull_request_branch(max:3), missing_tool, missing_data, noop
- GH_AW_PROMPT_89262d074598e425_EOF
+ Tools: add_comment(max:5), push_to_pull_request_branch, missing_tool, missing_data, noop
+ GH_AW_PROMPT_d94a435f1fbdc38f_EOF
cat "${RUNNER_TEMP}/gh-aw/prompts/safe_outputs_push_to_pr_branch.md"
- cat << 'GH_AW_PROMPT_89262d074598e425_EOF'
+ cat << 'GH_AW_PROMPT_d94a435f1fbdc38f_EOF'
The following GitHub context information is available for this workflow:
@@ -220,12 +220,12 @@ jobs:
{{/if}}
- GH_AW_PROMPT_89262d074598e425_EOF
+ GH_AW_PROMPT_d94a435f1fbdc38f_EOF
cat "${RUNNER_TEMP}/gh-aw/prompts/github_mcp_tools_with_safeoutputs_prompt.md"
- cat << 'GH_AW_PROMPT_89262d074598e425_EOF'
+ cat << 'GH_AW_PROMPT_d94a435f1fbdc38f_EOF'
{{#runtime-import .github/workflows/codegen-agentic-fix.md}}
- GH_AW_PROMPT_89262d074598e425_EOF
+ GH_AW_PROMPT_d94a435f1fbdc38f_EOF
} > "$GH_AW_PROMPT"
- name: Interpolate variables and render templates
uses: actions/github-script@373c709c69115d41ff229c7e5df9f8788daa9553 # v9
@@ -402,16 +402,15 @@ jobs:
mkdir -p "${RUNNER_TEMP}/gh-aw/safeoutputs"
mkdir -p /tmp/gh-aw/safeoutputs
mkdir -p /tmp/gh-aw/mcp-logs/safeoutputs
- cat > "${RUNNER_TEMP}/gh-aw/safeoutputs/config.json" << 'GH_AW_SAFE_OUTPUTS_CONFIG_e118843832e795e2_EOF'
- {"add_comment":{"max":5,"target":"*"},"create_report_incomplete_issue":{},"missing_data":{},"missing_tool":{},"noop":{"max":1,"report-as-issue":"false"},"push_to_pull_request_branch":{"if_no_changes":"warn","max":3,"max_patch_size":1024,"protected_files":["package.json","bun.lockb","bunfig.toml","deno.json","deno.jsonc","deno.lock","global.json","NuGet.Config","Directory.Packages.props","mix.exs","mix.lock","go.mod","go.sum","stack.yaml","stack.yaml.lock","pom.xml","build.gradle","build.gradle.kts","settings.gradle","settings.gradle.kts","gradle.properties","package-lock.json","yarn.lock","pnpm-lock.yaml","npm-shrinkwrap.json","requirements.txt","Pipfile","Pipfile.lock","pyproject.toml","setup.py","setup.cfg","Gemfile","Gemfile.lock","uv.lock","CODEOWNERS"],"protected_path_prefixes":[".github/",".agents/"]},"report_incomplete":{}}
- GH_AW_SAFE_OUTPUTS_CONFIG_e118843832e795e2_EOF
+ cat > "${RUNNER_TEMP}/gh-aw/safeoutputs/config.json" << 'GH_AW_SAFE_OUTPUTS_CONFIG_b6e7bb90508de076_EOF'
+ {"add_comment":{"max":5,"target":"*"},"create_report_incomplete_issue":{},"missing_data":{},"missing_tool":{},"noop":{"max":1,"report-as-issue":"false"},"push_to_pull_request_branch":{"if_no_changes":"warn","labels":["dependencies"],"max_patch_size":1024,"protected_files":["package.json","bun.lockb","bunfig.toml","deno.json","deno.jsonc","deno.lock","global.json","NuGet.Config","Directory.Packages.props","mix.exs","mix.lock","go.mod","go.sum","stack.yaml","stack.yaml.lock","pom.xml","build.gradle","build.gradle.kts","settings.gradle","settings.gradle.kts","gradle.properties","package-lock.json","yarn.lock","pnpm-lock.yaml","npm-shrinkwrap.json","requirements.txt","Pipfile","Pipfile.lock","pyproject.toml","setup.py","setup.cfg","Gemfile","Gemfile.lock","uv.lock","CODEOWNERS"],"protected_path_prefixes":[".github/",".agents/"],"target":"*"},"report_incomplete":{}}
+ GH_AW_SAFE_OUTPUTS_CONFIG_b6e7bb90508de076_EOF
- name: Write Safe Outputs Tools
env:
GH_AW_TOOLS_META_JSON: |
{
"description_suffixes": {
- "add_comment": " CONSTRAINTS: Maximum 5 comment(s) can be added. Target: *. Supports reply_to_id for discussion threading.",
- "push_to_pull_request_branch": " CONSTRAINTS: Maximum 3 push(es) can be made."
+ "add_comment": " CONSTRAINTS: Maximum 5 comment(s) can be added. Target: *. Supports reply_to_id for discussion threading."
},
"repo_params": {},
"dynamic_tools": []
@@ -609,7 +608,7 @@ jobs:
export MCP_GATEWAY_DOCKER_COMMAND='docker run -i --rm --network host -v /var/run/docker.sock:/var/run/docker.sock -e MCP_GATEWAY_PORT -e MCP_GATEWAY_DOMAIN -e MCP_GATEWAY_API_KEY -e MCP_GATEWAY_PAYLOAD_DIR -e MCP_GATEWAY_PAYLOAD_SIZE_THRESHOLD -e DEBUG -e MCP_GATEWAY_LOG_DIR -e GH_AW_MCP_LOG_DIR -e GH_AW_SAFE_OUTPUTS -e GH_AW_SAFE_OUTPUTS_CONFIG_PATH -e GH_AW_SAFE_OUTPUTS_TOOLS_PATH -e GH_AW_ASSETS_BRANCH -e GH_AW_ASSETS_MAX_SIZE_KB -e GH_AW_ASSETS_ALLOWED_EXTS -e DEFAULT_BRANCH -e GITHUB_MCP_SERVER_TOKEN -e GITHUB_MCP_GUARD_MIN_INTEGRITY -e GITHUB_MCP_GUARD_REPOS -e GITHUB_REPOSITORY -e GITHUB_SERVER_URL -e GITHUB_SHA -e GITHUB_WORKSPACE -e GITHUB_TOKEN -e GITHUB_RUN_ID -e GITHUB_RUN_NUMBER -e GITHUB_RUN_ATTEMPT -e GITHUB_JOB -e GITHUB_ACTION -e GITHUB_EVENT_NAME -e GITHUB_EVENT_PATH -e GITHUB_ACTOR -e GITHUB_ACTOR_ID -e GITHUB_TRIGGERING_ACTOR -e GITHUB_WORKFLOW -e GITHUB_WORKFLOW_REF -e GITHUB_WORKFLOW_SHA -e GITHUB_REF -e GITHUB_REF_NAME -e GITHUB_REF_TYPE -e GITHUB_HEAD_REF -e GITHUB_BASE_REF -e GH_AW_SAFE_OUTPUTS_PORT -e GH_AW_SAFE_OUTPUTS_API_KEY -v /tmp/gh-aw/mcp-payloads:/tmp/gh-aw/mcp-payloads:rw -v /opt:/opt:ro -v /tmp:/tmp:rw -v '"${GITHUB_WORKSPACE}"':'"${GITHUB_WORKSPACE}"':rw ghcr.io/github/gh-aw-mcpg:v0.2.19'
mkdir -p /home/runner/.copilot
- cat << GH_AW_MCP_CONFIG_1f06674d94d6899b_EOF | bash "${RUNNER_TEMP}/gh-aw/actions/start_mcp_gateway.sh"
+ cat << GH_AW_MCP_CONFIG_f8f308e27510535f_EOF | bash "${RUNNER_TEMP}/gh-aw/actions/start_mcp_gateway.sh"
{
"mcpServers": {
"github": {
@@ -650,7 +649,7 @@ jobs:
"payloadDir": "${MCP_GATEWAY_PAYLOAD_DIR}"
}
}
- GH_AW_MCP_CONFIG_1f06674d94d6899b_EOF
+ GH_AW_MCP_CONFIG_f8f308e27510535f_EOF
- name: Download activation artifact
uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
with:
@@ -662,7 +661,7 @@ jobs:
- name: Execute GitHub Copilot CLI
id: agentic_execution
# Copilot CLI tool arguments (sorted):
- timeout-minutes: 20
+ timeout-minutes: 60
run: |
set -o pipefail
touch /tmp/gh-aw/agent-step-summary.md
@@ -967,7 +966,7 @@ jobs:
GH_AW_STALE_LOCK_FILE_FAILED: ${{ needs.activation.outputs.stale_lock_file_failed }}
GH_AW_GROUP_REPORTS: "false"
GH_AW_FAILURE_REPORT_AS_ISSUE: "true"
- GH_AW_TIMEOUT_MINUTES: "20"
+ GH_AW_TIMEOUT_MINUTES: "60"
with:
github-token: ${{ secrets.GH_AW_GITHUB_TOKEN || secrets.GITHUB_TOKEN }}
script: |
@@ -1233,7 +1232,7 @@ jobs:
GH_AW_ALLOWED_DOMAINS: "*.githubusercontent.com,api.business.githubcopilot.com,api.enterprise.githubcopilot.com,api.github.com,api.githubcopilot.com,api.individual.githubcopilot.com,api.snapcraft.io,archive.ubuntu.com,azure.archive.ubuntu.com,codeload.github.com,crl.geotrust.com,crl.globalsign.com,crl.identrust.com,crl.sectigo.com,crl.thawte.com,crl.usertrust.com,crl.verisign.com,crl3.digicert.com,crl4.digicert.com,crls.ssl.com,docs.github.com,github-cloud.githubusercontent.com,github-cloud.s3.amazonaws.com,github.blog,github.com,github.githubassets.com,host.docker.internal,json-schema.org,json.schemastore.org,keyserver.ubuntu.com,lfs.github.com,objects.githubusercontent.com,ocsp.digicert.com,ocsp.geotrust.com,ocsp.globalsign.com,ocsp.identrust.com,ocsp.sectigo.com,ocsp.ssl.com,ocsp.thawte.com,ocsp.usertrust.com,ocsp.verisign.com,packagecloud.io,packages.cloud.google.com,packages.microsoft.com,ppa.launchpad.net,raw.githubusercontent.com,registry.npmjs.org,s.symcb.com,s.symcd.com,security.ubuntu.com,telemetry.enterprise.githubcopilot.com,ts-crl.ws.symantec.com,ts-ocsp.ws.symantec.com,www.googleapis.com"
GITHUB_SERVER_URL: ${{ github.server_url }}
GITHUB_API_URL: ${{ github.api_url }}
- GH_AW_SAFE_OUTPUTS_HANDLER_CONFIG: "{\"add_comment\":{\"max\":5,\"target\":\"*\"},\"create_report_incomplete_issue\":{},\"missing_data\":{},\"missing_tool\":{},\"noop\":{\"max\":1,\"report-as-issue\":\"false\"},\"push_to_pull_request_branch\":{\"if_no_changes\":\"warn\",\"max\":3,\"max_patch_size\":1024,\"protected_files\":[\"package.json\",\"bun.lockb\",\"bunfig.toml\",\"deno.json\",\"deno.jsonc\",\"deno.lock\",\"global.json\",\"NuGet.Config\",\"Directory.Packages.props\",\"mix.exs\",\"mix.lock\",\"go.mod\",\"go.sum\",\"stack.yaml\",\"stack.yaml.lock\",\"pom.xml\",\"build.gradle\",\"build.gradle.kts\",\"settings.gradle\",\"settings.gradle.kts\",\"gradle.properties\",\"package-lock.json\",\"yarn.lock\",\"pnpm-lock.yaml\",\"npm-shrinkwrap.json\",\"requirements.txt\",\"Pipfile\",\"Pipfile.lock\",\"pyproject.toml\",\"setup.py\",\"setup.cfg\",\"Gemfile\",\"Gemfile.lock\",\"uv.lock\",\"CODEOWNERS\",\"AGENTS.md\"],\"protected_path_prefixes\":[\".github/\",\".agents/\"]},\"report_incomplete\":{}}"
+ GH_AW_SAFE_OUTPUTS_HANDLER_CONFIG: "{\"add_comment\":{\"max\":5,\"target\":\"*\"},\"create_report_incomplete_issue\":{},\"missing_data\":{},\"missing_tool\":{},\"noop\":{\"max\":1,\"report-as-issue\":\"false\"},\"push_to_pull_request_branch\":{\"if_no_changes\":\"warn\",\"labels\":[\"dependencies\"],\"max_patch_size\":1024,\"protected_files\":[\"package.json\",\"bun.lockb\",\"bunfig.toml\",\"deno.json\",\"deno.jsonc\",\"deno.lock\",\"global.json\",\"NuGet.Config\",\"Directory.Packages.props\",\"mix.exs\",\"mix.lock\",\"go.mod\",\"go.sum\",\"stack.yaml\",\"stack.yaml.lock\",\"pom.xml\",\"build.gradle\",\"build.gradle.kts\",\"settings.gradle\",\"settings.gradle.kts\",\"gradle.properties\",\"package-lock.json\",\"yarn.lock\",\"pnpm-lock.yaml\",\"npm-shrinkwrap.json\",\"requirements.txt\",\"Pipfile\",\"Pipfile.lock\",\"pyproject.toml\",\"setup.py\",\"setup.cfg\",\"Gemfile\",\"Gemfile.lock\",\"uv.lock\",\"CODEOWNERS\",\"AGENTS.md\"],\"protected_path_prefixes\":[\".github/\",\".agents/\"],\"target\":\"*\"},\"report_incomplete\":{}}"
GH_AW_CI_TRIGGER_TOKEN: ${{ secrets.GH_AW_CI_TRIGGER_TOKEN }}
with:
github-token: ${{ secrets.GH_AW_GITHUB_TOKEN || secrets.GITHUB_TOKEN }}
diff --git a/.github/workflows/codegen-agentic-fix.md b/.github/workflows/codegen-agentic-fix.md
index eb93e1095d..b4aa0a8f20 100644
--- a/.github/workflows/codegen-agentic-fix.md
+++ b/.github/workflows/codegen-agentic-fix.md
@@ -23,6 +23,8 @@ permissions:
contents: read
actions: read
+timeout-minutes: 60
+
network:
allowed:
- defaults
@@ -33,9 +35,10 @@ tools:
toolsets: [context, repos]
safe-outputs:
- push_to_pull_request_branch:
- max: 3
- add_comment:
+ push-to-pull-request-branch:
+ target: "*"
+ labels: [dependencies]
+ add-comment:
target: "*"
max: 5
noop:
@@ -204,7 +207,7 @@ For each attempt:
### Step 5: Push fixes
-After `mvn verify` passes, commit all changes and use the `push_to_pull_request_branch` safe-output tool to push to PR #${{ inputs.pr_number }}:
+After `mvn verify` passes, commit all changes and use the `push-to-pull-request-branch` safe-output tool to push to PR #${{ inputs.pr_number }}:
```bash
git add -A
@@ -213,13 +216,13 @@ git commit -m "Fix codegen and build failures after @github/copilot update
Automated fix applied by codegen-agentic-fix workflow."
```
-Then call the `push_to_pull_request_branch` tool to push your commits to the PR branch.
+Then call the `push-to-pull-request-branch` tool to push your commits to the PR branch.
### Step 6: Failure handling
If all 3 attempts fail:
-1. Call the `add_comment` tool on PR #${{ inputs.pr_number }} explaining:
+1. Call the `add-comment` tool on PR #${{ inputs.pr_number }} explaining:
- What errors remain
- What fixes were attempted
- Whether the issue is in the code generator or handwritten code
diff --git a/.github/workflows/copilot-setup-steps.yml b/.github/workflows/copilot-setup-steps.yml
index 5bc3f56182..917cd02e04 100644
--- a/.github/workflows/copilot-setup-steps.yml
+++ b/.github/workflows/copilot-setup-steps.yml
@@ -24,9 +24,9 @@ jobs:
# Install GitHub CLI and gh-aw extension for Copilot Agent interaction
- name: Install gh-aw extension
- uses: github/gh-aw/actions/setup-cli@ce1794953e0ec42adc41b6fca05e02ab49ee21c3 # v0.68.3
+ uses: github/gh-aw/actions/setup-cli@f01a9d118afa6e306f3645ca31e43f4ea8fb4d22 # v0.71.1
with:
- version: v0.42.17
+ version: v0.68.3
# Setup Node.js
- uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6
diff --git a/.github/workflows/weekly-reference-impl-sync.lock.yml b/.github/workflows/reference-impl-sync.lock.yml
similarity index 95%
rename from .github/workflows/weekly-reference-impl-sync.lock.yml
rename to .github/workflows/reference-impl-sync.lock.yml
index 49bfd3ac0f..5cd565b426 100644
--- a/.github/workflows/weekly-reference-impl-sync.lock.yml
+++ b/.github/workflows/reference-impl-sync.lock.yml
@@ -1,4 +1,4 @@
-# gh-aw-metadata: {"schema_version":"v3","frontmatter_hash":"54f733578d3011b148c7aff09a0e72085d787a777a996488f08aeffdf52ec93b","compiler_version":"v0.68.3","strict":true,"agent_id":"copilot"}
+# gh-aw-metadata: {"schema_version":"v3","frontmatter_hash":"e8c3534f6cb36bd08b5436922ff89339bc22c719895422c0526b8a7779186327","compiler_version":"v0.68.3","strict":true,"agent_id":"copilot"}
# gh-aw-manifest: {"version":1,"secrets":["COPILOT_GITHUB_TOKEN","GH_AW_AGENT_TOKEN","GH_AW_GITHUB_MCP_SERVER_TOKEN","GH_AW_GITHUB_TOKEN","GITHUB_TOKEN"],"actions":[{"repo":"actions/checkout","sha":"de0fac2e4500dabe0009e67214ff5f5447ce83dd","version":"v6.0.2"},{"repo":"actions/download-artifact","sha":"3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c","version":"v8.0.1"},{"repo":"actions/github-script","sha":"373c709c69115d41ff229c7e5df9f8788daa9553","version":"v9"},{"repo":"actions/upload-artifact","sha":"043fb46d1a93c77aae656e7c1c64a875d1fc6a0a","version":"v7.0.1"},{"repo":"github/gh-aw-actions/setup","sha":"ba90f2186d7ad780ec640f364005fa24e797b360","version":"v0.68.3"}],"containers":[{"image":"ghcr.io/github/gh-aw-firewall/agent:0.25.20"},{"image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.25.20"},{"image":"ghcr.io/github/gh-aw-firewall/squid:0.25.20"},{"image":"ghcr.io/github/gh-aw-mcpg:v0.2.19"},{"image":"ghcr.io/github/github-mcp-server:v0.32.0"},{"image":"node:lts-alpine"}]}
# ___ _ _
# / _ \ | | (_)
@@ -22,7 +22,7 @@
#
# For more information: https://github.github.com/gh-aw/introduction/overview/
#
-# Weekly reference implementation sync workflow. Checks for new commits in the official
+# Reference implementation sync workflow. Checks for new commits in the official
# Copilot SDK (github/copilot-sdk) and assigns to Copilot to port changes.
#
# Secrets used:
@@ -47,11 +47,11 @@
# - ghcr.io/github/github-mcp-server:v0.32.0
# - node:lts-alpine
-name: "Weekly Reference Implementation Sync"
+name: "Reference Implementation Sync"
"on":
schedule:
- - cron: "40 11 * * 0"
- # Friendly format: weekly (scattered)
+ - cron: "47 22 * * *"
+ # Friendly format: daily (scattered)
workflow_dispatch:
inputs:
aw_context:
@@ -65,7 +65,7 @@ permissions: {}
concurrency:
group: "gh-aw-${{ github.workflow }}"
-run-name: "Weekly Reference Implementation Sync"
+run-name: "Reference Implementation Sync"
jobs:
activation:
@@ -97,7 +97,7 @@ jobs:
GH_AW_INFO_VERSION: "1.0.21"
GH_AW_INFO_AGENT_VERSION: "1.0.21"
GH_AW_INFO_CLI_VERSION: "v0.68.3"
- GH_AW_INFO_WORKFLOW_NAME: "Weekly Reference Implementation Sync"
+ GH_AW_INFO_WORKFLOW_NAME: "Reference Implementation Sync"
GH_AW_INFO_EXPERIMENTAL: "false"
GH_AW_INFO_SUPPORTS_TOOLS_ALLOWLIST: "true"
GH_AW_INFO_STAGED: "false"
@@ -132,7 +132,7 @@ jobs:
id: check-lock-file
uses: actions/github-script@373c709c69115d41ff229c7e5df9f8788daa9553 # v9
env:
- GH_AW_WORKFLOW_FILE: "weekly-reference-impl-sync.lock.yml"
+ GH_AW_WORKFLOW_FILE: "reference-impl-sync.lock.yml"
GH_AW_CONTEXT_WORKFLOW_REF: "${{ github.workflow_ref }}"
with:
script: |
@@ -166,14 +166,14 @@ jobs:
run: |
bash "${RUNNER_TEMP}/gh-aw/actions/create_prompt_first.sh"
{
- cat << 'GH_AW_PROMPT_9a049ffd9b204d97_EOF'
+ cat << 'GH_AW_PROMPT_8be4e91e77b39cd4_EOF'
- GH_AW_PROMPT_9a049ffd9b204d97_EOF
+ GH_AW_PROMPT_8be4e91e77b39cd4_EOF
cat "${RUNNER_TEMP}/gh-aw/prompts/xpia.md"
cat "${RUNNER_TEMP}/gh-aw/prompts/temp_folder_prompt.md"
cat "${RUNNER_TEMP}/gh-aw/prompts/markdown.md"
cat "${RUNNER_TEMP}/gh-aw/prompts/safe_outputs_prompt.md"
- cat << 'GH_AW_PROMPT_9a049ffd9b204d97_EOF'
+ cat << 'GH_AW_PROMPT_8be4e91e77b39cd4_EOF'
Tools: add_comment(max:10), create_issue, close_issue(max:10), assign_to_agent, missing_tool, missing_data, noop
@@ -205,12 +205,12 @@ jobs:
{{/if}}
- GH_AW_PROMPT_9a049ffd9b204d97_EOF
+ GH_AW_PROMPT_8be4e91e77b39cd4_EOF
cat "${RUNNER_TEMP}/gh-aw/prompts/github_mcp_tools_with_safeoutputs_prompt.md"
- cat << 'GH_AW_PROMPT_9a049ffd9b204d97_EOF'
+ cat << 'GH_AW_PROMPT_8be4e91e77b39cd4_EOF'
- {{#runtime-import .github/workflows/weekly-reference-impl-sync.md}}
- GH_AW_PROMPT_9a049ffd9b204d97_EOF
+ {{#runtime-import .github/workflows/reference-impl-sync.md}}
+ GH_AW_PROMPT_8be4e91e77b39cd4_EOF
} > "$GH_AW_PROMPT"
- name: Interpolate variables and render templates
uses: actions/github-script@373c709c69115d41ff229c7e5df9f8788daa9553 # v9
@@ -292,7 +292,7 @@ jobs:
GH_AW_ASSETS_BRANCH: ""
GH_AW_ASSETS_MAX_SIZE_KB: 0
GH_AW_MCP_LOG_DIR: /tmp/gh-aw/mcp-logs/safeoutputs
- GH_AW_WORKFLOW_ID_SANITIZED: weeklyreferenceimplsync
+ GH_AW_WORKFLOW_ID_SANITIZED: referenceimplsync
outputs:
agentic_engine_timeout: ${{ steps.detect-copilot-errors.outputs.agentic_engine_timeout || 'false' }}
checkout_pr_success: ${{ steps.checkout-pr.outputs.checkout_pr_success || 'true' }}
@@ -381,9 +381,9 @@ jobs:
mkdir -p "${RUNNER_TEMP}/gh-aw/safeoutputs"
mkdir -p /tmp/gh-aw/safeoutputs
mkdir -p /tmp/gh-aw/mcp-logs/safeoutputs
- cat > "${RUNNER_TEMP}/gh-aw/safeoutputs/config.json" << 'GH_AW_SAFE_OUTPUTS_CONFIG_2a317c5680ea1925_EOF'
- {"add_comment":{"max":10,"target":"*"},"assign_to_agent":{"max":1,"model":"claude-opus-4.6","name":"copilot","target":"*"},"close_issue":{"max":10,"required_labels":["reference-impl-sync"],"target":"*"},"create_issue":{"assignees":["copilot-swe-agent"],"expires":144,"labels":["reference-impl-sync"],"max":1,"title_prefix":"[reference-impl-sync] "},"create_report_incomplete_issue":{},"missing_data":{},"missing_tool":{},"noop":{"max":1,"report-as-issue":"false"},"report_incomplete":{}}
- GH_AW_SAFE_OUTPUTS_CONFIG_2a317c5680ea1925_EOF
+ cat > "${RUNNER_TEMP}/gh-aw/safeoutputs/config.json" << 'GH_AW_SAFE_OUTPUTS_CONFIG_76ba061ad4465f81_EOF'
+ {"add_comment":{"max":10,"target":"*"},"assign_to_agent":{"max":1,"model":"claude-opus-4.6","name":"copilot","target":"*"},"close_issue":{"max":10,"required_labels":["reference-impl-sync"],"target":"*"},"create_issue":{"expires":144,"labels":["reference-impl-sync"],"max":1,"title_prefix":"[reference-impl-sync] "},"create_report_incomplete_issue":{},"missing_data":{},"missing_tool":{},"noop":{"max":1,"report-as-issue":"false"},"report_incomplete":{}}
+ GH_AW_SAFE_OUTPUTS_CONFIG_76ba061ad4465f81_EOF
- name: Write Safe Outputs Tools
env:
GH_AW_TOOLS_META_JSON: |
@@ -392,7 +392,7 @@ jobs:
"add_comment": " CONSTRAINTS: Maximum 10 comment(s) can be added. Target: *. Supports reply_to_id for discussion threading.",
"assign_to_agent": " CONSTRAINTS: Maximum 1 issue(s) can be assigned to agent.",
"close_issue": " CONSTRAINTS: Maximum 10 issue(s) can be closed. Target: *.",
- "create_issue": " CONSTRAINTS: Maximum 1 issue(s) can be created. Title will be prefixed with \"[reference-impl-sync] \". Labels [\"reference-impl-sync\"] will be automatically added. Assignees [\"copilot-swe-agent\"] will be automatically assigned."
+ "create_issue": " CONSTRAINTS: Maximum 1 issue(s) can be created. Title will be prefixed with \"[reference-impl-sync] \". Labels [\"reference-impl-sync\"] will be automatically added."
},
"repo_params": {},
"dynamic_tools": []
@@ -646,7 +646,7 @@ jobs:
export MCP_GATEWAY_DOCKER_COMMAND='docker run -i --rm --network host -v /var/run/docker.sock:/var/run/docker.sock -e MCP_GATEWAY_PORT -e MCP_GATEWAY_DOMAIN -e MCP_GATEWAY_API_KEY -e MCP_GATEWAY_PAYLOAD_DIR -e MCP_GATEWAY_PAYLOAD_SIZE_THRESHOLD -e DEBUG -e MCP_GATEWAY_LOG_DIR -e GH_AW_MCP_LOG_DIR -e GH_AW_SAFE_OUTPUTS -e GH_AW_SAFE_OUTPUTS_CONFIG_PATH -e GH_AW_SAFE_OUTPUTS_TOOLS_PATH -e GH_AW_ASSETS_BRANCH -e GH_AW_ASSETS_MAX_SIZE_KB -e GH_AW_ASSETS_ALLOWED_EXTS -e DEFAULT_BRANCH -e GITHUB_MCP_SERVER_TOKEN -e GITHUB_MCP_GUARD_MIN_INTEGRITY -e GITHUB_MCP_GUARD_REPOS -e GITHUB_REPOSITORY -e GITHUB_SERVER_URL -e GITHUB_SHA -e GITHUB_WORKSPACE -e GITHUB_TOKEN -e GITHUB_RUN_ID -e GITHUB_RUN_NUMBER -e GITHUB_RUN_ATTEMPT -e GITHUB_JOB -e GITHUB_ACTION -e GITHUB_EVENT_NAME -e GITHUB_EVENT_PATH -e GITHUB_ACTOR -e GITHUB_ACTOR_ID -e GITHUB_TRIGGERING_ACTOR -e GITHUB_WORKFLOW -e GITHUB_WORKFLOW_REF -e GITHUB_WORKFLOW_SHA -e GITHUB_REF -e GITHUB_REF_NAME -e GITHUB_REF_TYPE -e GITHUB_HEAD_REF -e GITHUB_BASE_REF -e GH_AW_SAFE_OUTPUTS_PORT -e GH_AW_SAFE_OUTPUTS_API_KEY -v /tmp/gh-aw/mcp-payloads:/tmp/gh-aw/mcp-payloads:rw -v /opt:/opt:ro -v /tmp:/tmp:rw -v '"${GITHUB_WORKSPACE}"':'"${GITHUB_WORKSPACE}"':rw ghcr.io/github/gh-aw-mcpg:v0.2.19'
mkdir -p /home/runner/.copilot
- cat << GH_AW_MCP_CONFIG_ee30822602a32ffa_EOF | bash "${RUNNER_TEMP}/gh-aw/actions/start_mcp_gateway.sh"
+ cat << GH_AW_MCP_CONFIG_cf52d533554e8317_EOF | bash "${RUNNER_TEMP}/gh-aw/actions/start_mcp_gateway.sh"
{
"mcpServers": {
"github": {
@@ -687,7 +687,7 @@ jobs:
"payloadDir": "${MCP_GATEWAY_PAYLOAD_DIR}"
}
}
- GH_AW_MCP_CONFIG_ee30822602a32ffa_EOF
+ GH_AW_MCP_CONFIG_cf52d533554e8317_EOF
- name: Download activation artifact
uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
with:
@@ -891,7 +891,7 @@ jobs:
issues: write
pull-requests: write
concurrency:
- group: "gh-aw-conclusion-weekly-reference-impl-sync"
+ group: "gh-aw-conclusion-reference-impl-sync"
cancel-in-progress: false
outputs:
incomplete_count: ${{ steps.report_incomplete.outputs.incomplete_count }}
@@ -926,7 +926,7 @@ jobs:
env:
GH_AW_AGENT_OUTPUT: ${{ steps.setup-agent-output-env.outputs.GH_AW_AGENT_OUTPUT }}
GH_AW_NOOP_MAX: "1"
- GH_AW_WORKFLOW_NAME: "Weekly Reference Implementation Sync"
+ GH_AW_WORKFLOW_NAME: "Reference Implementation Sync"
GH_AW_RUN_URL: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}
GH_AW_AGENT_CONCLUSION: ${{ needs.agent.result }}
GH_AW_NOOP_REPORT_AS_ISSUE: "false"
@@ -942,7 +942,7 @@ jobs:
uses: actions/github-script@373c709c69115d41ff229c7e5df9f8788daa9553 # v9
env:
GH_AW_AGENT_OUTPUT: ${{ steps.setup-agent-output-env.outputs.GH_AW_AGENT_OUTPUT }}
- GH_AW_WORKFLOW_NAME: "Weekly Reference Implementation Sync"
+ GH_AW_WORKFLOW_NAME: "Reference Implementation Sync"
GH_AW_RUN_URL: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}
GH_AW_DETECTION_CONCLUSION: ${{ needs.detection.outputs.detection_conclusion }}
GH_AW_DETECTION_REASON: ${{ needs.detection.outputs.detection_reason }}
@@ -959,7 +959,7 @@ jobs:
env:
GH_AW_AGENT_OUTPUT: ${{ steps.setup-agent-output-env.outputs.GH_AW_AGENT_OUTPUT }}
GH_AW_MISSING_TOOL_CREATE_ISSUE: "true"
- GH_AW_WORKFLOW_NAME: "Weekly Reference Implementation Sync"
+ GH_AW_WORKFLOW_NAME: "Reference Implementation Sync"
with:
github-token: ${{ secrets.GH_AW_GITHUB_TOKEN || secrets.GITHUB_TOKEN }}
script: |
@@ -973,7 +973,7 @@ jobs:
env:
GH_AW_AGENT_OUTPUT: ${{ steps.setup-agent-output-env.outputs.GH_AW_AGENT_OUTPUT }}
GH_AW_REPORT_INCOMPLETE_CREATE_ISSUE: "true"
- GH_AW_WORKFLOW_NAME: "Weekly Reference Implementation Sync"
+ GH_AW_WORKFLOW_NAME: "Reference Implementation Sync"
with:
github-token: ${{ secrets.GH_AW_GITHUB_TOKEN || secrets.GITHUB_TOKEN }}
script: |
@@ -987,10 +987,10 @@ jobs:
uses: actions/github-script@373c709c69115d41ff229c7e5df9f8788daa9553 # v9
env:
GH_AW_AGENT_OUTPUT: ${{ steps.setup-agent-output-env.outputs.GH_AW_AGENT_OUTPUT }}
- GH_AW_WORKFLOW_NAME: "Weekly Reference Implementation Sync"
+ GH_AW_WORKFLOW_NAME: "Reference Implementation Sync"
GH_AW_RUN_URL: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}
GH_AW_AGENT_CONCLUSION: ${{ needs.agent.result }}
- GH_AW_WORKFLOW_ID: "weekly-reference-impl-sync"
+ GH_AW_WORKFLOW_ID: "reference-impl-sync"
GH_AW_ENGINE_ID: "copilot"
GH_AW_SECRET_VERIFICATION_RESULT: ${{ needs.activation.outputs.secret_verification_result }}
GH_AW_CHECKOUT_PR_SUCCESS: ${{ needs.agent.outputs.checkout_pr_success }}
@@ -1098,8 +1098,8 @@ jobs:
if: always() && steps.detection_guard.outputs.run_detection == 'true'
uses: actions/github-script@373c709c69115d41ff229c7e5df9f8788daa9553 # v9
env:
- WORKFLOW_NAME: "Weekly Reference Implementation Sync"
- WORKFLOW_DESCRIPTION: "Weekly reference implementation sync workflow. Checks for new commits in the official\nCopilot SDK (github/copilot-sdk) and assigns to Copilot to port changes."
+ WORKFLOW_NAME: "Reference Implementation Sync"
+ WORKFLOW_DESCRIPTION: "Reference implementation sync workflow. Checks for new commits in the official\nCopilot SDK (github/copilot-sdk) and assigns to Copilot to port changes."
HAS_PATCH: ${{ needs.agent.outputs.has_patch }}
with:
script: |
@@ -1184,14 +1184,14 @@ jobs:
pull-requests: write
timeout-minutes: 15
env:
- GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/weekly-reference-impl-sync"
+ GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/reference-impl-sync"
GH_AW_DETECTION_CONCLUSION: ${{ needs.detection.outputs.detection_conclusion }}
GH_AW_DETECTION_REASON: ${{ needs.detection.outputs.detection_reason }}
GH_AW_EFFECTIVE_TOKENS: ${{ needs.agent.outputs.effective_tokens }}
GH_AW_ENGINE_ID: "copilot"
GH_AW_ENGINE_MODEL: ${{ needs.agent.outputs.model }}
- GH_AW_WORKFLOW_ID: "weekly-reference-impl-sync"
- GH_AW_WORKFLOW_NAME: "Weekly Reference Implementation Sync"
+ GH_AW_WORKFLOW_ID: "reference-impl-sync"
+ GH_AW_WORKFLOW_NAME: "Reference Implementation Sync"
outputs:
assign_to_agent_assigned: ${{ steps.process_safe_outputs.outputs.assign_to_agent_assigned }}
assign_to_agent_assignment_error_count: ${{ steps.process_safe_outputs.outputs.assign_to_agent_assignment_error_count }}
@@ -1245,7 +1245,7 @@ jobs:
GH_AW_ALLOWED_DOMAINS: "*.githubusercontent.com,api.business.githubcopilot.com,api.enterprise.githubcopilot.com,api.github.com,api.githubcopilot.com,api.individual.githubcopilot.com,api.snapcraft.io,archive.ubuntu.com,azure.archive.ubuntu.com,codeload.github.com,crl.geotrust.com,crl.globalsign.com,crl.identrust.com,crl.sectigo.com,crl.thawte.com,crl.usertrust.com,crl.verisign.com,crl3.digicert.com,crl4.digicert.com,crls.ssl.com,docs.github.com,github-cloud.githubusercontent.com,github-cloud.s3.amazonaws.com,github.blog,github.com,github.githubassets.com,host.docker.internal,json-schema.org,json.schemastore.org,keyserver.ubuntu.com,lfs.github.com,objects.githubusercontent.com,ocsp.digicert.com,ocsp.geotrust.com,ocsp.globalsign.com,ocsp.identrust.com,ocsp.sectigo.com,ocsp.ssl.com,ocsp.thawte.com,ocsp.usertrust.com,ocsp.verisign.com,packagecloud.io,packages.cloud.google.com,packages.microsoft.com,ppa.launchpad.net,raw.githubusercontent.com,registry.npmjs.org,s.symcb.com,s.symcd.com,security.ubuntu.com,telemetry.enterprise.githubcopilot.com,ts-crl.ws.symantec.com,ts-ocsp.ws.symantec.com,www.googleapis.com"
GITHUB_SERVER_URL: ${{ github.server_url }}
GITHUB_API_URL: ${{ github.api_url }}
- GH_AW_SAFE_OUTPUTS_HANDLER_CONFIG: "{\"add_comment\":{\"max\":10,\"target\":\"*\"},\"assign_to_agent\":{\"max\":1,\"model\":\"claude-opus-4.6\",\"name\":\"copilot\",\"target\":\"*\"},\"close_issue\":{\"max\":10,\"required_labels\":[\"reference-impl-sync\"],\"target\":\"*\"},\"create_issue\":{\"assignees\":[\"copilot-swe-agent\"],\"expires\":144,\"labels\":[\"reference-impl-sync\"],\"max\":1,\"title_prefix\":\"[reference-impl-sync] \"},\"create_report_incomplete_issue\":{},\"missing_data\":{},\"missing_tool\":{},\"noop\":{\"max\":1,\"report-as-issue\":\"false\"},\"report_incomplete\":{}}"
+ GH_AW_SAFE_OUTPUTS_HANDLER_CONFIG: "{\"add_comment\":{\"max\":10,\"target\":\"*\"},\"assign_to_agent\":{\"max\":1,\"model\":\"claude-opus-4.6\",\"name\":\"copilot\",\"target\":\"*\"},\"close_issue\":{\"max\":10,\"required_labels\":[\"reference-impl-sync\"],\"target\":\"*\"},\"create_issue\":{\"expires\":144,\"labels\":[\"reference-impl-sync\"],\"max\":1,\"title_prefix\":\"[reference-impl-sync] \"},\"create_report_incomplete_issue\":{},\"missing_data\":{},\"missing_tool\":{},\"noop\":{\"max\":1,\"report-as-issue\":\"false\"},\"report_incomplete\":{}}"
GH_AW_ASSIGN_TO_AGENT_TOKEN: ${{ secrets.GH_AW_AGENT_TOKEN || secrets.GH_AW_GITHUB_TOKEN || secrets.GITHUB_TOKEN }}
with:
github-token: ${{ secrets.GH_AW_GITHUB_TOKEN || secrets.GITHUB_TOKEN }}
diff --git a/.github/workflows/weekly-reference-impl-sync.md b/.github/workflows/reference-impl-sync.md
similarity index 85%
rename from .github/workflows/weekly-reference-impl-sync.md
rename to .github/workflows/reference-impl-sync.md
index 1d1f9a4fd5..8e77f1a187 100644
--- a/.github/workflows/weekly-reference-impl-sync.md
+++ b/.github/workflows/reference-impl-sync.md
@@ -1,10 +1,10 @@
---
description: |
- Weekly reference implementation sync workflow. Checks for new commits in the official
+ Reference implementation sync workflow. Checks for new commits in the official
Copilot SDK (github/copilot-sdk) and assigns to Copilot to port changes.
on:
- schedule: weekly
+ schedule: daily
workflow_dispatch:
permissions:
@@ -24,7 +24,6 @@ tools:
safe-outputs:
create-issue:
title-prefix: "[reference-impl-sync] "
- assignees: [copilot-swe-agent]
labels: [reference-impl-sync]
expires: 6
close-issue:
@@ -41,7 +40,7 @@ safe-outputs:
noop:
report-as-issue: false
---
-# Weekly Reference Implementation Sync
+# Reference Implementation Sync
You are an automation agent that detects new reference implementation changes and creates GitHub issues. You do **NOT** perform any code merges, edits, or pushes. Do **NOT** invoke any skills (especially `agentic-merge-reference-impl`). Your only job is to check for changes and use safe-output tools to create or close issues.
@@ -105,7 +104,13 @@ Go to Step 3b.
### Instructions
- Follow the [agentic-merge-reference-impl](.github/prompts/agentic-merge-reference-impl.prompt.md) prompt to port these changes to the Java SDK.
+ **You MUST follow these steps in order. Do NOT improvise or skip scripts.**
+
+ 1. ✅✅Read [.github/prompts/agentic-merge-reference-impl.prompt.md](.github/prompts/agentic-merge-reference-impl.prompt.md) in full before starting✅✅
+
+ ❌❌Do NOT clone the reference implementation manually — the start script does this.❌❌
+ ❌❌Do NOT update .lastmerge manually — the finish script does this.❌❌
+ ❌❌Do NOT skip the finish script — it syncs codegen versions and updates .lastmerge.❌❌
```
4. After creating the issue, use the `assign_to_agent` safe-output tool to assign Copilot to the newly created issue.
diff --git a/.github/workflows/weekly-reference-impl-sync.yml b/.github/workflows/reference-impl-sync.yml
similarity index 93%
rename from .github/workflows/weekly-reference-impl-sync.yml
rename to .github/workflows/reference-impl-sync.yml
index aa3fc971ac..ab8225a2af 100644
--- a/.github/workflows/weekly-reference-impl-sync.yml
+++ b/.github/workflows/reference-impl-sync.yml
@@ -1,9 +1,9 @@
-name: "Weekly Reference Implementation Sync"
+name: "Reference Implementation Sync"
on:
schedule:
- # Every Monday at 10:00 UTC (5:00 AM EST / 6:00 AM EDT)
- - cron: '0 10 * * 1'
+ # Tuesday and Thursday at 10:00 UTC (5:00 AM EST / 6:00 AM EDT)
+ - cron: '0 10 * * 2,4'
workflow_dispatch:
permissions:
@@ -129,16 +129,16 @@ jobs:
Follow the [agentic-merge-reference-impl](.github/prompts/agentic-merge-reference-impl.prompt.md) prompt to port these changes to the Java SDK."
- # Create the issue and assign to Copilot coding agent
+ # Create the issue with the label; the Copilot coding agent picks up
+ # unassigned issues that carry the configured label.
ISSUE_URL=$(gh issue create \
--repo "$REPO" \
--title "Reference implementation sync: ${COMMIT_COUNT} new commits (${DATE})" \
--body "$BODY" \
- --label "reference-impl-sync" \
- --assignee "copilot-swe-agent")
+ --label "reference-impl-sync")
echo "issue_url=$ISSUE_URL" >> "$GITHUB_OUTPUT"
- echo "✅ Issue created and assigned to Copilot coding agent: $ISSUE_URL"
+ echo "✅ Issue created with label for Copilot coding agent: $ISSUE_URL"
- name: Summary
if: always()
@@ -152,7 +152,7 @@ jobs:
ISSUE_URL="iframe.php?url=https%3A%2F%2Fgithub.com%2F%24%7B%7B+steps.create-issue.outputs.issue_url+%7D%7D"
{
- echo "## Weekly Reference Implementation Sync"
+ echo "## Reference Implementation Sync"
echo ""
if [ "$HAS_CHANGES" = "true" ]; then
echo "### ✅ New reference implementation changes detected"
diff --git a/.gitignore b/.gitignore
index 35ea546f09..654d3278f8 100644
--- a/.gitignore
+++ b/.gitignore
@@ -13,3 +13,4 @@ changebundle.txt*
.settings
scripts/codegen/node_modules/
*~
+*.sln
diff --git a/.lastmerge b/.lastmerge
index caffac28be..4a35fe8da3 100644
--- a/.lastmerge
+++ b/.lastmerge
@@ -1 +1 @@
-dd2dcbc439256acfb9feb2cff07c0b9c820091b8
+c063458ecc3d606766f04cf203b11b08de672cc8
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 0d198ee218..b898011140 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -8,8 +8,11 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
## [Unreleased]
-> **Reference implementation sync:** [`github/copilot-sdk@dd2dcbc`](https://github.com/github/copilot-sdk/commit/dd2dcbc439256acfb9feb2cff07c0b9c820091b8)
+> **Reference implementation sync:** [`github/copilot-sdk@c063458`](https://github.com/github/copilot-sdk/commit/c063458ecc3d606766f04cf203b11b08de672cc8)
+
+## [1.0.0-beta-java.1] - 2026-05-05
+> **Reference implementation sync:** [`github/copilot-sdk@c063458`](https://github.com/github/copilot-sdk/commit/c063458ecc3d606766f04cf203b11b08de672cc8)
## [0.3.0-java.2] - 2026-04-26
> **Reference implementation sync:** [`github/copilot-sdk@dd2dcbc`](https://github.com/github/copilot-sdk/commit/dd2dcbc439256acfb9feb2cff07c0b9c820091b8)
@@ -503,7 +506,10 @@ New types: `GetForegroundSessionResponse`, `SetForegroundSessionResponse`
[0.3.0-java-preview.0]: https://github.com/github/copilot-sdk-java/compare/v0.2.2-java.1...v0.3.0-java-preview.0
[Unreleased]: https://github.com/github/copilot-sdk-java/compare/v0.3.0-java-preview.1...HEAD
[0.3.0-java-preview.1]: https://github.com/github/copilot-sdk-java/compare/v0.2.2-java.1...v0.3.0-java-preview.1
-[Unreleased]: https://github.com/github/copilot-sdk-java/compare/v0.3.0-java.2...HEAD
+[Unreleased]: https://github.com/github/copilot-sdk-java/compare/v1.0.0-beta-java.1...HEAD
+[1.0.0-beta-java.1]: https://github.com/github/copilot-sdk-java/compare/v0.3.0-java.2...v1.0.0-beta-java.1
+[Unreleased]: https://github.com/github/copilot-sdk-java/compare/v1.0.0-beta-java.1...HEAD
+[1.0.0-beta-java.1]: https://github.com/github/copilot-sdk-java/compare/v0.3.0-java.2...v1.0.0-beta-java.1
[0.3.0-java.2]: https://github.com/github/copilot-sdk-java/compare/v0.2.2-java.1...v0.3.0-java.2
[0.2.2-java.1]: https://github.com/github/copilot-sdk-java/compare/v0.2.1-java.1...v0.2.2-java.1
[Unreleased]: https://github.com/github/copilot-sdk-java/compare/v0.3.0-java-preview.0...HEAD
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index f86976c01f..38f2def77c 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -38,7 +38,9 @@ If you have ideas for entirely new features, please post an issue or start a dis
1. Push to your fork and [submit a pull request][pr]
1. Pat yourself on the back and wait for your pull request to be reviewed and merged.
-### Running tests and linters
+### Running locally, including tests and linters
+
+The POM has logic to ensure a known correct installation of Copilot CLI is used when executing the tests. If you want to test against a different installation of Copilot CLI, set the value of the `copilot.cli.path` maven property to the fully qualified path to the Copilot CLI.
```bash
# Build and run all tests
@@ -54,6 +56,22 @@ mvn spotless:apply
mvn spotless:check
```
+## Running the known correct Copilot CLI installation
+
+### POSIX
+
+```bash
+export COPILOT_CLI_PATH="$(find "$PWD/target" -type f -path '*/nodejs/node_modules/@github/copilot/index.js' | head -n 1)"
+node ${COPILOT_CLI_PATH}
+```
+
+### PowerShell
+
+```PowerShell
+$env:COPILOT_CLI_PATH = (Get-ChildItem -Path "$PWD\target" -Recurse -Filter 'index.js' -File | Where-Object { $_.FullName -match '[\\/]nodejs[\\/]node_modules[\\/]@github[\\/]copilot[\\/]index\.js$' } | Select-Object -First 1 -ExpandProperty FullName)
+node $env:COPILOT_CLI_PATH
+```
+
Here are a few things you can do that will increase the likelihood of your pull request being accepted:
- Write tests.
diff --git a/README.md b/README.md
index f5658f3d6f..b1de3e2c97 100644
--- a/README.md
+++ b/README.md
@@ -33,7 +33,7 @@ Java SDK for programmatic control of GitHub Copilot CLI, enabling you to build A
com.githubcopilot-sdk-java
- 0.3.0-java.2
+ 1.0.0-beta-java.1
```
@@ -53,14 +53,14 @@ Snapshot builds of the next development version are published to Maven Central S
com.githubcopilot-sdk-java
- 0.3.1-java.1-SNAPSHOT
+ 1.0.0-java.1-SNAPSHOT
```
### Gradle
```groovy
-implementation 'com.github:copilot-sdk-java:0.3.0-java.2'
+implementation 'com.github:copilot-sdk-java:1.0.0-beta-java.1'
```
## Quick Start
@@ -165,7 +165,7 @@ Contributions are welcome! Please see the [Contributing Guide](CONTRIBUTING.md)
This SDK tracks the official [Copilot SDK](https://github.com/github/copilot-sdk) (.NET reference implementation) and ports changes to Java. The reference implementation merge process is automated with AI assistance:
-**Weekly automated sync** — A [scheduled GitHub Actions workflow](.github/workflows/weekly-reference-impl-sync.yml) runs every Monday at 5 AM ET. It checks for new reference implementation commits since the last merge (tracked in [`.lastmerge`](.lastmerge)), and if changes are found, creates an issue labeled `reference-impl-sync` and assigns it to the GitHub Copilot coding agent. Any previously open `reference-impl-sync` issues are automatically closed.
+**Automated sync** — A [scheduled GitHub Actions workflow](.github/workflows/reference-impl-sync.yml) runs on the schedule specified in that file. It checks for new reference implementation commits since the last merge (tracked in [`.lastmerge`](.lastmerge)), and if changes are found, creates an issue labeled `reference-impl-sync` and assigns it to the GitHub Copilot coding agent. Any previously open `reference-impl-sync` issues are automatically closed. The sync also updates the `@github/copilot` version in both `pom.xml` and `scripts/codegen/package.json` to keep schemas and test CLI in lockstep.
**Reusable prompt** — The merge workflow is defined in [`agentic-merge-reference-impl.prompt.md`](.github/prompts/agentic-merge-reference-impl.prompt.md). It can be triggered manually from:
- **VS Code Copilot Chat** — type `/agentic-merge-reference-impl`
diff --git a/docs/WORKFLOWS.md b/docs/WORKFLOWS.md
index 3df254890c..9dd3833d1b 100644
--- a/docs/WORKFLOWS.md
+++ b/docs/WORKFLOWS.md
@@ -6,11 +6,11 @@
|----------|-------------|----------|----------|
| [Build & Test](workflows/build-test.yml) | Builds, lints, and tests the Java SDK | `push` (main), `pull_request`, `merge_group`, `workflow_dispatch` | Sundays at 00:00 UTC |
| [Codegen Check](workflows/codegen-check.yml) | Verifies that generated Java files are up-to-date with the JSON schemas | `push` (main), `pull_request`, `workflow_dispatch` | — |
-| [Update @github/copilot Dependency](workflows/update-copilot-dependency.yml) | Updates the `@github/copilot` npm package, re-runs code generation, and opens a PR | `workflow_dispatch` | — |
+| [Update @github/copilot Dependency](workflows/update-copilot-dependency.yml) | _(Codegen-only)_ Updates the `@github/copilot` npm package in `scripts/codegen`, re-runs code generation, and opens a PR. Does **not** update `pom.xml`; use the Reference Implementation Sync for full version alignment. | `workflow_dispatch` | — |
| [Deploy Documentation](workflows/deploy-site.yml) | Generates and deploys versioned docs to GitHub Pages | `workflow_run` (after Build & Test), `release`, `workflow_dispatch` | — |
| [Publish to Maven Central](workflows/publish-maven.yml) | Releases the SDK to Maven Central and creates a GitHub Release | `workflow_dispatch` | — |
-| [Weekly Reference Implementation Sync](workflows/weekly-reference-impl-sync.yml) | Checks for new reference implementation commits and creates an issue for Copilot to merge | `workflow_dispatch` | Mondays at 10:00 UTC |
-| [Weekly Reference Implementation Sync (Agentic)](workflows/weekly-reference-impl-sync.lock.yml) | Compiled agentic workflow that executes the reference implementation sync via `gh-aw` | `workflow_dispatch` | Tuesdays at 08:39 UTC (scattered) |
+| [Reference Implementation Sync](workflows/reference-impl-sync.yml) | Checks for new reference implementation commits and creates an issue for Copilot to merge | `workflow_dispatch` | [See workflow](workflows/reference-impl-sync.yml) |
+| [Reference Implementation Sync (Agentic)](workflows/reference-impl-sync.lock.yml) | Compiled agentic workflow that executes the reference implementation sync via `gh-aw` | `workflow_dispatch` | [See workflow](workflows/reference-impl-sync.lock.yml) |
| [Copilot Setup Steps](workflows/copilot-setup-steps.yml) | Configures the environment for the GitHub Copilot coding agent | `push` (on self-change), `workflow_dispatch` | — |
---
@@ -64,11 +64,11 @@ Manual-only workflow that performs a full release:
---
-## Weekly Reference Implementation Sync
+## Reference Implementation Sync
-**File:** [`weekly-reference-impl-sync.yml`](workflows/weekly-reference-impl-sync.yml)
+**File:** [`reference-impl-sync.yml`](workflows/reference-impl-sync.yml)
-Runs every Monday at 10:00 UTC. Clones the official `github/copilot-sdk` repository and compares `HEAD` against the commit hash stored in `.lastmerge`.
+Runs on the schedule specified in [`.github/workflows/reference-impl-sync.yml`](workflows/reference-impl-sync.yml). Clones the official `github/copilot-sdk` repository and compares `HEAD` against the commit hash stored in `.lastmerge`.
If new commits are found:
1. Closes any previously open `reference-impl-sync` issues
@@ -79,9 +79,9 @@ If no changes are found, any stale open `reference-impl-sync` issues are closed.
---
-## Weekly Reference Implementation Sync (Agentic Workflow: Experimental)
+## Reference Implementation Sync (Agentic Workflow: Experimental)
-**File:** [`weekly-reference-impl-sync.lock.yml`](workflows/weekly-reference-impl-sync.lock.yml)
+**File:** [`reference-impl-sync.lock.yml`](workflows/reference-impl-sync.lock.yml)
Auto-generated compiled workflow produced by `gh aw compile` from the corresponding `.md` source. This is the agentic counterpart that actually executes the reference implementation merge using the `gh-aw` MCP server and Copilot coding agent.
@@ -113,6 +113,8 @@ If changes appear, commit the updated generated files.
**File:** [`update-copilot-dependency.yml`](workflows/update-copilot-dependency.yml)
+> **Note:** This workflow is for codegen-only updates to `scripts/codegen`. It does **not** update `pom.xml`. For full version alignment (both CLI and codegen in lockstep), use the **Reference Implementation Sync** workflow instead.
+
Manual workflow triggered when a new version of the `@github/copilot` npm package is published. Accepts a `version` input (e.g. `1.0.25`).
Steps:
diff --git a/jbang-example.java b/jbang-example.java
index 4b711ba735..0fb94c9c08 100644
--- a/jbang-example.java
+++ b/jbang-example.java
@@ -1,5 +1,5 @@
-!
-//DEPS com.github:copilot-sdk-java:0.3.0-java.2
+///usr/bin/env jbang "$0" "$@" ; exit $?
+//DEPS com.github:copilot-sdk-java:1.0.0-beta-java.1
import com.github.copilot.sdk.CopilotClient;
import com.github.copilot.sdk.generated.AssistantMessageEvent;
import com.github.copilot.sdk.generated.SessionUsageInfoEvent;
diff --git a/pom.xml b/pom.xml
index 5abdefcbff..91686a2709 100644
--- a/pom.xml
+++ b/pom.xml
@@ -7,7 +7,7 @@
com.githubcopilot-sdk-java
- 0.3.0-java.2
+ 1.0.0-beta-java.1jarGitHub Copilot SDK :: Java
@@ -33,7 +33,7 @@
scm:git:https://github.com/github/copilot-sdk-java.gitscm:git:https://github.com/github/copilot-sdk-java.githttps://github.com/github/copilot-sdk-java
- v0.3.0-java.2
+ v1.0.0-beta-java.1
@@ -49,10 +49,53 @@
${project.build.directory}/copilot-sdk${copilot.sdk.clone.dir}/test
+
+ ${copilot.sdk.clone.dir}/nodejs/node_modules/@github/copilot/index.jsfalse
+
+ ${skip.test.harness}
+
+ ^1.0.41-0
+
@@ -60,7 +103,7 @@
com.fasterxml.jackson.corejackson-databind
- 2.21.2
+ 2.21.3com.fasterxml.jackson.core
@@ -70,7 +113,7 @@
com.fasterxml.jackson.datatypejackson-datatype-jsr310
- 2.21.2
+ 2.21.3
@@ -85,7 +128,7 @@
org.junit.jupiterjunit-jupiter
- 5.14.3
+ 5.14.4test
@@ -240,6 +283,35 @@
+
+
+ install-nodejs-cli-dependencies
+ generate-test-resources
+
+ exec
+
+
+ ${skip.cli.install}
+ npm
+ ${copilot.sdk.clone.dir}/nodejs
+
+ ci
+ --ignore-scripts
+
+
+
@@ -253,6 +325,15 @@
${copilot.tests.dir}${copilot.sdk.clone.dir}
+
+
+ ${copilot.cli.path}
+
@@ -587,6 +668,39 @@
true
+
+
+ skip-cli-install-when-tests-skipped
+
+
+ skipTests
+ true
+
+
+
+ true
+
+
+
+
+ skip-cli-install-when-maven-test-skip
+
+
+ maven.test.skip
+ true
+
+
+
+ true
+
+ debug
diff --git a/scripts/codegen/package-lock.json b/scripts/codegen/package-lock.json
index 682b30bc66..b45b9c668a 100644
--- a/scripts/codegen/package-lock.json
+++ b/scripts/codegen/package-lock.json
@@ -6,7 +6,7 @@
"": {
"name": "copilot-sdk-java-codegen",
"dependencies": {
- "@github/copilot": "^1.0.36",
+ "@github/copilot": "^1.0.41-0",
"json-schema": "^0.4.0",
"tsx": "^4.20.6"
}
@@ -428,26 +428,26 @@
}
},
"node_modules/@github/copilot": {
- "version": "1.0.36",
- "resolved": "https://registry.npmjs.org/@github/copilot/-/copilot-1.0.36.tgz",
- "integrity": "sha512-x0N5wLzw+tANzb+vCFYLHn3BV3qii2oyn14wC20RO7SsS8/YeBH8olvwlDLJ4PB0mL17QOiytNCdkvjvprm28w==",
+ "version": "1.0.41-0",
+ "resolved": "https://registry.npmjs.org/@github/copilot/-/copilot-1.0.41-0.tgz",
+ "integrity": "sha512-gLyCadBZdJeJtHJI3XdN8wAmLMEUdXfCa3EcVnbdbV1NHZDAJhr7h41l7a49pqRAmJyLUKlk1Lokk7U+OD3tgw==",
"license": "SEE LICENSE IN LICENSE.md",
"bin": {
"copilot": "npm-loader.js"
},
"optionalDependencies": {
- "@github/copilot-darwin-arm64": "1.0.36",
- "@github/copilot-darwin-x64": "1.0.36",
- "@github/copilot-linux-arm64": "1.0.36",
- "@github/copilot-linux-x64": "1.0.36",
- "@github/copilot-win32-arm64": "1.0.36",
- "@github/copilot-win32-x64": "1.0.36"
+ "@github/copilot-darwin-arm64": "1.0.41-0",
+ "@github/copilot-darwin-x64": "1.0.41-0",
+ "@github/copilot-linux-arm64": "1.0.41-0",
+ "@github/copilot-linux-x64": "1.0.41-0",
+ "@github/copilot-win32-arm64": "1.0.41-0",
+ "@github/copilot-win32-x64": "1.0.41-0"
}
},
"node_modules/@github/copilot-darwin-arm64": {
- "version": "1.0.36",
- "resolved": "https://registry.npmjs.org/@github/copilot-darwin-arm64/-/copilot-darwin-arm64-1.0.36.tgz",
- "integrity": "sha512-5qkb7frTS4K/LdTDLrzKo78VR4aw/EZ6JzLz4KfmaW4UYyPiNirExDFXa/By22X0o8YMfOp4MCA2KSCAxKdgTg==",
+ "version": "1.0.41-0",
+ "resolved": "https://registry.npmjs.org/@github/copilot-darwin-arm64/-/copilot-darwin-arm64-1.0.41-0.tgz",
+ "integrity": "sha512-lrrH1oMbTOF1W/YxH6rvoEHOymxmXaMx4aDzm190hU0Yh6Cuu0BJGFvgG8nE9bqcv5O8W7eEBr26jDlGtnZiwg==",
"cpu": [
"arm64"
],
@@ -461,9 +461,9 @@
}
},
"node_modules/@github/copilot-darwin-x64": {
- "version": "1.0.36",
- "resolved": "https://registry.npmjs.org/@github/copilot-darwin-x64/-/copilot-darwin-x64-1.0.36.tgz",
- "integrity": "sha512-AdsM8QtM5QSzMLpavLREh8HALO5G+VWzGNQqIHu4f0YQC/s1cGoiwo3wsgkpxRcLGBykFc+bDX3yK3MDQ8XvSw==",
+ "version": "1.0.41-0",
+ "resolved": "https://registry.npmjs.org/@github/copilot-darwin-x64/-/copilot-darwin-x64-1.0.41-0.tgz",
+ "integrity": "sha512-4418VtSSkEgn4BcwCFg+0UDhGCfQgGTx16r/PiWbuUOgIBzts3FfVzWMWTuXyxk7kl2Ib8k7KSd/7rNpjcrzBw==",
"cpu": [
"x64"
],
@@ -477,9 +477,9 @@
}
},
"node_modules/@github/copilot-linux-arm64": {
- "version": "1.0.36",
- "resolved": "https://registry.npmjs.org/@github/copilot-linux-arm64/-/copilot-linux-arm64-1.0.36.tgz",
- "integrity": "sha512-n7K1I6r0ggOJ4A9uAMS11USTvn6BKtAwvrOkzEaeRK89VNUJzpTe6p0mE13ItzRe5eot9WLBQOxvXLtL9f6E+g==",
+ "version": "1.0.41-0",
+ "resolved": "https://registry.npmjs.org/@github/copilot-linux-arm64/-/copilot-linux-arm64-1.0.41-0.tgz",
+ "integrity": "sha512-5xjgp3Ak5QJ68byNbsgBpdK1V6T5t8EGu0pUwEJMNMMXxqvL9f7gPcnCGdTtV2DS4Q3adkziV/gpBSSQ5HY8hg==",
"cpu": [
"arm64"
],
@@ -493,9 +493,9 @@
}
},
"node_modules/@github/copilot-linux-x64": {
- "version": "1.0.36",
- "resolved": "https://registry.npmjs.org/@github/copilot-linux-x64/-/copilot-linux-x64-1.0.36.tgz",
- "integrity": "sha512-wBtCdR3ITZcq07BJbkwHfwI6ayiwbH5pF1ex+Ycl4UI+Lf1vP9eQD6wJppPgsrjwFcdeWRThaYTPCRTkSGHv5g==",
+ "version": "1.0.41-0",
+ "resolved": "https://registry.npmjs.org/@github/copilot-linux-x64/-/copilot-linux-x64-1.0.41-0.tgz",
+ "integrity": "sha512-oWPkj0bSjBjtAqonMEZD7EuSByBNXwtceMw8y7uGOfs6jQXfhDGzCCB6NGb+lcftVNtWDKFCUtx+x8Fbt4O37w==",
"cpu": [
"x64"
],
@@ -509,9 +509,9 @@
}
},
"node_modules/@github/copilot-win32-arm64": {
- "version": "1.0.36",
- "resolved": "https://registry.npmjs.org/@github/copilot-win32-arm64/-/copilot-win32-arm64-1.0.36.tgz",
- "integrity": "sha512-0GzZUZQn07alI8BgbzK0NlR5+ta/Rd0sWmd8kbRCns7oybAIkSALy6BKVwJmVHtXUi6h4iUE8oiFhkn0spymvw==",
+ "version": "1.0.41-0",
+ "resolved": "https://registry.npmjs.org/@github/copilot-win32-arm64/-/copilot-win32-arm64-1.0.41-0.tgz",
+ "integrity": "sha512-MaPg4tFWTiRuyv+j0ymJbZp8UPK+RIXNMpekR7FRf8/Uz+NiJgTTxTDjFi4ytRJU5UNrUezkVAk5Xduq/CaIew==",
"cpu": [
"arm64"
],
@@ -525,9 +525,9 @@
}
},
"node_modules/@github/copilot-win32-x64": {
- "version": "1.0.36",
- "resolved": "https://registry.npmjs.org/@github/copilot-win32-x64/-/copilot-win32-x64-1.0.36.tgz",
- "integrity": "sha512-UBX9qj0McCK/SLq93XIr1i80fj3b3XmE3befVFrzxQuTeOoxLURN35vi7W+4x+4ZfsDHQpRTlJNjZw9w0fPr+Q==",
+ "version": "1.0.41-0",
+ "resolved": "https://registry.npmjs.org/@github/copilot-win32-x64/-/copilot-win32-x64-1.0.41-0.tgz",
+ "integrity": "sha512-ykRuDWjJEgSywMFJl1yaefssaklCVSVhprx2NcSVh6tIGupvvzVAM6nL6Mj6nyKpG6FKGHanedBeL6SJc935cw==",
"cpu": [
"x64"
],
diff --git a/scripts/codegen/package.json b/scripts/codegen/package.json
index 1b540376e1..d146fd945b 100644
--- a/scripts/codegen/package.json
+++ b/scripts/codegen/package.json
@@ -7,7 +7,7 @@
"generate:java": "tsx java.ts"
},
"dependencies": {
- "@github/copilot": "^1.0.36",
+ "@github/copilot": "^1.0.41-0",
"json-schema": "^0.4.0",
"tsx": "^4.20.6"
}
diff --git a/src/generated/java/com/github/copilot/sdk/generated/AssistantMessageEvent.java b/src/generated/java/com/github/copilot/sdk/generated/AssistantMessageEvent.java
index a6d75a8f65..2ff43e67a8 100644
--- a/src/generated/java/com/github/copilot/sdk/generated/AssistantMessageEvent.java
+++ b/src/generated/java/com/github/copilot/sdk/generated/AssistantMessageEvent.java
@@ -56,6 +56,8 @@ public record AssistantMessageEventData(
@JsonProperty("interactionId") String interactionId,
/** GitHub request tracing ID (x-github-request-id header) for correlating with server-side logs */
@JsonProperty("requestId") String requestId,
+ /** Identifier for the agent loop turn that produced this message, matching the corresponding assistant.turn_start event */
+ @JsonProperty("turnId") String turnId,
/** Tool call ID of the parent tool invocation when this event originates from a sub-agent */
@JsonProperty("parentToolCallId") String parentToolCallId
) {
diff --git a/src/generated/java/com/github/copilot/sdk/generated/AssistantMessageStartEvent.java b/src/generated/java/com/github/copilot/sdk/generated/AssistantMessageStartEvent.java
new file mode 100644
index 0000000000..8cf1a9c8e7
--- /dev/null
+++ b/src/generated/java/com/github/copilot/sdk/generated/AssistantMessageStartEvent.java
@@ -0,0 +1,44 @@
+/*---------------------------------------------------------------------------------------------
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ *--------------------------------------------------------------------------------------------*/
+
+// AUTO-GENERATED FILE - DO NOT EDIT
+// Generated from: session-events.schema.json
+
+package com.github.copilot.sdk.generated;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import javax.annotation.processing.Generated;
+
+/**
+ * The {@code assistant.message_start} session event.
+ *
+ * @since 1.0.0
+ */
+@JsonIgnoreProperties(ignoreUnknown = true)
+@JsonInclude(JsonInclude.Include.NON_NULL)
+@javax.annotation.processing.Generated("copilot-sdk-codegen")
+public final class AssistantMessageStartEvent extends SessionEvent {
+
+ @Override
+ public String getType() { return "assistant.message_start"; }
+
+ @JsonProperty("data")
+ private AssistantMessageStartEventData data;
+
+ public AssistantMessageStartEventData getData() { return data; }
+ public void setData(AssistantMessageStartEventData data) { this.data = data; }
+
+ /** Data payload for {@link AssistantMessageStartEvent}. */
+ @JsonIgnoreProperties(ignoreUnknown = true)
+ @JsonInclude(JsonInclude.Include.NON_NULL)
+ public record AssistantMessageStartEventData(
+ /** Message ID this start event belongs to, matching subsequent deltas and assistant.message */
+ @JsonProperty("messageId") String messageId,
+ /** Generation phase this message belongs to for phased-output models */
+ @JsonProperty("phase") String phase
+ ) {
+ }
+}
diff --git a/src/generated/java/com/github/copilot/sdk/generated/AssistantUsageCopilotUsage.java b/src/generated/java/com/github/copilot/sdk/generated/AssistantUsageCopilotUsage.java
index 4bb8aa92c6..ee3e9f9cfb 100644
--- a/src/generated/java/com/github/copilot/sdk/generated/AssistantUsageCopilotUsage.java
+++ b/src/generated/java/com/github/copilot/sdk/generated/AssistantUsageCopilotUsage.java
@@ -24,7 +24,7 @@
public record AssistantUsageCopilotUsage(
/** Itemized token usage breakdown */
@JsonProperty("tokenDetails") List tokenDetails,
- /** Total cost in nano-AIU (AI Units) for this request */
+ /** Total cost in nano-AI units for this request */
@JsonProperty("totalNanoAiu") Double totalNanoAiu
) {
}
diff --git a/src/generated/java/com/github/copilot/sdk/generated/AutoModeSwitchRequestedEvent.java b/src/generated/java/com/github/copilot/sdk/generated/AutoModeSwitchRequestedEvent.java
index 8ad1a2da82..e234ccd287 100644
--- a/src/generated/java/com/github/copilot/sdk/generated/AutoModeSwitchRequestedEvent.java
+++ b/src/generated/java/com/github/copilot/sdk/generated/AutoModeSwitchRequestedEvent.java
@@ -38,7 +38,9 @@ public record AutoModeSwitchRequestedEventData(
/** Unique identifier for this request; used to respond via session.respondToAutoModeSwitch() */
@JsonProperty("requestId") String requestId,
/** The rate limit error code that triggered this request */
- @JsonProperty("errorCode") String errorCode
+ @JsonProperty("errorCode") String errorCode,
+ /** Seconds until the rate limit resets, when known. Lets clients render a humanized reset time alongside the prompt. */
+ @JsonProperty("retryAfterSeconds") Double retryAfterSeconds
) {
}
}
diff --git a/src/generated/java/com/github/copilot/sdk/generated/CompactionCompleteCompactionTokensUsedCopilotUsage.java b/src/generated/java/com/github/copilot/sdk/generated/CompactionCompleteCompactionTokensUsedCopilotUsage.java
index 7e02e4f778..76e5a0ed8f 100644
--- a/src/generated/java/com/github/copilot/sdk/generated/CompactionCompleteCompactionTokensUsedCopilotUsage.java
+++ b/src/generated/java/com/github/copilot/sdk/generated/CompactionCompleteCompactionTokensUsedCopilotUsage.java
@@ -24,7 +24,7 @@
public record CompactionCompleteCompactionTokensUsedCopilotUsage(
/** Itemized token usage breakdown */
@JsonProperty("tokenDetails") List tokenDetails,
- /** Total cost in nano-AIU (AI Units) for this request */
+ /** Total cost in nano-AI units for this request */
@JsonProperty("totalNanoAiu") Double totalNanoAiu
) {
}
diff --git a/src/generated/java/com/github/copilot/sdk/generated/McpOauthRequiredStaticClientConfig.java b/src/generated/java/com/github/copilot/sdk/generated/McpOauthRequiredStaticClientConfig.java
index b8c0dd93d5..b037b82ac5 100644
--- a/src/generated/java/com/github/copilot/sdk/generated/McpOauthRequiredStaticClientConfig.java
+++ b/src/generated/java/com/github/copilot/sdk/generated/McpOauthRequiredStaticClientConfig.java
@@ -24,6 +24,8 @@ public record McpOauthRequiredStaticClientConfig(
/** OAuth client ID for the server */
@JsonProperty("clientId") String clientId,
/** Whether this is a public OAuth client */
- @JsonProperty("publicClient") Boolean publicClient
+ @JsonProperty("publicClient") Boolean publicClient,
+ /** Optional non-default OAuth grant type. When set to 'client_credentials', the OAuth flow runs headlessly using the client_id + keychain-stored secret (no browser, no callback server). */
+ @JsonProperty("grantType") String grantType
) {
}
diff --git a/src/generated/java/com/github/copilot/sdk/generated/ModelCallFailureEvent.java b/src/generated/java/com/github/copilot/sdk/generated/ModelCallFailureEvent.java
new file mode 100644
index 0000000000..939e49ef55
--- /dev/null
+++ b/src/generated/java/com/github/copilot/sdk/generated/ModelCallFailureEvent.java
@@ -0,0 +1,56 @@
+/*---------------------------------------------------------------------------------------------
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ *--------------------------------------------------------------------------------------------*/
+
+// AUTO-GENERATED FILE - DO NOT EDIT
+// Generated from: session-events.schema.json
+
+package com.github.copilot.sdk.generated;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import javax.annotation.processing.Generated;
+
+/**
+ * The {@code model.call_failure} session event.
+ *
+ * @since 1.0.0
+ */
+@JsonIgnoreProperties(ignoreUnknown = true)
+@JsonInclude(JsonInclude.Include.NON_NULL)
+@javax.annotation.processing.Generated("copilot-sdk-codegen")
+public final class ModelCallFailureEvent extends SessionEvent {
+
+ @Override
+ public String getType() { return "model.call_failure"; }
+
+ @JsonProperty("data")
+ private ModelCallFailureEventData data;
+
+ public ModelCallFailureEventData getData() { return data; }
+ public void setData(ModelCallFailureEventData data) { this.data = data; }
+
+ /** Data payload for {@link ModelCallFailureEvent}. */
+ @JsonIgnoreProperties(ignoreUnknown = true)
+ @JsonInclude(JsonInclude.Include.NON_NULL)
+ public record ModelCallFailureEventData(
+ /** Model identifier used for the failed API call */
+ @JsonProperty("model") String model,
+ /** What initiated this API call (e.g., "sub-agent", "mcp-sampling"); absent for user-initiated calls */
+ @JsonProperty("initiator") String initiator,
+ /** Completion ID from the model provider (e.g., chatcmpl-abc123) */
+ @JsonProperty("apiCallId") String apiCallId,
+ /** GitHub request tracing ID (x-github-request-id header) for server-side log correlation */
+ @JsonProperty("providerCallId") String providerCallId,
+ /** HTTP status code from the failed request */
+ @JsonProperty("statusCode") Long statusCode,
+ /** Duration of the failed API call in milliseconds */
+ @JsonProperty("durationMs") Double durationMs,
+ /** Where the failed model call originated */
+ @JsonProperty("source") ModelCallFailureSource source,
+ /** Raw provider/runtime error message for restricted telemetry */
+ @JsonProperty("errorMessage") String errorMessage
+ ) {
+ }
+}
diff --git a/src/generated/java/com/github/copilot/sdk/generated/ModelCallFailureSource.java b/src/generated/java/com/github/copilot/sdk/generated/ModelCallFailureSource.java
new file mode 100644
index 0000000000..469adaab43
--- /dev/null
+++ b/src/generated/java/com/github/copilot/sdk/generated/ModelCallFailureSource.java
@@ -0,0 +1,37 @@
+/*---------------------------------------------------------------------------------------------
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ *--------------------------------------------------------------------------------------------*/
+
+// AUTO-GENERATED FILE - DO NOT EDIT
+// Generated from: session-events.schema.json
+
+package com.github.copilot.sdk.generated;
+
+import javax.annotation.processing.Generated;
+
+/**
+ * Where the failed model call originated
+ *
+ * @since 1.0.0
+ */
+@javax.annotation.processing.Generated("copilot-sdk-codegen")
+public enum ModelCallFailureSource {
+ /** The {@code top_level} variant. */
+ TOP_LEVEL("top_level"),
+ /** The {@code subagent} variant. */
+ SUBAGENT("subagent"),
+ /** The {@code mcp_sampling} variant. */
+ MCP_SAMPLING("mcp_sampling");
+
+ private final String value;
+ ModelCallFailureSource(String value) { this.value = value; }
+ @com.fasterxml.jackson.annotation.JsonValue
+ public String getValue() { return value; }
+ @com.fasterxml.jackson.annotation.JsonCreator
+ public static ModelCallFailureSource fromValue(String value) {
+ for (ModelCallFailureSource v : values()) {
+ if (v.value.equals(value)) return v;
+ }
+ throw new IllegalArgumentException("Unknown ModelCallFailureSource value: " + value);
+ }
+}
diff --git a/src/generated/java/com/github/copilot/sdk/generated/PermissionCompletedEvent.java b/src/generated/java/com/github/copilot/sdk/generated/PermissionCompletedEvent.java
index 0045393c1a..0b8da105e2 100644
--- a/src/generated/java/com/github/copilot/sdk/generated/PermissionCompletedEvent.java
+++ b/src/generated/java/com/github/copilot/sdk/generated/PermissionCompletedEvent.java
@@ -40,7 +40,7 @@ public record PermissionCompletedEventData(
/** Optional tool call ID associated with this permission prompt; clients may use it to correlate UI created from tool-scoped prompts */
@JsonProperty("toolCallId") String toolCallId,
/** The result of the permission request */
- @JsonProperty("result") PermissionCompletedResult result
+ @JsonProperty("result") Object result
) {
}
}
diff --git a/src/generated/java/com/github/copilot/sdk/generated/SessionErrorEvent.java b/src/generated/java/com/github/copilot/sdk/generated/SessionErrorEvent.java
index 33dc688348..ecb85aacf0 100644
--- a/src/generated/java/com/github/copilot/sdk/generated/SessionErrorEvent.java
+++ b/src/generated/java/com/github/copilot/sdk/generated/SessionErrorEvent.java
@@ -37,6 +37,10 @@ public final class SessionErrorEvent extends SessionEvent {
public record SessionErrorEventData(
/** Category of error (e.g., "authentication", "authorization", "quota", "rate_limit", "context_limit", "query") */
@JsonProperty("errorType") String errorType,
+ /** Fine-grained error code from the upstream provider, when available. For `errorType: "rate_limit"`, this is one of the `RateLimitErrorCode` values (e.g., `"user_weekly_rate_limited"`, `"user_global_rate_limited"`, `"rate_limited"`, `"user_model_rate_limited"`, `"integration_rate_limited"`). */
+ @JsonProperty("errorCode") String errorCode,
+ /** Only set on `errorType: "rate_limit"`. When `true`, the runtime will follow this error with an `auto_mode_switch.requested` event (or silently switch if `continueOnAutoMode` is enabled). UI clients can use this flag to suppress duplicate rendering of the rate-limit error when they show their own auto-mode-switch prompt. */
+ @JsonProperty("eligibleForAutoSwitch") Boolean eligibleForAutoSwitch,
/** Human-readable error message */
@JsonProperty("message") String message,
/** Error stack trace, when available */
diff --git a/src/generated/java/com/github/copilot/sdk/generated/SessionEvent.java b/src/generated/java/com/github/copilot/sdk/generated/SessionEvent.java
index 85c62a2418..02364db4f3 100644
--- a/src/generated/java/com/github/copilot/sdk/generated/SessionEvent.java
+++ b/src/generated/java/com/github/copilot/sdk/generated/SessionEvent.java
@@ -54,9 +54,11 @@
@JsonSubTypes.Type(value = AssistantReasoningDeltaEvent.class, name = "assistant.reasoning_delta"),
@JsonSubTypes.Type(value = AssistantStreamingDeltaEvent.class, name = "assistant.streaming_delta"),
@JsonSubTypes.Type(value = AssistantMessageEvent.class, name = "assistant.message"),
+ @JsonSubTypes.Type(value = AssistantMessageStartEvent.class, name = "assistant.message_start"),
@JsonSubTypes.Type(value = AssistantMessageDeltaEvent.class, name = "assistant.message_delta"),
@JsonSubTypes.Type(value = AssistantTurnEndEvent.class, name = "assistant.turn_end"),
@JsonSubTypes.Type(value = AssistantUsageEvent.class, name = "assistant.usage"),
+ @JsonSubTypes.Type(value = ModelCallFailureEvent.class, name = "model.call_failure"),
@JsonSubTypes.Type(value = AbortEvent.class, name = "abort"),
@JsonSubTypes.Type(value = ToolUserRequestedEvent.class, name = "tool.user_requested"),
@JsonSubTypes.Type(value = ToolExecutionStartEvent.class, name = "tool.execution_start"),
@@ -133,9 +135,11 @@ public abstract sealed class SessionEvent permits
AssistantReasoningDeltaEvent,
AssistantStreamingDeltaEvent,
AssistantMessageEvent,
+ AssistantMessageStartEvent,
AssistantMessageDeltaEvent,
AssistantTurnEndEvent,
AssistantUsageEvent,
+ ModelCallFailureEvent,
AbortEvent,
ToolUserRequestedEvent,
ToolExecutionStartEvent,
diff --git a/src/generated/java/com/github/copilot/sdk/generated/SessionInfoEvent.java b/src/generated/java/com/github/copilot/sdk/generated/SessionInfoEvent.java
index 4dee36ba5c..01c1e0efbe 100644
--- a/src/generated/java/com/github/copilot/sdk/generated/SessionInfoEvent.java
+++ b/src/generated/java/com/github/copilot/sdk/generated/SessionInfoEvent.java
@@ -40,7 +40,9 @@ public record SessionInfoEventData(
/** Human-readable informational message for display in the timeline */
@JsonProperty("message") String message,
/** Optional URL associated with this message that the user can open in a browser */
- @JsonProperty("url") String url
+ @JsonProperty("url") String url,
+ /** Optional actionable tip displayed with this message */
+ @JsonProperty("tip") String tip
) {
}
}
diff --git a/src/generated/java/com/github/copilot/sdk/generated/SessionModelChangeEvent.java b/src/generated/java/com/github/copilot/sdk/generated/SessionModelChangeEvent.java
index c23c8a5f50..812cff0e81 100644
--- a/src/generated/java/com/github/copilot/sdk/generated/SessionModelChangeEvent.java
+++ b/src/generated/java/com/github/copilot/sdk/generated/SessionModelChangeEvent.java
@@ -42,7 +42,9 @@ public record SessionModelChangeEventData(
/** Reasoning effort level before the model change, if applicable */
@JsonProperty("previousReasoningEffort") String previousReasoningEffort,
/** Reasoning effort level after the model change, if applicable */
- @JsonProperty("reasoningEffort") String reasoningEffort
+ @JsonProperty("reasoningEffort") String reasoningEffort,
+ /** Reason the change happened, when not user-initiated. Currently `"rate_limit_auto_switch"` for changes triggered by the auto-mode-switch rate-limit recovery path. UI clients can use this to render contextual copy. */
+ @JsonProperty("cause") String cause
) {
}
}
diff --git a/src/generated/java/com/github/copilot/sdk/generated/SessionResumeEvent.java b/src/generated/java/com/github/copilot/sdk/generated/SessionResumeEvent.java
index 7973e7d17c..31bd3b4c36 100644
--- a/src/generated/java/com/github/copilot/sdk/generated/SessionResumeEvent.java
+++ b/src/generated/java/com/github/copilot/sdk/generated/SessionResumeEvent.java
@@ -48,8 +48,12 @@ public record SessionResumeEventData(
@JsonProperty("context") WorkingDirectoryContext context,
/** Whether the session was already in use by another client at resume time */
@JsonProperty("alreadyInUse") Boolean alreadyInUse,
+ /** True when this resume attached to a session that the runtime already had running in-memory (for example, an extension joining a session another client was actively driving). False (or omitted) for cold resumes — the runtime had to reconstitute the session from its persisted event log. */
+ @JsonProperty("sessionWasActive") Boolean sessionWasActive,
/** Whether this session supports remote steering via Mission Control */
- @JsonProperty("remoteSteerable") Boolean remoteSteerable
+ @JsonProperty("remoteSteerable") Boolean remoteSteerable,
+ /** When true, tool calls and permission requests left in flight by the previous session lifetime remain pending after resume and the agentic loop awaits their results. User sends are queued behind the pending work until all such requests reach a terminal state. When false (the default), any such tool calls and permission requests are immediately marked as interrupted on resume. */
+ @JsonProperty("continuePendingWork") Boolean continuePendingWork
) {
}
}
diff --git a/src/generated/java/com/github/copilot/sdk/generated/SessionShutdownEvent.java b/src/generated/java/com/github/copilot/sdk/generated/SessionShutdownEvent.java
index 39b6cfcfab..97d5060d32 100644
--- a/src/generated/java/com/github/copilot/sdk/generated/SessionShutdownEvent.java
+++ b/src/generated/java/com/github/copilot/sdk/generated/SessionShutdownEvent.java
@@ -42,6 +42,10 @@ public record SessionShutdownEventData(
@JsonProperty("errorReason") String errorReason,
/** Total number of premium API requests used during the session */
@JsonProperty("totalPremiumRequests") Double totalPremiumRequests,
+ /** Session-wide accumulated nano-AI units cost */
+ @JsonProperty("totalNanoAiu") Double totalNanoAiu,
+ /** Session-wide per-token-type accumulated token counts */
+ @JsonProperty("tokenDetails") Map tokenDetails,
/** Cumulative time spent in API calls during the session, in milliseconds */
@JsonProperty("totalApiDurationMs") Double totalApiDurationMs,
/** Unix timestamp (milliseconds) when the session started */
diff --git a/src/generated/java/com/github/copilot/sdk/generated/ShutdownModelMetric.java b/src/generated/java/com/github/copilot/sdk/generated/ShutdownModelMetric.java
index e5cae14764..e7a831ca67 100644
--- a/src/generated/java/com/github/copilot/sdk/generated/ShutdownModelMetric.java
+++ b/src/generated/java/com/github/copilot/sdk/generated/ShutdownModelMetric.java
@@ -10,6 +10,7 @@
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
+import java.util.Map;
import javax.annotation.processing.Generated;
@javax.annotation.processing.Generated("copilot-sdk-codegen")
@@ -19,6 +20,10 @@ public record ShutdownModelMetric(
/** Request count and cost metrics */
@JsonProperty("requests") ShutdownModelMetricRequests requests,
/** Token usage breakdown */
- @JsonProperty("usage") ShutdownModelMetricUsage usage
+ @JsonProperty("usage") ShutdownModelMetricUsage usage,
+ /** Accumulated nano-AI units cost for this model */
+ @JsonProperty("totalNanoAiu") Double totalNanoAiu,
+ /** Token count details per type */
+ @JsonProperty("tokenDetails") Map tokenDetails
) {
}
diff --git a/src/generated/java/com/github/copilot/sdk/generated/ShutdownModelMetricTokenDetail.java b/src/generated/java/com/github/copilot/sdk/generated/ShutdownModelMetricTokenDetail.java
new file mode 100644
index 0000000000..9f7cde6301
--- /dev/null
+++ b/src/generated/java/com/github/copilot/sdk/generated/ShutdownModelMetricTokenDetail.java
@@ -0,0 +1,22 @@
+/*---------------------------------------------------------------------------------------------
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ *--------------------------------------------------------------------------------------------*/
+
+// AUTO-GENERATED FILE - DO NOT EDIT
+// Generated from: session-events.schema.json
+
+package com.github.copilot.sdk.generated;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import javax.annotation.processing.Generated;
+
+@javax.annotation.processing.Generated("copilot-sdk-codegen")
+@JsonInclude(JsonInclude.Include.NON_NULL)
+@JsonIgnoreProperties(ignoreUnknown = true)
+public record ShutdownModelMetricTokenDetail(
+ /** Accumulated token count for this token type */
+ @JsonProperty("tokenCount") Double tokenCount
+) {
+}
diff --git a/src/generated/java/com/github/copilot/sdk/generated/ShutdownTokenDetail.java b/src/generated/java/com/github/copilot/sdk/generated/ShutdownTokenDetail.java
new file mode 100644
index 0000000000..ec51804886
--- /dev/null
+++ b/src/generated/java/com/github/copilot/sdk/generated/ShutdownTokenDetail.java
@@ -0,0 +1,22 @@
+/*---------------------------------------------------------------------------------------------
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ *--------------------------------------------------------------------------------------------*/
+
+// AUTO-GENERATED FILE - DO NOT EDIT
+// Generated from: session-events.schema.json
+
+package com.github.copilot.sdk.generated;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import javax.annotation.processing.Generated;
+
+@javax.annotation.processing.Generated("copilot-sdk-codegen")
+@JsonInclude(JsonInclude.Include.NON_NULL)
+@JsonIgnoreProperties(ignoreUnknown = true)
+public record ShutdownTokenDetail(
+ /** Accumulated token count for this token type */
+ @JsonProperty("tokenCount") Double tokenCount
+) {
+}
diff --git a/src/generated/java/com/github/copilot/sdk/generated/ToolExecutionCompleteEvent.java b/src/generated/java/com/github/copilot/sdk/generated/ToolExecutionCompleteEvent.java
index 6481374d1b..a1deeeab56 100644
--- a/src/generated/java/com/github/copilot/sdk/generated/ToolExecutionCompleteEvent.java
+++ b/src/generated/java/com/github/copilot/sdk/generated/ToolExecutionCompleteEvent.java
@@ -52,6 +52,8 @@ public record ToolExecutionCompleteEventData(
@JsonProperty("error") ToolExecutionCompleteError error,
/** Tool-specific telemetry data (e.g., CodeQL check counts, grep match counts) */
@JsonProperty("toolTelemetry") Map toolTelemetry,
+ /** Identifier for the agent loop turn this tool was invoked in, matching the corresponding assistant.turn_start event */
+ @JsonProperty("turnId") String turnId,
/** Tool call ID of the parent tool invocation when this event originates from a sub-agent */
@JsonProperty("parentToolCallId") String parentToolCallId
) {
diff --git a/src/generated/java/com/github/copilot/sdk/generated/ToolExecutionStartEvent.java b/src/generated/java/com/github/copilot/sdk/generated/ToolExecutionStartEvent.java
index 7da7572864..5a48cdd977 100644
--- a/src/generated/java/com/github/copilot/sdk/generated/ToolExecutionStartEvent.java
+++ b/src/generated/java/com/github/copilot/sdk/generated/ToolExecutionStartEvent.java
@@ -45,6 +45,8 @@ public record ToolExecutionStartEventData(
@JsonProperty("mcpServerName") String mcpServerName,
/** Original tool name on the MCP server, when the tool is an MCP tool */
@JsonProperty("mcpToolName") String mcpToolName,
+ /** Identifier for the agent loop turn this tool was invoked in, matching the corresponding assistant.turn_start event */
+ @JsonProperty("turnId") String turnId,
/** Tool call ID of the parent tool invocation when this event originates from a sub-agent */
@JsonProperty("parentToolCallId") String parentToolCallId
) {
diff --git a/src/generated/java/com/github/copilot/sdk/generated/UserMessageEvent.java b/src/generated/java/com/github/copilot/sdk/generated/UserMessageEvent.java
index 5d156082db..ec5f382463 100644
--- a/src/generated/java/com/github/copilot/sdk/generated/UserMessageEvent.java
+++ b/src/generated/java/com/github/copilot/sdk/generated/UserMessageEvent.java
@@ -51,7 +51,9 @@ public record UserMessageEventData(
/** The agent mode that was active when this message was sent */
@JsonProperty("agentMode") UserMessageAgentMode agentMode,
/** CAPI interaction ID for correlating this user message with its turn */
- @JsonProperty("interactionId") String interactionId
+ @JsonProperty("interactionId") String interactionId,
+ /** Parent agent task ID for background telemetry correlated to this user turn */
+ @JsonProperty("parentAgentTaskId") String parentAgentTaskId
) {
}
}
diff --git a/src/generated/java/com/github/copilot/sdk/generated/rpc/AgentInfo.java b/src/generated/java/com/github/copilot/sdk/generated/rpc/AgentInfo.java
index edd34eb947..4695ff9fb9 100644
--- a/src/generated/java/com/github/copilot/sdk/generated/rpc/AgentInfo.java
+++ b/src/generated/java/com/github/copilot/sdk/generated/rpc/AgentInfo.java
@@ -21,6 +21,8 @@ public record AgentInfo(
/** Human-readable display name */
@JsonProperty("displayName") String displayName,
/** Description of the agent's purpose */
- @JsonProperty("description") String description
+ @JsonProperty("description") String description,
+ /** Absolute local file path of the agent definition. Only set for file-based agents loaded from disk; remote agents do not have a path. */
+ @JsonProperty("path") String path
) {
}
diff --git a/src/generated/java/com/github/copilot/sdk/generated/rpc/ConnectParams.java b/src/generated/java/com/github/copilot/sdk/generated/rpc/ConnectParams.java
new file mode 100644
index 0000000000..665cd9694c
--- /dev/null
+++ b/src/generated/java/com/github/copilot/sdk/generated/rpc/ConnectParams.java
@@ -0,0 +1,27 @@
+/*---------------------------------------------------------------------------------------------
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ *--------------------------------------------------------------------------------------------*/
+
+// AUTO-GENERATED FILE - DO NOT EDIT
+// Generated from: api.schema.json
+
+package com.github.copilot.sdk.generated.rpc;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import javax.annotation.processing.Generated;
+
+/**
+ * Request parameters for the {@code connect} RPC method.
+ *
+ * @since 1.0.0
+ */
+@javax.annotation.processing.Generated("copilot-sdk-codegen")
+@JsonInclude(JsonInclude.Include.NON_NULL)
+@JsonIgnoreProperties(ignoreUnknown = true)
+public record ConnectParams(
+ /** Connection token; required when the server was started with COPILOT_CONNECTION_TOKEN */
+ @JsonProperty("token") String token
+) {
+}
diff --git a/src/generated/java/com/github/copilot/sdk/generated/rpc/ConnectResult.java b/src/generated/java/com/github/copilot/sdk/generated/rpc/ConnectResult.java
new file mode 100644
index 0000000000..56666b2523
--- /dev/null
+++ b/src/generated/java/com/github/copilot/sdk/generated/rpc/ConnectResult.java
@@ -0,0 +1,31 @@
+/*---------------------------------------------------------------------------------------------
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ *--------------------------------------------------------------------------------------------*/
+
+// AUTO-GENERATED FILE - DO NOT EDIT
+// Generated from: api.schema.json
+
+package com.github.copilot.sdk.generated.rpc;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import javax.annotation.processing.Generated;
+
+/**
+ * Result for the {@code connect} RPC method.
+ *
+ * @since 1.0.0
+ */
+@javax.annotation.processing.Generated("copilot-sdk-codegen")
+@JsonInclude(JsonInclude.Include.NON_NULL)
+@JsonIgnoreProperties(ignoreUnknown = true)
+public record ConnectResult(
+ /** Always true on success */
+ @JsonProperty("ok") Boolean ok,
+ /** Server protocol version number */
+ @JsonProperty("protocolVersion") Long protocolVersion,
+ /** Server package version */
+ @JsonProperty("version") String version
+) {
+}
diff --git a/src/generated/java/com/github/copilot/sdk/generated/rpc/ServerRpc.java b/src/generated/java/com/github/copilot/sdk/generated/rpc/ServerRpc.java
index d2e3161000..b82c49ec23 100644
--- a/src/generated/java/com/github/copilot/sdk/generated/rpc/ServerRpc.java
+++ b/src/generated/java/com/github/copilot/sdk/generated/rpc/ServerRpc.java
@@ -63,4 +63,12 @@ public CompletableFuture ping(PingParams params) {
return caller.invoke("ping", params, PingResult.class);
}
+ /**
+ * Invokes {@code connect}.
+ * @since 1.0.0
+ */
+ public CompletableFuture connect(ConnectParams params) {
+ return caller.invoke("connect", params, ConnectResult.class);
+ }
+
}
diff --git a/src/generated/java/com/github/copilot/sdk/generated/rpc/SessionNameGetResult.java b/src/generated/java/com/github/copilot/sdk/generated/rpc/SessionNameGetResult.java
index 9e516b45aa..82ba816531 100644
--- a/src/generated/java/com/github/copilot/sdk/generated/rpc/SessionNameGetResult.java
+++ b/src/generated/java/com/github/copilot/sdk/generated/rpc/SessionNameGetResult.java
@@ -21,7 +21,7 @@
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonIgnoreProperties(ignoreUnknown = true)
public record SessionNameGetResult(
- /** The session name, falling back to the auto-generated summary, or null if neither exists */
+ /** The session name (user-set or auto-generated), or null if not yet set */
@JsonProperty("name") String name
) {
}
diff --git a/src/generated/java/com/github/copilot/sdk/generated/rpc/SessionRpc.java b/src/generated/java/com/github/copilot/sdk/generated/rpc/SessionRpc.java
index 39ab121b6d..d4934fc08a 100644
--- a/src/generated/java/com/github/copilot/sdk/generated/rpc/SessionRpc.java
+++ b/src/generated/java/com/github/copilot/sdk/generated/rpc/SessionRpc.java
@@ -46,6 +46,8 @@ public final class SessionRpc {
public final SessionFleetApi fleet;
/** API methods for the {@code agent} namespace. */
public final SessionAgentApi agent;
+ /** API methods for the {@code tasks} namespace. */
+ public final SessionTasksApi tasks;
/** API methods for the {@code skills} namespace. */
public final SessionSkillsApi skills;
/** API methods for the {@code mcp} namespace. */
@@ -87,6 +89,7 @@ public SessionRpc(RpcCaller caller, String sessionId) {
this.instructions = new SessionInstructionsApi(caller, sessionId);
this.fleet = new SessionFleetApi(caller, sessionId);
this.agent = new SessionAgentApi(caller, sessionId);
+ this.tasks = new SessionTasksApi(caller, sessionId);
this.skills = new SessionSkillsApi(caller, sessionId);
this.mcp = new SessionMcpApi(caller, sessionId);
this.plugins = new SessionPluginsApi(caller, sessionId);
@@ -100,6 +103,14 @@ public SessionRpc(RpcCaller caller, String sessionId) {
this.usage = new SessionUsageApi(caller, sessionId);
}
+ /**
+ * Invokes {@code session.suspend}.
+ * @since 1.0.0
+ */
+ public CompletableFuture suspend() {
+ return caller.invoke("session.suspend", java.util.Map.of("sessionId", this.sessionId), Void.class);
+ }
+
/**
* Invokes {@code session.log}.
*
diff --git a/src/generated/java/com/github/copilot/sdk/generated/rpc/SessionSuspendParams.java b/src/generated/java/com/github/copilot/sdk/generated/rpc/SessionSuspendParams.java
new file mode 100644
index 0000000000..300b1e4cba
--- /dev/null
+++ b/src/generated/java/com/github/copilot/sdk/generated/rpc/SessionSuspendParams.java
@@ -0,0 +1,27 @@
+/*---------------------------------------------------------------------------------------------
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ *--------------------------------------------------------------------------------------------*/
+
+// AUTO-GENERATED FILE - DO NOT EDIT
+// Generated from: api.schema.json
+
+package com.github.copilot.sdk.generated.rpc;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import javax.annotation.processing.Generated;
+
+/**
+ * Request parameters for the {@code session.suspend} RPC method.
+ *
+ * @since 1.0.0
+ */
+@javax.annotation.processing.Generated("copilot-sdk-codegen")
+@JsonInclude(JsonInclude.Include.NON_NULL)
+@JsonIgnoreProperties(ignoreUnknown = true)
+public record SessionSuspendParams(
+ /** Target session identifier */
+ @JsonProperty("sessionId") String sessionId
+) {
+}
diff --git a/src/generated/java/com/github/copilot/sdk/generated/rpc/SessionTasksApi.java b/src/generated/java/com/github/copilot/sdk/generated/rpc/SessionTasksApi.java
new file mode 100644
index 0000000000..8e5f0ddeb3
--- /dev/null
+++ b/src/generated/java/com/github/copilot/sdk/generated/rpc/SessionTasksApi.java
@@ -0,0 +1,102 @@
+/*---------------------------------------------------------------------------------------------
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ *--------------------------------------------------------------------------------------------*/
+
+// AUTO-GENERATED FILE - DO NOT EDIT
+// Generated from: api.schema.json
+
+package com.github.copilot.sdk.generated.rpc;
+
+import java.util.concurrent.CompletableFuture;
+import javax.annotation.processing.Generated;
+
+/**
+ * API methods for the {@code tasks} namespace.
+ *
+ * @since 1.0.0
+ */
+@javax.annotation.processing.Generated("copilot-sdk-codegen")
+public final class SessionTasksApi {
+
+ private static final com.fasterxml.jackson.databind.ObjectMapper MAPPER = RpcMapper.INSTANCE;
+
+ private final RpcCaller caller;
+ private final String sessionId;
+
+ /** @param caller the RPC transport function */
+ SessionTasksApi(RpcCaller caller, String sessionId) {
+ this.caller = caller;
+ this.sessionId = sessionId;
+ }
+
+ /**
+ * Invokes {@code session.tasks.startAgent}.
+ *
+ * Note: the {@code sessionId} field in the params record is overridden
+ * by the session-scoped wrapper; any value provided is ignored.
+ *
+ * @apiNote This method is experimental and may change in a future version.
+ * @since 1.0.0
+ */
+ public CompletableFuture startAgent(SessionTasksStartAgentParams params) {
+ com.fasterxml.jackson.databind.node.ObjectNode _p = MAPPER.valueToTree(params);
+ _p.put("sessionId", this.sessionId);
+ return caller.invoke("session.tasks.startAgent", _p, SessionTasksStartAgentResult.class);
+ }
+
+ /**
+ * Invokes {@code session.tasks.list}.
+ *
+ * @apiNote This method is experimental and may change in a future version.
+ * @since 1.0.0
+ */
+ public CompletableFuture list() {
+ return caller.invoke("session.tasks.list", java.util.Map.of("sessionId", this.sessionId), SessionTasksListResult.class);
+ }
+
+ /**
+ * Invokes {@code session.tasks.promoteToBackground}.
+ *
+ * Note: the {@code sessionId} field in the params record is overridden
+ * by the session-scoped wrapper; any value provided is ignored.
+ *
+ * @apiNote This method is experimental and may change in a future version.
+ * @since 1.0.0
+ */
+ public CompletableFuture promoteToBackground(SessionTasksPromoteToBackgroundParams params) {
+ com.fasterxml.jackson.databind.node.ObjectNode _p = MAPPER.valueToTree(params);
+ _p.put("sessionId", this.sessionId);
+ return caller.invoke("session.tasks.promoteToBackground", _p, SessionTasksPromoteToBackgroundResult.class);
+ }
+
+ /**
+ * Invokes {@code session.tasks.cancel}.
+ *
+ * Note: the {@code sessionId} field in the params record is overridden
+ * by the session-scoped wrapper; any value provided is ignored.
+ *
+ * @apiNote This method is experimental and may change in a future version.
+ * @since 1.0.0
+ */
+ public CompletableFuture cancel(SessionTasksCancelParams params) {
+ com.fasterxml.jackson.databind.node.ObjectNode _p = MAPPER.valueToTree(params);
+ _p.put("sessionId", this.sessionId);
+ return caller.invoke("session.tasks.cancel", _p, SessionTasksCancelResult.class);
+ }
+
+ /**
+ * Invokes {@code session.tasks.remove}.
+ *
+ * Note: the {@code sessionId} field in the params record is overridden
+ * by the session-scoped wrapper; any value provided is ignored.
+ *
+ * @apiNote This method is experimental and may change in a future version.
+ * @since 1.0.0
+ */
+ public CompletableFuture remove(SessionTasksRemoveParams params) {
+ com.fasterxml.jackson.databind.node.ObjectNode _p = MAPPER.valueToTree(params);
+ _p.put("sessionId", this.sessionId);
+ return caller.invoke("session.tasks.remove", _p, SessionTasksRemoveResult.class);
+ }
+
+}
diff --git a/src/generated/java/com/github/copilot/sdk/generated/rpc/SessionTasksCancelParams.java b/src/generated/java/com/github/copilot/sdk/generated/rpc/SessionTasksCancelParams.java
new file mode 100644
index 0000000000..7f3ba8a5a8
--- /dev/null
+++ b/src/generated/java/com/github/copilot/sdk/generated/rpc/SessionTasksCancelParams.java
@@ -0,0 +1,29 @@
+/*---------------------------------------------------------------------------------------------
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ *--------------------------------------------------------------------------------------------*/
+
+// AUTO-GENERATED FILE - DO NOT EDIT
+// Generated from: api.schema.json
+
+package com.github.copilot.sdk.generated.rpc;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import javax.annotation.processing.Generated;
+
+/**
+ * Request parameters for the {@code session.tasks.cancel} RPC method.
+ *
+ * @since 1.0.0
+ */
+@javax.annotation.processing.Generated("copilot-sdk-codegen")
+@JsonInclude(JsonInclude.Include.NON_NULL)
+@JsonIgnoreProperties(ignoreUnknown = true)
+public record SessionTasksCancelParams(
+ /** Target session identifier */
+ @JsonProperty("sessionId") String sessionId,
+ /** Task identifier */
+ @JsonProperty("id") String id
+) {
+}
diff --git a/src/generated/java/com/github/copilot/sdk/generated/rpc/SessionTasksCancelResult.java b/src/generated/java/com/github/copilot/sdk/generated/rpc/SessionTasksCancelResult.java
new file mode 100644
index 0000000000..976e75d646
--- /dev/null
+++ b/src/generated/java/com/github/copilot/sdk/generated/rpc/SessionTasksCancelResult.java
@@ -0,0 +1,27 @@
+/*---------------------------------------------------------------------------------------------
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ *--------------------------------------------------------------------------------------------*/
+
+// AUTO-GENERATED FILE - DO NOT EDIT
+// Generated from: api.schema.json
+
+package com.github.copilot.sdk.generated.rpc;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import javax.annotation.processing.Generated;
+
+/**
+ * Result for the {@code session.tasks.cancel} RPC method.
+ *
+ * @since 1.0.0
+ */
+@javax.annotation.processing.Generated("copilot-sdk-codegen")
+@JsonInclude(JsonInclude.Include.NON_NULL)
+@JsonIgnoreProperties(ignoreUnknown = true)
+public record SessionTasksCancelResult(
+ /** Whether the task was successfully cancelled */
+ @JsonProperty("cancelled") Boolean cancelled
+) {
+}
diff --git a/src/generated/java/com/github/copilot/sdk/generated/rpc/SessionTasksListParams.java b/src/generated/java/com/github/copilot/sdk/generated/rpc/SessionTasksListParams.java
new file mode 100644
index 0000000000..379221deb1
--- /dev/null
+++ b/src/generated/java/com/github/copilot/sdk/generated/rpc/SessionTasksListParams.java
@@ -0,0 +1,27 @@
+/*---------------------------------------------------------------------------------------------
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ *--------------------------------------------------------------------------------------------*/
+
+// AUTO-GENERATED FILE - DO NOT EDIT
+// Generated from: api.schema.json
+
+package com.github.copilot.sdk.generated.rpc;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import javax.annotation.processing.Generated;
+
+/**
+ * Request parameters for the {@code session.tasks.list} RPC method.
+ *
+ * @since 1.0.0
+ */
+@javax.annotation.processing.Generated("copilot-sdk-codegen")
+@JsonInclude(JsonInclude.Include.NON_NULL)
+@JsonIgnoreProperties(ignoreUnknown = true)
+public record SessionTasksListParams(
+ /** Target session identifier */
+ @JsonProperty("sessionId") String sessionId
+) {
+}
diff --git a/src/generated/java/com/github/copilot/sdk/generated/rpc/SessionTasksListResult.java b/src/generated/java/com/github/copilot/sdk/generated/rpc/SessionTasksListResult.java
new file mode 100644
index 0000000000..47c5b1bec1
--- /dev/null
+++ b/src/generated/java/com/github/copilot/sdk/generated/rpc/SessionTasksListResult.java
@@ -0,0 +1,28 @@
+/*---------------------------------------------------------------------------------------------
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ *--------------------------------------------------------------------------------------------*/
+
+// AUTO-GENERATED FILE - DO NOT EDIT
+// Generated from: api.schema.json
+
+package com.github.copilot.sdk.generated.rpc;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import java.util.List;
+import javax.annotation.processing.Generated;
+
+/**
+ * Result for the {@code session.tasks.list} RPC method.
+ *
+ * @since 1.0.0
+ */
+@javax.annotation.processing.Generated("copilot-sdk-codegen")
+@JsonInclude(JsonInclude.Include.NON_NULL)
+@JsonIgnoreProperties(ignoreUnknown = true)
+public record SessionTasksListResult(
+ /** Currently tracked tasks */
+ @JsonProperty("tasks") List