Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions .changeset/repo-move-github-squad-package-metadata.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
---
'@bradygaster/squad-cli': patch
'@bradygaster/squad-sdk': patch
---

Point published package metadata and the SDK's build and distribution defaults at the repository's new home, `github/squad`, so npm provenance publishing keeps working after the move.
2 changes: 1 addition & 1 deletion .github/workflows/squad-agents-ai-release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
# short-lived (1 hour) NuGet API key via the NuGet/login@v1 action. A Trusted
# Publishing policy must be configured at https://www.nuget.org/account/trusted-publishing
# under the package owner (Squad organization) with:
# Repository Owner: bradygaster
# Repository Owner: github
# Repository: squad
# Workflow File: squad-agents-ai-release.yml
# Environment: (leave empty)
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/squad-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -635,7 +635,7 @@ jobs:
#
# EXTERNAL ACTION REQUIRED after this PR merges to close the
# merge-with-failed-checks gap that allowed #1873 and #1874 to merge:
# 1. https://github.com/bradygaster/squad/settings/rules/12703724
# 1. https://github.com/github/squad/settings/rules/12703724
# 2. Set enforcement → Active
# 3. Conditions → branch patterns: refs/heads/dev AND refs/heads/main
# 4. Rules → Required status checks → add:
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/squad-standalone-release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -1082,7 +1082,7 @@ jobs:
--base master \
--head "tamirdresher:${BRANCH}" \
--title "New version: ${PACKAGE_IDENTIFIER} version ${VERSION}" \
--body "Automated manifest update for [Squad ${TAG}](https://github.com/bradygaster/squad/releases/tag/${TAG}), using the release run's packaging-manifests artifact.")"
--body "Automated manifest update for [Squad ${TAG}](${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}/releases/tag/${TAG}), using the release run's packaging-manifests artifact.")"
pr_status="Opened"
else
pr_status="Reused"
Expand Down
6 changes: 3 additions & 3 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -69,12 +69,12 @@
"sdk"
],
"license": "MIT",
"homepage": "https://github.com/bradygaster/squad#readme",
"homepage": "https://github.com/github/squad#readme",
"bugs": {
"url": "https://github.com/bradygaster/squad/issues"
"url": "https://github.com/github/squad/issues"
},
"repository": {
"type": "git",
"url": "https://github.com/bradygaster/squad.git"
"url": "https://github.com/github/squad.git"
}
}
6 changes: 3 additions & 3 deletions packages/squad-cli/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -199,13 +199,13 @@
"cli"
],
"license": "MIT",
"homepage": "https://github.com/bradygaster/squad#readme",
"homepage": "https://github.com/github/squad#readme",
"bugs": {
"url": "https://github.com/bradygaster/squad/issues"
"url": "https://github.com/github/squad/issues"
},
"repository": {
"type": "git",
"url": "git+https://github.com/bradygaster/squad.git",
"url": "git+https://github.com/github/squad.git",
"directory": "packages/squad-cli"
},
"optionalDependencies": {
Expand Down
6 changes: 3 additions & 3 deletions packages/squad-sdk/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -280,13 +280,13 @@
"sdk"
],
"license": "MIT",
"homepage": "https://github.com/bradygaster/squad#readme",
"homepage": "https://github.com/github/squad#readme",
"bugs": {
"url": "https://github.com/bradygaster/squad/issues"
"url": "https://github.com/github/squad/issues"
},
"repository": {
"type": "git",
"url": "git+https://github.com/bradygaster/squad.git",
"url": "git+https://github.com/github/squad.git",
"directory": "packages/squad-sdk"
}
}
2 changes: 1 addition & 1 deletion packages/squad-sdk/src/build/github-dist.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ export interface GitHubDistConfig {
}

