Skip to content

[Actions] cli: wave compose as a finished rendering — save, run, docs on the live shape, release, live e2e #63

Description

@yakimoto

Sub-epic: the CLI rendering of WAVE Composer — wave compose as a finished product surface, not just a merged command.

POST https://api.wave.online/v1/compose takes a plain-language intent and returns a grounded proposal: which WAVE products to chain, in what order, at what live price. The CLI is one of four renderings of that one engine (API, CLI, SDK, MCP); they must all serve the same proposal without re-implementing it.

Today (receipt)

  • feat(compose): add wave compose for POST /v1/compose #61 feat(compose): add wave compose for POST /v1/compose MERGED 2026-09-06T17:16:23Z (feat/wave-compose). The command exists.
  • The engine it calls is live. Probed unauthenticated this session: POST https://api.wave.online/v1/compose with no credentials returns 402 with an x402 payment challenge naming "resource": "/v1/compose". With a key holding composer:write it returns 200, carrying these keys: callShape, engine, executes, flowId, groundedAt, grounding, id, intent, manifestHash, next, priceRows, productIds, scopes, stages, tools.
  • GET https://api.wave.online/.well-known/wave-skills/composer.json returns 200 and declares auth.scope: "composer:write" and pricing.meter: "wave_compose_builds".
  • What is not done: the command has no release cut carrying it, no example grounded on the real response keys above, no save-flow path, no run/progress/artifact support, and no e2e in this repo's CI that calls the live gateway.

Done means (live proof)

  • (a) Compose live against the enginewave compose "<intent>" prints a proposal fetched from POST https://api.wave.online/v1/compose. Receipt: the merged PR (feat(compose): add wave compose for POST /v1/compose #61) plus a captured terminal session showing the live stages and priceRows.
  • (b) Save flow — the composed proposal can be saved through the authenticated bearer path and listed back by id from the CLI.
  • (c) Run + progress + artifactswave compose can hand its proposal to a run, stream stage progress as it happens, and list the resulting artifacts.
  • (d) Examples and docs grounded on the LIVE response shape — every documented example names the keys the API actually returns (stages, priceRows, scopes, engine, executes, flowId, candidates), not invented ones. A test fails if a documented key is absent from a live response.
  • (e) Release cut — a version bump plus a release-workflow run id as the receipt, and the published version runs wave compose from a clean install.
  • (f) e2e vs the live gateway in this repo's CI — a test asserting 402 without a key and the 200 response shape with a key, green, with the run id recorded.

Owner

Lane builds it. Jake crossing: the merge to this public repo's default branch, and any release publish.

Depends on

The runner surface behind (c) is tracked on the API side; (a), (d), (e), (f) are independent and buildable now.

Layer

Actions — the CLI face of WAVE's Knowledge / Actions / Awareness triple.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    category:bugSomething is brokenenhancementNew feature or requestneeds-triageOn the board but missing Type/Area/Prioritysize:LThis PR changes 100-499 lines, ignoring generated filestrust:ownerIssue author is repo owner

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions