Commit Graph

35 Commits

Author SHA1 Message Date
devops-engineer
39671e8526 chore(ci): adopt .runtime-version push-mode cascade signal
All checks were successful
Secret scan / Scan diff for credential-shaped strings (pull_request) Successful in 3s
CI / validate (pull_request) Successful in 10m40s
CI / validate (push) Successful in 10m38s
Background: post-2026-05-06 SCM is Gitea, not GitHub. Gitea 1.22.6 has
no repository_dispatch / workflow_dispatch trigger API (empirically
verified across 6 candidate paths in molecule-core#20 issuecomment-913).
The molecule-core/publish-runtime.yml cascade therefore cannot fire
templates via curl-dispatch — pivots to push-mode instead.

This PR is the consumer side of that pivot:

- .runtime-version file at repo root — single line, plain version
  string. Currently 0.1.129 (latest published as of 2026-05-07).
  publish-runtime overwrites this on each cascade.

- publish-image.yml gains a resolve-version job that reads the file
  and forwards the value to the reusable build workflow as the
  third-priority source in the resolution chain.

Sequencing context: this PR (and 8 sibling PRs to the other template
repos) MUST land before molecule-core#20 v2 is merged.

Refs molecule-core#14, molecule-core#20.
2026-05-07 03:08:11 -07:00
security-auditor
67dff8c8c4 ci: re-trigger after orchestrator recreated runners 1-8 (CONFIG_FILE env)
All checks were successful
Secret scan / Scan diff for credential-shaped strings (push) Successful in 14s
CI / validate (push) Successful in 11m20s
Per saved memory feedback_act_runner_needs_config_file_env: runners 1-8
were spawned without -e CONFIG_FILE=/config.yaml; act_runner fell back
to /data/config.yaml and ignored runner.envs the whole time. Orchestrator
recreated 1-8 with full proper env. All 16 now uniform with
AGENT_TOOLSDIRECTORY + RUNNER_TOOL_CACHE + GITHUB_SERVER_URL + GH_HOST.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-07 02:51:10 -07:00
security-auditor
e1137ba0cc ci: re-trigger after orchestrator restarted runners 1-8
Some checks failed
Secret scan / Scan diff for credential-shaped strings (push) Successful in 12s
CI / validate (push) Failing after 40s
Per saved memory feedback_runner_config_partial_deploy: orchestrator
identified that runners 1-8 last restarted before AGENT_TOOLSDIRECTORY
+ RUNNER_TOOL_CACHE were added; cycle 7 retrigger landed ~50% on stale
runners. Orchestrator restarted 1-8 at ~09:37; this empty commit
re-triggers CI on the now-consistent runner pool.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-07 02:40:56 -07:00
security-auditor
8f2c60e937 fix(ci): inline secret-scan body, drop cross-repo uses: of private molecule-core
Some checks failed
Secret scan / Scan diff for credential-shaped strings (push) Successful in 6s
CI / validate (push) Failing after 17s
The 3-line wrapper at .github/workflows/secret-scan.yml referenced
`uses: molecule-ai/molecule-core/.github/workflows/secret-scan.yml@staging`.
molecule-core is private; act_runner clones cross-repo reusable
workflows anonymously, so the resolve fails at 0s with no logs.

Same root cause + same fix that molecule-controlplane already shipped
(see its secret-scan.yml comment block lines 10-22). Inlining keeps
the gate functional until Gitea is upgraded or the canonical scanner
moves to a public repo. When either lands, this file reverts to the
3-line wrapper.

Refs: internal#46 Phase 3 Class 2.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-07 02:29:06 -07:00
security-auditor
fe5938c706 ci: re-trigger after runner-config v2 (AGENT_TOOLSDIRECTORY etc.)
Some checks failed
Secret scan / secret-scan (push) Failing after 0s
CI / validate (push) Failing after 14s
Empty commit to re-run CI against the act_runner config that landed
in /opt/molecule/runners/config.yaml (cycle ~58 internal#46 Phase 3).
No source change. CI now runs setup-python with /tmp/hostedtoolcache,
which works (verified in cycle 6 task 1022 log, careful-bash#2).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-07 02:27:54 -07:00
c7ce81755e Merge pull request 'fix(ci): lowercase 'molecule-ai/' in cross-repo workflow refs' (#1) from fix/lowercase-org-slug into main
Some checks failed
Secret scan / secret-scan (push) Failing after 0s
CI / validate (push) Failing after 22s
2026-05-07 08:59:09 +00:00
security-auditor
d91041ce38 fix(ci): lowercase 'molecule-ai/' in cross-repo workflow refs
Some checks failed
CI / validate (pull_request) Failing after 0s
Secret scan / secret-scan (pull_request) Failing after 0s
CI / validate (push) Failing after 0s
Gitea is case-sensitive on owner slugs; canonical is lowercase
`molecule-ai/...`. Mixed-case `Molecule-AI/...` refs fail-at-0s
when the runner tries to resolve the cross-repo workflow / checkout.

Same fix as molecule-controlplane#12. Mechanical case-correction;
no behavior change beyond making CI resolve again.

Refs: internal#46

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-07 00:59:48 -07:00
Hongming Wang
b44b1c4444 fix(Dockerfile): upgrade pip+setuptools+wheel to clear 3 fixable HIGH CVEs
Some checks failed
CI / validate (push) Failing after 0s
Secret scan / secret-scan (push) Failing after 0s
The python:3.11-slim base ships old transitives Trivy correctly flags
as fixable HIGH:
- jaraco.context 5.3.0 → 6.1.0 (CVE-2026-23949 path traversal)
- wheel 0.45.1 → 0.46.2 (CVE-2026-24049 wheel install RCE)
- (one more truncated in the gate's log table)

Bumping pip+setuptools+wheel before requirements install upgrades these
metadata packages so the gate passes. molecule-ci#38 Phase-1.

Why this matters now: today's a2a-sdk strict-mode fix (commit e1628c4
in molecule-core) shipped to PyPI 0.1.94 (11:13). Without an image
rebuild the langgraph workspace template stays on the broken runtime
and the synthetic E2E (#2566, priority-high, failing 36+h) keeps red.
The cascade fix (molecule-core#2575) restored the dispatch path; this
unblocks the actual rebuild.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-03 05:53:32 -07:00
Hongming Wang
d432771d42
Merge pull request #9 from Molecule-AI/docs/claude-md-base-adapter-section
docs(claude): add BaseAdapter integration section
2026-05-01 20:10:06 -07:00
Hongming Wang
efe9763b29 docs(claude): add Adapter pattern section 2026-05-01 20:04:59 -07:00
Hongming Wang
41a20faf1f
Merge pull request #8 from Molecule-AI/chore/enroll-secret-scan
chore(ci): enroll in org-wide secret-scan reusable workflow (Molecule-AI/molecule-core#2109)
2026-04-29 13:45:36 -07:00
Hongming Wang
2a75622319 fix: restore COPY/RUN lines in Dockerfile
Previous commit's regex substitution dropped `COPY requirements.txt .`
and the initial `RUN pip install --no-cache-dir -r requirements.txt`
because of a bash-heredoc escape interaction (the \1 backref was
consumed before the python regex saw it, leaving a SOH char). This
restores both lines with the conditional version-pin upgrade after.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-27 07:50:08 -07:00
Hongming Wang
53932bf540 feat: forward runtime_version + ARG RUNTIME_VERSION (cascade cache trap fix)
Closes the cache trap structurally for this template — same fix
already shipped in claude-code + hermes. publish-image.yml caller
forwards client_payload.runtime_version (set by cascade) to the
molecule-ci reusable workflow as runtime_version input. Reusable
workflow forwards it to docker build as a --build-arg. Dockerfile
declares ARG RUNTIME_VERSION before the pip install layer so cache
key is sensitive to the version. The pip install RUN does an extra
targeted upgrade to guarantee the exact version when ARG is set.

Pairs with molecule-ci PR #12 + molecule-core PR #2181.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-27 07:47:52 -07:00
Hongming Wang
076ac2b67e fix: add Adapter alias + qualify bare runtime imports
Two compounding bugs from the post-#87 extraction caught by today's
template sweep (matches the same fixes already shipped in claude-code
and gemini-cli):

1. adapter.py never aliased LangGraphAdapter to the contract name
   `Adapter`, which `molecule_runtime.adapters.get_adapter()` reads
   via `getattr(mod, "Adapter")`. Without it, every workspace
   startup fails preflight with "no \`Adapter\` class is exported".

2. Two bare imports of runtime modules
   (`from agent`, `from a2a_executor`) never got qualified to
   `from molecule_runtime.X import Y`. They worked when runtime was
   bundled into workspace/ but explode in the standalone template
   repo with ModuleNotFoundError.

Same migration debt class fixed for hermes (a2a-sdk migration),
claude-code (5 imports), gemini-cli (4 imports + alias) earlier today.
Both gates now in molecule-ci PR #8 will catch this class of bug
at PR time going forward.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-27 05:51:29 -07:00
rabbitblood
dcac0a2c94 chore(ci): enroll in org-wide secret-scan reusable workflow (Molecule-AI/molecule-core#2109) 2026-04-26 20:09:27 -07:00
Hongming Wang
5f91226191
ci(publish-image): accept repository_dispatch from monorepo runtime publish (#7)
Adds 'repository_dispatch' trigger (event-type: runtime-published) so
molecule-core's publish-runtime.yml cascade job can fire this template's
image rebuild after a new molecule-ai-workspace-runtime PyPI release.

Without this, every runtime release waited for the next push: main /
manual workflow_dispatch to propagate to the published image. With it,
runtime fixes flow monorepo → PyPI → all 8 template images
automatically.

Part of the runtime CD chain. See molecule-core docs/workspace-runtime-package.md.

Co-authored-by: Hongming Wang <hongmingwangalt@gmail.com>
2026-04-26 12:42:24 -07:00
Hongming Wang
2a2d314c8a
Merge pull request #6 from Molecule-AI/chore/add-gitattributes-lf
chore: enforce LF line endings on .sh/.py/.yaml
2026-04-24 01:04:03 -07:00
rabbitblood
8355af17b6 chore: enforce LF line endings on .sh/.py/.yaml/Dockerfile
Pin LF on shell, Python, YAML, and Dockerfile so Windows Docker Desktop
checkouts don't introduce CRLF that breaks #!/bin/sh shebangs in the
container — that exact failure mode took down 14 workspaces during
#1933 fix v1 (exec /entrypoint.sh: no such file or directory cascade).

Same pattern as the .gitattributes already in
molecule-ai-workspace-template-claude-code, applied to the other 7
template repos.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-24 00:36:46 -07:00
Hongming Wang
3095ee8a19
Merge pull request #5 from Molecule-AI/ci/add-publish-image-workflow
ci: publish image to GHCR via molecule-ci reusable workflow
2026-04-22 12:12:19 -07:00
Hongming Wang
a6b4d309e9 ci: publish image to GHCR on main via molecule-ci reusable workflow
Adds a one-line caller for the publish-template-image.yml reusable
workflow in molecule-ci. On every push to main, this repo's
Dockerfile is now built and pushed to
ghcr.io/molecule-ai/workspace-template-langgraph:latest (plus a per-commit
sha tag). Closes the gap where template changes required a manual
tenant-side rebuild.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-22 12:11:23 -07:00
molecule-ai[bot]
d4752297bb
fix(config): add models[] array for canvas model dropdown (#4)
Co-authored-by: Molecule AI Plugin-Dev <plugin-dev@agents.moleculesai.app>
2026-04-22 19:00:46 +00:00
molecule-ai[bot]
10059a7a58
Merge pull request #2 from Molecule-AI/docs/sync-docs-to-main
docs: add CLAUDE.md, known-issues.md, and runbooks/local-dev-setup.md to main
2026-04-21 11:14:41 +00:00
2f3d124ffe chore: re-trigger CI with molecule-ci inline scanner fix 2026-04-21 11:13:37 +00:00
40b4309066 chore: re-trigger CI with molecule-ci fix 2026-04-21 11:11:24 +00:00
7ccb7e5f6a chore: re-trigger CI after molecule-ci fix 2026-04-21 11:06:54 +00:00
c4b726e78c ci: add .molecule-ci/scripts/ (validate-workspace-template.py + requirements.txt) 2026-04-21 11:01:04 +00:00
85dfd699d1 docs: add CLAUDE.md, known-issues.md, and runbooks/local-dev-setup.md
Sync docs from master to main (default branch).
2026-04-21 10:54:40 +00:00
Hongming Wang
11afacbbdc
Merge pull request #1 from Molecule-AI/chore/credentials-gitignore
chore: gitignore credentials
2026-04-16 09:23:15 -07:00
rabbitblood
8a108d908d chore: gitignore credentials for molecule-ai-workspace-template-langgraph
Adds standard credential gitignore (.env / *.pem / .secrets/ / .auth_token).
Per-CEO directive 2026-04-16: every plugin and template repo should
gitignore credentials so self-hosters can't accidentally commit real
tokens to public repos.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-16 09:16:08 -07:00
Hongming Wang
cae6377e2e ci: trigger rerun with fixed validation scripts 2026-04-16 04:49:57 -07:00
Hongming Wang
d19cbf39b9 fix: rewrite config.yaml with correct YAML formatting 2026-04-16 04:47:04 -07:00
Hongming Wang
5f097f41bc fix: add missing runtime + template_schema_version to config.yaml 2026-04-16 04:45:25 -07:00
Hongming Wang
2819cf76da ci: add standard workspace template validation workflow 2026-04-16 04:43:14 -07:00
Hongming Wang
9cbb7310e8 feat: add adapter code + Dockerfile for standalone deployment
Adapters extracted from molecule-monorepo/workspace-template.
Uses molecule-ai-workspace-runtime PyPI package for shared infrastructure.

- adapter.py — runtime-specific adapter class
- requirements.txt — runtime-specific deps + molecule-ai-workspace-runtime
- Dockerfile — FROM python:3.11-slim, pip install, COPY adapter, molecule-runtime entrypoint
- ADAPTER_MODULE=adapter tells the runtime to load this repo's Adapter class

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-16 04:27:22 -07:00
Hongming Wang
d8962d52e7 feat: initial template content (extracted from molecule-monorepo) 2026-04-16 03:05:41 -07:00