feat: add OpenCode/Codex outputs and update changelog (#104)

* Add OpenCode converter coverage and specs

* Add Codex target support and spec docs

* Generate Codex command skills and refresh spec docs

* Add global Codex install path

* fix: harden plugin path loading and codex descriptions

* feat: ensure codex agents block on convert/install

* docs: clarify target branch usage for review

* chore: prep npm package metadata and release notes

* docs: mention opencode and codex in changelog

* docs: update CLI usage and remove stale todos

* feat: install from GitHub with global outputs
This commit is contained in:
Kieran Klaassen
2026-01-21 17:00:30 -08:00
committed by GitHub
parent c50208d413
commit e97f85bd53
61 changed files with 3303 additions and 5 deletions

88
src/types/claude.ts Normal file
View File

@@ -0,0 +1,88 @@
export type ClaudeMcpServer = {
type?: string
command?: string
args?: string[]
url?: string
env?: Record<string, string>
headers?: Record<string, string>
}
export type ClaudeManifest = {
name: string
version: string
description?: string
author?: {
name?: string
email?: string
url?: string
}
keywords?: string[]
agents?: string | string[]
commands?: string | string[]
skills?: string | string[]
hooks?: string | string[] | ClaudeHooks
mcpServers?: Record<string, ClaudeMcpServer> | string | string[]
}
export type ClaudeAgent = {
name: string
description?: string
capabilities?: string[]
model?: string
body: string
sourcePath: string
}
export type ClaudeCommand = {
name: string
description?: string
argumentHint?: string
model?: string
allowedTools?: string[]
body: string
sourcePath: string
}
export type ClaudeSkill = {
name: string
description?: string
sourceDir: string
skillPath: string
}
export type ClaudePlugin = {
root: string
manifest: ClaudeManifest
agents: ClaudeAgent[]
commands: ClaudeCommand[]
skills: ClaudeSkill[]
hooks?: ClaudeHooks
mcpServers?: Record<string, ClaudeMcpServer>
}
export type ClaudeHookCommand = {
type: "command"
command: string
timeout?: number
}
export type ClaudeHookPrompt = {
type: "prompt"
prompt: string
}
export type ClaudeHookAgent = {
type: "agent"
agent: string
}
export type ClaudeHookEntry = ClaudeHookCommand | ClaudeHookPrompt | ClaudeHookAgent
export type ClaudeHookMatcher = {
matcher: string
hooks: ClaudeHookEntry[]
}
export type ClaudeHooks = {
hooks: Record<string, ClaudeHookMatcher[]>
}

23
src/types/codex.ts Normal file
View File

@@ -0,0 +1,23 @@
import type { ClaudeMcpServer } from "./claude"
export type CodexPrompt = {
name: string
content: string
}
export type CodexSkillDir = {
name: string
sourceDir: string
}
export type CodexGeneratedSkill = {
name: string
content: string
}
export type CodexBundle = {
prompts: CodexPrompt[]
skillDirs: CodexSkillDir[]
generatedSkills: CodexGeneratedSkill[]
mcpServers?: Record<string, ClaudeMcpServer>
}

54
src/types/opencode.ts Normal file
View File

@@ -0,0 +1,54 @@
export type OpenCodePermission = "allow" | "ask" | "deny"
export type OpenCodeConfig = {
$schema?: string
model?: string
default_agent?: string
tools?: Record<string, boolean>
permission?: Record<string, OpenCodePermission | Record<string, OpenCodePermission>>
agent?: Record<string, OpenCodeAgentConfig>
command?: Record<string, OpenCodeCommandConfig>
mcp?: Record<string, OpenCodeMcpServer>
}
export type OpenCodeAgentConfig = {
description?: string
mode?: "primary" | "subagent"
model?: string
temperature?: number
tools?: Record<string, boolean>
permission?: Record<string, OpenCodePermission>
}
export type OpenCodeCommandConfig = {
description?: string
model?: string
agent?: string
template: string
}
export type OpenCodeMcpServer = {
type: "local" | "remote"
command?: string[]
url?: string
environment?: Record<string, string>
headers?: Record<string, string>
enabled?: boolean
}
export type OpenCodeAgentFile = {
name: string
content: string
}
export type OpenCodePluginFile = {
name: string
content: string
}
export type OpenCodeBundle = {
config: OpenCodeConfig
agents: OpenCodeAgentFile[]
plugins: OpenCodePluginFile[]
skillDirs: { sourceDir: string; name: string }[]
}