2 Commits

Author SHA1 Message Date
plugin-dev ca8e446b11 fix(adapters): add missing hermes/deepagents adapters
CI / Plugin validation (push) Successful in 1m17s
CI / Plugin validation (pull_request) Successful in 1m8s
[Do] Manual ack
Plugin declares runtime in plugin.yaml but was missing the per-runtime
adaptor, causing RawDropAdaptor fallback for non-Claude-Code runtimes.
AgentskillsAdaptor is runtime-agnostic; thin wrappers added for:
- hermes: ecc, molecule-dev, superpowers, skill-cron-learnings, skill-update-docs
- deepagents: molecule-audit, molecule-compliance, molecule-hitl, molecule-security-scan

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-13 04:50:21 +00:00
plugin-dev 9b77ef14cc fix(ci): inline ci workflow — Gitea 1.22.6 cross-repo uses broken
CI / Plugin validation (push) Successful in 1m17s
CI / Plugin validation (pull_request) Successful in 1m4s
Replaces workflow_call (uses: molecule-ai/molecule-ci/...) with an
inline jobs block. The cross-repo workflow_call pattern no-ops on
Gitea 1.22.6 because DEFAULT_ACTIONS_URL=github routes the fetch
to github.com (where molecule-ai is suspended), causing a 404.
Canonical validate-plugin.py is still fetched from molecule-ci on
every run so validator changes propagate without repo-specific vendor
drift.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-13 04:21:42 +00:00
2 changed files with 74 additions and 1 deletions
+65 -1
View File
@@ -2,4 +2,68 @@ name: CI
on: [push, pull_request]
jobs:
validate:
uses: molecule-ai/molecule-ci/.gitea/workflows/validate-plugin.yml@main
name: Plugin validation
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
- uses: actions/checkout@v4
# Canonical validator script fetched fresh on every run.
# Single source of truth avoids the drift class where validator
# changes weren't propagated to all 21 plugin repos.
# Anonymous git clone to avoid Gitea 1.22.6 auth fallback issue.
- name: Fetch molecule-ci canonical scripts
run: git clone --depth 1 https://git.moleculesai.app/molecule-ai/molecule-ci.git .molecule-ci-canonical
- uses: actions/setup-python@v5
with:
python-version: "3.11"
cache: "pip"
cache-dependency-path: .molecule-ci-canonical/.molecule-ci/scripts/requirements.txt
- run: pip install pyyaml -q
- run: python3 .molecule-ci-canonical/.molecule-ci/scripts/validate-plugin.py
- name: Check for secrets
run: |
python3 - << 'PYEOF'
import os, re, sys
from pathlib import Path
PATTERNS = [
re.compile(r'''["']sk-ant-[a-zA-Z0-9]{50,}["']'''),
re.compile(r'''["']ghp_[a-zA-Z0-9]{36,}["']'''),
re.compile(r'''["']AKIA[A-Z0-9]{16}["']'''),
re.compile(r'''["']Bearer\s+[a-zA-Z0-9_.-]{20,}["']'''),
re.compile(r'''ghp_[a-zA-Z0-9]{36,}'''),
re.compile(r'''sk-ant-[a-zA-Z0-9]{50,}'''),
]
SKIP_DIRS = {'.molecule-ci', '.molecule-ci-canonical', '.git', 'node_modules', '__pycache__'}
EXTENSIONS = {'.yaml', '.yml', '.md', '.py', '.sh'}
def is_false_positive(line):
ctx = line.lower()
return '...' in ctx or '<example' in ctx or '</example' in ctx
root = Path(os.environ.get('GITHUB_WORKSPACE', '.'))
warnings = []
for dirpath, dirnames, filenames in os.walk(root):
dirnames[:] = [d for d in dirnames if d not in SKIP_DIRS]
for filename in filenames:
if Path(filename).suffix not in EXTENSIONS:
continue
filepath = Path(dirpath) / filename
try:
with open(filepath, 'r', encoding='utf-8', errors='ignore') as f:
for lineno, line in enumerate(f.readlines(), 1):
for pattern in PATTERNS:
for match in pattern.finditer(line):
if not is_false_positive(line):
warnings.append(f" {filepath}:{lineno}: {match.group(0)[:40]}...")
except Exception:
pass
if warnings:
print("::error::Potential secret found in committed files:")
for w in warnings:
print(w)
sys.exit(1)
else:
print("::notice::No secrets detected")
PYEOF
+9
View File
@@ -0,0 +1,9 @@
"""Hermes adaptor — uses the generic rule+skill installer.
Hermes loads skills from /configs/skills/ via the shared skill_loader,
which is runtime-agnostic. The AgentskillsAdaptor wires rules, skills,
hooks, and commands for Claude Code-style harness environments. For Hermes,
the same adaptor handles rules and skills; hooks/commands are no-ops
that Hermes ignores gracefully.
"""
from plugins_registry.builtins import AgentskillsAdaptor as Adaptor # noqa: F401