969b06253c
Part B: Model Pricing, Hook Configuration and CLAUDE_HOME move from Settings → Dashboard to the Claude Code tab's AgentHub sub-tab (ClaudeAgentHubSettings.tsx); CODEX_HOME is editable in Codex → AgentHub. A home that is or contains the OS home is refused (EBADHOME). Settings persistence: dashboard-saved settings go to ~/.config/agenthub/settings.env (AGENTHUB_SETTINGS_FILE), outside the plugin cache an update wipes. Load order: real env > the checkout's .env > that file. The first CLAUDE_HOME change pins DASHBOARD_DATA_DIR so the DB stays put. C1: codex-usage.js reads Codex rollout journals into sessions (new column tool) and token_usage, tracked per file in codex_rollouts; forks deduped by total vector, sub-agent threads folded into the root; pricing-sync also prices OpenAI models; PricingSettings with a vendor filter. C2: codex-hooks.js installs AgentHub's hooks into $CODEX_HOME/hooks.json on a click, through a stable forwarder; Codex trust is never written. The hook route creates tool='codex' sessions and folds sub-agent hooks into the root. D: antigravity-usage.js reads agy's per-conversation SQLite files (tokens from ModelUsageStats) into tool='antigravity' sessions; antigravity-hooks.js installs the named hook `agenthub` (PreInvocation, PostToolUse, Stop — never PreToolUse) into ~/.gemini/config/hooks.json; Settings → Antigravity tab; Gemini pricing. Whole-change review fixes: sameOriginGuard on both home PUTs, routers.missing on a CLAUDE_HOME change, reset-pricing scope, GET /api/sessions?tool=, clear-data covering the new tables, Codex child-thread events moving no status, hooks owning status only while current, EFOREIGN for a forwarder that is not ours, agy quiet window and turn rules, AGENTHUB_SETTINGS_FILE honoured from .env. Docs, OpenAPI and the CLAUDE.md marker updated. Server 2141, client 779.
125 lines
4.3 KiB
JSON
125 lines
4.3 KiB
JSON
{
|
|
"title": "Codex Config Explorer",
|
|
"subtitle": "Your Codex CLI setup at a glance - skills, agents, rules, AGENTS.md memory, config.toml, MCP servers, plugins and marketplaces.",
|
|
"refresh": "Refresh",
|
|
"refreshing": "Refreshing…",
|
|
"lastUpdated": "Last updated {{time}}",
|
|
"loadError": "Failed to load: {{message}}",
|
|
"scope": {
|
|
"all": "All scopes",
|
|
"user": "User",
|
|
"project": "Project"
|
|
},
|
|
"tabs": {
|
|
"overview": "Overview",
|
|
"skills": "Skills",
|
|
"agents": "Agents",
|
|
"rules": "Rules",
|
|
"memory": "Memory",
|
|
"config": "Config",
|
|
"mcp": "MCP servers",
|
|
"plugins": "Plugins",
|
|
"agenthub": "AgentHub"
|
|
},
|
|
"overview": {
|
|
"rootsTitle": "Roots",
|
|
"codexHome": "Codex home",
|
|
"projectCodexDir": "Project .codex",
|
|
"projectRoot": "Project root",
|
|
"summary": "Quick summary",
|
|
"user": "user",
|
|
"project": "project"
|
|
},
|
|
"common": {
|
|
"search": "Search by name…",
|
|
"clearSearch": "Clear search",
|
|
"close": "Close"
|
|
},
|
|
"list": {
|
|
"newButton": "New",
|
|
"viewButton": "View source",
|
|
"editButton": "Edit",
|
|
"deleteButton": "Delete"
|
|
},
|
|
"edit": {
|
|
"saveSuccess": "Saved · {{path}}",
|
|
"saveSuccessNew": "Created.",
|
|
"deleteSuccess": "Deleted · {{path}}",
|
|
"deleteError": "Delete failed: {{message}}",
|
|
"templates": {
|
|
"skills": "---\nname: my-skill\ndescription: One-line description (shown when Codex picks the skill)\n---\n\nBody - what the skill does, when to use it, examples.\n",
|
|
"agents": "name = \"my-agent\"\ndescription = \"When to invoke this agent\"\n\ninstructions = \"\"\"\nSystem prompt for the agent.\n\"\"\"\n",
|
|
"rules": "# Rules\n\nCodex follows these rules for this scope.\n",
|
|
"memory": "# Project memory\n\nCodex reads this on session start.\n",
|
|
"config": "# config.toml\n"
|
|
}
|
|
},
|
|
"memory": {
|
|
"missing": "No AGENTS.md found."
|
|
},
|
|
"projectMemory": {
|
|
"newButton": "New project memory",
|
|
"title": "Create {{file}} for another project",
|
|
"dirLabel": "Project directory",
|
|
"dirHelp": "Absolute path to a project that already exists on this machine. {{file}} is created inside it; an existing one is never overwritten.",
|
|
"dirRequired": "A project directory is required",
|
|
"createButton": "Create",
|
|
"created": "Created {{path}}",
|
|
"template": "# Project memory\n\nWhat this project is, and anything an agent should know before touching it.\n\n## Stack\n\n## Conventions\n\n## Commands\n",
|
|
"contentLabel": "Content",
|
|
"cancel": "Cancel",
|
|
"saving": "Creating…",
|
|
"close": "Close"
|
|
},
|
|
"config": {
|
|
"missing": "No config.toml found."
|
|
},
|
|
"mcp": {
|
|
"addTitle": "Add an MCP server",
|
|
"nameLabel": "Name",
|
|
"modeCommand": "Command",
|
|
"modeUrl": "URL",
|
|
"commandLabel": "Command",
|
|
"argsLabel": "Args (space-separated)",
|
|
"urlLabel": "URL",
|
|
"bearerLabel": "Bearer token env var (optional)",
|
|
"addButton": "Add",
|
|
"removeButton": "Remove",
|
|
"added": "Added {{name}}.",
|
|
"removed": "Removed {{name}}."
|
|
},
|
|
"plugins": {
|
|
"installTitle": "Install a plugin",
|
|
"installPlaceholder": "name or name@marketplace",
|
|
"installButton": "Add",
|
|
"removeButton": "Remove",
|
|
"installed": "Installed {{name}}.",
|
|
"removed": "Removed {{name}}.",
|
|
"noPlugins": "No plugins installed.",
|
|
"marketplacesTitle": "Marketplaces",
|
|
"addMarketplaceTitle": "Add a marketplace",
|
|
"addMarketplacePlaceholder": "https://github.com/owner/repo",
|
|
"addMarketplaceButton": "Add",
|
|
"marketplaceAdded": "Added marketplace.",
|
|
"marketplaceRemoved": "Removed marketplace {{name}}."
|
|
},
|
|
"manage": {
|
|
"working": "Working…",
|
|
"noIdentifier": "No stable identifier for this entry - remove it from the CLI directly."
|
|
},
|
|
"cli": {
|
|
"unavailable": "The codex CLI isn't available on this machine ({{message}}) - install it or add it to PATH to manage this."
|
|
},
|
|
"backups": {
|
|
"openButton": "Backups",
|
|
"title": "Backups",
|
|
"subtitle": "Every save / delete writes a copy here first. Backup folders live outside the directories the CLI scans, so they don't reappear as ghosts in your CLI.",
|
|
"empty": "No backups yet - every edit or delete creates a timestamped backup that lands here.",
|
|
"restoreHint": "Restore by renaming the backup back into place:"
|
|
},
|
|
"snippet": {
|
|
"copy": "Copy",
|
|
"copied": "Copied"
|
|
}
|
|
}
|