From eaecdb5c46fa44815dfd6f61d2c577ac5b1c70ff Mon Sep 17 00:00:00 2001 From: Hongming Wang Date: Thu, 16 Apr 2026 00:00:10 -0700 Subject: [PATCH] config(org): add Telegram to Dev Lead and Research Lead (#385) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat(adapters): add gemini-cli runtime adapter (closes #332) Adds a `gemini-cli` workspace runtime backed by Google's Gemini CLI (@google/gemini-cli, ~101k ★, Apache 2.0). Mirrors the claude-code adapter pattern: Docker image installs the CLI, CLIAgentExecutor drives the subprocess, A2A MCP tools wire via ~/.gemini/settings.json. Changes: - workspace-template/adapters/gemini_cli/ — new adapter (Dockerfile, adapter.py, __init__.py, requirements.txt); setup() seeds GEMINI.md from system-prompt.md and injects A2A MCP server into settings.json - workspace-template/cli_executor.py — adds gemini-cli to RUNTIME_PRESETS (--yolo flag, -p prompt, --model, GEMINI_API_KEY env auth); adds mcp_via_settings preset flag to skip --mcp-config injection for runtimes that own their own settings file - workspace-configs-templates/gemini-cli/ — default config.yaml + system-prompt.md template - tests/test_adapters.py — adds gemini-cli to expected adapter set - CLAUDE.md — documents new runtime row in the image table Requires: GEMINI_API_KEY global secret. Build: bash workspace-template/build-all.sh gemini-cli Co-Authored-By: Claude Sonnet 4.6 * fix(provisioner): add gemini-cli to RuntimeImages map Without this entry, POST /workspaces with runtime:gemini-cli falls back to workspace-template:langgraph (wrong image, missing gemini dep) instead of workspace-template:gemini-cli. Every runtime MUST have an entry here. Co-Authored-By: Claude Sonnet 4.6 * config(org): add Telegram to Dev Lead and Research Lead (closes #383) Completes leadership-tier Telegram coverage: PM ✓ DevOps ✓ Security ✓ → Dev Lead ✓ Research Lead ✓ Both roles produce high-value async output (architecture decisions, eco-watch summaries) that was invisible until the user polled the canvas. Same bot_token/chat_id secrets as the other three roles — no new credentials required. Co-Authored-By: Claude Sonnet 4.6 --------- Co-authored-by: DevOps Engineer Co-authored-by: Claude Sonnet 4.6 --- org-templates/molecule-dev/org.yaml | 18 ++++++++++++++++++ platform/internal/provisioner/provisioner.go | 3 ++- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/org-templates/molecule-dev/org.yaml b/org-templates/molecule-dev/org.yaml index 0dbe2533..a81cff18 100644 --- a/org-templates/molecule-dev/org.yaml +++ b/org-templates/molecule-dev/org.yaml @@ -201,6 +201,15 @@ workspaces: # Research roles add browser-automation for live web scraping # (product pages, GitHub trending, docs). plugins: [browser-automation] + # #383: notify on high-value async output (eco-watch summaries, + # competitive intelligence findings) via Telegram so they're not + # invisible until the user manually checks memory/canvas. + channels: + - type: telegram + config: + bot_token: ${TELEGRAM_BOT_TOKEN} + chat_id: ${TELEGRAM_CHAT_ID} + enabled: true initial_prompt: | You just started as Research Lead. Set up silently — do NOT contact other agents. 1. Clone the repo: git clone https://github.com/${GITHUB_REPO}.git /workspace/repo 2>/dev/null || (cd /workspace/repo && git pull) @@ -420,6 +429,15 @@ workspaces: # review prompts. Issue #133. plugins: [molecule-skill-code-review, molecule-skill-llm-judge] canvas: { x: 650, y: 250 } + # #383: notify on critical engineering decisions, PR blocks, and + # cross-team blockers via Telegram — completes the leadership tier + # (PM + Dev Lead + Research Lead + DevOps + Security all on Telegram). + channels: + - type: telegram + config: + bot_token: ${TELEGRAM_BOT_TOKEN} + chat_id: ${TELEGRAM_CHAT_ID} + enabled: true initial_prompt: | You just started as Dev Lead. Set up silently — do NOT contact other agents. 1. Clone the repo: git clone https://github.com/${GITHUB_REPO}.git /workspace/repo 2>/dev/null || (cd /workspace/repo && git pull) diff --git a/platform/internal/provisioner/provisioner.go b/platform/internal/provisioner/provisioner.go index 251acb43..e8a4657c 100644 --- a/platform/internal/provisioner/provisioner.go +++ b/platform/internal/provisioner/provisioner.go @@ -32,7 +32,8 @@ var RuntimeImages = map[string]string{ "deepagents": "workspace-template:deepagents", "crewai": "workspace-template:crewai", "autogen": "workspace-template:autogen", - "hermes": "workspace-template:hermes", // Hermes (NousResearch) — adapter.py in adapters/hermes/ + "hermes": "workspace-template:hermes", // Hermes (NousResearch) — adapter.py in adapters/hermes/ + "gemini-cli": "workspace-template:gemini-cli", // Google Gemini CLI — adapters/gemini_cli/Dockerfile } const (