const DEFAULT_CONFIG: GitHubDistConfig = {
owner: 'bradygaster',
owner: 'github',
repo: 'squad',
binaryName: 'squad',
installCommandTemplate: 'npx @bradygaster/squad-cli',
Expand Down
2 changes: 1 addition & 1 deletion packages/squad-sdk/src/build/npm-package.ts
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,7 @@ export function generatePackageJson(config: NpmPackageConfig): PackageJsonOutput
: {}),
engines: config.engines ? { ...config.engines } : { node: '>=20.0.0' },
license: 'MIT',
repository: { type: 'git', url: 'https://github.com/bradygaster/squad.git' },
repository: { type: 'git', url: 'https://github.com/github/squad.git' },
keywords: ['copilot', 'multi-agent', 'squad', 'sdk'],
};
}
Expand Down
7 changes: 4 additions & 3 deletions scripts/generate-packaging.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -31,9 +31,10 @@ import { fileURLToPath } from 'node:url';

const REPO_ROOT = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..');

const DEFAULT_REPO = 'bradygaster/squad';
const DEFAULT_REPO = 'github/squad';
const PACKAGE_IDENTIFIER = 'bradygaster.Squad';
const HOMEPAGE = 'https://github.com/bradygaster/squad';
const HOMEPAGE = 'https://github.com/github/squad';
const DOCS_URL = 'https://github.github.com/squad/';

/** Manifest schema version. Matches what winget-pkgs currently accepts. */
const WINGET_SCHEMA = '1.12.0';
Expand Down Expand Up @@ -309,7 +310,7 @@ Tags:
ReleaseNotesUrl: https://github.com/${repo}/releases/tag/${version}
Documentations:
- DocumentLabel: Documentation
DocumentUrl: https://bradygaster.github.io/squad/
DocumentUrl: ${DOCS_URL}
ManifestType: defaultLocale
ManifestVersion: ${WINGET_SCHEMA}
`;
Expand Down
6 changes: 3 additions & 3 deletions scripts/install.sh
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
#!/bin/sh
# Squad standalone installer.
#
# curl -fsSL https://raw.githubusercontent.com/bradygaster/squad/dev/scripts/install.sh | sh
# curl -fsSL https://raw.githubusercontent.com/github/squad/dev/scripts/install.sh | sh
#
# Downloads a self-contained Squad bundle from GitHub Releases. The bundle
# vendors its own Node.js runtime, so neither Node nor npm needs to be present.
Expand All @@ -10,13 +10,13 @@
# Environment:
# VERSION Squad version to install (default: latest release)
# PREFIX Install prefix (default: /usr/local as root, else $HOME/.local)
# REPO Source repository (default: bradygaster/squad)
# REPO Source repository (default: github/squad)
#
# Mirrors the shape of GitHub Copilot CLI's installer so the two feel the same.

set -eu

REPO="${REPO:-bradygaster/squad}"
REPO="${REPO:-github/squad}"
VERSION="${VERSION:-latest}"

if [ -z "${PREFIX:-}" ]; then
Expand Down
4 changes: 2 additions & 2 deletions scripts/release/closure-items.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
"source": "squad-2.0-closure-matrix.md (reviewer closure matrix for Stack #2281), carried from the f22847a9 re-verification",
"stack": {
"id": 2281,
"repo": "bradygaster/squad",
"repo": "github/squad",
"base": "559e0f98e611b6006cf5da716dcb75fc3f5000b5",
"mergedDev": "f22847a9898d5c90d70a679ee63d9d5f49cd5fed",
"layers": [
Expand Down Expand Up @@ -38,7 +38,7 @@
],
"citedCiRun": {
"id": 39907736729,
"url": "https://github.com/bradygaster/squad/actions/runs/39907736729",
"url": "https://github.com/github/squad/actions/runs/39907736729",
"workflow": "Squad CI",
"headSha": "f22847a9898d5c90d70a679ee63d9d5f49cd5fed",
"consoleSummary": {
Expand Down
10 changes: 5 additions & 5 deletions src/Squad.Agents.AI/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ Public surface:
- `SquadConnectionFactory` — parses PATH or `squad://` connection strings into options.
- `SquadServiceCollectionExtensions` — registers `SquadAgent` and base `AIAgent` in DI, with standard and keyed overloads.

Repository: <https://github.com/bradygaster/squad>
Repository: <https://github.com/github/squad>

## Install

Expand All @@ -32,7 +32,7 @@ dotnet add package Squad.Agents.AI --version 1.0.0 --source ./nupkgs

