Skip to content

feat: add make_type field for octos mofa_make dispatcher (RFC-1)#70

Open
ymote wants to merge 1 commit into
mainfrom
feat/rfc1-make-type-field
Open

feat: add make_type field for octos mofa_make dispatcher (RFC-1)#70
ymote wants to merge 1 commit into
mainfrom
feat/rfc1-make-type-field

Conversation

@ymote

@ymote ymote commented May 26, 2026

Copy link
Copy Markdown
Collaborator

Summary

Companion to the octos RFC-1 PR (octos-org/octos#1290, octos-org/octos#1298). The octos runtime now consolidates the N sibling mofa_* content-generator tools behind a single dispatcher:

mofa_make({ content_type: "slides" | "podcast" | ..., args: {...} })

This PR adds the manifest metadata the octos plugin loader reads to build the dispatcher's content_type enum + per-type description text.

Fields added

  • make_type - the content_type discriminator the LLM selects.
  • content_type_description - short blurb the dispatcher surfaces verbatim.
  • make_target_tool (mofa-podcast only) - explicit override since the conventional name mofa_<make_type> doesn't exist for podcast.

Skills updated

Skill Version bump make_type make_target_tool
mofa-cards 0.4.5 -> 0.4.6 cards (default)
mofa-comic 0.4.5 -> 0.4.6 comic (default)
mofa-frame 0.1.0 -> 0.1.1 frame (default)
mofa-infographic 0.4.5 -> 0.4.6 infographic (default)
mofa-podcast 0.4.6 -> 0.4.7 podcast podcast_generate
mofa-publish 0.1.0 -> 0.1.1 publish (default)
mofa-site 0.1.0 -> 0.1.1 site (default)
mofa-slides 0.5.1 -> 0.5.2 slides (default)
mofa-youtube 0.1.0 -> 0.1.1 video (default)

Not updated (intentionally)

  • mofa-cli - no tools.
  • mofa-fm - voice management (fm_*) is not a content generator; its tools stay top-level.

Backward compatibility

The octos runtime tolerates manifests without these fields - existing deployments continue to expose each mofa_* tool individually until the octos runtime is upgraded. After upgrade, the new fields take effect on the next octos-side load.

Effect after both PRs land

  • LLM sees ONE mofa_make tool (string enum) + companion mofa_describe_content_type.
  • Sibling foreground tools next to a make target (mofa_list_styles next to mofa_slides, podcast_voices next to podcast_generate) stay visible.
  • The deferred generator tools remain callable internally via registry.get(name).
  • The "weak model picks wrong sibling" misroute class is structurally eliminated.

Test plan

  • Each manifest parses as valid JSON.
  • Each make_type value is unique across the 9 manifests.
  • After octos PR #1298 lands, fleet upgrade -> verify mofa_make enum population on /api/status.

Cross-link: octos-org/octos#1290 (RFC), octos-org/octos#1298 (server PR).

Companion to octos PR feat/rfc1-mofa-make-dispatcher (octos#1290 /
PR octos-org/octos#1298). The octos runtime now consolidates the N
sibling mofa_* content-generator tools behind a single dispatcher:

    mofa_make({ content_type: "slides" | "podcast" | ..., args: {...} })

This PR adds the manifest metadata the octos plugin loader reads to
build the dispatcher's content_type enum + per-type description text.

Fields added to each generator skill's manifest.json:
- `make_type`: the content_type discriminator the LLM selects
  (e.g. "slides", "podcast", "site", "publish", "cards", "comic",
  "frame", "video", "infographic").
- `content_type_description`: short blurb (single sentence) the
  octos dispatcher surfaces verbatim in its tool description so the
  LLM has enough context to pick the right content_type.
- `make_target_tool` (mofa-podcast only): explicit override pointing
  at `podcast_generate` since the conventional `mofa_<make_type>`
  -> `mofa_podcast` does not exist; without the override the
  resolver falls back to "first spawn_only:true tool" which is
  ALSO `podcast_generate`, but the explicit form documents intent
  and survives future tool additions.

Skills updated (9 total) + version bumps:
- mofa-cards 0.4.5 -> 0.4.6
- mofa-comic 0.4.5 -> 0.4.6
- mofa-frame 0.1.0 -> 0.1.1
- mofa-infographic 0.4.5 -> 0.4.6
- mofa-podcast 0.4.6 -> 0.4.7
- mofa-publish 0.1.0 -> 0.1.1
- mofa-site 0.1.0 -> 0.1.1
- mofa-slides 0.5.1 -> 0.5.2
- mofa-youtube 0.1.0 -> 0.1.1

NOT updated (intentionally):
- mofa-cli: no tools to register.
- mofa-fm: voice management (fm_*) is not a make_* content generator
  — its tools stay top-level on the LLM-visible surface.

Effect after both PRs land:
- LLM sees ONE `mofa_make` tool (string enum across the 9 content
  types above) + companion `mofa_describe_content_type`.
- Sibling foreground tools next to a make target (`mofa_list_styles`
  next to `mofa_slides`, `podcast_voices` next to `podcast_generate`)
  stay visible to the LLM — only the EXACT generator tool is hidden.
- The deferred generator tools remain callable internally via
  `registry.get(name)` so the dispatcher forwards by name and any
  gateway/test path that calls them directly keeps working.
- The "weak model picks wrong sibling" misroute class
  (PR octos-org/octos#1265, #1283, mini1 k2.6 misroutes 2026-05-24/25,
  mini2 deepseek hand-rolled-deck 2026-05-25) is structurally
  eliminated.

The octos runtime tolerates manifests WITHOUT these fields — existing
deployments continue to expose each mofa_* tool individually until
the octos runtime is upgraded. After upgrade, the new fields take
effect on the next octos-side load.

Cross-link: octos-org/octos#1290 (RFC-1), octos-org/octos#1298 (server).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant