forked from molecule-ai/molecule-core
e502003c74
4 Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
4e61ac88c3 |
feat(template): restructure molecule-dev org template to 39-agent hierarchy
Comprehensive rewrite of the Molecule AI dev team org template:
- Rename agents to {team}-{role} convention (e.g., core-be, cp-lead, app-qa)
- Add 5 new team leads: Core Platform Lead, Controlplane Lead, App & Docs Lead, Infra Lead, SDK Lead
- Add new roles: Release Manager, Integration Tester, Technical Writer, Infra-SRE, Infra-Runtime-BE, SDK-Dev, Plugin-Dev
- Delete triage-operator and triage-operator-2 (leads own triage now)
- Set default model to MiniMax-M2.7, tier 3, idle_interval_seconds 900
- Update org.yaml category_routing to new agent names
- Add orchestrator-pulse schedules for all leads (*/5 cron)
- Add pick-up-work schedules for engineers (*/15 cron)
- Add qa-review schedules for QA agents (*/15 cron)
- Add security-scan schedules for security agents (*/30 cron)
- Add release-cycle and e2e-test schedules for Release Manager and Integration Tester
- Update marketing agents with web search MCP and media generation capabilities
- All schedule prompts reference Molecule-AI/internal for PLAN.md and known-issues.md
- Un-ignore org-templates/molecule-dev/ in .gitignore for version tracking
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
|
||
|
|
d424bd947f |
chore: remove extracted directories, add manifest-driven Docker builds
Remove plugins/, workspace-configs-templates/, org-templates/ dirs (now in standalone repos). Add manifest.json listing all 33 repos and scripts/clone-manifest.sh to clone them. Both Dockerfiles now use the manifest script instead of 33 hardcoded git-clone lines. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> |
||
|
|
665f7f6313 |
feat(org-templates): Phase 4 — atomize each role to <role>/workspace.yaml
Part 4 of 4 — terminal step of the org.yaml scalability refactor. Each role in the molecule-dev template now owns its own workspace.yaml file, colocated with the existing system-prompt.md / initial-prompt.md / idle-prompt.md / schedules/*.md. Team files shrink to a leader's own definition plus a list of !include refs. ## Platform change `resolveYAMLIncludes` now uses a TWO-ROOT model: - Path resolution is relative to the INCLUDING file's directory (natural sibling + cousin refs, C-include / Sass @import convention). - Security bound is the ORIGINAL org root (`rootDir`), preserved across all recursion depths. Sibling-dir refs like `../my-role/workspace.yaml` from a team file are now allowed (they stay inside the org template); refs that escape the root still error. Regression coverage: new `TestResolveYAMLIncludes_SiblingDirAccess` reproduces the Phase 4 pattern (team file at `teams/x.yaml` referencing `../<role>/workspace.yaml`) — fails without the fix, passes with. ## Template change Atomized 15 child workspaces across 3 team files: - `teams/research.yaml`: 58 → 30 lines; 3 children now !include refs - `teams/dev.yaml`: 222 → 38 lines; 6 children now !include refs - `teams/marketing.yaml`: 143 → 28 lines; 6 children now !include refs Each role now has `<role>/workspace.yaml` colocated with its prompts. Example `frontend-engineer/` directory: frontend-engineer/ ├── workspace.yaml (24 lines — name/role/tier/canvas/plugins/...) ├── system-prompt.md (from earlier phases) ├── initial-prompt.md ├── idle-prompt.md └── (no schedules for this role — but if added, schedules/<slug>.md) ## File-size progression across all 4 phases | State | org.yaml | total `.yaml` in tree | |---|---:|---:| | Before (main) | 1801 lines / 108 KB | 1801 / 108 KB (one file) | | After Phase 1 (#389) | 1687 | 1687 / 101 KB | | After Phase 2 (#390) | 676 | 676 / 35 KB | | After Phase 3 (#393) | 114 | 683 (1 + 6 teams) / 33 KB | | **After this PR** | **114** | **~698** (1 + 6 + 15 workspace) / 35 KB | Aggregate size is flat — the decrease came from prompt externalization in Phases 1/2; Phases 3/4 reorganize structure without adding content. The win is readability and ownership: - Every individual file fits on 1-2 screens. - Adding a new role is now: create `<role>/` dir, add `workspace.yaml` + `system-prompt.md` + prompts, add ONE `!include` line to the team file. No touching of aggregated mega-YAML. - Team files can be reviewed + merged independently. ## Tests All 10 `TestResolveYAMLIncludes_*` tests pass, including the real-template integration test (`TestResolveYAMLIncludes_RealMoleculeDev`) which now walks org.yaml → teams/pm.yaml → teams/research.yaml → ../market-analyst/ workspace.yaml and validates the full 21-role tree unmarshals cleanly. Plus all existing `TestResolvePromptRef` + `TestOrgYAML` + `TestInitialPrompt` suites stay green. ## Ops followup After merging all 4 phases and deploying, the `POST /org/import` endpoint should produce a workspace tree byte-identical to the pre-refactor state. Verify with: diff <(curl POST /org/import before) <(curl POST /org/import after) or by spot-checking: - `/configs/config.yaml` bodies across all 21 workspaces - `workspace_schedules.prompt` row values The externalization is lossless — YAML literal to file and back recovers the same string modulo trailing-whitespace normalization. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> |
||
|
|
24a882ccc9 |
feat(org-templates): Phase 3 — !include directive + split org.yaml into team files
Part 3 of 4 in the scalability refactor. Adds YAML `!include` support to the org importer and splits molecule-dev/org.yaml (676 lines post- Phase 2) into 6 team / role files; top-level org.yaml drops to 114 lines of pure scaffolding. ## Platform changes New `platform/internal/handlers/org_include.go`: - `resolveYAMLIncludes(data, baseDir)` — pre-processes a YAML document, expanding any scalar tagged `!include <path>` with the parsed content of the referenced file. - Path resolution via `resolveInsideRoot` so a crafted `!include ../../etc/passwd` can't escape the org template directory (same defense the existing `files_dir` copy uses). - Nested includes supported: each included file carries its own search root (its directory), so `teams/pm.yaml` with `!include research.yaml` resolves to `teams/research.yaml` — matching the convention of C-include / Sass @import / most package systems. - Cycle detection via visited-set keyed on absolute path; belt-and- braces `maxIncludeDepth = 16` cap in case symlinks or path normalization defeats the set. - Inline-template mode (POST /org/import with raw JSON body, no `dir`) errors cleanly when a file ref is used — can't resolve without a base. Wired into both `ListTemplates` (so /org/templates shows an accurate workspace count after the split) and `Import` (expansion happens before unmarshal into OrgTemplate). ## Template changes molecule-dev/org.yaml now contains only: - name + description - defaults (runtime, plugins, category_routing, initial_prompt text) - `workspaces: [!include teams/pm.yaml, !include teams/marketing.yaml]` New files: - `teams/pm.yaml` — PM top-level, children are !include refs - `teams/research.yaml` — Research Lead + Market Analyst + Technical Researcher + Competitive Intelligence (inline children) - `teams/dev.yaml` — Dev Lead + FE/BE/DevOps/Security/QA/UIUX (inline) - `teams/marketing.yaml` — Marketing Lead + DevRel/PMM/Content/ Community/SEO/Social (inline) - `teams/documentation-specialist.yaml` — leaf - `teams/triage-operator.yaml` — leaf ## File-size impact | State | org.yaml lines | total config size | |---|---:|---:| | Before (main) | 1801 | 108 KB | | After Phase 1 (#389) | 1687 | 101 KB | | After Phase 2 (#390) | 676 | 35 KB | | After this PR | **114** | **4 KB** (org.yaml only) | With the 6 team files (total ~570 lines of structural yaml), every file is now under 230 lines and individually readable without scrolling past a single team's boundaries. ## Tests `platform/internal/handlers/org_include_test.go` — 9 cases: - Flat include (single file, single workspace) - Nested include (file → file → file) - Traversal rejection (`../secret.yaml`, `../../secret.yaml`) - Cycle detection (a↔b) - Empty path error - Missing file error - Inline-template error (baseDir empty) - No-op when YAML has no includes (safety: we always run the preprocessor) - **Integration**: load the real `org-templates/molecule-dev/org.yaml`, resolve includes, unmarshal into OrgTemplate, verify PM + Marketing Lead are top-level and PM has ≥4 children after expansion. All 9 pass + existing `TestResolvePromptRef` + `TestOrgYAML` suites stay green. ## Ownership implication Each team file can now be owned + reviewed independently. When the marketing team adds a 7th role, the diff is in `teams/marketing.yaml` alone — no merge conflicts against PM or research changes in the same review window. Same for the eventual engineer team, security team, etc. ## What's next - **Phase 4 (queued):** per-workspace atomization. Each role gets `<role>/workspace.yaml`; team files shrink to a list of !include refs. Terminal step in the scalability arc — at that point adding a new role is one new file under `org-templates/molecule-dev/<role>/` plus one line in the team's manifest. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> |