You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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.
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 engine — wave 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 + artifacts — wave 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.
Sub-epic: the CLI rendering of WAVE Composer —
wave composeas a finished product surface, not just a merged command.POST https://api.wave.online/v1/composetakes 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/composeMERGED 2026-09-06T17:16:23Z (feat/wave-compose). The command exists.POST https://api.wave.online/v1/composewith no credentials returns402with an x402 payment challenge naming"resource": "/v1/compose". With a key holdingcomposer:writeit returns200, 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.jsonreturns200and declaresauth.scope: "composer:write"andpricing.meter: "wave_compose_builds".Done means (live proof)
wave compose "<intent>"prints a proposal fetched fromPOST 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 livestagesandpriceRows.wave composecan hand its proposal to a run, stream stage progress as it happens, and list the resulting artifacts.stages,priceRows,scopes,engine,executes,flowId,candidates), not invented ones. A test fails if a documented key is absent from a live response.wave composefrom a clean install.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.