Skip to content

Commit f10b5d1

Browse files
authored
Merge pull request #10 from askgina/chore/plugin-compliance
Align OpenAI plugin submission metadata
2 parents 38902f1 + 72d4b19 commit f10b5d1

7 files changed

Lines changed: 229 additions & 1 deletion

File tree

docs/research-openai-plugin-compliance.md

Lines changed: 181 additions & 0 deletions
Large diffs are not rendered by default.

plugins/ask-gina/skills/research-hyperliquid/agents/openai.yaml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
interface:
2+
display_name: "Research Hyperliquid"
3+
short_description: "Research live Hyperliquid markets, account activity, and positions."
14
dependencies:
25
tools:
36
- type: "mcp"

plugins/ask-gina/skills/research-prediction-markets/agents/openai.yaml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
interface:
2+
display_name: "Research Prediction Markets"
3+
short_description: "Research live Polymarket events, outcome books, and market positions."
14
dependencies:
25
tools:
36
- type: "mcp"

plugins/ask-gina/skills/research-spot-tokens/agents/openai.yaml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
interface:
2+
display_name: "Research Spot Tokens"
3+
short_description: "Research live token prices, historical charts, and swap history."
14
dependencies:
25
tools:
36
- type: "mcp"

plugins/ask-gina/skills/review-gina-account/agents/openai.yaml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
interface:
2+
display_name: "Review Gina Account"
3+
short_description: "Review Ask Gina portfolio balances, linked wallets, and automations."
14
dependencies:
25
tools:
36
- type: "mcp"

plugins/ask-gina/targets/openai/.codex-plugin/plugin.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
"capabilities": ["Interactive", "Read"],
2222
"websiteURL": "https://askgina.ai",
2323
"privacyPolicyURL": "https://askgina.ai/privacy-policy",
24+
"supportURL": "https://askgina.ai/support",
2425
"termsOfServiceURL": "https://askgina.ai/terms-and-conditions",
2526
"defaultPrompt": [
2627
"Show my linked wallets and cross-chain portfolio.",

tools/check-target-conformance.ts

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,35 @@ const handoffUrls = (markdown: string): readonly URL[] =>
141141
([value]) => new URL(value),
142142
);
143143

144+
const productionSupportUrl = "https://askgina.ai/support";
145+
146+
const openAiSkillInterfaces = {
147+
"review-gina-account": {
148+
display_name: "Review Gina Account",
149+
short_description: "Review Ask Gina portfolio balances, linked wallets, and automations.",
150+
},
151+
"research-spot-tokens": {
152+
display_name: "Research Spot Tokens",
153+
short_description: "Research live token prices, historical charts, and swap history.",
154+
},
155+
"research-prediction-markets": {
156+
display_name: "Research Prediction Markets",
157+
short_description: "Research live Polymarket events, outcome books, and market positions.",
158+
},
159+
"research-hyperliquid": {
160+
display_name: "Research Hyperliquid",
161+
short_description: "Research live Hyperliquid markets, account activity, and positions.",
162+
},
163+
} as const satisfies Readonly<
164+
Record<
165+
(typeof ASK_GINA_SKILL_DEFINITIONS)[number]["name"],
166+
Readonly<{
167+
display_name: string;
168+
short_description: string;
169+
}>
170+
>
171+
>;
172+
144173
const targetManifestPath: Readonly<Record<TargetName, string>> = {
145174
openai: ".codex-plugin/plugin.json",
146175
cursor: ".cursor-plugin/plugin.json",
@@ -226,7 +255,8 @@ const validateManifest = (target: TargetName, manifest: unknown): boolean => {
226255
nested(manifest, "skills") === "./skills/" &&
227256
nested(manifest, "mcpServers") === "./.mcp.json" &&
228257
nested(manifest, "interface", "composerIcon") === "./assets/icon.svg" &&
229-
nested(manifest, "interface", "logo") === "./assets/icon.svg"
258+
nested(manifest, "interface", "logo") === "./assets/icon.svg" &&
259+
nested(manifest, "interface", "supportURL") === productionSupportUrl
230260
);
231261
}
232262

@@ -536,9 +566,13 @@ export const checkGeneratedTargetConformance: {
536566
fs.readFileString(canonicalMetadataPath),
537567
)
538568
: "";
569+
const expectedInterface = openAiSkillInterfaces[skill.name];
539570
const metadataMatches =
540571
metadataExists &&
541572
metadata === canonicalMetadata &&
573+
metadata.startsWith(
574+
`interface:\n display_name: "${expectedInterface.display_name}"\n short_description: "${expectedInterface.short_description}"\ndependencies:\n`,
575+
) &&
542576
metadata.includes('type: "mcp"') &&
543577
metadata.includes('value: "ask-gina"') &&
544578
metadata.includes('transport: "streamable_http"') &&

0 commit comments

Comments
 (0)