- .NET 8, 9, or 10 for consumers; .NET 10 SDK to build this repository and run the sample.
- GitHub Copilot CLI available on `PATH` (`copilot --version`).
- Squad CLI and an initialized Squad team root; see the [Squad CLI repo](https://github.com/bradygaster/squad).
- Squad CLI and an initialized Squad team root; see the [Squad CLI repo](https://github.com/github/squad).
- GitHub Copilot authentication through the signed-in user. The quickstart below does not require an app key or environment variable.

For a bounded sample check without authentication, CLI startup, or model calls:
Expand Down Expand Up @@ -272,7 +272,7 @@ the `ConfigureCopilotClient` delegate, streaming via `RunStreamingAsync`, and su
|---|---|
| [.NET 10 SDK](https://dotnet.microsoft.com/download/dotnet/10.0) | `dotnet --version` should print `10.x.x` |
| GitHub Copilot CLI on `PATH` | Install from [github.com/github/copilot-cli](https://github.com/github/copilot-cli); verify with `copilot --version` |
| Squad CLI installed | Follow the install guide in the [Squad repository README](https://github.com/bradygaster/squad#readme) |
| Squad CLI installed | Follow the install guide in the [Squad repository README](https://github.com/github/squad#readme) |
| Initialized Squad team root | Run `squad init` in a directory; this becomes your team root |
| GitHub Copilot authentication | Run `gh auth login` or `copilot auth login` once before running the sample |

Expand Down Expand Up @@ -340,10 +340,10 @@ not prove that subagents were dispatched; inspect the captured events and spans.

## See also

- Root repo: <https://github.com/bradygaster/squad>
- Root repo: <https://github.com/github/squad>
- Microsoft Agent Framework: <https://github.com/microsoft/agents>
- GitHub Copilot SDK authentication: <https://github.com/github/copilot-sdk/blob/main/docs/auth/authenticate.md>
- GitHub Copilot CLI: <https://github.com/github/copilot-cli>
- Changelog: <https://github.com/bradygaster/squad/blob/main/CHANGELOG.md>
- Changelog: <https://github.com/github/squad/blob/main/CHANGELOG.md>

License: MIT.
4 changes: 2 additions & 2 deletions src/Squad.Agents.AI/Squad.Agents.AI.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@
<Description>Community SquadAgent for Microsoft Agent Framework. Exposes the Squad multi-agent CLI as an AIAgent that can be composed into any MAF app or workflow.</Description>
<Authors>Tamir Dresher</Authors>
<PackageTags>squad;agents;ai;copilot;maf;multi-agent</PackageTags>
<PackageProjectUrl>https://github.com/bradygaster/squad</PackageProjectUrl>
<RepositoryUrl>https://github.com/bradygaster/squad.git</RepositoryUrl>
<PackageProjectUrl>https://github.com/github/squad</PackageProjectUrl>
<RepositoryUrl>https://github.com/github/squad.git</RepositoryUrl>
<RepositoryType>git</RepositoryType>
<RepositoryBranch>main</RepositoryBranch>
<PackageLicenseExpression>MIT</PackageLicenseExpression>
Expand Down
21 changes: 15 additions & 6 deletions test/bundle.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -256,6 +256,15 @@ describe('npm-package', () => {
const entry = pkg.exports['.'] as Record<string, string>;
expect(entry.types).toBe('./dist/index.d.ts');
});

it('points repository at the canonical github/squad source repo', () => {
// npm --provenance rejects a publish whose repository.url names a different repo.
const pkg = generatePackageJson(baseConfig);
expect(pkg.repository, 'generatePackageJson().repository').toEqual({
type: 'git',
url: 'https://github.com/github/squad.git',
});
});
});

describe('validatePackageJson', () => {
Expand Down Expand Up @@ -378,9 +387,9 @@ describe('github-dist', () => {
expect(script).toContain('REPO="myrepo"');
});

it('uses bradygaster/squad as default', () => {
it('uses github/squad as default', () => {
const script = generateInstallScript();
expect(script).toContain('OWNER="bradygaster"');
expect(script).toContain('OWNER="github"');
expect(script).toContain('REPO="squad"');
});

Expand All @@ -398,7 +407,7 @@ describe('github-dist', () => {

describe('validateGitHubRelease', () => {
const config: GitHubDistConfig = {
owner: 'bradygaster',
owner: 'github',
repo: 'squad',
binaryName: 'squad',
installCommandTemplate: 'npx @bradygaster/squad-cli',
Expand Down Expand Up @@ -481,9 +490,9 @@ describe('github-dist', () => {
});

describe('getDefaultDistConfig', () => {
it('returns config with bradygaster owner', () => {
it('returns config with github owner', () => {
const config = getDefaultDistConfig();
expect(config.owner).toBe('bradygaster');
expect(config.owner).toBe('github');
});

it('returns config with squad repo', () => {
Expand All @@ -495,7 +504,7 @@ describe('github-dist', () => {
const a = getDefaultDistConfig();
a.owner = 'changed';
const b = getDefaultDistConfig();
expect(b.owner).toBe('bradygaster');
expect(b.owner).toBe('github');
});
});
});
42 changes: 41 additions & 1 deletion test/packaging-manifests.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@
*/

import { describe, it, expect } from 'vitest';
import { execFileSync } from 'node:child_process';
import path from 'node:path';
import {
parseChecksums,
homebrewToken,
Expand All @@ -19,6 +21,8 @@ import {
wingetPackageIdentifier,
} from '../scripts/generate-packaging.mjs';

const GENERATOR = path.join(process.cwd(), 'scripts', 'generate-packaging.mjs');

const SHA = {
darwinArm: 'a'.repeat(64),
darwinX64: 'b'.repeat(64),
Expand All @@ -33,7 +37,7 @@ const CHECKSUMS = {
'squad-win32-arm64.zip': SHA.winArm,
};

const BASE = { version: 'v1.2.3', repo: 'bradygaster/squad', checksums: CHECKSUMS };
const BASE = { version: 'v1.2.3', repo: 'github/squad', checksums: CHECKSUMS };

describe('parseChecksums', () => {
it('parses GNU sha256sum output', () => {
Expand Down Expand Up @@ -190,3 +194,39 @@ describe('release channel metadata', () => {
expect(() => releaseChannel('v1.2.3-beta.1')).toThrow(/Unsupported release version/);
});
});

describe('repository and documentation links', () => {
const rendered: Record<string, string> = {
'Homebrew cask': renderHomebrewCask(BASE),
'winget version manifest': renderWingetVersion(BASE),
'winget installer manifest': renderWingetInstaller(BASE),
'winget locale manifest': renderWingetLocale(BASE),
};
const lines = (manifest: string) => manifest.split(/\r?\n/).map((line) => line.trim());

it('points package homepages at github/squad and docs at github.github.com/squad', () => {
expect(lines(rendered['Homebrew cask'])).toContain('homepage "https://github.com/github/squad"');
const locale = lines(rendered['winget locale manifest']);
expect(locale).toContain('PackageUrl: https://github.com/github/squad');
expect(locale).toContain('DocumentUrl: https://github.github.com/squad/');
});

it('never emits the pre-move repository or the retired docs host', () => {
for (const [name, manifest] of Object.entries(rendered)) {
const stale = lines(manifest).filter((line) => /bradygaster\/squad|bradygaster\.github\.io/.test(line));
expect(stale, `${name} lines naming bradygaster/squad or bradygaster.github.io`).toEqual([]);
}
});

it('keeps PublisherUrl on the Publisher, which the repo move did not change', () => {
// Publisher is a person and matches the bradygaster.Squad identifier prefix; it is not the repo.
const locale = lines(rendered['winget locale manifest']);
expect(locale).toContain('Publisher: Brady Gaster');
expect(locale).toContain('PublisherUrl: https://github.com/bradygaster');
});

it('defaults --repo to github/squad', () => {
const help = execFileSync(process.execPath, [GENERATOR, '--help'], { encoding: 'utf8' });
expect(help).toContain('--repo <owner/repo> Source repository (default: github/squad)');
});
});
Loading
Loading