chore(aaif): rename a bunch of repository references (#8152)
Signed-off-by: Michael Neale <michael.neale@gmail.com> Co-authored-by: Michael Neale <michael.neale@gmail.com> continuing migration to aaif
This commit is contained in:
@@ -3,7 +3,7 @@
|
||||
"description": "Amazing blog posts, videos, and tutorials created by our community for goose!",
|
||||
"lastUpdated": "2025-10-15",
|
||||
"hacktoberfestYear": 2025,
|
||||
"submissionUrl": "https://github.com/block/goose/issues/4705",
|
||||
"submissionUrl": "https://github.com/aaif-goose/goose/issues/4705",
|
||||
"submissions": [
|
||||
{
|
||||
"title": "Hacktoberfest 2025: Contributing to goose",
|
||||
@@ -12,7 +12,7 @@
|
||||
"handle": "taniacryptid"
|
||||
},
|
||||
"type": "blog",
|
||||
"url": "https://block.github.io/goose/blog/2025/09/26/hacktoberfest-2025",
|
||||
"url": "https://goose-docs.ai/blog/2025/09/26/hacktoberfest-2025",
|
||||
"thumbnail": "https://images.unsplash.com/photo-1522071820081-009f0129c71c?w=400&h=225&fit=crop&crop=entropy&auto=format",
|
||||
"submittedDate": "2025-09-26",
|
||||
"tags": [
|
||||
|
||||
@@ -129,10 +129,10 @@ function CommunityAllStarsSection() {
|
||||
</div>
|
||||
<div className="text-sm">
|
||||
Want to be a Community All Star? Just start contributing on{' '}
|
||||
<Link href="https://github.com/block/goose">GitHub</Link>, helping others on{' '}
|
||||
<Link href="https://github.com/aaif-goose/goose">GitHub</Link>, helping others on{' '}
|
||||
<Link href="https://discord.gg/goose-oss">Discord</Link>, or share your
|
||||
goose projects with the community! You can check out the{' '}
|
||||
<Link href="https://github.com/block/goose/blob/main/CONTRIBUTING.md">contributing guide</Link>{' '}
|
||||
<Link href="https://github.com/aaif-goose/goose/blob/main/CONTRIBUTING.md">contributing guide</Link>{' '}
|
||||
for more tips.
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -63,9 +63,9 @@ We will support as many strong, mission-aligned projects as our resources allow.
|
||||
|
||||
Potentially, yes. We may extend or renew grants based on progress, impact, and alignment. Renewals are not guaranteed and will be evaluated on a case-by-case basis.
|
||||
|
||||
**Does a grant lead to a job at goose or Block?**
|
||||
**Does a grant lead to a job at goose or AAIF?**
|
||||
|
||||
No. Grants are not employment and do not imply future hiring. However, collaboration with goose or Block teams may emerge naturally from impactful work.
|
||||
No. Grants are not employment and do not imply future hiring. However, collaboration with goose or AAIF teams may emerge naturally from impactful work.
|
||||
|
||||
**How does work get reviewed?**
|
||||
|
||||
@@ -103,12 +103,12 @@ If you have additional questions, feel free to reach out in [Discord](https://di
|
||||
<head>
|
||||
<meta property="og:title" content="goose grant program" />
|
||||
<meta property="og:type" content="article" />
|
||||
<meta property="og:url" content="https://block.github.io/goose/grants" />
|
||||
<meta property="og:url" content="https://goose-docs.ai/grants" />
|
||||
<meta property="og:description" content="$100K grants for open source devs building the future of agentic AI." />
|
||||
<meta property="og:image" content="https://block.github.io/goose/assets/images/goose-grant-program-3ede164a454d9f29e779108c63773416.png" />
|
||||
<meta property="og:image" content="https://goose-docs.ai/assets/images/goose-grant-program-3ede164a454d9f29e779108c63773416.png" />
|
||||
<meta name="twitter:card" content="summary_large_image" />
|
||||
<meta property="twitter:domain" content="block.github.io/goose" />
|
||||
<meta property="twitter:domain" content="goose-docs.ai" />
|
||||
<meta name="twitter:title" content="goose grant program" />
|
||||
<meta name="twitter:description" content="$100K grants for open source devs building the future of agentic AI." />
|
||||
<meta name="twitter:image" content="https://block.github.io/goose/assets/images/goose-grant-program-3ede164a454d9f29e779108c63773416.png" />
|
||||
<meta name="twitter:image" content="https://goose-docs.ai/assets/images/goose-grant-program-3ede164a454d9f29e779108c63773416.png" />
|
||||
</head>
|
||||
+1
-1
@@ -11,7 +11,7 @@
|
||||
"name": "GitHub",
|
||||
"command": "npx -y @modelcontextprotocol/server-github",
|
||||
"is_builtin": false,
|
||||
"link": "https://block.github.io/goose/docs/mcp/github-mcp",
|
||||
"link": "https://goose-docs.ai/docs/mcp/github-mcp",
|
||||
"environmentVariables": [
|
||||
{
|
||||
"name": "GITHUB_PERSONAL_ACCESS_TOKEN",
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
"name": "Google Drive",
|
||||
"command": "npx -y @modelcontextprotocol/server-gdrive",
|
||||
"is_builtin": false,
|
||||
"link": "https://block.github.io/goose/v1/extensions/google-drive",
|
||||
"link": "https://goose-docs.ai/v1/extensions/google-drive",
|
||||
"environmentVariables": [
|
||||
{
|
||||
"name": "GDRIVE_OAUTH_PATH",
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
"name": "GitHub",
|
||||
"command": "goose session --with-streamable-http-extension \"https://api.githubcopilot.com/mcp/\"",
|
||||
"is_builtin": false,
|
||||
"link": "https://block.github.io/goose/docs/mcp/github-mcp",
|
||||
"link": "https://goose-docs.ai/docs/mcp/github-mcp",
|
||||
"environmentVariables": [
|
||||
{
|
||||
"name": "GITHUB_PERSONAL_ACCESS_TOKEN",
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
"name": "Google Drive",
|
||||
"command": "npx -y @modelcontextprotocol/server-gdrive",
|
||||
"is_builtin": false,
|
||||
"link": "https://block.github.io/goose/v1/extensions/google-drive",
|
||||
"link": "https://goose-docs.ai/v1/extensions/google-drive",
|
||||
"environmentVariables": [
|
||||
{
|
||||
"name": "GDRIVE_OAUTH_PATH",
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
"name": "Google Drive",
|
||||
"command": "npx -y @modelcontextprotocol/server-gdrive",
|
||||
"is_builtin": false,
|
||||
"link": "https://block.github.io/goose/v1/extensions/google-drive",
|
||||
"link": "https://goose-docs.ai/v1/extensions/google-drive",
|
||||
"environmentVariables": [
|
||||
{
|
||||
"name": "GDRIVE_OAUTH_PATH",
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
"name": "Google Drive",
|
||||
"command": "npx -y @modelcontextprotocol/server-gdrive",
|
||||
"is_builtin": false,
|
||||
"link": "https://block.github.io/goose/v1/extensions/google-drive",
|
||||
"link": "https://goose-docs.ai/v1/extensions/google-drive",
|
||||
"environmentVariables": [
|
||||
{
|
||||
"name": "GDRIVE_OAUTH_PATH",
|
||||
|
||||
@@ -164,7 +164,7 @@ instructions: |
|
||||
📝 Add real example prompt and output: Replace placeholders in Example Usage section
|
||||
📝 Review for any remaining TODOs or placeholders
|
||||
- Provide the testing checklist:
|
||||
📝 Build and run the docs server using [these steps](https://github.com/block/goose/blob/main/documentation/README.md), then verify:
|
||||
📝 Build and run the docs server using [these steps](https://github.com/aaif-goose/goose/blob/main/documentation/README.md), then verify:
|
||||
📝 Extensions page (`/goose/extensions`) loads successfully. Verify:
|
||||
- Info is correct on the summary and details cards (click extension name to view details card)
|
||||
- The `goose://` deeplink opens the installer correctly in Desktop
|
||||
|
||||
@@ -95,7 +95,7 @@ export default function RecipePage() {
|
||||
Recipes Cookbook
|
||||
</h1>
|
||||
<Button
|
||||
onClick={() => window.open('https://github.com/block/goose/blob/main/CONTRIBUTING_RECIPES.md', '_blank')}
|
||||
onClick={() => window.open('https://github.com/aaif-goose/goose/blob/main/CONTRIBUTING_RECIPES.md', '_blank')}
|
||||
className="bg-purple-600 hover:bg-purple-700 text-white flex items-center gap-2 cursor-pointer"
|
||||
>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round">
|
||||
|
||||
@@ -227,7 +227,7 @@ export default function SkillDetailPage(): JSX.Element {
|
||||
</Button>
|
||||
</div>
|
||||
<p className="text-xs text-zinc-500 dark:text-zinc-500">
|
||||
Requires <a href="https://block.github.io/goose/docs/mcp/summon-mcp" className="text-purple-600 hover:underline">Summon extension</a> enabled
|
||||
Requires <a href="https://goose-docs.ai/docs/mcp/summon-mcp" className="text-purple-600 hover:underline">Summon extension</a> enabled
|
||||
</p>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -6,14 +6,19 @@ import { motion } from "framer-motion";
|
||||
import Layout from "@theme/Layout";
|
||||
import Admonition from "@theme/Admonition";
|
||||
import { Button } from "@site/src/components/ui/button";
|
||||
import { SidebarFilter, type SidebarFilterGroup } from "@site/src/components/ui/sidebar-filter";
|
||||
import {
|
||||
SidebarFilter,
|
||||
type SidebarFilterGroup,
|
||||
} from "@site/src/components/ui/sidebar-filter";
|
||||
import { Menu, X } from "lucide-react";
|
||||
import Link from '@docusaurus/Link';
|
||||
import Link from "@docusaurus/Link";
|
||||
|
||||
export default function SkillsPage() {
|
||||
const [skills, setSkills] = useState<Skill[]>([]);
|
||||
const [searchQuery, setSearchQuery] = useState("");
|
||||
const [selectedFilters, setSelectedFilters] = useState<Record<string, string[]>>({});
|
||||
const [selectedFilters, setSelectedFilters] = useState<
|
||||
Record<string, string[]>
|
||||
>({});
|
||||
const [isMobileFilterOpen, setIsMobileFilterOpen] = useState(false);
|
||||
const [isLoading, setIsLoading] = useState(true);
|
||||
const [error, setError] = useState<string | null>(null);
|
||||
@@ -21,30 +26,26 @@ export default function SkillsPage() {
|
||||
const skillsPerPage = 10;
|
||||
|
||||
// Build tag filter options from loaded skills
|
||||
const uniqueTags = Array.from(
|
||||
new Set(
|
||||
skills.flatMap((s) => s.tags || [])
|
||||
)
|
||||
).sort().map((tag) => ({
|
||||
label: tag.charAt(0).toUpperCase() + tag.slice(1),
|
||||
value: tag
|
||||
}));
|
||||
const uniqueTags = Array.from(new Set(skills.flatMap((s) => s.tags || [])))
|
||||
.sort()
|
||||
.map((tag) => ({
|
||||
label: tag.charAt(0).toUpperCase() + tag.slice(1),
|
||||
value: tag,
|
||||
}));
|
||||
|
||||
// Build source filter options (Community only - official is the default)
|
||||
const sourceOptions = [
|
||||
{ label: "Community", value: "community" }
|
||||
];
|
||||
const sourceOptions = [{ label: "Community", value: "community" }];
|
||||
|
||||
const sidebarFilterGroups: SidebarFilterGroup[] = [
|
||||
{
|
||||
title: "Source",
|
||||
options: sourceOptions
|
||||
options: sourceOptions,
|
||||
},
|
||||
{
|
||||
title: "Tags",
|
||||
options: uniqueTags,
|
||||
maxHeight: "max-h-64 overflow-y-auto"
|
||||
}
|
||||
maxHeight: "max-h-64 overflow-y-auto",
|
||||
},
|
||||
];
|
||||
|
||||
useEffect(() => {
|
||||
@@ -55,7 +56,8 @@ export default function SkillsPage() {
|
||||
const results = await searchSkills(searchQuery);
|
||||
setSkills(results);
|
||||
} catch (err) {
|
||||
const errorMessage = err instanceof Error ? err.message : "Unknown error";
|
||||
const errorMessage =
|
||||
err instanceof Error ? err.message : "Unknown error";
|
||||
setError(`Failed to load skills: ${errorMessage}`);
|
||||
console.error("Error loading skills:", err);
|
||||
} finally {
|
||||
@@ -99,21 +101,40 @@ export default function SkillsPage() {
|
||||
Skills Marketplace
|
||||
</h1>
|
||||
<Button
|
||||
onClick={() => window.open('https://github.com/block/Agent-Skills?tab=readme-ov-file#contributing-a-skill', '_blank')}
|
||||
onClick={() =>
|
||||
window.open(
|
||||
"https://github.com/aaif-goose/Agent-Skills?tab=readme-ov-file#contributing-a-skill",
|
||||
"_blank",
|
||||
)
|
||||
}
|
||||
className="bg-purple-600 hover:bg-purple-700 text-white flex items-center gap-2 cursor-pointer"
|
||||
>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round">
|
||||
<path d="M12 5v14M5 12h14"/>
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="20"
|
||||
height="20"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
strokeWidth="2"
|
||||
strokeLinecap="round"
|
||||
strokeLinejoin="round"
|
||||
>
|
||||
<path d="M12 5v14M5 12h14" />
|
||||
</svg>
|
||||
Submit Skill
|
||||
</Button>
|
||||
</div>
|
||||
<p className="text-textProminent">
|
||||
Browse community-contributed{" "}
|
||||
<Link to="/docs/guides/context-engineering/using-skills" className="text-purple-600 hover:underline">
|
||||
<Link
|
||||
to="/docs/guides/context-engineering/using-skills"
|
||||
className="text-purple-600 hover:underline"
|
||||
>
|
||||
skills
|
||||
</Link>{" "}
|
||||
that teach goose how to perform specific tasks. Skills are reusable instruction sets with optional supporting files.
|
||||
that teach goose how to perform specific tasks. Skills are reusable
|
||||
instruction sets with optional supporting files.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
@@ -137,12 +158,14 @@ export default function SkillsPage() {
|
||||
</div>
|
||||
|
||||
<div className="flex flex-col md:flex-row gap-8">
|
||||
<div className={`${isMobileFilterOpen ? "block" : "hidden"} md:block md:w-64 mt-6`}>
|
||||
<div
|
||||
className={`${isMobileFilterOpen ? "block" : "hidden"} md:block md:w-64 mt-6`}
|
||||
>
|
||||
<SidebarFilter
|
||||
groups={sidebarFilterGroups}
|
||||
selectedValues={selectedFilters}
|
||||
onChange={(group, values) => {
|
||||
setSelectedFilters(prev => ({ ...prev, [group]: values }));
|
||||
setSelectedFilters((prev) => ({ ...prev, [group]: values }));
|
||||
setCurrentPage(1);
|
||||
}}
|
||||
/>
|
||||
@@ -164,7 +187,9 @@ export default function SkillsPage() {
|
||||
)}
|
||||
|
||||
{isLoading ? (
|
||||
<div className="py-8 text-xl text-gray-600">Loading skills...</div>
|
||||
<div className="py-8 text-xl text-gray-600">
|
||||
Loading skills...
|
||||
</div>
|
||||
) : filteredSkills.length === 0 ? (
|
||||
<Admonition type="info">
|
||||
<p>
|
||||
@@ -177,7 +202,10 @@ export default function SkillsPage() {
|
||||
<>
|
||||
<div className="grid grid-cols-1 lg:grid-cols-2 gap-4 md:gap-6">
|
||||
{filteredSkills
|
||||
.slice((currentPage - 1) * skillsPerPage, currentPage * skillsPerPage)
|
||||
.slice(
|
||||
(currentPage - 1) * skillsPerPage,
|
||||
currentPage * skillsPerPage,
|
||||
)
|
||||
.map((skill) => (
|
||||
<motion.div
|
||||
key={skill.id}
|
||||
@@ -194,7 +222,9 @@ export default function SkillsPage() {
|
||||
{filteredSkills.length > skillsPerPage && (
|
||||
<div className="flex justify-center items-center gap-2 md:gap-4 mt-6 md:mt-8">
|
||||
<Button
|
||||
onClick={() => setCurrentPage(prev => Math.max(prev - 1, 1))}
|
||||
onClick={() =>
|
||||
setCurrentPage((prev) => Math.max(prev - 1, 1))
|
||||
}
|
||||
disabled={currentPage === 1}
|
||||
className="px-3 md:px-4 py-2 rounded-md border border-border bg-surfaceHighlight hover:bg-surface text-textProminent disabled:opacity-50 disabled:cursor-not-allowed transition-colors text-sm md:text-base"
|
||||
>
|
||||
@@ -202,12 +232,23 @@ export default function SkillsPage() {
|
||||
</Button>
|
||||
|
||||
<span className="text-textProminent text-sm md:text-base">
|
||||
Page {currentPage} of {Math.ceil(filteredSkills.length / skillsPerPage)}
|
||||
Page {currentPage} of{" "}
|
||||
{Math.ceil(filteredSkills.length / skillsPerPage)}
|
||||
</span>
|
||||
|
||||
<Button
|
||||
onClick={() => setCurrentPage(prev => Math.min(Math.ceil(filteredSkills.length / skillsPerPage), prev + 1))}
|
||||
disabled={currentPage >= Math.ceil(filteredSkills.length / skillsPerPage)}
|
||||
onClick={() =>
|
||||
setCurrentPage((prev) =>
|
||||
Math.min(
|
||||
Math.ceil(filteredSkills.length / skillsPerPage),
|
||||
prev + 1,
|
||||
),
|
||||
)
|
||||
}
|
||||
disabled={
|
||||
currentPage >=
|
||||
Math.ceil(filteredSkills.length / skillsPerPage)
|
||||
}
|
||||
className="px-3 md:px-4 py-2 rounded-md border border-border bg-surfaceHighlight hover:bg-surface text-textProminent disabled:opacity-50 disabled:cursor-not-allowed transition-colors text-sm md:text-base"
|
||||
>
|
||||
Next
|
||||
|
||||
@@ -1,7 +1,11 @@
|
||||
import type { Skill, SkillStatus, SkillInstallMethod, SupportingFilesType } from "@site/src/pages/skills/types";
|
||||
import type {
|
||||
Skill,
|
||||
SkillStatus,
|
||||
SkillInstallMethod,
|
||||
SupportingFilesType,
|
||||
} from "@site/src/pages/skills/types";
|
||||
import siteConfig from "@generated/docusaurus.config";
|
||||
|
||||
|
||||
// Skills data is loaded from a generated JSON manifest at build time
|
||||
// Generated at: documentation/static/skills-manifest.json
|
||||
|
||||
@@ -30,7 +34,7 @@ export async function searchSkills(query: string): Promise<Skill[]> {
|
||||
(skill) =>
|
||||
skill.name?.toLowerCase().includes(lowerQuery) ||
|
||||
skill.description?.toLowerCase().includes(lowerQuery) ||
|
||||
skill.tags?.some((tag) => tag.toLowerCase().includes(lowerQuery))
|
||||
skill.tags?.some((tag) => tag.toLowerCase().includes(lowerQuery)),
|
||||
);
|
||||
}
|
||||
|
||||
@@ -85,7 +89,11 @@ async function fetchSkillsManifest(): Promise<Skill[]> {
|
||||
|
||||
const response = await fetch(manifestUrl);
|
||||
if (!response.ok) {
|
||||
console.error("Failed to fetch skills manifest:", response.status, manifestUrl);
|
||||
console.error(
|
||||
"Failed to fetch skills manifest:",
|
||||
response.status,
|
||||
manifestUrl,
|
||||
);
|
||||
return [];
|
||||
}
|
||||
|
||||
@@ -97,7 +105,6 @@ async function fetchSkillsManifest(): Promise<Skill[]> {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Normalize raw frontmatter-like data to Skill type
|
||||
* (kept here in case you reuse it elsewhere)
|
||||
@@ -105,7 +112,7 @@ async function fetchSkillsManifest(): Promise<Skill[]> {
|
||||
export function normalizeSkill(
|
||||
parsed: { frontmatter: Record<string, any>; content: string },
|
||||
id: string,
|
||||
supportingFiles: string[]
|
||||
supportingFiles: string[],
|
||||
): Skill {
|
||||
const { frontmatter, content } = parsed;
|
||||
|
||||
@@ -142,14 +149,28 @@ export function normalizeSkill(
|
||||
/**
|
||||
* Determine the supporting files type based on file contents
|
||||
*/
|
||||
function determineSupportingFilesType(supportingFiles: string[]): SupportingFilesType {
|
||||
function determineSupportingFilesType(
|
||||
supportingFiles: string[],
|
||||
): SupportingFilesType {
|
||||
if (supportingFiles.length === 0) {
|
||||
return 'none';
|
||||
return "none";
|
||||
}
|
||||
|
||||
// Executable file extensions
|
||||
const executableExtensions = ['.sh', '.bash', '.zsh', '.ps1', '.bat', '.cmd', '.py', '.rb', '.js', '.mjs', '.ts'];
|
||||
|
||||
const executableExtensions = [
|
||||
".sh",
|
||||
".bash",
|
||||
".zsh",
|
||||
".ps1",
|
||||
".bat",
|
||||
".cmd",
|
||||
".py",
|
||||
".rb",
|
||||
".js",
|
||||
".mjs",
|
||||
".ts",
|
||||
];
|
||||
|
||||
// Template-like patterns
|
||||
const templatePatterns = [
|
||||
/\.template\./i,
|
||||
@@ -169,32 +190,35 @@ function determineSupportingFilesType(supportingFiles: string[]): SupportingFile
|
||||
/\.erb$/i,
|
||||
];
|
||||
|
||||
const hasExecutable = supportingFiles.some(file => {
|
||||
const ext = file.substring(file.lastIndexOf('.')).toLowerCase();
|
||||
const hasExecutable = supportingFiles.some((file) => {
|
||||
const ext = file.substring(file.lastIndexOf(".")).toLowerCase();
|
||||
return executableExtensions.includes(ext);
|
||||
});
|
||||
|
||||
if (hasExecutable) {
|
||||
return 'scripts';
|
||||
return "scripts";
|
||||
}
|
||||
|
||||
const hasTemplates = supportingFiles.some(file => {
|
||||
return templatePatterns.some(pattern => pattern.test(file));
|
||||
const hasTemplates = supportingFiles.some((file) => {
|
||||
return templatePatterns.some((pattern) => pattern.test(file));
|
||||
});
|
||||
|
||||
if (hasTemplates) {
|
||||
return 'templates';
|
||||
return "templates";
|
||||
}
|
||||
|
||||
return 'multi-file';
|
||||
return "multi-file";
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine the install method based on source URL
|
||||
*/
|
||||
function determineInstallMethod(sourceUrl: string | undefined, skillId: string): SkillInstallMethod {
|
||||
function determineInstallMethod(
|
||||
sourceUrl: string | undefined,
|
||||
skillId: string,
|
||||
): SkillInstallMethod {
|
||||
if (!sourceUrl) return "download";
|
||||
if (sourceUrl.includes("block/goose")) return "npx-multi";
|
||||
if (sourceUrl.includes("aaif-goose/goose")) return "npx-multi";
|
||||
|
||||
const simpleRepoPattern = /^https:\/\/github\.com\/[^\/]+\/[^\/]+\/?$/;
|
||||
if (simpleRepoPattern.test(sourceUrl)) return "npx-single";
|
||||
@@ -208,7 +232,7 @@ function determineInstallMethod(sourceUrl: string | undefined, skillId: string):
|
||||
function generateInstallCommand(
|
||||
sourceUrl: string | undefined,
|
||||
skillId: string,
|
||||
method: SkillInstallMethod
|
||||
method: SkillInstallMethod,
|
||||
): string | undefined {
|
||||
if (method === "download" || !sourceUrl) return undefined;
|
||||
|
||||
@@ -228,7 +252,7 @@ function generateInstallCommand(
|
||||
* Generate the view source URL for a skill in the Agent-Skills repo
|
||||
*/
|
||||
function generateViewSourceUrl(skillId: string): string {
|
||||
return `https://github.com/block/Agent-Skills/tree/main/${skillId}`;
|
||||
return `https://github.com/aaif-goose/Agent-Skills/tree/main/${skillId}`;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user