From 62643e2b8ffa5ee7663f073cfe586c7345d55670 Mon Sep 17 00:00:00 2001 From: "molecule-ai[bot]" <276602405+molecule-ai[bot]@users.noreply.github.com> Date: Wed, 22 Apr 2026 19:00:47 +0000 Subject: [PATCH] fix(config): add models[] array for canvas model dropdown (#4) Co-authored-by: Molecule AI Plugin-Dev --- .../scripts/validate-workspace-template.py | 22 +++++++++++++ config.yaml | 32 ++++++++++++------- 2 files changed, 42 insertions(+), 12 deletions(-) diff --git a/.molecule-ci/scripts/validate-workspace-template.py b/.molecule-ci/scripts/validate-workspace-template.py index b96ff25..5d87063 100644 --- a/.molecule-ci/scripts/validate-workspace-template.py +++ b/.molecule-ci/scripts/validate-workspace-template.py @@ -1,25 +1,47 @@ #!/usr/bin/env python3 """Validate a Molecule AI workspace template repo.""" import os, sys, yaml + errors = [] + if not os.path.isfile("config.yaml"): print("::error::config.yaml not found at repo root") sys.exit(1) + with open("config.yaml") as f: config = yaml.safe_load(f) + if not config.get("name"): errors.append("Missing required field: name") if not config.get("runtime"): errors.append("Missing required field: runtime") + known = {"langgraph", "claude-code", "crewai", "autogen", "deepagents", "hermes", "gemini-cli", "openclaw"} runtime = config.get("runtime", "") if runtime and runtime not in known: print(f"::warning::Runtime '{runtime}' is not in the known set. OK for custom runtimes.") + +# Check for legacy imports +if os.path.isfile("adapter.py"): + with open("adapter.py") as f: + content = f.read() + if "molecule_runtime" in content: + print("::warning::adapter.py imports 'molecule_runtime' — legacy import, use 'molecule_ai' or platform SDK") + +# Check for missing molecule-ai-workspace-runtime dependency hint +if os.path.isfile("Dockerfile"): + with open("Dockerfile") as f: + content = f.read() + if "molecule-ai-workspace-runtime" not in content: + print("::warning::Dockerfile does not reference 'molecule-ai-workspace-runtime' — may need base runtime package") + sv = config.get("template_schema_version") if sv is None: errors.append("Missing template_schema_version (add: template_schema_version: 1)") + if errors: for e in errors: print(f"::error::{e}") sys.exit(1) + print(f"✓ config.yaml valid: {config['name']} (runtime: {config.get('runtime')})") diff --git a/config.yaml b/config.yaml index 86b688e..522df8c 100644 --- a/config.yaml +++ b/config.yaml @@ -2,25 +2,33 @@ name: OpenClaw Agent description: OpenClaw framework — multi-file prompt system with SOUL, BOOTSTRAP, AGENTS, TOOLS, and HEARTBEAT modules version: 1.0.0 tier: 2 - runtime: openclaw model: openai:gpt-4.1-mini - prompt_files: - - SOUL.md - - BOOTSTRAP.md - - AGENTS.md - - HEARTBEAT.md - - TOOLS.md - - USER.md - +- SOUL.md +- BOOTSTRAP.md +- AGENTS.md +- HEARTBEAT.md +- TOOLS.md +- USER.md a2a: port: 8000 streaming: true push_notifications: true - env: required: - - OPENAI_API_KEY - + - OPENAI_API_KEY template_schema_version: 1 +models: +- id: openai:gpt-4.1-mini + name: GPT-4.1 Mini (OpenAI) + required_env: + - OPENAI_API_KEY +- id: openai:gpt-4o + name: GPT-4o (OpenAI) + required_env: + - OPENAI_API_KEY +- id: openai:o4-mini + name: o4-Mini (OpenAI) + required_env: + - OPENAI_API_KEY