feat: AI-first messaging and Copilot-aware portal quickstart next steps - #299
Conversation
Reword quickstart, portal generate, and SDK quickstart copy to lead with Context Plugins / AI Assist, and make the portal quickstart Next Steps show a Context Plugin message only when AI integration survived the plan prune. Add BuildConfig.hasAiIntegration() so the next-steps message is gated on the pruned build file (the entitlement authority) rather than raw subscription info. Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
|
This is the cli output. Next Steps is not updated. |
|
One UX inconsistency I noticed This sequence is a little odd: followed immediately by
To a user that feels like
even though internally they're different products. |
| running command... | ||
| $ apimatic (--version) | ||
| @apimatic/cli/1.1.0-beta.16 win32-x64 node-v23.4.0 | ||
| @apimatic/cli/1.1.0 win32-x64 node-v24.14.1 |
|
Use exactly two user-facing terms, and never a synonym: For Context Plugin => Context Plugin. Not AI context plugins src/prompts/portal/quickstart.ts:190
src/prompts/portal/quickstart.ts:299-303 — Copilot caution (disambiguate from Context Plugins)
|
|
|
||
| Install your API's Context Plugins to help AI coding agents understand your API and generate more accurate code. | ||
|
|
||
| You can also customize the Portal theme, add API recipes and enable AI features. |
There was a problem hiding this comment.
drop the redundant "enable AI features" (they're already on),
Soften portal quickstart claims to reflect that Context Plugins/SDKs may be pruned by plan (language step "can" not "will"; spinner back to "Generating API Portal"), tidy Copilot vs Context Plugin terminology, and reword command summaries and next-steps copy. Revert README to the dev baseline; the command reference is autogenerated via `oclif readme` and should not be hand-maintained here. Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
Reinstate the AI-first ordering softened in d0bb8e1: command summaries, quickstart welcome copy, and the portal option label now lead with Context Plugins across all user-facing strings for a consistent voice. Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
|



AI-first messaging + Copilot-aware Portal quickstart Next Steps
Summary
Reworks user-facing copy across quickstart, portal generate, and the SDK quickstart flow to lead with Context Plugins / AI Assist, and makes the Portal quickstart Next Steps adapt to whether AI integration is actually enabled on the subscription. The single behavioural change is that Next Steps message; everything else is copy-only. .vscode/launch.json is intentionally excluded.
Command-by-command: before → after
apimatic quickstart — summary
apimatic quickstart — welcome
apimatic quickstart — flow selector
apimatic quickstart (Portal) — language selection
apimatic quickstart (Portal) — Next Steps
apimatic portal generate — summary
apimatic portal generate — spinner
apimatic quickstart (SDK) — Next Steps — added line: Explore API Portals and Context Plugins next to enhance your API experience.
apimatic sdk generate — unchanged (avoids the double-print, since quickstart reuses this action).
README.md — regenerated to reflect the two updated summaries.
Subscription / entitlement logic
Copilot and Context Plugin (AI integration) are independent features: AI integration can't exist without Copilot, but Copilot can exist with AI integration off — so a Copilot check alone is insufficient. SubscriptionInfo (/account/profile) only exposes ApiCopilotKeys and has no Context Plugin field, so the variant is gated on the pruned build file (the plan-prune is the entitlement authority) via a new BuildConfig.hasAiIntegration():
public hasAiIntegration(): boolean {
const languageSettings = this.data.generatePortal?.portalSettings?.languageSettings;
if (!languageSettings) { return false; }
return Object.values(languageSettings).some((setting) => {
const ai = setting.aiIntegration;
return ai != null && [ai.cursor, ai.claudeCode, ai.vscode].some((editor) => editor?.isEnabled === true);
});
}
Passed into the prompt where the pruned config is already in scope (no extra API call): this.prompts.nextSteps(prunedConfig.hasAiIntegration()). Validated against real prune responses — when AI integration isn't on the plan the server drops the aiIntegration key entirely (removedAiIntegration: true) and the accessor returns false; with it on, true.
Complexity / Sonar
hasAiIntegration() is a small new method (well under 15); nextSteps() gained one ternary; no new branches were added to the large execute() method.