Commit Graph

4500 Commits

Author SHA1 Message Date
molecule-ai[bot]
84c92e561f
docs(blog): deploy anywhere — Fly Machines + control plane provisioners
Closes #561
2026-04-17 00:38:06 +00:00
molecule-ai[bot]
1225e9429d fix(canvas): hydration error UI (#554), radio arrow-key nav (#556), zoom-to-team context menu (#557) (#565)
- #554 CRITICAL: Add hydrationError state to Zustand store; catch handler now
  calls setHydrationError instead of silent console.error; page renders a
  full-screen zinc-950 error banner with a Retry button that reloads the page
- #556 MEDIUM: Add roving tabIndex + ArrowDown/Up/Left/Right keyboard handler
  to the tier radio group in CreateWorkspaceDialog (WCAG 2.1 compliant)
- #557 MEDIUM: Add "Zoom to Team" menu item to ContextMenu (visible only when
  node has children); dispatches molecule:zoom-to-team for keyboard accessibility
- Bonus: add missing 'use client' directive to RevealToggle.tsx

Co-authored-by: Molecule AI Frontend Engineer <frontend-engineer@agents.moleculesai.app>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-17 00:35:54 +00:00
molecule-ai[bot]
b37f71b6da
fix(canvas): hydration error UI (#554), radio arrow-key nav (#556), zoom-to-team context menu (#557) (#565)
- #554 CRITICAL: Add hydrationError state to Zustand store; catch handler now
  calls setHydrationError instead of silent console.error; page renders a
  full-screen zinc-950 error banner with a Retry button that reloads the page
- #556 MEDIUM: Add roving tabIndex + ArrowDown/Up/Left/Right keyboard handler
  to the tier radio group in CreateWorkspaceDialog (WCAG 2.1 compliant)
- #557 MEDIUM: Add "Zoom to Team" menu item to ContextMenu (visible only when
  node has children); dispatches molecule:zoom-to-team for keyboard accessibility
- Bonus: add missing 'use client' directive to RevealToggle.tsx

