Skip to content

feat: add Altimate AI setup step and MCP gating to onboarding wizard#1820

Closed
ralphstodomingo wants to merge 39 commits intofeat/onboarding-dbt-troubleshootingfrom
feat/onboarding-altimate-setup
Closed

feat: add Altimate AI setup step and MCP gating to onboarding wizard#1820
ralphstodomingo wants to merge 39 commits intofeat/onboarding-dbt-troubleshootingfrom
feat/onboarding-altimate-setup

Conversation

@ralphstodomingo
Copy link
Copy Markdown
Contributor

@ralphstodomingo ralphstodomingo commented Feb 24, 2026

Summary

Add the Altimate AI setup step to the onboarding wizard (stacked on #1819). This enables API key management, dbt integration creation, and MCP tool gating.

  • Step 2 — Altimate Setup: AltimateSetupStep.tsx with API key validation, integration creation, sync status tracking, DataPilot installation, and progress cards
  • API key input: AltimateKeySetup.tsx standalone component
  • Backend handlers: 8 new message handlers in onboardingPanel.ts (saveAltimateKey, checkAltimateConfiguration, createDbtIntegration, getIntegrations, getIntegrationSyncStatus, checkDatapilotInstalled, installDatapilot, getAltimateConfig)
  • MCP gating: Tools only register after Altimate setup completes (src/mcp/index.ts)
  • Integration type change: dbtPowerUserExtension.ts now calls reinitialize() instead of reloading the window

Dependencies

Stacked on PR #1819 (feat/onboarding-dbt-troubleshooting).

Test plan

  • npm run compile passes
  • npm run test — all 13 suites pass (135/136, 1 pre-existing skip)
  • Wizard now shows 3 steps: Prerequisites + Altimate Setup + Tutorials
  • Step 2: API key validation, integration creation, sync status polling
  • MCP tools only register after Altimate setup completes
  • Changing dbt integration type reinitializes without window reload

🤖 Generated with Claude Code


Important

Adds Altimate AI setup step and MCP gating to onboarding wizard, with API key management and dbt integration support.

  • Behavior:
    • Adds AltimateSetupStep.tsx for Altimate AI setup in onboarding wizard, handling API key validation, integration creation, sync status, and DataPilot installation.
    • Introduces AltimateKeySetup.tsx for standalone API key input.
    • Adds MCP gating in src/mcp/index.ts to register tools only after Altimate setup.
  • Backend Handlers:
    • Adds 8 new message handlers in onboardingPanel.ts for Altimate setup (saveAltimateKey, checkAltimateConfiguration, createDbtIntegration, getIntegrations, getIntegrationSyncStatus, checkDatapilotInstalled, installDatapilot, getAltimateConfig).
  • Integration Changes:
    • Changes dbtPowerUserExtension.ts to call reinitialize() on dbt integration type change instead of reloading window.
  • Misc:
    • Updates SetupWizard.tsx to include Altimate setup step in the wizard.

This description was created by Ellipsis for 01d0dc2. You can customize this summary. It will automatically update as commits are pushed.

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented Feb 24, 2026

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: e4a1d7c2-eb8b-445f-884d-d95931e94b04

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/onboarding-altimate-setup

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Copy Markdown
Contributor

@ellipsis-dev ellipsis-dev Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Important

Looks good to me! 👍

Reviewed everything up to 01d0dc2 in 20 seconds. Click for details.
  • Reviewed 2070 lines of code in 6 files
  • Skipped 0 files when reviewing.
  • Skipped posting 0 draft comments. View those below.
  • Modify your settings and rules to customize what types of comments Ellipsis leaves. And don't forget to react with 👍 or 👎 to teach Ellipsis.

Workflow ID: wflow_KYMobSZve4kNvEhj

You can customize Ellipsis by changing your verbosity settings, reacting with 👍 or 👎, replying to comments, or adding code review rules.

Comment on lines +115 to +117
dbtIntegration = newDbtIntegration;
try {
await this.dbtProjectContainer.reinitialize();

This comment was marked as outdated.

shreyastelkar and others added 3 commits February 24, 2026 14:17
…#1818)

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
…#1789)

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
@ralphstodomingo ralphstodomingo force-pushed the feat/onboarding-altimate-setup branch 4 times, most recently from d4cf349 to 051a505 Compare February 25, 2026 14:40
Comment on lines +115 to +117
dbtIntegration = newDbtIntegration;
try {
await this.dbtProjectContainer.reinitialize();

This comment was marked as outdated.

@ralphstodomingo ralphstodomingo force-pushed the feat/onboarding-altimate-setup branch 5 times, most recently from b846982 to b743a74 Compare February 25, 2026 15:54
Comment thread src/mcp/index.ts
"Onboarding completed, proceeding with tools registration",
);
if (!this.altimateAuthService.handlePreviewFeatures()) {
if (this.altimateAuthService.getCredentialsMessage()) {
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Bug: The altimate.onboardedMcpServer configuration flag is checked to gate MCP tool registration but is never set to true after onboarding, effectively disabling the feature.
Severity: CRITICAL

Suggested Fix

Upon successful completion of the onboarding wizard, update the global configuration to enable MCP. This can be done by calling workspace.getConfiguration("altimate").update("onboardedMcpServer", true, ConfigurationTarget.Global).

Prompt for AI Agent
Review the code at the location below. A potential bug has been identified by an AI
agent.
Verify if this is a real issue. If it is, propose a fix; if not, explain why it's not
valid.

Location: src/mcp/index.ts#L109

Potential issue: The MCP registration logic in `src/mcp/index.ts` includes a check for
the `altimate.onboardedMcpServer` configuration flag. This flag is intended to be set to
`true` after a user completes the new onboarding wizard. However, no code path in the
pull request updates this flag's value from its default of `false`. As a result, the
registration code always returns early, preventing MCP tools from ever being registered
or becoming available to any user, regardless of their credential status. This
completely disables the Model Confidence Platform (MCP) functionality.

) {
dbtIntegration = newDbtIntegration;
try {
await this.dbtProjectContainer.reinitialize();

This comment was marked as outdated.

ralphstodomingo and others added 2 commits February 26, 2026 00:18
Add the Altimate setup step (Step 2) to the onboarding wizard, enabling
API key validation, dbt integration creation, sync status tracking, and
DataPilot installation.

- Add `AltimateSetupStep.tsx` with credential management, integration
  creation UI, and progress cards
- Add `AltimateKeySetup.tsx` for standalone API key input
- Update `SetupWizard.tsx` to include `setupAltimate` between prerequisites
  and tutorials (now 3 steps)
- Add Altimate handlers to `onboardingPanel.ts`: `saveAltimateKey`,
  `checkAltimateConfiguration`, `createDbtIntegration`, `getIntegrations`,
  `getIntegrationSyncStatus`, `checkDatapilotInstalled`, `installDatapilot`,
  `getAltimateConfig`
- Add MCP gating in `src/mcp/index.ts` — tools only register after Altimate
  setup completes
- Update `dbtPowerUserExtension.ts` to call `reinitialize()` on integration
  type change instead of reloading the window

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Replace `onBack` with `onReadyChange` callback in `AltimateSetupStep`
- Report readiness to wizard: key phase ready when configured, integration always ready
- Add `altimateKey` to `needsReadinessCheck` in `SetupWizard`
- Remove "Back to API Key Setup" button (wizard's Back handles this)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@ralphstodomingo ralphstodomingo force-pushed the feat/onboarding-altimate-setup branch from b743a74 to f578302 Compare February 25, 2026 16:19
shreyastelkar and others added 2 commits February 26, 2026 09:29
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Only show substeps for the currently active parent group.
Inactive parent groups appear collapsed without their children,
keeping the sidebar clean as the wizard grows.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
setSelectedEnvironmentId(firstEnv.id);

// Fetch sync status for the first environment
void fetchSyncStatus(integrationId, firstEnv.name);
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Bug: A race condition in fetchSyncStatus can display incorrect sync data. Rapidly switching environments causes concurrent updates to the shared integration.sync_history, leading to a data mismatch.
Severity: MEDIUM

Suggested Fix

Modify the data structure to store sync_history on a per-environment basis instead of a single field on the Integration object. This could involve moving sync_history to the IntegrationEnvironment interface or changing it to a dictionary keyed by environment ID on the Integration object. Additionally, consider implementing a mechanism to cancel previous pending requests when a new one is initiated.

Prompt for AI Agent
Review the code at the location below. A potential bug has been identified by an AI
agent.
Verify if this is a real issue. If it is, propose a fix; if not, explain why it's not
valid.

Location: webview_panels/src/modules/onboarding/AltimateSetupStep.tsx#L456

Potential issue: A race condition occurs when fetching the synchronization status for
different environments within the same integration. The `fetchSyncStatus` function is
called without `await` when a user changes the selected environment. If a user switches
environments quickly, multiple asynchronous requests are fired. Because the
`sync_history` is stored on the parent `Integration` object rather than per-environment,
a slower, earlier request can resolve after a newer one, overwriting the `sync_history`
with stale data. This causes the UI to display an incorrect sync status for the
currently selected environment.

ralphstodomingo and others added 3 commits February 26, 2026 11:31
Move "Validate Setup" button inline next to the project dropdown,
keeping it always re-runnable. The wizard Next button is now
independent and always enabled on the validation step.

- Remove auto-progression after validation completes
- Add inline Validate Setup button with overflow-safe flex layout
- Validation step no longer gates wizard navigation
- Remove step counter from wizard footer

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add `skipConfirmation` param to `validateProjects` and `installDeps`
in `walkthroughCommands` so the onboarding panel bypasses the
confirmation dialog. Re-throw errors after showing the toast so
they propagate back to the webview.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Remove `setError` from validation catch block since the terminal
already shows the error. Change Next button text to "Validate Setup"
on the prerequisites step to indicate what the next step is.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Comment on lines +355 to +359
const validationResult =
await this.altimateRequest.validateCredentials(
instanceName,
apiKey,
);

This comment was marked as outdated.

ralphstodomingo and others added 3 commits February 26, 2026 19:23
)

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Co-authored-by: Shreyas Telkar <shretel@gmail.com>
… install (#1821)

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
mdesmet and others added 26 commits February 27, 2026 18:48
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…nts (#1826)

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
#1830)

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Rename `playground.md` → `studio.md`
- Move `playground/images/` → `studio/images/`
- Update all "Playground" text references to "Studio"
- Update `mkdocs.yml` nav entry: `Playground (Beta)` → `Studio (Beta)`

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
…rm support

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
… dedup (#1829)

- Consume `entry.command` (full reconstructed label) for tree item labels and dedup keys
- Parse subcommand from `entry.command` in `rerunFromHistory` for routing
- Simplify `entryKey()` to `projectName + command`
- Backward-compat fallback when `command` doesn't start with `dbt `
- Consolidate duplicated test fixture into shared `createEntry` helper

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
…olution

Webpack now copies platform-specific .node files directly into the
altimate-core/ directory so relative requires work without cross-package
resolution in the VS Code host. prepareBuild.js prunes non-target
platform .node files from this directory. Adds a warning log when
computeColumnLineage returns null to aid debugging native module loading.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
npm install --force still respects os/cpu filters and silently skips
cross-platform packages. Switch to npm pack + tar extraction to bypass
platform filtering and ensure all platform binaries are bundled.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Co-authored-by: Michiel De Smet <mdesmet@gmail.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
#1825)

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
… key mismatch (#1839)

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Incorporates master fixes (PR #1841 setup page UX improvements) while
preserving branch's Altimate setup step, MCP gating, substeps, and
wizard navigation enhancements.

Key integrations from master:
- Responsive sidebar layout (`isNarrow` / `useSyncExternalStore`)
- Clickable sidebar steps and contextual button labels
- Image zoom/expand on tutorials page
- Silent diagnostics refresh (no loading flicker)
- `initialIntegrationType` prop pass-through
- URL fixes, typo fix, optional chaining safety
- `refreshPythonVersion()` utility method
- Improved Python env listener (`onDBTInstallationVerification`)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@ralphstodomingo ralphstodomingo marked this pull request as draft March 26, 2026 04:29
@mdesmet
Copy link
Copy Markdown
Contributor

mdesmet commented Mar 26, 2026

I htink you should rebase this to latest master

@ralphstodomingo
Copy link
Copy Markdown
Contributor Author

Superseded by stacked PRs #1847 (API key substep) and #1848 (integration substep).

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.

5 participants