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
Self-contained follow-up work order for ADR-0057 P4 (ask→build explicit handoff). Written for an agent with no prior context. Rolls up to epic #2409.
Background (already shipped — do NOT rebuild)
ADR-0057 P4 landed the explicit "Open in Builder →" handoff across two repos:
cloud — @objectstack/service-ai-studio gained a suggest_builder signal tool + an ask-only builder_handoff skill; the ask agent's instructions now call it to decline-and-redirect an authoring request (ADR-0063). Handler echoes { status: 'build_handoff', handoff: 'build', prompt, packageId? }. Merged: objectstack-ai/cloud#818.
objectui — plugin-chatbotdetectBuilderHandoff lifts that result onto the tool invocation; ChatbotEnhanced renders the "Open in Builder →" card (onOpenBuilder prop). app-shell wires the full-page AiChatPage (ask) + the FAB to navigate to /ai/build?package=…&handoffPrompt=…; the build surface seeds that prompt as its first message. Merged: feat(console-ai): explicit "Open in Builder →" ask→build handoff (ADR-0057 P4) #2439.
Both sides are unit-tested and CI-green. Read: docs/adr/0057-console-ai-chat-one-conversation-docked.md, cloud ADR-0063 (two agents, surface-bound), ADR-0013 (durable turns).
Tasks
1 · Live end-to-end verification (ADR-0054 browser proof)
The one step not verified at merge time: the ask agent actually choosing to call suggest_builder. It was blocked in the authoring session only by that environment's egress policy denying ai-gateway.vercel.sh (403 CONNECT) — not by code or key.
In an environment where the Vercel AI Gateway is reachable (a valid AI_GATEWAY_API_KEY + AI_GATEWAY_MODEL, e.g. a real openai/gpt-4o-mini):
Boot the local stack (cloud/scripts/dev-local/run-stack.sh --with-ui --seed --keep, OBJECTUI_ROOT=<objectui>); put the key in cloud/scripts/dev-local/.env.local (gitignored).
Headless check first: POST /api/v1/ai/agents/ask/chat with a build-shaped message (e.g. "add a priority field to the tasks object") → the stream must contain a suggest_builder tool call whose result carries status: 'build_handoff'.
UI proof: in ask, send that request → the "Open in Builder →" card renders → click → lands on /ai/build?package=…&handoffPrompt=… and the seeded prompt auto-sends. Attach the screenshot(s).
Today v1 carries only { prompt, packageId? }. Upgrade the handoff to carry the ask thread's conversation context into the Builder (durable-turn reference, ADR-0013), so build resumes with what the user already discussed — not just a one-line prompt.
cloud: extend the suggest_builder contract (or add a handoff-context endpoint) to reference the source conversation/turn; define what transfers.
objectui: consume it in the onOpenBuilder path (generalize assistant/assistantBus.ts per the ADR) instead of only the URL handoffPrompt; seed the Builder from the carried context.
Keep the ADR-0063 invariant: explicit, user-initiated switch — never a silent re-route.
3 · FAB dismissal polish (minor)
When "Open in Builder →" is clicked from the console FAB (ConsoleFloatingChatbot), the floating overlay does not auto-close — FloatingChatbot/FloatingChatbotProvider expose no external close control today. Add one so the FAB dismisses when it hands off to the full-page Builder (the full-page AiChatPage handoff already replaces the view, so only the FAB needs this).
References
Epic #2409 · work order #2412 · ADR docs/adr/0057-console-ai-chat-one-conversation-docked.md · merged P4: objectstack-ai/cloud#818 + #2439 · cloud#817 (context-handoff, task 2).
Self-contained follow-up work order for ADR-0057 P4 (ask→build explicit handoff). Written for an agent with no prior context. Rolls up to epic #2409.
Background (already shipped — do NOT rebuild)
ADR-0057 P4 landed the explicit "Open in Builder →" handoff across two repos:
@objectstack/service-ai-studiogained asuggest_buildersignal tool + an ask-onlybuilder_handoffskill; theaskagent's instructions now call it to decline-and-redirect an authoring request (ADR-0063). Handler echoes{ status: 'build_handoff', handoff: 'build', prompt, packageId? }. Merged: objectstack-ai/cloud#818.plugin-chatbotdetectBuilderHandofflifts that result onto the tool invocation;ChatbotEnhancedrenders the "Open in Builder →" card (onOpenBuilderprop).app-shellwires the full-pageAiChatPage(ask) + the FAB to navigate to/ai/build?package=…&handoffPrompt=…; the build surface seeds that prompt as its first message. Merged: feat(console-ai): explicit "Open in Builder →" ask→build handoff (ADR-0057 P4) #2439.Both sides are unit-tested and CI-green. Read:
docs/adr/0057-console-ai-chat-one-conversation-docked.md, cloud ADR-0063 (two agents, surface-bound), ADR-0013 (durable turns).Tasks
1 · Live end-to-end verification (ADR-0054 browser proof)
The one step not verified at merge time: the
askagent actually choosing to callsuggest_builder. It was blocked in the authoring session only by that environment's egress policy denyingai-gateway.vercel.sh(403 CONNECT) — not by code or key.In an environment where the Vercel AI Gateway is reachable (a valid
AI_GATEWAY_API_KEY+AI_GATEWAY_MODEL, e.g. a realopenai/gpt-4o-mini):cloud/scripts/dev-local/run-stack.sh --with-ui --seed --keep,OBJECTUI_ROOT=<objectui>); put the key incloud/scripts/dev-local/.env.local(gitignored).POST /api/v1/ai/agents/ask/chatwith a build-shaped message (e.g. "add a priority field to the tasks object") → the stream must contain asuggest_buildertool call whose result carriesstatus: 'build_handoff'.ask, send that request → the "Open in Builder →" card renders → click → lands on/ai/build?package=…&handoffPrompt=…and the seeded prompt auto-sends. Attach the screenshot(s).2 · cloud#817 — context-carrying handoff (upgrade v1)
Today v1 carries only
{ prompt, packageId? }. Upgrade the handoff to carry the ask thread's conversation context into the Builder (durable-turn reference, ADR-0013), sobuildresumes with what the user already discussed — not just a one-line prompt.suggest_buildercontract (or add a handoff-context endpoint) to reference the source conversation/turn; define what transfers.onOpenBuilderpath (generalizeassistant/assistantBus.tsper the ADR) instead of only the URLhandoffPrompt; seed the Builder from the carried context.3 · FAB dismissal polish (minor)
When "Open in Builder →" is clicked from the console FAB (
ConsoleFloatingChatbot), the floating overlay does not auto-close —FloatingChatbot/FloatingChatbotProviderexpose no external close control today. Add one so the FAB dismisses when it hands off to the full-page Builder (the full-pageAiChatPagehandoff already replaces the view, so only the FAB needs this).References
Epic #2409 · work order #2412 · ADR
docs/adr/0057-console-ai-chat-one-conversation-docked.md· merged P4: objectstack-ai/cloud#818 + #2439 · cloud#817 (context-handoff, task 2).