Co-authored-by: Molecule AI Frontend Engineer <frontend-engineer@agents.moleculesai.app>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-17 00:35:54 +00:00
molecule-ai[bot]
8eb6cd313f docs(devrel): Google ADK runtime tutorial (feat #550) 2026-04-17 00:30:49 +00:00
molecule-ai[bot]
0aae3521ce
docs(devrel): Google ADK runtime tutorial (feat #550) 2026-04-17 00:30:49 +00:00
Hongming Wang
0dd7437fef Merge pull request #550 from Molecule-AI/feat/issue-542-google-adk-adapter
feat(adapters): add google-adk runtime adapter
2026-04-16 17:22:15 -07:00
Hongming Wang
15f55f2fb0
Merge pull request #550 from Molecule-AI/feat/issue-542-google-adk-adapter
feat(adapters): add google-adk runtime adapter
2026-04-16 17:22:15 -07:00
Hongming Wang
54bacf238e Merge pull request #551 from Molecule-AI/fix/settings-hook-dedup
fix(scripts): dedup_settings_hooks + verify — fix 3-4x duplicate hook firings
2026-04-16 17:22:11 -07:00
Hongming Wang
c5ac1bd6ab
Merge pull request #551 from Molecule-AI/fix/settings-hook-dedup
fix(scripts): dedup_settings_hooks + verify — fix 3-4x duplicate hook firings
2026-04-16 17:22:11 -07:00
molecule-ai[bot]
b3e68e1738 fix(devrel): correct capability table — tool_use/vision/streaming are Phase 2d (not yet shipped) 2026-04-17 00:21:02 +00:00
molecule-ai[bot]
9d6f20f0dd
fix(devrel): correct capability table — tool_use/vision/streaming are Phase 2d (not yet shipped) 2026-04-17 00:21:02 +00:00
Molecule AI Backend Engineer
037eef17a7 feat(brand-monitor): add X API pay-per-use brand monitor with surge mode
Adds brand-monitor/ — a cron-based X API v2 poller that posts new Molecule AI
brand mentions to Slack #brand-monitoring.  Surge mode enables 15-min polling
for launch days / crisis windows; state persisted in .surge_state.json so
restarts within an active window continue in surge mode.

Closes #549

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-17 00:19:06 +00:00
Molecule AI Backend Engineer
85db648da3 feat(brand-monitor): add X API pay-per-use brand monitor with surge mode
Adds brand-monitor/ — a cron-based X API v2 poller that posts new Molecule AI
brand mentions to Slack #brand-monitoring.  Surge mode enables 15-min polling
for launch days / crisis windows; state persisted in .surge_state.json so
restarts within an active window continue in surge mode.

Closes #549

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-17 00:19:06 +00:00
molecule-ai[bot]
30c8185ce0 docs(devrel): Hermes multi-provider dispatch tutorial (Phase 2a/2b/2c, issue #513) 2026-04-17 00:12:52 +00:00
molecule-ai[bot]
0d38d05d6f
docs(devrel): Hermes multi-provider dispatch tutorial (Phase 2a/2b/2c, issue #513) 2026-04-17 00:12:52 +00:00
c4463dbe8d fix(scripts): add dedup_settings_hooks + verify utilities
molecule_runtime's _deep_merge_hooks() uses unconditional list.extend()
when merging plugin settings-fragment.json files. On every plugin install
or reinstall each hook handler is re-appended, causing 3-4x duplicate
firings per event.

scripts/dedup_settings_hooks.py — idempotent live fix (reads via
/proc/*/root, no docker CLI required). Safe to re-run.
scripts/verify_settings_hooks.py — exits 1 if any container still has
duplicate hooks; used in CI health checks and manual audits.

Upstream fix needed in molecule_runtime._deep_merge_hooks() to
deduplicate by (matcher, frozenset(commands)) before writing. Track
separately.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-17 00:12:07 +00:00
b69e50d98c fix(scripts): add dedup_settings_hooks + verify utilities
molecule_runtime's _deep_merge_hooks() uses unconditional list.extend()
when merging plugin settings-fragment.json files. On every plugin install
or reinstall each hook handler is re-appended, causing 3-4x duplicate
firings per event.

scripts/dedup_settings_hooks.py — idempotent live fix (reads via
/proc/*/root, no docker CLI required). Safe to re-run.
scripts/verify_settings_hooks.py — exits 1 if any container still has
duplicate hooks; used in CI health checks and manual audits.

Upstream fix needed in molecule_runtime._deep_merge_hooks() to
deduplicate by (matcher, frozenset(commands)) before writing. Track
separately.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-17 00:12:07 +00:00
Molecule AI Backend Engineer
4e14bc71b3 feat(adapters): add Google ADK runtime adapter (#542)
Implements WorkspaceAdapter for Google's Agent Development Kit (google-adk
v1.x, Apache-2.0). Ships four files under workspace-template/adapters/google-adk/:

- adapter.py — GoogleADKAdapter + GoogleADKA2AExecutor (100% test coverage)
- requirements.txt — pinned google-adk==1.30.0 + google-genai>=1.16.0
- README.md — overview, install, usage, config, architecture diagram
- test_adapter.py — 46 unit tests, all passing, no live API calls

Supports AI Studio (GOOGLE_API_KEY) and Vertex AI (GOOGLE_GENAI_USE_VERTEXAI=1).
Model prefix stripping: "google:gemini-2.0-flash" → "gemini-2.0-flash".
Error sanitization mirrors the hermes_executor convention.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-17 00:08:17 +00:00
Molecule AI Backend Engineer
dbcea7f191 feat(adapters): add Google ADK runtime adapter (#542)
Implements WorkspaceAdapter for Google's Agent Development Kit (google-adk
v1.x, Apache-2.0). Ships four files under workspace-template/adapters/google-adk/:

- adapter.py — GoogleADKAdapter + GoogleADKA2AExecutor (100% test coverage)
- requirements.txt — pinned google-adk==1.30.0 + google-genai>=1.16.0
- README.md — overview, install, usage, config, architecture diagram
- test_adapter.py — 46 unit tests, all passing, no live API calls

Supports AI Studio (GOOGLE_API_KEY) and Vertex AI (GOOGLE_GENAI_USE_VERTEXAI=1).
Model prefix stripping: "google:gemini-2.0-flash" → "gemini-2.0-flash".
Error sanitization mirrors the hermes_executor convention.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-17 00:08:17 +00:00
Hongming Wang
afc6654dd2 Merge pull request #546 from Molecule-AI/fix/restore-cp-provisioner
fix: restore CP provisioner for EC2 workspace deployment
2026-04-16 14:26:04 -07:00
Hongming Wang
4f0da825ed
Merge pull request #546 from Molecule-AI/fix/restore-cp-provisioner
fix: restore CP provisioner for EC2 workspace deployment
2026-04-16 14:26:04 -07:00
Hongming Wang
925da9d6c2 fix: restore cp_provisioner.go updated for EC2 backend
The CP provisioner calls POST /cp/workspaces/provision which now
creates EC2 instances (not Fly Machines). The tenant platform
auto-activates this when MOLECULE_ORG_ID is set.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-16 14:25:43 -07:00
Hongming Wang
737dd1999b fix: restore cp_provisioner.go updated for EC2 backend
The CP provisioner calls POST /cp/workspaces/provision which now
creates EC2 instances (not Fly Machines). The tenant platform
auto-activates this when MOLECULE_ORG_ID is set.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-16 14:25:43 -07:00
Hongming Wang
19815817c1 Merge pull request #536 from Molecule-AI/feat/issue-496-hermes-reasoning
feat(hermes): HermesA2AExecutor — native reasoning for Hermes 4 via OpenAI-compat API (#496)
2026-04-16 14:15:16 -07:00
Hongming Wang
347245bdd5
Merge pull request #536 from Molecule-AI/feat/issue-496-hermes-reasoning
feat(hermes): HermesA2AExecutor — native reasoning for Hermes 4 via OpenAI-compat API (#496)
2026-04-16 14:15:16 -07:00
Hongming Wang
7871fd7251 Merge pull request #532 from Molecule-AI/fix/issue-450-csp-nonce
fix(canvas): nonce-based CSP replaces unsafe-inline/unsafe-eval in production
2026-04-16 14:15:12 -07:00
Hongming Wang
5caefc5909
Merge pull request #532 from Molecule-AI/fix/issue-450-csp-nonce
fix(canvas): nonce-based CSP replaces unsafe-inline/unsafe-eval in production
2026-04-16 14:15:12 -07:00
Hongming Wang
b4d214692f Merge pull request #543 from Molecule-AI/chore/eco-watch-2026-04-16
chore(docs): eco-watch 2026-04-16 — Paperclip, Google ADK, Chrome DevTools MCP
2026-04-16 14:04:51 -07:00
Hongming Wang
21fa78689d
Merge pull request #543 from Molecule-AI/chore/eco-watch-2026-04-16
chore(docs): eco-watch 2026-04-16 — Paperclip, Google ADK, Chrome DevTools MCP
2026-04-16 14:04:51 -07:00
Hongming Wang
fbe48ba4f0 Merge pull request #538 from Molecule-AI/devrel/gemini-cli-demo
devrel: gemini-cli runtime adapter demo (closes #534)
2026-04-16 14:04:47 -07:00
Hongming Wang
8789bfef53
Merge pull request #538 from Molecule-AI/devrel/gemini-cli-demo
devrel: gemini-cli runtime adapter demo (closes #534)
2026-04-16 14:04:47 -07:00
molecule-ai[bot]
fcee2a1863 docs: brand discoverability audit — Molecule AI SERP pollution (2026-04-16) 2026-04-16 20:46:46 +00:00
molecule-ai[bot]
0324984789
docs: brand discoverability audit — Molecule AI SERP pollution (2026-04-16) 2026-04-16 20:46:46 +00:00
Hongming Wang
0bdb0e899e Merge pull request #528 from Molecule-AI/fix/issue-450-csp-api-strict
fix(middleware): strict CSP on API routes, permissive for canvas (#450)
2026-04-16 13:46:20 -07:00
Hongming Wang
b8a1503363
Merge pull request #528 from Molecule-AI/fix/issue-450-csp-api-strict
fix(middleware): strict CSP on API routes, permissive for canvas (#450)
2026-04-16 13:46:20 -07:00
molecule-ai[bot]
def46729e8 Merge pull request #531 from Molecule-AI/docs/devrel-feat-480
docs(devrel): Lark / Feishu channel adapter tutorial (feat #480)
2026-04-16 20:46:19 +00:00
molecule-ai[bot]
1b73307e15
Merge pull request #531 from Molecule-AI/docs/devrel-feat-480
docs(devrel): Lark / Feishu channel adapter tutorial (feat #480)
2026-04-16 20:46:19 +00:00
Hongming Wang
a03594db25 Merge pull request #527 from Molecule-AI/feat/issue-493-hermes-provider-picker
feat(canvas): Hermes provider picker + API key field in CreateWorkspaceDialog
2026-04-16 13:46:16 -07:00
Hongming Wang
1c20892671
Merge pull request #527 from Molecule-AI/feat/issue-493-hermes-provider-picker
feat(canvas): Hermes provider picker + API key field in CreateWorkspaceDialog
2026-04-16 13:46:16 -07:00
Hongming Wang
4cb74b91ed Merge pull request #509 from Molecule-AI/docs/devrel-feat-379
docs(devrel): gemini-cli runtime tutorial (feat #379)
2026-04-16 13:46:13 -07:00
Hongming Wang
c54379586b
Merge pull request #509 from Molecule-AI/docs/devrel-feat-379
docs(devrel): gemini-cli runtime tutorial (feat #379)
2026-04-16 13:46:13 -07:00
Molecule AI Research Lead
b46f1fe2da docs(ecosystem-watch): add Paperclip, Google ADK, Chrome DevTools MCP entries (2026-04-16)
Three new entries from today's eco-watch scan:

- paperclipai/paperclip (~54.8k ): hierarchical CEO/manager/worker multi-agent
  orchestration with budget constraints and audit trails. Highest-star agent-
  orchestration OSS project tracked; direct conceptual competitor to our "AI company"
  thesis. Signals: watch for persistent memory and visual org chart additions.

- google/adk-python (~19k , v1.29.0): Google's official multi-agent SDK. Pairs with
  Gemini CLI (already tracked) to form Google's full agent stack. Evaluation teams will
  weigh ADK + Gemini CLI vs Molecule AI. Spawns issue #542 (google-adk adapter).

- ChromeDevTools/chrome-devtools-mcp (~35.5k ): official ChromeDevTools MCP server,
  23 tools, already the de facto standard for browser tool use across 29 MCP clients.
  Replaces our bespoke Puppeteer/CDP integration with a standard skill install.
  Spawns issue #540 (browser-automation plugin migration).

GH issues filed: #540 (browser-automation), #541 (budget_limit), #542 (google-adk adapter)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-16 20:45:15 +00:00
Molecule AI Research Lead
65dc334225 docs(ecosystem-watch): add Paperclip, Google ADK, Chrome DevTools MCP entries (2026-04-16)
Three new entries from today's eco-watch scan:

- paperclipai/paperclip (~54.8k ): hierarchical CEO/manager/worker multi-agent
  orchestration with budget constraints and audit trails. Highest-star agent-
  orchestration OSS project tracked; direct conceptual competitor to our "AI company"
  thesis. Signals: watch for persistent memory and visual org chart additions.

- google/adk-python (~19k , v1.29.0): Google's official multi-agent SDK. Pairs with
  Gemini CLI (already tracked) to form Google's full agent stack. Evaluation teams will
  weigh ADK + Gemini CLI vs Molecule AI. Spawns issue #542 (google-adk adapter).

- ChromeDevTools/chrome-devtools-mcp (~35.5k ): official ChromeDevTools MCP server,
  23 tools, already the de facto standard for browser tool use across 29 MCP clients.
  Replaces our bespoke Puppeteer/CDP integration with a standard skill install.
  Spawns issue #540 (browser-automation plugin migration).

GH issues filed: #540 (browser-automation), #541 (budget_limit), #542 (google-adk adapter)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-16 20:45:15 +00:00
molecule-ai[bot]
96960fde89 devrel: gemini-cli demo README walkthrough (issue #534) 2026-04-16 20:43:22 +00:00
molecule-ai[bot]
feb412852f
devrel: gemini-cli demo README walkthrough (issue #534) 2026-04-16 20:43:22 +00:00
molecule-ai[bot]
06bf63078f devrel: Makefile for gemini-cli demo (issue #534) 2026-04-16 20:42:35 +00:00
molecule-ai[bot]
04f4ae9b72
devrel: Makefile for gemini-cli demo (issue #534) 2026-04-16 20:42:35 +00:00
molecule-ai[bot]
99058f60db devrel: gemini-cli demo script (issue #534) 2026-04-16 20:42:33 +00:00
molecule-ai[bot]
1e4c125959
devrel: gemini-cli demo script (issue #534) 2026-04-16 20:42:33 +00:00
Molecule AI Backend Engineer
b7c8f18ab2 feat(hermes): expose reasoning mode for Hermes 4 via OpenAI-compat API (#496)
Hermes 4 is a hybrid-reasoning model trained on <think> tags; without asking
for thinking we pay flagship $/tok but get non-reasoning quality. This adds a
dedicated HermesA2AExecutor that dispatches to any OpenAI-compat endpoint
(OpenRouter, Nous Portal) and enables native reasoning for Hermes 4 models.

Key decisions:
- ProviderConfig + _reasoning_supported() detect Hermes 4 by model slug
  substring ("hermes-4", "hermes4") — case-insensitive, no config needed
- extra_body={"reasoning": {"enabled": True}} sent only to Hermes 4 entries;
  Hermes 3 path unchanged (no extra_body, no regressions)
- choices[0].message.reasoning + reasoning_details extracted and written to
  an OTEL span (hermes.reasoning) — deliberately NOT echoed in the A2A reply
  so the reasoning trace never contaminates the agent's next-turn context
- API key / base URL default to OPENAI_API_KEY / OPENAI_BASE_URL env vars
  with openrouter.ai/api/v1 as the fallback endpoint
- _client injection parameter for unit tests (no live API calls needed)
- Error sanitization: only exception class name surfaces to user (mirrors
  sanitize_agent_error() convention from cli_executor.py)

Test coverage: 35 tests, 100% coverage on all new code paths including:
  - _reasoning_supported() — Hermes 4/3/unknown/empty/uppercase
  - ProviderConfig — field assignment and capability flags
  - extra_body presence for Hermes 4, absence for Hermes 3
  - reasoning not in A2A reply; _log_reasoning called when trace present
  - reasoning_details forwarded; span attributes set correctly
  - Telemetry failure swallowed (never blocks response)
  - API error → sanitized class-name-only reply
  - cancel() → TaskStatusUpdateEvent(state=canceled)

Full suite: 990 passed, 0 failed (no regressions).

Resolves #496

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-16 20:38:45 +00:00