master d73424bc0792 cached
654 files
6.3 MB
1.7M tokens
3650 symbols
1 requests
Download .txt
Showing preview only (6,715K chars total). Download the full file or copy to clipboard to get everything.
Repository: innoverio/vscode-dbt-power-user
Branch: master
Commit: d73424bc0792
Files: 654
Total size: 6.3 MB

Directory structure:
gitextract_u70y3h9w/

├── .eslintrc.json
├── .github/
│   ├── ISSUE_TEMPLATE/
│   │   ├── bug_report.yml
│   │   ├── config.yaml
│   │   ├── config.yml
│   │   ├── feature_request.yml
│   │   └── sweep-template.yml
│   ├── actions/
│   │   └── common-build/
│   │       └── action.yml
│   ├── dependabot.yml
│   ├── pull_request_template.md
│   ├── scripts/
│   │   ├── analyze-vsix.py
│   │   └── generate-bundle-report.py
│   └── workflows/
│       ├── ci.yml
│       ├── deploy-docs-to-s3.yaml
│       └── tests.yml
├── .gitignore
├── .gitpod.yml
├── .husky/
│   └── pre-commit
├── .mcp.json
├── .nycrc.json
├── .prettierignore
├── .prettierrc
├── .vscodeignore
├── CLAUDE.md
├── CONTRIBUTING.md
├── LICENSE
├── README.md
├── altimate_notebook_kernel.py
├── codecov.yml
├── docker-setup/
│   ├── Dockerfile
│   ├── README.md
│   ├── deploy.sh
│   ├── docker-compose.yml
│   └── start-code-server.sh
├── documentation/
│   ├── docs/
│   │   ├── arch/
│   │   │   ├── beta.md
│   │   │   ├── faq.md
│   │   │   ├── llm-gateway.md
│   │   │   └── pricingfaq.md
│   │   ├── develop/
│   │   │   ├── autocomplete.md
│   │   │   ├── clicktorun.md
│   │   │   ├── compiledCode.md
│   │   │   ├── explanation.md
│   │   │   ├── genmodelSQL.md
│   │   │   ├── genmodelSource.md
│   │   │   ├── translateSQL.md
│   │   │   └── updatemodel.md
│   │   ├── discover/
│   │   │   ├── setupui.md
│   │   │   ├── viewdocs.md
│   │   │   └── viewlineage.md
│   │   ├── document/
│   │   │   ├── docblocks.md
│   │   │   ├── generatedoc.md
│   │   │   └── write.md
│   │   ├── govern/
│   │   │   ├── collaboration.md
│   │   │   ├── governance.md
│   │   │   ├── multiproject.md
│   │   │   ├── notebooks.md
│   │   │   └── querybookmarks.md
│   │   ├── index.md
│   │   ├── javascripts/
│   │   │   └── feedback,js
│   │   ├── overrides/
│   │   │   ├── .gitkeep
│   │   │   └── main.html
│   │   ├── setup/
│   │   │   ├── configuration.md
│   │   │   ├── cursor_installation_workaround.md
│   │   │   ├── faq.md
│   │   │   ├── installation.md
│   │   │   ├── optConfig.md
│   │   │   ├── reqdConfig.md
│   │   │   ├── reqdConfigCloud.md
│   │   │   ├── reqdConfigFusion.md
│   │   │   └── sso.md
│   │   ├── studio.md
│   │   ├── stylesheets/
│   │   │   └── extra.css
│   │   ├── teammates/
│   │   │   ├── altimate-code.md
│   │   │   ├── coach.md
│   │   │   └── introduction.md
│   │   ├── test/
│   │   │   ├── adhocquery.md
│   │   │   ├── bigquerycost.md
│   │   │   ├── defertoprod.md
│   │   │   ├── lineage.md
│   │   │   ├── queryResults.md
│   │   │   ├── runctes.md
│   │   │   ├── runtests.md
│   │   │   ├── sqlvalidation.md
│   │   │   ├── sqlvisualizer.md
│   │   │   ├── utilities.md
│   │   │   └── writetests.md
│   │   └── troubleshooting.md
│   ├── mkdocs.yml
│   ├── readme.md
│   └── requirements.txt
├── jest.config.js
├── monitoring/
│   ├── README.md
│   ├── app.py
│   ├── github_issues/
│   │   ├── app.py
│   │   ├── requirements.txt
│   │   └── templates/
│   │       └── index.html
│   ├── requirements.txt
│   └── templates/
│       └── index.html
├── package.json
├── package.nls.json
├── postInstall.js
├── prepareBuild.js
├── rsbuild.config.ts
├── snippets/
│   ├── snippets_markdown.json
│   ├── snippets_sql.json
│   └── snippets_yaml.json
├── src/
│   ├── altimate.ts
│   ├── autocompletion_provider/
│   │   ├── docAutocompletionProvider.ts
│   │   ├── index.ts
│   │   ├── macroAutocompletionProvider.ts
│   │   ├── modelAutocompletionProvider.ts
│   │   ├── sourceAutocompletionProvider.ts
│   │   └── usercompletion_provider.ts
│   ├── code_lens_provider/
│   │   ├── cteCodeLensProvider.ts
│   │   ├── index.ts
│   │   ├── sourceModelCreationCodeLensProvider.ts
│   │   ├── sqlActionsCodeLensProvider.ts
│   │   └── virtualSqlCodeLensProvider.ts
│   ├── commands/
│   │   ├── altimateScan.ts
│   │   ├── bigQueryCostEstimate.ts
│   │   ├── index.ts
│   │   ├── runModel.ts
│   │   ├── runTest.ts
│   │   ├── sqlToModel.ts
│   │   ├── tests/
│   │   │   ├── initCatalog.ts
│   │   │   ├── missingSchemaTest.ts
│   │   │   ├── scanContext.ts
│   │   │   ├── staleModelColumnTest.ts
│   │   │   ├── step.ts
│   │   │   ├── undocumentedModelColumnTest.ts
│   │   │   └── unmaterializedModelTest.ts
│   │   ├── validateSql.ts
│   │   └── walkthroughCommands.ts
│   ├── comment_provider/
│   │   ├── conversationProvider.ts
│   │   └── index.ts
│   ├── content_provider/
│   │   ├── index.ts
│   │   └── sqlPreviewContentProvider.ts
│   ├── cte_profiler/
│   │   ├── cteProfilerDecorationProvider.ts
│   │   ├── cteProfilerService.ts
│   │   └── cteProfilerTypes.ts
│   ├── dbtPowerUserExtension.ts
│   ├── dbt_client/
│   │   ├── datapilot.ts
│   │   ├── dbtProject.ts
│   │   ├── dbtProjectContainer.ts
│   │   ├── dbtProjectLog.ts
│   │   ├── dbtVersionEvent.ts
│   │   ├── dbtWorkspaceFolder.ts
│   │   ├── event/
│   │   │   ├── manifestCacheChangedEvent.ts
│   │   │   ├── projectConfigChangedEvent.ts
│   │   │   └── runResultsEvent.ts
│   │   ├── index.ts
│   │   ├── pythonEnvironment.ts
│   │   ├── runtimePythonEnvironmentProvider.ts
│   │   ├── vscodeConfiguration.ts
│   │   └── vscodeTerminal.ts
│   ├── definition_provider/
│   │   ├── docDefinitionProvider.ts
│   │   ├── index.ts
│   │   ├── macroDefinitionProvider.ts
│   │   ├── modelDefinitionProvider.ts
│   │   └── sourceDefinitionProvider.ts
│   ├── document_formatting_edit_provider/
│   │   ├── dbtDocumentFormattingEditProvider.ts
│   │   └── index.ts
│   ├── extension.ts
│   ├── hover_provider/
│   │   ├── depthDecorationProvider.ts
│   │   ├── index.ts
│   │   ├── macroHoverProvider.ts
│   │   ├── modelHoverProvider.ts
│   │   ├── sourceHoverProvider.ts
│   │   ├── utils.ts
│   │   └── yamlModelHoverProvider.ts
│   ├── inversify.config.ts
│   ├── lib/
│   │   ├── index.d.ts
│   │   └── index.js
│   ├── mcp/
│   │   ├── index.ts
│   │   ├── server.ts
│   │   ├── types.ts
│   │   └── utils.ts
│   ├── modules.ts
│   ├── quickpick/
│   │   ├── actionsQuickPick.ts
│   │   ├── index.ts
│   │   ├── notebookQuickPick.ts
│   │   ├── projectQuickPick.ts
│   │   └── sqlQuickPick.ts
│   ├── services/
│   │   ├── altimateAuthService.ts
│   │   ├── altimateCodeChatService.ts
│   │   ├── conversationService.ts
│   │   ├── dbtLineageService.ts
│   │   ├── dbtTestService.ts
│   │   ├── diagnosticsOutputChannel.ts
│   │   ├── docGenService.ts
│   │   ├── fileService.ts
│   │   ├── queryAnalysisService.ts
│   │   ├── queryManifestService.ts
│   │   ├── runHistoryService.ts
│   │   ├── sharedStateService.ts
│   │   ├── streamingService.ts
│   │   └── usersService.ts
│   ├── statusbar/
│   │   ├── deferToProductionStatusBar.ts
│   │   ├── index.ts
│   │   ├── targetStatusBar.ts
│   │   └── versionStatusBar.ts
│   ├── telemetry/
│   │   ├── events.ts
│   │   └── index.ts
│   ├── test/
│   │   ├── common.ts
│   │   ├── fixtures/
│   │   │   ├── formatter/
│   │   │   │   ├── README.md
│   │   │   │   ├── add-trailing-newline.sql
│   │   │   │   ├── basic-select-reformat.sql
│   │   │   │   ├── delete-blank-lines.sql
│   │   │   │   ├── issue-1717-exact-reproducer.sql
│   │   │   │   ├── issue-1717-long-lines.sql
│   │   │   │   ├── jinja-source-long-line.sql
│   │   │   │   ├── long-line-split-to-multiple.sql
│   │   │   │   ├── multi-chunk-changes.sql
│   │   │   │   └── no-changes-needed.sql
│   │   │   └── runHistory.ts
│   │   ├── integration/
│   │   │   ├── formatter.test.ts
│   │   │   ├── helpers/
│   │   │   │   ├── fixtureLoader.ts
│   │   │   │   └── sqlfmtRunner.ts
│   │   │   ├── index.ts
│   │   │   ├── runHistoryTreeview.test.ts
│   │   │   └── runTests.ts
│   │   ├── mock/
│   │   │   ├── lib.ts
│   │   │   ├── node-fetch.ts
│   │   │   └── vscode.ts
│   │   ├── setup.ts
│   │   └── suite/
│   │       ├── altimate.test.ts
│   │       ├── commandProcessExecution.test.ts
│   │       ├── conversationProvider.test.ts
│   │       ├── coverage.ts
│   │       ├── cteCodeLensProvider.test.ts
│   │       ├── dbtCloudDetection.test.ts
│   │       ├── dbtCoreDetection.test.ts
│   │       ├── dbtCoreIntegration.test.ts
│   │       ├── dbtIntegration.test.ts
│   │       ├── dbtProject.test.ts
│   │       ├── dbtProjectContainer.test.ts
│   │       ├── dbtTerminal.test.ts
│   │       ├── dbtWorkspaceFolder.test.ts
│   │       ├── diagnosticsOutputChannel.test.ts
│   │       ├── extension.test.ts
│   │       ├── index.ts
│   │       ├── jinjaGrammar.test.ts
│   │       ├── jupyterlabServicesCompat.test.ts
│   │       ├── macroDefinitionProvider.test.ts
│   │       ├── mcpSchemaCompat.test.ts
│   │       ├── newLineagePanel.test.ts
│   │       ├── resolveSettingsVariables.test.ts
│   │       ├── runHistoryService.test.ts
│   │       ├── runHistoryTreeItems.test.ts
│   │       ├── runHistoryTreeviewProvider.test.ts
│   │       ├── runTest.test.ts
│   │       ├── runTest.ts
│   │       ├── runtimePythonEnvironmentProvider.test.ts
│   │       ├── testParser.test.ts
│   │       └── utils.test.ts
│   ├── treeview_provider/
│   │   ├── index.ts
│   │   ├── modelTreeviewProvider.ts
│   │   ├── runHistoryTreeItems.ts
│   │   └── runHistoryTreeviewProvider.ts
│   ├── types/
│   │   └── istanbul-lib-instrument.d.ts
│   ├── types.ts
│   ├── utils.ts
│   ├── validation_provider/
│   │   └── index.ts
│   └── webview_provider/
│       ├── DbtDocsView.ts
│       ├── altimateWebviewProvider.ts
│       ├── datapilotPanel.ts
│       ├── docsEditPanel.ts
│       ├── index.ts
│       ├── insightsPanel.ts
│       ├── lineagePanel.ts
│       ├── newDocsGenPanel.ts
│       ├── newLineagePanel.ts
│       ├── onboardingPanel.ts
│       ├── queryResultPanel.ts
│       └── sqlLineagePanel.ts
├── sweep.yaml
├── syntaxes/
│   ├── jinja-sql.tmLanguage.json
│   └── jinja-yaml.tmLanguage.json
├── test-fixtures/
│   ├── .gitignore
│   ├── dbt-core-sample-duckdb/
│   │   ├── .coveragerc
│   │   ├── .github/
│   │   │   ├── dependabot.yml
│   │   │   └── workflows/
│   │   │       ├── gosales_ci_pylint.yml
│   │   │       ├── gosales_ci_sonarcloud.yml
│   │   │       ├── gosales_ci_sqlfluff.yml
│   │   │       └── static.yml
│   │   ├── .sqlfluff
│   │   ├── .user.yml
│   │   ├── README.md
│   │   ├── SECURITY.md
│   │   ├── assets/
│   │   │   ├── go-sales-erd.drawio
│   │   │   └── hld-duckdb-dbt-sample.drawio
│   │   ├── coverage.xml
│   │   ├── dbt_project.yml
│   │   ├── macros/
│   │   │   ├── .gitkeep
│   │   │   ├── custom_schema.sql
│   │   │   ├── scd2_hash.sql
│   │   │   └── scd2_ts.sql
│   │   ├── models/
│   │   │   ├── 01-raw/
│   │   │   │   ├── t_raw_go_1k.py
│   │   │   │   ├── t_raw_go_1k.yml
│   │   │   │   ├── t_raw_go_daily_sales.py
│   │   │   │   ├── t_raw_go_daily_sales.yml
│   │   │   │   ├── t_raw_go_products.py
│   │   │   │   ├── t_raw_go_products.yml
│   │   │   │   ├── t_raw_go_retailers.py
│   │   │   │   └── t_raw_go_retailers.yml
│   │   │   ├── 02-stg/
│   │   │   │   ├── t_stg_go_1k.sql
│   │   │   │   ├── t_stg_go_1k.yml
│   │   │   │   ├── t_stg_go_daily_sales.sql
│   │   │   │   ├── t_stg_go_daily_sales.yml
│   │   │   │   ├── t_stg_go_methods.sql
│   │   │   │   ├── t_stg_go_methods.yml
│   │   │   │   ├── t_stg_go_products.sql
│   │   │   │   ├── t_stg_go_products.yml
│   │   │   │   ├── t_stg_go_retailers.sql
│   │   │   │   └── t_stg_go_retailers.yml
│   │   │   ├── 03-det/
│   │   │   │   ├── t_dim_dates.sql
│   │   │   │   ├── t_dim_dates.yml
│   │   │   │   ├── t_dim_order_methods.sql
│   │   │   │   ├── t_dim_order_methods.yml
│   │   │   │   ├── t_dim_products.sql
│   │   │   │   ├── t_dim_products.yml
│   │   │   │   ├── t_dim_retailers.sql
│   │   │   │   ├── t_dim_retailers.yml
│   │   │   │   ├── t_fct_sales.sql
│   │   │   │   └── t_fct_sales.yml
│   │   │   └── 04-mrt/
│   │   │       ├── t_mrt_sales.sql
│   │   │       └── t_mrt_sales.yml
│   │   ├── packages.yml
│   │   ├── profiles.yml
│   │   ├── requirements.txt
│   │   ├── seeds/
│   │   │   ├── ref_go_methods.csv
│   │   │   └── seeds.yml
│   │   ├── shared_utils/
│   │   │   ├── __init__.py
│   │   │   ├── config.py
│   │   │   └── db_utils.py
│   │   ├── snapshots/
│   │   │   └── .gitkeep
│   │   ├── sonar-project.properites
│   │   └── tests/
│   │       ├── .gitkeep
│   │       ├── test_config.py
│   │       ├── test_data.py
│   │       └── test_db_utils.py
│   └── jaffle-shop-duckdb/
│       ├── .devcontainer.json
│       ├── .github/
│       │   ├── CODEOWNERS
│       │   └── workflows/
│       │       └── validate_on_platforms.yml
│       ├── .gitignore
│       ├── .python-version
│       ├── .sqlfluff
│       ├── .sqlfluffignore
│       ├── Dockerfile
│       ├── LICENSE
│       ├── README.md
│       ├── RELEASE.md
│       ├── dbt-completion.bash
│       ├── dbt_project.yml
│       ├── etc/
│       │   └── dbdiagram_definition.txt
│       ├── models/
│       │   ├── customers.sql
│       │   ├── docs.md
│       │   ├── orders.sql
│       │   ├── overview.md
│       │   ├── schema.yml
│       │   └── staging/
│       │       ├── schema.yml
│       │       ├── stg_customers.sql
│       │       ├── stg_orders.sql
│       │       └── stg_payments.sql
│       ├── profiles.yml
│       ├── pyproject.toml
│       ├── requirements.txt
│       └── seeds/
│           ├── .gitkeep
│           ├── raw_customers.csv
│           ├── raw_orders.csv
│           └── raw_payments.csv
├── tsconfig.json
├── typings.d.ts
└── webview_panels/
    ├── .eslintrc.cjs
    ├── .gitignore
    ├── .storybook/
    │   ├── __mocks__/
    │   │   ├── crypto.ts
    │   │   └── vscode.ts
    │   ├── main.ts
    │   ├── preview-head.html
    │   └── preview.tsx
    ├── README.md
    ├── eslint/
    │   └── typescript.cjs
    ├── index.html
    ├── package.json
    ├── postcss.config.mjs
    ├── public/
    │   └── .gitkeep
    ├── src/
    │   ├── App.tsx
    │   ├── AppConstants.tsx
    │   ├── AppRoutes.tsx
    │   ├── NoMatch.tsx
    │   ├── _variables.scss
    │   ├── assets/
    │   │   └── icons/
    │   │       ├── Images.stories.tsx
    │   │       ├── index.tsx
    │   │       └── styles.css
    │   ├── lib/
    │   │   ├── altimate/
    │   │   │   ├── DbtDocsRenderer.js
    │   │   │   ├── altimate-components.d.ts
    │   │   │   ├── altimate-components.js
    │   │   │   ├── main.css
    │   │   │   └── main.js
    │   │   └── index.ts
    │   ├── main.scss
    │   ├── main.tsx
    │   ├── modules/
    │   │   ├── AutoCollapsingNotification/
    │   │   │   └── AutoCollapsingNotification.tsx
    │   │   ├── app/
    │   │   │   ├── AppProvider.tsx
    │   │   │   ├── appSlice.ts
    │   │   │   ├── indexedDb.ts
    │   │   │   ├── requestExecutor.ts
    │   │   │   ├── types.ts
    │   │   │   ├── useAppContext.ts
    │   │   │   └── useListeners.ts
    │   │   ├── bigQuery/
    │   │   │   └── CostEstimator.tsx
    │   │   ├── commonActionButtons/
    │   │   │   ├── CommonActionButtons.tsx
    │   │   │   ├── FeedbackButton.tsx
    │   │   │   └── HelpButton.tsx
    │   │   ├── dataPilot/
    │   │   │   ├── DataPilotHelp.tsx
    │   │   │   ├── DataPilotProvider.tsx
    │   │   │   ├── Datapilot.stories.tsx
    │   │   │   ├── DefaultDatapilotView.tsx
    │   │   │   ├── components/
    │   │   │   │   ├── common/
    │   │   │   │   │   ├── AskDatapilotInput.tsx
    │   │   │   │   │   ├── DatapilotChatFollowup.tsx
    │   │   │   │   │   ├── Header.tsx
    │   │   │   │   │   ├── UserQuery.tsx
    │   │   │   │   │   └── useAiGenerationUtils.ts
    │   │   │   │   ├── docGen/
    │   │   │   │   │   ├── AiDocActionButton.tsx
    │   │   │   │   │   ├── AiDocChat.tsx
    │   │   │   │   │   ├── DataPilotDocGen.stories.tsx
    │   │   │   │   │   ├── NewGenerationResults.tsx
    │   │   │   │   │   └── types.ts
    │   │   │   │   ├── queryAnalysis/
    │   │   │   │   │   ├── QueryAnalysis.stories.tsx
    │   │   │   │   │   ├── QueryAnalysis.tsx
    │   │   │   │   │   ├── QueryAnalysisActionButton.tsx
    │   │   │   │   │   ├── commands.ts
    │   │   │   │   │   ├── components/
    │   │   │   │   │   │   ├── QueryTranslateDialectSelects.tsx
    │   │   │   │   │   │   └── constants.ts
    │   │   │   │   │   ├── provider/
    │   │   │   │   │   │   ├── QueryAnalysisProvider.tsx
    │   │   │   │   │   │   ├── queryAnalysisSlice.ts
    │   │   │   │   │   │   ├── types.ts
    │   │   │   │   │   │   └── useQueryAnalysisContext.ts
    │   │   │   │   │   ├── types.ts
    │   │   │   │   │   └── useQueryAnalysisAction.ts
    │   │   │   │   └── test/
    │   │   │   │       ├── AddCustomTest.tsx
    │   │   │   │       └── Tests.stories.tsx
    │   │   │   ├── constants.tsx
    │   │   │   ├── dataPilotSlice.ts
    │   │   │   ├── datapilot.module.scss
    │   │   │   ├── index.tsx
    │   │   │   ├── types.ts
    │   │   │   └── useDataPilotContext.ts
    │   │   ├── dbtDocs/
    │   │   │   ├── DbtDocsView.tsx
    │   │   │   └── ShareDbtDocsButton.tsx
    │   │   ├── defer/
    │   │   │   ├── DeferToProduction.tsx
    │   │   │   ├── ManifestSelection.tsx
    │   │   │   ├── constants.ts
    │   │   │   ├── defer.module.scss
    │   │   │   └── types.ts
    │   │   ├── documentationEditor/
    │   │   │   ├── DocumentationEditor.stories.tsx
    │   │   │   ├── DocumentationEditor.tsx
    │   │   │   ├── DocumentationProvider.tsx
    │   │   │   ├── components/
    │   │   │   │   ├── conversation/
    │   │   │   │   │   ├── AddCoversationButton.tsx
    │   │   │   │   │   ├── ConversationsRightPanel.tsx
    │   │   │   │   │   └── ShowConversationsButton.tsx
    │   │   │   │   ├── docGenerator/
    │   │   │   │   │   ├── BulkGenerateButton.tsx
    │   │   │   │   │   ├── Citations.tsx
    │   │   │   │   │   ├── CoachAi.tsx
    │   │   │   │   │   ├── CoachAiIfModified.tsx
    │   │   │   │   │   ├── DocBlockInserter.module.scss
    │   │   │   │   │   ├── DocBlockInserter.tsx
    │   │   │   │   │   ├── DocGenSelectedColumns.tsx
    │   │   │   │   │   ├── DocGeneratorColumn.tsx
    │   │   │   │   │   ├── DocGeneratorColumnsList.tsx
    │   │   │   │   │   ├── DocGeneratorInput.tsx
    │   │   │   │   │   ├── GenerateButton.tsx
    │   │   │   │   │   ├── SyncWithDatabase.tsx
    │   │   │   │   │   ├── coachAi.module.scss
    │   │   │   │   │   ├── constants.ts
    │   │   │   │   │   ├── docGenInput.module.scss
    │   │   │   │   │   └── generateAll.module.scss
    │   │   │   │   ├── documentationPropagation/
    │   │   │   │   │   ├── DocumentationPropagation.tsx
    │   │   │   │   │   └── styles.module.scss
    │   │   │   │   ├── help/
    │   │   │   │   │   ├── DocumentationHelpContent.tsx
    │   │   │   │   │   └── TestsHelpContent.tsx
    │   │   │   │   ├── model/
    │   │   │   │   │   └── Options.tsx
    │   │   │   │   ├── result/
    │   │   │   │   │   ├── DocGenerationResult.tsx
    │   │   │   │   │   ├── DocumentationResult.stories.tsx
    │   │   │   │   │   └── DocumentationResult.tsx
    │   │   │   │   ├── saveDocumentation/
    │   │   │   │   │   └── SaveDocumentation.tsx
    │   │   │   │   ├── score/
    │   │   │   │   │   ├── Score.stories.tsx
    │   │   │   │   │   ├── Score.tsx
    │   │   │   │   │   └── styles.module.scss
    │   │   │   │   ├── search/
    │   │   │   │   │   └── SearchColumnsInput.tsx
    │   │   │   │   ├── settings/
    │   │   │   │   │   └── DocGeneratorSettings.tsx
    │   │   │   │   ├── telemetry/
    │   │   │   │   │   └── index.ts
    │   │   │   │   └── tests/
    │   │   │   │       ├── AddTest.tsx
    │   │   │   │       ├── CustomTestButton.tsx
    │   │   │   │       ├── DbtTestCode.tsx
    │   │   │   │       ├── DisplayTestDetails.tsx
    │   │   │   │       ├── EntityWithTests.tsx
    │   │   │   │       ├── Test.tsx
    │   │   │   │       ├── TestDetails.tsx
    │   │   │   │       ├── forms/
    │   │   │   │       │   ├── AcceptedValues.tsx
    │   │   │   │       │   ├── Relationships.tsx
    │   │   │   │       │   └── TestForm.tsx
    │   │   │   │       ├── hooks/
    │   │   │   │       │   └── useTestFormSave.ts
    │   │   │   │       ├── types.ts
    │   │   │   │       └── utils.ts
    │   │   │   ├── state/
    │   │   │   │   ├── documentationSlice.ts
    │   │   │   │   ├── types.ts
    │   │   │   │   └── useDocumentationContext.ts
    │   │   │   ├── styles.module.scss
    │   │   │   ├── types.ts
    │   │   │   └── utils.ts
    │   │   ├── feedback/
    │   │   │   ├── ResultFeedbackButtons.tsx
    │   │   │   └── types.ts
    │   │   ├── healthCheck/
    │   │   │   ├── IssueDetail.tsx
    │   │   │   ├── IssueList.tsx
    │   │   │   ├── ProjectHealthChecker.tsx
    │   │   │   ├── ProjectHealthNewCheckButton.tsx
    │   │   │   ├── healthcheck.module.scss
    │   │   │   └── types.ts
    │   │   ├── home/
    │   │   │   └── Home.tsx
    │   │   ├── insights/
    │   │   │   ├── Insights.stories.tsx
    │   │   │   ├── Insights.tsx
    │   │   │   ├── components/
    │   │   │   │   └── help/
    │   │   │   │       ├── HelpButton.tsx
    │   │   │   │       └── HelpContent.tsx
    │   │   │   └── insights.module.scss
    │   │   ├── lineage/
    │   │   │   ├── ActionWidget.tsx
    │   │   │   ├── Demo.tsx
    │   │   │   ├── LineageView.tsx
    │   │   │   ├── MissingLineageMessage.tsx
    │   │   │   ├── components/
    │   │   │   │   ├── demo/
    │   │   │   │   │   └── DemoButton.tsx
    │   │   │   │   └── help/
    │   │   │   │       ├── HelpButton.tsx
    │   │   │   │       └── HelpContent.tsx
    │   │   │   ├── lineage.module.scss
    │   │   │   ├── tailwind-globals.css
    │   │   │   └── types.ts
    │   │   ├── logger/
    │   │   │   └── index.ts
    │   │   ├── markdown/
    │   │   │   ├── PreTag.tsx
    │   │   │   ├── Renderer.tsx
    │   │   │   └── markdown.module.scss
    │   │   ├── newFeature/
    │   │   │   └── NewFeatureIndicator.tsx
    │   │   ├── notebooks/
    │   │   │   ├── DeleteNotebookButton.tsx
    │   │   │   ├── NoNotebooks.tsx
    │   │   │   ├── NotebookPrivacySettingButton.tsx
    │   │   │   ├── Notebooks.tsx
    │   │   │   ├── NotebooksList.tsx
    │   │   │   ├── notebooklist.module.scss
    │   │   │   └── types.ts
    │   │   ├── onboarding/
    │   │   │   ├── AltimateSetupStep.tsx
    │   │   │   ├── DbtIntegrationSetup.tsx
    │   │   │   ├── InstallDbtStep.tsx
    │   │   │   ├── Onboarding.tsx
    │   │   │   ├── PrerequisitesStep.tsx
    │   │   │   ├── ProjectSetupStep.tsx
    │   │   │   ├── SetupWizard.tsx
    │   │   │   ├── TutorialsStep.tsx
    │   │   │   └── onboarding.module.scss
    │   │   ├── previewFeature/
    │   │   │   ├── PreviewFeatureIcon.tsx
    │   │   │   └── tooltip.module.scss
    │   │   ├── queryPanel/
    │   │   │   ├── QueryPanel.stories.tsx
    │   │   │   ├── QueryPanel.tsx
    │   │   │   ├── QueryPanelDefaultView.tsx
    │   │   │   ├── QueryPanelProvider.tsx
    │   │   │   ├── components/
    │   │   │   │   ├── QueryPanelContents/
    │   │   │   │   │   ├── QueryPanelContent.tsx
    │   │   │   │   │   ├── QueryPanelError.tsx
    │   │   │   │   │   ├── QueryPanelLoader.tsx
    │   │   │   │   │   ├── QueryPanelTitle.tsx
    │   │   │   │   │   └── types.ts
    │   │   │   │   ├── clearResultsButton/
    │   │   │   │   │   └── ClearResultsButton.tsx
    │   │   │   │   ├── filters/
    │   │   │   │   │   └── Filters.tsx
    │   │   │   │   ├── help/
    │   │   │   │   │   ├── HelpButton.tsx
    │   │   │   │   │   └── HelpContent.tsx
    │   │   │   │   ├── openInTabButton/
    │   │   │   │   │   └── OpenInTabButton.tsx
    │   │   │   │   ├── perspective/
    │   │   │   │   │   ├── PerspectiveErrorBoundary.tsx
    │   │   │   │   │   ├── PerspectivePlugins.ts
    │   │   │   │   │   ├── PerspectiveViewer.stories.tsx
    │   │   │   │   │   ├── PerspectiveViewer.tsx
    │   │   │   │   │   ├── perspective.d.ts
    │   │   │   │   │   ├── perspective.module.scss
    │   │   │   │   │   ├── perspective.scss
    │   │   │   │   │   └── themes.css
    │   │   │   │   ├── queryLimit/
    │   │   │   │   │   ├── QueryLimit.tsx
    │   │   │   │   │   └── styles.module.scss
    │   │   │   │   ├── queryPanelBookmarks/
    │   │   │   │   │   ├── BookmarkAccordion.tsx
    │   │   │   │   │   ├── BookmarkButton.tsx
    │   │   │   │   │   ├── BookmarkPrivacySettingButton.tsx
    │   │   │   │   │   ├── DeleteBookmarkButton.tsx
    │   │   │   │   │   ├── QueryBookmarkRow.tsx
    │   │   │   │   │   ├── QueryPanelBookmarks.tsx
    │   │   │   │   │   └── utils.ts
    │   │   │   │   ├── queryPanelQueryHistory/
    │   │   │   │   │   ├── ExecuteQueryButton.tsx
    │   │   │   │   │   ├── QueryHistoryRow.tsx
    │   │   │   │   │   └── QueryPanelHistory.tsx
    │   │   │   │   └── runAdhocQueryButton/
    │   │   │   │       ├── NewNotebook.tsx
    │   │   │   │       └── RunAdhocQueryButton.tsx
    │   │   │   ├── constants.ts
    │   │   │   ├── context/
    │   │   │   │   ├── queryPanelSlice.ts
    │   │   │   │   └── types.ts
    │   │   │   ├── querypanel.module.scss
    │   │   │   ├── useQueryPanelCommonActions.ts
    │   │   │   ├── useQueryPanelListeners.ts
    │   │   │   └── useQueryPanelState.ts
    │   │   └── vscode/
    │   │       └── index.ts
    │   ├── notebook/
    │   │   ├── index.tsx
    │   │   ├── renderer.module.scss
    │   │   └── renderer.tsx
    │   ├── testUtils/
    │   │   ├── conversations/
    │   │   │   └── index.ts
    │   │   ├── datapilot/
    │   │   │   ├── docGen.ts
    │   │   │   ├── index.ts
    │   │   │   ├── queryAnalysis.ts
    │   │   │   └── test.ts
    │   │   ├── documentation/
    │   │   │   └── index.ts
    │   │   ├── index.ts
    │   │   ├── queryResults/
    │   │   │   └── index.ts
    │   │   └── users/
    │   │       └── index.ts
    │   ├── uiCore/
    │   │   ├── components/
    │   │   │   ├── accordion/
    │   │   │   │   ├── Accordion.tsx
    │   │   │   │   └── accordion.module.scss
    │   │   │   ├── avatar/
    │   │   │   │   ├── Avatar.tsx
    │   │   │   │   └── styles.module.scss
    │   │   │   ├── button/
    │   │   │   │   └── Button.tsx
    │   │   │   ├── codeblock/
    │   │   │   │   ├── codeblock.module.scss
    │   │   │   │   └── index.tsx
    │   │   │   ├── drawer/
    │   │   │   │   ├── index.tsx
    │   │   │   │   └── styles.module.scss
    │   │   │   ├── dropdown/
    │   │   │   │   ├── Dropdown.tsx
    │   │   │   │   └── dropdown.module.scss
    │   │   │   ├── dropdownButton/
    │   │   │   │   ├── DropdownButton.tsx
    │   │   │   │   └── styles.module.scss
    │   │   │   ├── iconButton/
    │   │   │   │   ├── IconButton.tsx
    │   │   │   │   └── styles.module.scss
    │   │   │   ├── loader/
    │   │   │   │   ├── index.tsx
    │   │   │   │   └── styles.module.scss
    │   │   │   ├── loadingButton/
    │   │   │   │   ├── index.tsx
    │   │   │   │   └── loadingButton.module.scss
    │   │   │   ├── popoverWithButton/
    │   │   │   │   ├── PopoverWithButton.tsx
    │   │   │   │   └── styles.module.scss
    │   │   │   ├── select/
    │   │   │   │   ├── index.tsx
    │   │   │   │   └── select.module.scss
    │   │   │   ├── stack/
    │   │   │   │   ├── Stack.tsx
    │   │   │   │   └── stack.module.scss
    │   │   │   ├── tabs/
    │   │   │   │   ├── Tabs.tsx
    │   │   │   │   └── tabs.module.scss
    │   │   │   ├── tag/
    │   │   │   │   ├── Tag.tsx
    │   │   │   │   └── tag.module.scss
    │   │   │   └── tooltip/
    │   │   │       └── Tooltip.tsx
    │   │   ├── index.ts
    │   │   ├── theme.scss
    │   │   └── uiToolkitStories/
    │   │       ├── Colors.stories.tsx
    │   │       ├── Components.stories.tsx
    │   │       └── Typography.stories.tsx
    │   └── vite-env.d.ts
    ├── tailwind.config.ts
    ├── tsconfig.json
    ├── tsconfig.node.json
    ├── vite.config.renderer.ts
    └── vite.config.ts

================================================
FILE CONTENTS
================================================

================================================
FILE: .eslintrc.json
================================================
{
  "root": true,
  "parser": "@typescript-eslint/parser",
  "parserOptions": {
    "ecmaVersion": 12,
    "sourceType": "module"
  },
  "plugins": ["@typescript-eslint"],
  "extends": [
    "plugin:@typescript-eslint/eslint-recommended",
    // "plugin:@typescript-eslint/recommended",
    "plugin:prettier/recommended"
  ],
  "rules": {
    "@typescript-eslint/class-name-casing": "off", // TODO: why is this also triggered for namespaces and functions?
    "@typescript-eslint/semi": "warn",
    "curly": "warn",
    "eqeqeq": "warn",
    "no-throw-literal": "warn",
    "indent": "off"
  }
}


================================================
FILE: .github/ISSUE_TEMPLATE/bug_report.yml
================================================
---
name: Bug report
description: Report a bug or an issue you've found with dbt Power User
labels: bug
body:
  - type: textarea
    attributes:
      label: Expected behavior
      description: What do you think should have happened
      placeholder: >
        A clear and concise description of what you expected to happen.
    validations:
      required: true
  - type: textarea
    attributes:
      label: Actual behavior
      description: Describe what actually happened
      placeholder: >
        A clear and concise description of what actually happened.
    validations:
      required: true
  - type: textarea
    attributes:
      label: Steps To Reproduce
      description: This will help us reproduce your issue
      placeholder: >
        In as much detail as possible, please provide steps to reproduce the issue.
        Sample code that triggers the issue, relevant server settings, etc is all very helpful here.
    validations:
      required: true
  - type: textarea
    attributes:
      label: Log output/Screenshots
      description: What do you think went wrong?
      placeholder: >
        If applicable, add log output and/or screenshots to help explain your problem.
  - type: input
    attributes:
      label: Operating System
      description: What Operating System are you using?
      placeholder: "You can get it via `cat /etc/os-release` for example"
    validations:
      required: true
  - type: input
    attributes:
      label: dbt version
      description: "Execute `dbt --version`"
      placeholder: Which version of dbt are you using?
    validations:
      required: true
  - type: input
    attributes:
      label: dbt Adapter
      description: "Which adapter are you using?"
    validations:
      required: true
  - type: input
    attributes:
      label: dbt Power User version
      description: "What dbt Power User version are you using?"
    validations:
      required: true
  - type: checkboxes
    attributes:
      label: Are you willing to submit PR?
      description: >
        This is absolutely not required, but we are happy to guide you in the contribution process
        especially if you already have a good understanding of how to implement the feature.
      options:
        - label: Yes I am willing to submit a PR!
  - type: markdown
    attributes:
      value: "Thanks for completing our form!"


================================================
FILE: .github/ISSUE_TEMPLATE/config.yaml
================================================
---
contact_links:
  - name: Ask a question or get help right here
    url: https://github.com/innoverio/vscode-dbt-power-user/discussions
    about: Ask a question or get help here on Github Discussions


================================================
FILE: .github/ISSUE_TEMPLATE/config.yml
================================================
---
contact_links:
  - name: Ask a question or get help right here
    url: https://github.com/innoverio/vscode-dbt-power-user/discussions
    about: Ask a question or get help here on Github Discussions


================================================
FILE: .github/ISSUE_TEMPLATE/feature_request.yml
================================================
---
name: Feature request
description: Suggest an idea for dbt Power User
labels: enhancement
body:
  - type: textarea
    attributes:
      label: Describe the feature
      description: What would you like to happen?
      placeholder: >
        A clear and concise description of what you want to happen
        and what problem it would solve.
    validations:
      required: true
  - type: textarea
    attributes:
      label: Describe alternatives you've considered
      description: What did you try to make it happen?
      placeholder: >
        A clear and concise description of any alternative solutions or features you've considered.
  - type: textarea
    attributes:
      label: Who will benefit?
      placeholder: >
        What kind of use case will this feature be useful for? Please be specific and provide examples, this will help us prioritize properly.
  - type: checkboxes
    attributes:
      label: Are you willing to submit PR?
      description: >
        This is absolutely not required, but we are happy to guide you in the contribution process
        especially if you already have a good understanding of how to implement the feature.
      options:
        - label: Yes I am willing to submit a PR!
  - type: markdown
    attributes:
      value: "Thanks for completing our form!"


================================================
FILE: .github/ISSUE_TEMPLATE/sweep-template.yml
================================================
name: Sweep Issue
title: 'Sweep: '
description: For small bugs, features, refactors, and tests to be handled by Sweep, an AI-powered junior developer.
labels: sweep
body:
  - type: textarea
    id: description
    attributes:
      label: Details
      description: Tell Sweep where and what to edit and provide enough context for a new developer to the codebase
      placeholder: |
        Unit Tests: Write unit tests for <FILE>. Test each function in the file. Make sure to test edge cases.
        Bugs: The bug might be in <FILE>. Here are the logs: ...
        Features: the new endpoint should use the ... class from <FILE> because it contains ... logic.
        Refactors: We are migrating this function to ... version because ...
  - type: input
    id: branch
    attributes:
      label: Branch
      description: The branch to work off of (optional)
      placeholder: |
        main

================================================
FILE: .github/actions/common-build/action.yml
================================================
# .github/actions/common-build/action.yml
name: "Common Build"
description: "Common build steps for the project"

inputs:
  vsce-target:
    description: "VS Code target platform (e.g., darwin-arm64). When set, only the matching altimate-core native binary is installed."
    required: false
    default: ""

runs:
  using: "composite"
  steps:
    - name: Install Node.js
      uses: actions/setup-node@v4
      with:
        node-version: "20"
        cache: "npm"
        cache-dependency-path: |
          package-lock.json
          webview_panels/package-lock.json
    - run: npm ci
      shell: bash
      env:
        VSCE_TARGET: ${{ inputs.vsce-target }}
    - run: npm ci
      shell: bash
      working-directory: ./webview_panels


================================================
FILE: .github/dependabot.yml
================================================
version: 2
updates:
  # python dependencies
  - package-ecosystem: "npm"
    directory: "/"
    schedule:
      interval: "daily"
    rebase-strategy: "disabled"
    labels:
      - "dependencies"


================================================
FILE: .github/pull_request_template.md
================================================
## Overview

### Problem

Describe the problem you are solving. Mention the ticket/issue if applicable.

### Solution

Describe the implemented solution. Add external references if needed.

### Screenshot/Demo

A picture is worth a thousand words. Please highlight the changes if applicable.

### How to test

- Steps to be followed to verify the solution or code changes
- Mention if there is any settings configuration added/changed/deleted

## Checklist

- [ ] I have run this code and it appears to resolve the stated issue
- [ ] `README.md` updated and added information about my change


================================================
FILE: .github/scripts/analyze-vsix.py
================================================
"""Analyze a VSIX file and output size data as JSON.

Reads the first .vsix file in the current directory, categorizes its
contents, and writes bundle-baseline.json with the results. Also sets
the vsix_size GitHub Actions output variable.
"""

import json
import os
import sys
import zipfile

CATEGORIES = [
    (lambda n: "altimate-core" in n and n.endswith(".node"), "Native: altimate-core"),
    (lambda n: "zeromq/" in n and n.endswith(".node"), "Native: zeromq"),
    (lambda n: "dist/node_modules/" in n, "Native: other node_modules"),
    (lambda n: n.endswith("extension.js") and "dist/" in n, "Extension backend (JS)"),
    (lambda n: "webview_panels/dist/" in n and n.endswith(".js"), "Webview JS bundles"),
    (lambda n: "webview_panels/dist/" in n and n.endswith(".css"), "Webview CSS"),
    (
        lambda n: "webview_panels/dist/" in n
        and (n.endswith(".gif") or n.endswith(".png")),
        "Webview images",
    ),
    (lambda n: "webview_panels/dist/" in n, "Webview other"),
    (
        lambda n: "altimate_python_packages/" in n
        or (n.endswith(".py") and "dist/" in n),
        "Python packages",
    ),
    (lambda n: "media/" in n, "Media assets"),
]


def categorize(filename):
    for predicate, category in CATEGORIES:
        if predicate(filename):
            return category
    return "Other"


def main():
    vsix_files = [f for f in os.listdir(".") if f.endswith(".vsix")]
    if not vsix_files:
        print("No .vsix file found", file=sys.stderr)
        sys.exit(1)

    vsix = vsix_files[0]
    z = zipfile.ZipFile(vsix)
    vsix_mb = os.path.getsize(vsix) / 1024 / 1024

    categories = {}
    for info in z.infolist():
        cat = categorize(info.filename)
        if cat not in categories:
            categories[cat] = {"raw": 0, "compressed": 0, "count": 0}
        categories[cat]["raw"] += info.file_size
        categories[cat]["compressed"] += info.compress_size
        categories[cat]["count"] += 1

    baseline = {"vsix_mb": round(vsix_mb, 1), "categories": categories}
    with open("bundle-baseline.json", "w") as f:
        json.dump(baseline, f)

    gh_output = os.environ.get("GITHUB_OUTPUT")
    if gh_output:
        with open(gh_output, "a") as f:
            f.write(f"vsix_size={vsix_mb:.1f}\n")

    print(f"VSIX size: {vsix_mb:.1f} MB")


if __name__ == "__main__":
    main()


================================================
FILE: .github/scripts/generate-bundle-report.py
================================================
"""Generate a bundle size report comparing current build against master baseline.

Reads bundle-baseline.json (current build) and optionally master-baseline.json
(cached master baseline). Outputs:
  - bundle-report.md: collapsible markdown report for PR comments
  - GITHUB_OUTPUT: status_desc for the commit status API

Expects VSCE_TARGET env var to label the platform.
"""

import json
import os
import sys


def format_size(bytes_val):
    if bytes_val >= 100 * 1024:
        return f"{bytes_val / 1024 / 1024:.1f} MB"
    return f"{bytes_val / 1024:.0f} KB"


def main():
    target = os.environ.get("VSCE_TARGET", "unknown")
    current = json.load(open("bundle-baseline.json"))
    vsix_mb = current["vsix_mb"]
    categories = current["categories"]

    # Try to load master baseline for comparison
    baseline_mb = None
    baseline_cats = None
    if os.path.exists("master-baseline.json"):
        try:
            master = json.load(open("master-baseline.json"))
            baseline_mb = master["vsix_mb"]
            baseline_cats = master.get("categories", {})
        except Exception:
            pass

    # Build delta string for commit status
    if baseline_mb is not None:
        delta = vsix_mb - baseline_mb
        sign = "+" if delta >= 0 else ""
        delta_str = f" ({sign}{delta:.1f} MB vs master)"
    else:
        delta_str = ""

    status_desc = f"VSIX: {vsix_mb:.1f} MB{delta_str}"

    # Build summary line for collapsible header
    if baseline_mb is not None:
        delta = vsix_mb - baseline_mb
        sign = "+" if delta >= 0 else ""
        icon = "\U0001f534" if delta > 1 else "\U0001f7e2" if delta < -1 else "\u26aa"
        summary = f"{target}: {vsix_mb:.1f} MB \u00b7 {icon} {sign}{delta:.1f} MB vs master"
    else:
        summary = f"{target}: {vsix_mb:.1f} MB"

    total_raw = sum(v["raw"] for v in categories.values())
    total_compressed = sum(v["compressed"] for v in categories.values())
    total_files = sum(v["count"] for v in categories.values())

    # Build collapsible markdown report
    lines = [
        "<details>",
        f"<summary><strong>{summary}</strong></summary>",
        "",
        "| Category | Size | Compressed | Files |",
        "|---|---:|---:|---:|",
    ]

    sorted_cats = sorted(categories.items(), key=lambda x: x[1]["raw"], reverse=True)
    for cat, v in sorted_cats:
        raw = v["raw"]
        if raw < 1024:
            continue
        raw_s = format_size(raw)
        comp_s = format_size(v["compressed"])
        delta_s = ""
        if baseline_cats and cat in baseline_cats:
            d = (raw - baseline_cats[cat]["raw"]) / 1024 / 1024
            if abs(d) >= 0.1:
                s = "+" if d >= 0 else ""
                delta_s = f" ({s}{d:.1f})"
        lines.append(f"| {cat} | {raw_s}{delta_s} | {comp_s} | {v['count']} |")

    lines.append(
        f"| **Total** | **{total_raw / 1024 / 1024:.1f} MB** "
        f"| **{total_compressed / 1024 / 1024:.1f} MB** | **{total_files}** |"
    )
    lines.extend(["", "</details>"])

    report = "\n".join(lines)
    with open("bundle-report.md", "w") as f:
        f.write(report)

    gh_output = os.environ.get("GITHUB_OUTPUT")
    if gh_output:
        with open(gh_output, "a") as f:
            f.write(f"status_desc={status_desc}\n")

    print(report)


if __name__ == "__main__":
    main()


================================================
FILE: .github/workflows/ci.yml
================================================
on:
  push:
    branches:
      - master
  pull_request:
    branches:
      - master
  release:
    types:
      - created

permissions:
  contents: read

jobs:
  build:
    strategy:
      fail-fast: false
      matrix:
        include:
          - os: macos-latest
            vsce-target: darwin-arm64
          - os: ubuntu-latest
            vsce-target: linux-x64
          - os: windows-latest
            vsce-target: win32-x64
    runs-on: ${{ matrix.os }}
    permissions:
      contents: read
      pull-requests: write
      statuses: write
    steps:
      - name: Checkout
        uses: actions/checkout@v4
      - name: Run common build steps
        uses: ./.github/actions/common-build
        with:
          vsce-target: ${{ matrix.vsce-target }}
      - name: Build and package VSIX
        run: npx @vscode/vsce package --target ${{ matrix.vsce-target }}
        env:
          VSCE_TARGET: ${{ matrix.vsce-target }}
          NODE_OPTIONS: --max-old-space-size=8192
      - name: Analyze bundle size
        id: analyze
        run: python3 .github/scripts/analyze-vsix.py
      - name: Restore master baseline
        if: github.event_name == 'pull_request'
        uses: actions/cache/restore@v4
        with:
          path: master-baseline.json
          key: bundle-size-baseline-${{ matrix.vsce-target }}-will-not-match
          restore-keys: bundle-size-baseline-${{ matrix.vsce-target }}-
      - name: Save master baseline
        if: github.event_name == 'push' && github.ref == 'refs/heads/master'
        uses: actions/cache/save@v4
        with:
          path: bundle-baseline.json
          key: bundle-size-baseline-${{ matrix.vsce-target }}-${{ github.sha }}
      - name: Generate report
        id: report
        run: python3 .github/scripts/generate-bundle-report.py
        env:
          VSCE_TARGET: ${{ matrix.vsce-target }}
      - name: Set commit status
        if: github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name == github.repository
        uses: actions/github-script@v7
        with:
          script: |
            const desc = '${{ steps.report.outputs.status_desc }}';
            const target = '${{ matrix.vsce-target }}';
            await github.rest.repos.createCommitStatus({
              owner: context.repo.owner,
              repo: context.repo.repo,
              sha: context.payload.pull_request.head.sha,
              state: 'success',
              description: desc,
              context: `Bundle Size (${target})`,
              target_url: `https://github.com/${context.repo.owner}/${context.repo.repo}/actions/runs/${context.runId}`,
            });
      - name: Upload report
        if: github.event_name == 'pull_request'
        uses: actions/upload-artifact@v4
        with:
          name: bundle-report-${{ matrix.vsce-target }}
          path: bundle-report.md
          retention-days: 1
      - name: Job summary
        shell: bash
        run: cat bundle-report.md >> "$GITHUB_STEP_SUMMARY"

  bundle-size-report:
    needs: build
    runs-on: ubuntu-latest
    if: github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name == github.repository
    permissions:
      pull-requests: write
    steps:
      - name: Download all reports
        uses: actions/download-artifact@v4
        with:
          pattern: bundle-report-*
      - name: Combine reports
        run: |
          echo "## Bundle Size Report" > combined-report.md
          echo "" >> combined-report.md
          for dir in bundle-report-*/; do
            cat "$dir/bundle-report.md" >> combined-report.md
            echo "" >> combined-report.md
          done
      - name: Post PR comment
        uses: actions/github-script@v7
        with:
          script: |
            const fs = require('fs');
            const report = fs.readFileSync('combined-report.md', 'utf8');
            const marker = '<!-- bundle-size-report -->';
            const body = marker + '\n' + report;

            const { data: comments } = await github.rest.issues.listComments({
              owner: context.repo.owner,
              repo: context.repo.repo,
              issue_number: context.issue.number,
            });

            const existing = comments.find(c => c.body.includes(marker));

            if (existing) {
              await github.rest.issues.updateComment({
                owner: context.repo.owner,
                repo: context.repo.repo,
                comment_id: existing.id,
                body,
              });
            } else {
              await github.rest.issues.createComment({
                owner: context.repo.owner,
                repo: context.repo.repo,
                issue_number: context.issue.number,
                body,
              });
            }

  release-vsstudio-marketplace:
    needs: build
    runs-on: ubuntu-latest
    if: success() && startsWith( github.ref, 'refs/tags/')
    strategy:
      fail-fast: false
      matrix:
        target:
          - darwin-arm64
          - darwin-x64
          - linux-arm64
          - linux-x64
          - win32-x64
    steps:
      - name: Checkout
        uses: actions/checkout@v4
      - name: Run common build steps
        uses: ./.github/actions/common-build
        with:
          vsce-target: ${{ matrix.target }}
      - name: Publish Visual Studio Marketplace
        run: |
          PRE_RELEASE=""
          if [ "${{ github.event_name }}" == "release" ] && [ "${{ github.event.release.prerelease }}" == "true" ]; then
            PRE_RELEASE="--pre-release"
          fi
          npx vsce publish --skip-duplicate --target ${{ matrix.target }} $PRE_RELEASE
        env:
          VSCE_PAT: ${{ secrets.VSCE_PAT }}
          VSCE_TARGET: ${{ matrix.target }}

    # Send notification after all platform builds (only on the last matrix entry)
  release-vsstudio-notify:
    runs-on: ubuntu-latest
    needs: release-vsstudio-marketplace
    if: always() && startsWith( github.ref, 'refs/tags/')
    steps:
      - name: Send Slack notification
        env:
          SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
        uses: 8398a7/action-slack@v3
        with:
          status: ${{ needs.release-vsstudio-marketplace.result }}
          text: "Tag: ${{  github.ref_name }} release to Visual Studio Marketplace status: ${{ needs.release-vsstudio-marketplace.result == 'success' && 'succeeded' || 'failed' }} :${{ needs.release-vsstudio-marketplace.result == 'success' && 'tada' || 'disappointed' }}:"

  release-openvsx-marketplace:
    needs: build
    runs-on: ubuntu-latest
    if: success() && startsWith( github.ref, 'refs/tags/')
    strategy:
      fail-fast: false
      matrix:
        target:
          - darwin-arm64
          - darwin-x64
          - linux-arm64
          - linux-x64
          - win32-x64
    steps:
      - name: Checkout
        uses: actions/checkout@v4
      - name: Run common build steps
        uses: ./.github/actions/common-build
        with:
          vsce-target: ${{ matrix.target }}
      - name: Publish OpenVSX Marketplace
        run: |
          PRE_RELEASE=""
          if [ "${{ github.event_name }}" == "release" ] && [ "${{ github.event.release.prerelease }}" == "true" ]; then
            PRE_RELEASE="--pre-release"
          fi
          npx ovsx publish --skip-duplicate --target ${{ matrix.target }} $PRE_RELEASE
        env:
          OVSX_PAT: ${{ secrets.OVSX_PAT }}
          VSCE_TARGET: ${{ matrix.target }}

  release-openvsx-notify:
    runs-on: ubuntu-latest
    needs: release-openvsx-marketplace
    if: always() && startsWith( github.ref, 'refs/tags/')
    steps:
      - name: Send Slack notification
        env:
          SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
        uses: 8398a7/action-slack@v3
        with:
          status: ${{ needs.release-openvsx-marketplace.result }}
          text: "Tag: ${{  github.ref_name }} release to openvsx marketplace status: ${{ needs.release-openvsx-marketplace.result == 'success' && 'succeeded' || 'failed' }} :${{ needs.release-openvsx-marketplace.result == 'success' && 'tada' || 'disappointed' }}:"


================================================
FILE: .github/workflows/deploy-docs-to-s3.yaml
================================================
name: Deploy Static Website to AWS

# Defines when the action will run.
# This example triggers the workflow on push events to the main branch.
on:
  push:
    branches: [master]

# Limit permissions for the GITHUB_TOKEN to adhere to the principle of least privilege.
permissions:
  contents: read

# The jobs that will be executed by the workflow.
jobs:
  deploy:
    # The type of runner that the job will run on.
    runs-on: ubuntu-latest

    # Steps represent a sequence of tasks that will be executed as part of the job.
    steps:
      # Checks-out your repository under $GITHUB_WORKSPACE, so the job can access it.
      - uses: actions/checkout@v2

      # Install MkDocs and any necessary plugins
      - name: Install MkDocs with plugins
        run: |
          pip install mkdocs          
          pip install mkdocs-material
          pip install mkdocs-git-revision-date-localized-plugin

      # Build your site using MkDocs
      - name: Build site with MkDocs
        run: |
          cd documentation
          mkdocs build --clean

      # Deploy to AWS
      - name: Deploy to AWS
        uses: onramper/action-deploy-aws-static-site@v3.2.0
        with:
          AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
          AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          domain: docs.myaltimate.com
          publish_dir: ./documentation/site


================================================
FILE: .github/workflows/tests.yml
================================================
name: Tests

on:
  push:
    branches: ["*"]
  pull_request:
    branches: ["*"]

jobs:
  test:
    strategy:
      matrix:
        os: [macos-latest, ubuntu-latest, windows-latest]
    runs-on: ${{ matrix.os }}

    steps:
      - uses: actions/checkout@v3

      - name: Setup Node.js
        uses: actions/setup-node@v3
        with:
          node-version: "18"
          cache: "npm"
          cache-dependency-path: |
            package-lock.json
            webview_panels/package-lock.json
      - name: Install dependencies
        run: |
          npm ci
          npm run install:panels
      - name: Compile
        run: npm run compile

      - name: Install xvfb
        if: runner.os == 'Linux'
        run: |
          sudo apt-get update
          sudo apt-get install -y xvfb
      - name: Run unit tests (Linux)
        if: runner.os == 'Linux'
        run: |
          xvfb-run --auto-servernum npm run compile && xvfb-run --auto-servernum npm run test:coverage
      - name: Run unit tests (macOS/Windows)
        if: runner.os != 'Linux'
        run: |
          npm run compile && npm run test:coverage

      - name: Setup Python
        uses: actions/setup-python@v5
        with:
          python-version: "3.11"

      - name: Install sqlfmt
        run: pip install "shandy-sqlfmt[jinjafmt]"

      - name: Run integration tests (Linux)
        if: runner.os == 'Linux'
        run: xvfb-run --auto-servernum npm run test:integration

      - name: Run integration tests (macOS/Windows)
        if: runner.os != 'Linux'
        run: npm run test:integration

      - name: Upload test results
        if: always()
        uses: actions/upload-artifact@v4
        with:
          name: test-results-${{ matrix.os }}
          path: test-results/

      - name: Upload coverage results
        if: always()
        uses: actions/upload-artifact@v4
        with:
          name: coverage-${{ matrix.os }}
          path: |
            coverage/
            .nyc_output/
            *.lcov
      - name: Upload coverage to Codecov
        if: always()
        uses: codecov/codecov-action@v3
        with:
          token: ${{ secrets.CODECOV_TOKEN }}
          directory: ./coverage/
          flags: unittests
          name: codecov-${{ matrix.os }}
          fail_ci_if_error: false


================================================
FILE: .gitignore
================================================
out
node_modules
dist
.vscode-test/
*.vsix
.DS_Store
.idea
.history
__pycache__/
*.pyc
*.pyo
*.pyd
.claude

# Build and dependencies
src/lib/notebooks/
.nyc_output/
coverage/
test-results/
.venv/

# Test directories
test_dbt_project/
test-workspace/

# IDE and editor files
*.swp
*.swo
.vscode/
*.code-workspace

# OS generated files
.DS_Store
.DS_Store?
._*
.Spotlight-V100
.Trashes
ehthumbs.db
Thumbs.db
.aider*
certs
mcp.json

# Docker setup
docker-setup/*.vsix
docker-setup/.env

# Playwright MCP
.playwright-mcp/

# GitHub issues dashboard cache
monitoring/github_issues/.cache/


================================================
FILE: .gitpod.yml
================================================
# This configuration file was automatically generated by Gitpod.
# Please adjust to your needs (see https://www.gitpod.io/docs/introduction/learn-gitpod/gitpod-yaml)
# and commit this file to your remote git repository to share the goodness with others.

# Learn more from ready-to-use templates: https://www.gitpod.io/docs/introduction/getting-started/quickstart

ports:
  # webview_panels
  - port: 5173
    visibility: public
    onOpen: open-browser
  # webview_panels storybook
  - port: 6006
    visibility: public
    onOpen: open-browser

tasks:
  - init: npm install
  - name: webview_panels install
    before: |
      cd webview_panels
      npm install
      gp sync-done webview_panels_install

  - name: webview_panels storybook
    command: |
      cd webview_panels
      gp sync-await webview_panels_install
      npm run storybook

  - name: webview_panels dev server
    command: |
      cd webview_panels
      gp sync-await webview_panels_install
      npm run dev


================================================
FILE: .husky/pre-commit
================================================
npx lint-staged


================================================
FILE: .mcp.json
================================================
{
  "mcpServers": {
    "playwright": {
      "command": "npx",
      "args": ["-y", "@playwright/mcp"],
      "env": { "BROWSER_NAME": "chromium" }
    }
  }
}


================================================
FILE: .nycrc.json
================================================
{
  "extends": "@istanbuljs/nyc-config-typescript",
  "all": true,
  "check-coverage": true,
  "reporter": ["text", "lcov"],
  "exclude": [
    "coverage/**",
    "packages/*/test/**",
    "test/**",
    "test{,-*}.{js,cjs,mjs,ts}",
    "**/*{.,-}test.{js,cjs,mjs,ts}",
    "**/__tests__/**",
    "**/{karma,rollup,webpack,vite,vitest,jest,ava,babel,nyc,cypress}.config.{js,cjs,mjs,ts}",
    "**/node_modules/**",
    "dist/**",
    "out/**",
    "src/test/**",
    "src/**/*.test.ts",
    "src/test/suite/**"
  ],
  "include": ["src/**/*.ts"],
  "branches": 5,
  "lines": 7,
  "functions": 7,
  "statements": 7
}


================================================
FILE: .prettierignore
================================================
node_modules


================================================
FILE: .prettierrc
================================================
{
  "plugins": ["prettier-plugin-organize-imports"]
}

================================================
FILE: .vscodeignore
================================================
.vscode/**
.vscode-test/**
out/**
src/**
**/node_modules
!dist/node_modules/**
.gitignore
vsc-extension-quickstart.md
**/tsconfig.json
**/.eslintrc.json
**/*.map
**/*.ts
.github
.claude
.mcp.json
.playwright-mcp
docker-setup
**/*.test.*
CLAUDE.md
webview_panels
!webview_panels/dist

# Non-runtime directories (docs site, test fixtures, monitoring, git hooks)
documentation
test-fixtures
monitoring
.husky

# Dev/CI config files not needed in the installed extension
jest.config.js
.gitpod.yml
.nycrc.json
codecov.yml
.prettierignore
sweep.yaml
prepareBuild.js
CONTRIBUTING.md


================================================
FILE: CLAUDE.md
================================================
# Claude Code - dbt Power User VSCode Extension Architecture Guide

## Project Overview

**vscode-dbt-power-user** is a comprehensive VSCode extension that makes VSCode seamlessly work with dbt (data build tool). It's an open-source project published by Altimate AI that extends VSCode with advanced dbt features including auto-completion, query preview, lineage visualization, documentation generation, and AI-powered features.

### Key Statistics

- **Version**: 0.57.3
- **Project Type**: VSCode Extension (TypeScript/React)
- **License**: MIT
- **Architecture**: Multi-layered with webview panels, Python integrations, and MCP server

## High-Level Architecture

### 1. Core Extension Architecture

The extension follows a **dependency injection pattern** using Inversify container:

- **Entry Point**: `src/extension.ts` → `DBTPowerUserExtension`
- **DI Container**: `src/inversify.config.ts` manages all service dependencies
- **Main Extension Class**: `DBTPowerUserExtension` orchestrates all components

### 2. Multi-Process Architecture

The extension operates across multiple processes:

1. **Main Extension Process** (Node.js/TypeScript)

   - VSCode API integration
   - File system operations
   - dbt CLI interactions

2. **Webview Panels** (React/TypeScript)

   - Modern React-based UI components
   - Located in `webview_panels/` directory
   - Built with Vite, uses Antd for UI components

3. **Python Bridge Integration**

   - dbt core/cloud integration via Python scripts
   - Key files: `dbt_core_integration.py`, `dbt_cloud_integration.py`
   - Jupyter kernel for notebook functionality

4. **MCP Server** (Model Context Protocol)
   - AI integration and tool calling functionality
   - Located in `src/mcp/`

### 3. Key Module Organization

```
src/
├── manifest/           # dbt project parsing and management
├── dbt_client/        # dbt integration (core, cloud, fusion)
├── webview_provider/  # Webview panel management
├── autocompletion_provider/ # Language server features
├── services/          # Business logic services
├── commands/          # VSCode command implementations
├── mcp/              # Model Context Protocol server
└── telemetry/        # Analytics and tracking
```

## Core Functionality Areas

### 1. dbt Integration Support

**Multiple Integration Types**:

- **dbt Core**: Direct Python integration via Python bridge
- **dbt Cloud**: API-based integration with dbt Cloud services
- **dbt Fusion**: Command-line integration with dbt-fusion CLI
- **Core Command**: CLI wrapper integration for dbt core

**Key Integration Files**:

- `src/dbt_client/dbtCoreIntegration.ts` - dbt Core Python integration
- `src/dbt_client/dbtCloudIntegration.ts` - dbt Cloud API integration
- `src/dbt_client/dbtFusionCommandIntegration.ts` - dbt Fusion CLI integration
- `dbt_core_integration.py` - Python bridge for Core integration

### 2. Language Server Features

**Provider Architecture**: Each feature implemented as a separate provider:

- `autocompletion_provider/` - IntelliSense for dbt models, macros, sources
- `definition_provider/` - Go-to-definition functionality
- `hover_provider/` - Hover information
- `code_lens_provider/` - Inline actions
- `validation_provider/` - SQL validation

### 3. Webview Panel System

**Modern React Architecture** (`webview_panels/`):

- **Build System**: Vite + TypeScript + React 18
- **State Management**: Redux Toolkit
- **UI Framework**: Antd + custom components
- **Data Visualization**: Perspective.js, Plotly.js

**Key Panels**:

- `modules/dataPilot/` - AI chat interface
- `modules/queryPanel/` - Query results and analysis
- `modules/lineage/` - Data lineage visualization
- `modules/documentationEditor/` - Documentation management
- `modules/insights/` - Project insights and actions

### 4. AI and Advanced Features

**DataPilot AI Integration**:

- Chat-based interface for dbt assistance
- Query explanation and optimization
- Documentation generation
- Test suggestions

**MCP Server Integration**:

- Tool calling for dbt operations
- Integration with Claude and other AI models
- Located in `src/mcp/server.ts`

## Build System and Tooling

### 1. Multi-Stage Build Process

**Main Extension Build** (Webpack):

```bash
npm run webpack        # Development build
npm run vscode:prepublish  # Production build
```

**Webview Panels Build** (Vite):

```bash
npm run panel:webviews  # Build React components
```

### 2. Development Workflow

**Key Scripts**:

- `npm run compile` - Compile the code
- `npm run watch` - Development with hot reload
- `npm run test` - Jest-based testing
- `npm run lint` - ESLint + Prettier
- `npm run build-vsix` - Package extension

**Development Environment**:

- Uses VSCode's built-in debugger ("Launch Extension")
- Hot reload for webview panels
- Python environment auto-detection

### 3. Testing Strategy

**Test Configuration** (`jest.config.js`):

- **Unit Tests**: Jest + ts-jest
- **Mock System**: Custom VSCode API mocks
- **Coverage**: Istanbul-based coverage reporting
- **Test Location**: `src/test/` with mock infrastructure

## Key Dependencies and Integrations

### 1. VSCode Extension Dependencies

**Required Extensions**:

- `samuelcolvin.jinjahtml` - Jinja templating support
- `ms-python.python` - Python environment integration
- `altimateai.vscode-altimate-mcp-server` - MCP server

### 2. Major Technical Dependencies

**Backend (Node.js)**:

- `inversify` - Dependency injection
- `python-bridge` - Python process communication
- `zeromq` - Jupyter kernel communication
- `@modelcontextprotocol/sdk` - MCP protocol

**Frontend (React)**:

- `react` 18 + `react-dom`
- `@reduxjs/toolkit` - State management
- `antd` - UI component library
- `@finos/perspective` - Data grid and visualization

### 3. Python Integration

**Python Scripts**:

- `dbt_core_integration.py` - Core dbt operations
- `dbt_cloud_integration.py` - Cloud API operations
- `dbt_healthcheck.py` - Project health analysis
- `altimate_notebook_kernel.py` - Jupyter integration

## Configuration and Extensibility

### 1. Extension Configuration

**Comprehensive Settings** (190+ configuration options):

- dbt integration mode selection
- Query limits and templates
- AI features and endpoints
- Lineage visualization options
- Defer-to-production configuration

### 2. Language Support

**File Type Associations**:

- `jinja-sql` - Primary dbt model files
- `jinja-yaml` - dbt configuration files
- `jinja-md` - Documentation files
- Custom notebook format (`.notebook`)

### 3. Command System

**80+ Commands Available**:

- Model execution (`dbtPowerUser.runCurrentModel`)
- Documentation generation (`dbtPowerUser.generateSchemaYML`)
- Query analysis (`dbtPowerUser.sqlLineage`)
- AI assistance (`dbtPowerUser.openDatapilotWithQuery`)

## Deployment and Distribution

### 1. Multi-Platform Distribution

**CI/CD Pipeline** (`.github/workflows/ci.yml`):

- **Build Matrix**: macOS, Ubuntu, Windows
- **Visual Studio Marketplace**: Primary distribution
- **OpenVSX Registry**: Open-source alternative
- **Platform-specific builds**: Architecture-aware packaging

### 2. Release Process

**Automated Release**:

- Git tag triggers release pipeline
- Pre-release and stable channel support
- Slack notifications for release status
- VSIX package generation

## Development Guidelines

### 1. Code Organization Principles

- **Dependency Injection**: All services use Inversify DI
- **Provider Pattern**: Language features as modular providers
- **Event-Driven**: Manifest changes trigger updates across components
- **Separation of Concerns**: Clear boundaries between UI, business logic, and dbt integration

### 2. Adding New Features

**For Language Features**:

1. Create provider in appropriate `*_provider/` directory
2. Register in `inversify.config.ts`
3. Wire up in `DBTPowerUserExtension`

**For UI Features**:

1. Add React component in `webview_panels/src/modules/`
2. Update routing in `AppRoutes.tsx`
3. Add state management slice if needed

**For dbt Integration**:

1. Extend appropriate dbt client (`dbtCoreIntegration.ts` etc.)
2. Add Python bridge function if needed
3. Update MCP server tools if AI-accessible

### 3. Testing Approach

- **Unit Tests**: Mock VSCode APIs and dependencies
- **Integration Tests**: Test with real dbt projects
- **Manual Testing**: Use "Launch Extension" debug configuration
- **Webview Testing**: Storybook for component development

## Common Development Patterns

### 1. Manifest-Driven Architecture

The extension heavily relies on dbt's `manifest.json` for understanding project structure. Most features key off manifest parsing events.

### 2. Multi-Integration Support

Always consider how features work across dbt core, cloud, and other integration types. Use strategy pattern for integration-specific behavior.

### 3. Webview Communication

Uses VSCode's webview messaging system with typed message contracts. State is synchronized between extension and webview contexts.

### 4. Python Bridge Pattern

For dbt operations requiring Python, use the established bridge pattern with JSON serialization and error handling.

This architecture enables the extension to provide comprehensive dbt development support while maintaining modularity and extensibility for future enhancements.

---

# User Guide

## Core Features Overview

The dbt Power User extension accelerates dbt and SQL development by 3x through three key phases:

### 🔧 DEVELOP

- **SQL Visualizer**: Visual query builder and analyzer
- **Query Explanation**: AI-powered SQL query explanation
- **Auto-generation**: Generate dbt models from sources or raw SQL
- **Auto-completion**: IntelliSense for dbt models, macros, sources, and doc blocks
- **Click to Run**: Execute models directly from editor
- **Query Translation**: Translate SQL between different dialects
- **Compiled SQL Preview**: View compiled dbt code before execution

### 🧪 TEST

- **Query Results Preview**: Execute and analyze query results with export capabilities
- **Test Generation**: AI-powered test generation for dbt models
- **Column Lineage**: Detailed data lineage with code visibility
- **Defer to Production**: Run models without rebuilding dependencies
- **SQL Validation**: Validate SQL without execution
- **Model Lineage**: Visual representation of model dependencies

### 🤝 COLLABORATE

- **Documentation Generation**: AI-powered documentation creation
- **Code Collaboration**: Discussion threads on code and documentation
- **Project Governance**: Automated checks for code quality and standards
- **SaaS UI Integration**: Web-based interface for dbt docs and lineage
- **Query History & Bookmarks**: Track and share query executions
- **Export Workflows**: Share lineage and documentation externally

## DataMates AI Integration

The extension includes **AI Teammates** through the DataMates Platform:

- **Coaching**: Personalize AI teammates for specific requirements
- **Query Assistance**: AI-powered query explanation and optimization
- **Documentation**: Automated documentation generation
- **Test Suggestions**: Smart test recommendations
- **SQL Translation**: Cross-dialect SQL conversion

## Feature Availability

**Free Extension Features**:

- SQL Visualizer, Model-level lineage, Auto-generation from sources
- Auto-completion, Click to Run, Compiled SQL preview
- Query results preview, Defer to production, SQL validation

**With Altimate AI Key** (free signup at [app.myaltimate.com](https://app.myaltimate.com)):

- Column-level lineage, Query explanation AI, Query translation AI
- Auto-generation from SQL, Test generation AI, Documentation generation AI
- Code/documentation collaboration, Lineage export, SaaS UI
- Project governance, Query history & bookmarks

---

# Installation and Setup

## Installation Methods

### Native Installation

Install directly from [VS Code Marketplace](https://marketplace.visualstudio.com/items?itemName=innoverio.vscode-dbt-power-user) or via VS Code:

1. Open VS Code Extensions panel (`Ctrl+Shift+X`)
2. Search for "dbt Power User"
3. Click Install
4. Reload VS Code if prompted

### Dev Container Installation

Add to your `.devcontainer/devcontainer.json`:

```json
{
  "customizations": {
    "vscode": {
      "files.associations": {
        "*.yaml": "jinja-yaml",
        "*.yml": "jinja-yaml",
        "*.sql": "jinja-sql",
        "*.md": "jinja-md"
      },
      "extensions": ["innoverio.vscode-dbt-power-user"]
    }
  }
}
```

### Cursor IDE Support

The extension is also available for [Cursor IDE](https://www.cursor.com/how-to-install-extension). Install the same way as VS Code.

## Required Configuration

### 1. dbt Integration Setup

Configure how the extension connects to dbt:

- **dbt Core**: For local dbt installations with Python bridge (default)
- **dbt Cloud**: For dbt Cloud API integration
- **dbt Fusion**: For dbt-fusion CLI integration
- **dbt Core Command**: For CLI-based dbt core integration

Set via `dbt.dbtIntegration` setting.

#### dbt Fusion Integration

dbt Fusion is a command-line interface that provides enhanced dbt functionality. When using fusion integration:

- Requires dbt-fusion CLI to be installed in your environment
- Extension automatically detects fusion installation via `dbt --version` output
- Provides full feature support including query execution, compilation, and catalog operations
- Uses JSON log format for structured command output parsing

### 2. Python Environment

Ensure Python and dbt are properly installed and accessible. The extension will auto-detect your Python environment through the VS Code Python extension.

### 3. Optional: Altimate AI Key

For advanced AI features, get a free API key:

1. Sign up at [app.myaltimate.com/register](https://app.myaltimate.com/register)
2. Add API key to `dbt.altimateAiKey` setting
3. Set instance name in `dbt.altimateInstanceName` setting

## Project Setup

1. Open your dbt project folder in VS Code
2. Run the setup wizard: Select "dbt" in bottom status bar → "Setup Extension"
3. The extension will auto-install dbt dependencies if enabled
4. Verify setup via Command Palette → "dbt Power User: Diagnostics"

---

# Troubleshooting for Developers

## Quick Diagnostics

### 1. Setup Wizard

Use the built-in setup wizard for automated issue detection:

- Click "dbt" or "dbt is not installed" in bottom status bar
- Select "Setup Extension"
- Follow guided setup process

### 2. Diagnostics Command

Run comprehensive system diagnostics:

- Open Command Palette (`Cmd+Shift+P` / `Ctrl+Shift+P`)
- Type "diagnostics" → Select "dbt Power User: Diagnostics"
- Review output for environment issues, Python/dbt installation status, and connection problems

### 3. Problems Panel

Check VS Code Problems panel for dbt project issues:

- View → Problems (or `Ctrl+Shift+M`)
- Look for dbt-related validation errors

## Debug Logging

Enable detailed logging for troubleshooting:

1. Command Palette → "Set Log Level" → "Debug"
2. View logs: Output panel → "Log" dropdown → "dbt"
3. Reproduce the issue to capture debug information

## Developer Tools

For advanced debugging:

- Help → Toggle Developer Tools
- Check console for JavaScript errors and detailed logs

## Common Issues

**Extension not recognizing dbt project**:

- Verify `dbt_project.yml` exists in workspace root
- Check Python environment has dbt installed
- Run diagnostics command for detailed analysis

**Python/dbt not found**:

- Configure Python interpreter via VS Code Python extension
- Verify dbt is installed in selected Python environment
- Set `dbt.dbtPythonPathOverride` if using custom Python path

**Connection issues**:

- Verify database connection in dbt profiles
- Check firewall/network settings
- Review connection details in diagnostics output

## Getting Help

- Join [#tools-dbt-power-user](https://getdbt.slack.com/archives/C05KPDGRMDW) in dbt Community Slack
- Contact support at [altimate.ai/support](https://www.altimate.ai/support)
- Use in-extension feedback widgets for feature-specific issues

---

# Core Development Features

## Auto-completion and Navigation

### Model Auto-completion

- **Smart IntelliSense**: Auto-complete model names with `ref()` function
- **Go-to-Definition**: Navigate directly to model files
- **Hover Information**: View model details on hover

### Macro Support

- **Macro Auto-completion**: IntelliSense for custom and built-in macros
- **Parameter Hints**: Auto-complete macro parameters
- **Definition Navigation**: Jump to macro definitions

### Source Integration

- **Source Auto-completion**: IntelliSense for configured sources
- **Column Awareness**: Auto-complete source column names
- **Schema Navigation**: Navigate to source definitions

### Documentation Blocks

- **Doc Block Auto-completion**: IntelliSense for documentation references
- **Definition Linking**: Navigate to doc block definitions

## Query Development

### SQL Compilation and Preview

- **Compiled Code View**: See final SQL before execution
- **Template Resolution**: Preview Jinja templating results
- **Syntax Highlighting**: Enhanced SQL syntax highlighting for dbt files

### Query Execution

- **Preview Results**: Execute queries with `Cmd+Enter` / `Ctrl+Enter`
- **Result Analysis**: Export results as CSV, copy as JSON
- **Query History**: Track executed queries
- **Configurable Limits**: Set row limits for query previews (default: 500 rows)

### SQL Formatting

- **Auto-formatting**: Integration with sqlfmt
- **Custom Parameters**: Configure formatting rules
- **Batch Processing**: Format multiple files

## AI-Powered Development

### Query Explanation

- **Natural Language**: Get plain English explanations of complex SQL
- **Step-by-step Analysis**: Breakdown of query logic
- **Performance Insights**: Query optimization suggestions

### Code Generation

- **Model from Source**: Generate base models from source tables
- **Model from SQL**: Convert raw SQL to dbt models
- **Test Generation**: AI-powered test suggestions
- **Documentation Generation**: Auto-generate model documentation

### Query Translation

- **Cross-dialect Support**: Translate SQL between database dialects
- **Syntax Adaptation**: Handle dialect-specific functions and syntax

## Documentation

This is a MkDocs-based documentation site for the dbt Power User VSCode Extension by Altimate AI. The site uses the Material theme and is organized around user workflows: Develop, Test, and Collaborate.

### Development Commands

- **Install dependencies**: `pip install --requirement documentation/requirements.txt`
- **Start development server**: `cd documentation; mkdocs serve` (serves at http://127.0.0.1:8000)
- **Build site**: `cd documentation; mkdocs build`
- **Deploy to GitHub Pages**: `cd documentation; mkdocs gh-deploy`

### Architecture

#### Content Organization

- `documentation/docs/` contains all documentation content in Markdown format
- Content is organized by feature areas: `setup/`, `develop/`, `test/`, `document/`, `govern/`, `discover/`, `teammates/`, `datamates/`, `arch/`
- Images and assets are stored within feature-specific directories
- `documentation/mkdocs.yml` contains all site configuration

#### Key Configuration Files

- `documentation/mkdocs.yml`: Main site configuration including navigation, theme settings, and plugins
- `documentation/requirements.txt`: Python dependencies for MkDocs and plugins
- `documentation/docs/overrides/`: Custom theme overrides (currently empty)
- `documentation/docs/javascripts/`: Custom JavaScript for enhanced functionality

#### Theme Configuration

The site uses Material theme with:

- Custom Altimate AI branding and colors
- Google Analytics integration (G-LXRSS3VK5N)
- Git revision date tracking via plugin
- Built-in feedback system
- Dark/light mode support

#### Navigation Structure

Navigation follows a three-phase user journey:

1. **Setup**: Installation and configuration
2. **Develop**: Core development features
3. **Test**: Testing and validation tools
4. **Additional**: Documentation, collaboration, discovery, and AI features

### Working with Content

#### Adding New Pages

1. Create `.md` files in the appropriate `docs/` subdirectory
2. Update the `nav` section in `mkdocs.yml` to include the new page
3. Follow existing naming conventions for consistency

#### Images and Assets

- Store images in the same directory as the referencing markdown file
- Use relative paths for image references
- Common assets go in `docs/assets/`

#### Internal Links

Use relative markdown links to reference other pages. The site has extensive cross-referencing between related features.

### Testing Changes

Always test locally with `mkdocs serve` before deploying. The development server provides live reload for content changes.


================================================
FILE: CONTRIBUTING.md
================================================
# Contributing Guidelines

Thank you for your interest in contributing to the dbt™ Power User extension! We greatly appreciate the dedication of our community members in helping us enhance this project.

## Bug Reports and Feature Requests

One of the simplest ways to contribute is by sharing your thoughts with us. If you come across any bugs or have ideas for new features or improvements, please start a discussion in our dedicated channel: `#tools-dbt-power-user` on the [dbt™ community Slack](https://getdbt.slack.com/archives/C05KPDGRMDW). Additionally, take a look at the [GitHub issues](https://github.com/innoverio/vscode-dbt-power-user/issues) to see if the topic has already been raised. If not, feel free to create a new issue. Your detailed bug reports, along with steps to reproduce the issue and relevant environment information, are invaluable to us and other contributors.

## How to Contribute

We warmly welcome contributions from our active community! If you're interested in contributing to the extension, follow these steps:

1. **Fork the Repository:** Start by forking the repository to your own GitHub account.

1. **Clone the Repository:** Clone your forked repository to your local machine:

   ```bash
   git clone https://github.com/your-username/vscode-dbt-power-user.git
   cd vscode-dbt-power-user
   ```

1. **Set Up Development Environment:** Setting up the development environment for the dbt™ Power User extension is designed to be straightforward. Most of the setup is already prepared, but you might need to follow a few steps to ensure a smooth experience:

   1. **Install Node.js and npm:** If you haven't already, make sure you have Node.js and npm (Node Package Manager) installed on your machine. You can download and install them from the [official Node.js website](https://nodejs.org/). When choosing a Node.js version, we recommend installing the latest LTS (Long-Term Support) version as recommended on the website to take advantage of the latest features, optimizations, and bugfixes.

   1. **Install Required Node Packages:** In the root directory of your cloned repository (`vscode-dbt-power-user`), open a terminal and run the following command to install the required Node.js packages:

      ```bash
      npm install
      npm run install:panels
      ```

   1. **Start Debugging:** In the Visual Studio Code interface, navigate to the "Run and Debug" sidebar. Click on "Launch Extension" to start the debugging process. This will open a new window with the dbt™ Power User extension installed. During this debug session, the existing installation of dbt-power-user will be overridden, allowing you to test your changes without affecting the installed extension.
      - **Note:** If you're running the dbt Power User extension in debug mode using `Debug Extension` and you make changes to the extension's code, you can see those changes take effect immediately by reloading the VS Code instance where the extension is running.
      - To reload the VS Code instance in debug mode, you can either:
        - Use the command "Developer: Reload Window" from the command palette by pressing Ctrl + Shift + P and typing "Developer: Reload Window".
        - Simply press Ctrl/Cmd + R to reload the VS Code instance.
   1. **Open a dbt™ Project as a Target:** To effectively test your changes, open a dbt™ project as a target. You can either use an existing project or create a new virtual environment with the necessary dbt™ package installed. Creating a virtual environment ensures a clean environment that won't interfere with any existing dbt™ installations. It's important to note that the dbt™ Power User extension itself does not require any Python/dbt™ installation.

   1. **Explore and Test:** With the extension debug window open and your dbt™ project loaded, take the time to explore and test your changes. Verify that the extension behaves as expected and that your changes integrate seamlessly.

   Following these steps will help you establish a productive development environment for contributing to the dbt™ Power User extension. If you encounter any issues during setup, don't hesitate to reach out to the community for assistance.

1. **Make Your Changes:** Feel free to implement the changes or new features you have in mind. If you're new to contributing, our [contributing page](https://github.com/innoverio/vscode-dbt-power-user/contribute) is a great starting point. Choose an issue listed there and familiarize yourself with the extension.

1. **Thorough Testing:** Test your changes thoroughly to ensure they work as expected.

1. **Clear Commit Messages:** Write clear and descriptive commit messages.

1. **Push Changes:** Push the changes to your forked repository.

1. **Create a Pull Request:** Submit a pull request to the main repository, explaining the purpose and details of your changes.

## Code Style and Formatting

Maintaining consistent code style and formatting is crucial for readability and collaboration. Ensure your code aligns with the existing conventions and formatting guidelines used in the project.

## Adding New Features or Fixing Bugs

When introducing new features or addressing bugs, consider the current codebase and community needs. Engage in discussions with fellow community members if you're unsure about design decisions or implementation details.

## Local Development with @altimateai/dbt-integration Library

When working on the extension, you may need to develop against a local version of the `@altimateai/dbt-integration` library instead of the published npm package. This allows you to test changes to both the extension and the integration library simultaneously.

### Setup for Local Development

1. **Clone the dbt-integration repository:** First, ensure you have the `altimate-dbt-integration` repository cloned as a sibling directory to this project:

   ```bash
   cd /path/to/your/projects
   git clone https://github.com/altimateai/altimate-dbt-integration.git
   cd vscode-dbt-power-user
   ```

   Your directory structure should look like:

   ```
   /path/to/your/projects/
   ├── altimate-dbt-integration/
   └── vscode-dbt-power-user/
   ```

2. **Switch to local development mode:** Modify the following configuration files to use the local TypeScript source instead of the npm package:

   **jest.config.js**: Uncomment the local development lines:

   ```javascript
   // Development: use local TypeScript source (same as webpack and tsconfig)
   "^@altimateai/dbt-integration$":
     "<rootDir>/../altimate-dbt-integration/src/index.ts",
   // Production: use npm package (commented out for development)
   // "^@altimateai/dbt-integration$": "@altimateai/dbt-integration",
   ```

   **tsconfig.json**: Update the configuration:

   ```json
   {
     // "rootDir": "src",
     "rootDirs": ["src", "../altimate-dbt-integration/src"],
     "paths": {
       "@altimateai/dbt-integration": [
         "../altimate-dbt-integration/src/index.ts"
       ],
       "@extension": ["./src/modules.ts"],
       "@lib": ["./src/lib/index"]
     }
   }
   ```

   **webpack.config.js**: Update the alias and copy plugin configurations:

   ```javascript
   // In resolve.alias section:
   "@altimateai/dbt-integration": path.resolve(
     __dirname,
     "../altimate-dbt-integration/src/index.ts",
   ),

   // In CopyWebpackPlugin, comment out production copies and uncomment development copies:
   // Development: use local Python files
   {
     from: path.resolve(
       __dirname,
       "../altimate-dbt-integration/node_modules/python-bridge/node_python_bridge.py",
     ),
     to: "node_python_bridge.py",
   },
   // ... (other local file copies)
   ```

### Switching Back to Production Mode

When you're done with local development, revert the configuration changes to use the published npm package:

1. **jest.config.js**: Comment out local development lines and uncomment production lines
2. **tsconfig.json**: Set `"rootDir": "src"` and remove the local path mapping
3. **webpack.config.js**: Remove local alias and use npm package copies in CopyWebpackPlugin

### Benefits of Local Development Mode

- **Real-time changes**: Modify both the extension and integration library simultaneously
- **Debugging**: Set breakpoints and debug across both codebases
- **Testing**: Test integration library changes before publishing
- **Development workflow**: Faster iteration when working on features that span both repositories

### Important Notes

- Ensure both repositories are on compatible branches when doing local development
- The local development setup expects the `altimate-dbt-integration` directory to be a sibling of `vscode-dbt-power-user`
- Always test with the production npm package configuration before submitting pull requests
- The Python files from the integration library are copied during the webpack build process

## Testing

Comprehensive testing is essential for maintaining the extension's stability and reliability. While adding new features or fixing bugs, run tests locally helps ensure your changes don't introduce regressions.

## Security

If you identify security vulnerabilities or potential issues, please report them responsibly. Reach out to the maintainers directly to discuss and report the issue privately.

## Credits and Acknowledgments

Our heartfelt thanks go out to all the contributors and our vibrant community members who have supported this project. Your contributions are a cornerstone of our progress. We also want to acknowledge that the dbt™ logo is a trademark of dbt Labs, Inc.

## Feedback and Communication

Open communication is a core value of our community. Join discussions on our GitHub repository, participate in issue discussions, and provide feedback on proposed changes.

Thank you for being a vital part of our open-source community! Your contributions help us enhance the dbt™ Power User extension, providing an improved experience for all users.


================================================
FILE: LICENSE
================================================
MIT License

Copyright (c) 2020 innover.io

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.


================================================
FILE: README.md
================================================
# vscode-dbt-power-user

![Last updated](https://img.shields.io/visual-studio-marketplace/last-updated/innoverio.vscode-dbt-power-user) ![Version](https://img.shields.io/visual-studio-marketplace/v/innoverio.vscode-dbt-power-user) ![Installs](https://img.shields.io/visual-studio-marketplace/i/innoverio.vscode-dbt-power-user) ![Build passing](https://github.com/innoverio/vscode-dbt-power-user/workflows/.github/workflows/ci.yml/badge.svg)

This [open source](https://github.com/AltimateAI/vscode-dbt-power-user) extension makes VSCode seamlessly work with [dbt™](https://www.getdbt.com/).

If you need help with setting up the extension, please check the [documentation](https://docs.myaltimate.com/setup/installation/).
For any issues or bugs, please [contact us](https://www.altimate.ai/support) via chat or Slack.

**Features:**

| Feature                                                     | Details                                                                                                                                 |
| ----------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------- |
| [Auto-complete dbt™ code](#autocomplete)                   | Auto-fill model names, macros, sources and docs. Click on model names, macros, sources to go to definitions.                            |
| [Preview Query results and Analyze](#querypreview)          | Generate dbt™ model / query results. Export as CSV or analyze results by creating graphs, filters, groups                              |
| [Column lineage](#lineage)                                  | Model lineage as well as column lineage                                                                                                 |
| [Generate dbt™ Models](#genmodel)                          | from source files or convert SQL to dbt™ Model (docs)                                                                                  |
| [Generate documentation](#gendoc)                           | Generate model and column descriptions or write in the UI editor. Save formatted text in YAML files.                                    |
| [Defer to prod](#defertoprod)                               | Build your model in development without building (by defering) your upstream models                                                     |
| [Click to run parent / child models and tests](#clicktorun) | Just click to do common dbt™ operations like running tests, parent / child models or previewing data.                                  |
| [Compiled query preview and explanation](#queryexplanation) | Get live preview of compiled query as your write code. Also, generate explanations for dbt™ code written previously (by somebody else) |
| [Project health check](#healthcheck)                        | Identify issues in your dbt™ project like columns not present, models not materialized                                                 |
| [SQL validator](#validateSQL)                               | Identify issues in SQL like typos in keywords, missing or extra parentheses, non-existent columns                                       |
| [Big Query cost estimator](#bqcost)                         | Estimate data that will be processed by dbt™ model in BigQuery                                                                         |
| [Other features](#otherfeatures)                            | dbt™ logs viewer (force tailing)                                                                                                       |

Note: This extension is fully compatible with dev containers, code spaces and remote extension. See [Visual Studio Code Remote - Containers](https://code.visualstudio.com/docs/remote/containers) and [Visual Studio Code Remote - WSL](https://code.visualstudio.com/docs/remote/wsl).
The extension is supported for dbt™ versions above 1.0.

## Features

### <a id="autocomplete">Autocomplete model, macro, source names and click to go to definition</a>

Auto-fill model names, macros, sources and docs. Click on model names, macros, sources to go to definitions. [(docs)](https://docs.myaltimate.com/develop/autocomplete/)

![autocomplete](media/images/autocomplete.gif)

### <a id="querypreview">Preview query results and analyze</a>

Generate dbt™ model / query results. Export as CSV or analyze results by creating graphs, filters, groups. [(docs)](https://docs.myaltimate.com/test/queryResults/)

![previewquery](media/images/previewquery.gif)

### <a id="lineage">Column lineage</a>

View model lineage as well as column lineage with components like models, seeds, sources, exposures and info like model types, tests, documentation, linkage types. [(docs)](https://docs.myaltimate.com/test/lineage/)

![lineage](media/images/lineage.gif)

### <a id="genmodel"> Generate dbt™ Models from source or SQL</a>

Generate dbt™ models from sources defined in YAML. You can also convert existing SQL to a dbt™ model where references get populated automatically. [(docs)](https://docs.myaltimate.com/develop/clicktorun/)

![genmodel](media/images/genmodel.gif)

### <a id="gendoc"> Generate documentation</a>

Generate model and column descriptions automatically or write descriptions manually in the UI editor. Your descriptions are automatically formatted and saved in YAML files. [(docs)](https://docs.myaltimate.com/document/generatedoc/)

![gendoc](media/images/gendoc.gif)

### <a id="defertoprod">Defer to prod</a>

Defer building your upstream models when you make changes in development by referencing production models. Here's [(more info)](https://docs.getdbt.com/blog/defer-to-prod) about the concept. This functionality can be used in dbt™ core with the extension. [(docs)](https://docs.myaltimate.com/test/defertoprod/)

### <a id="clicktorun"> Click to run parent/child models and tests</a>

Just click to do common button operations like executing tests, building or running parent / child models. [(docs)](https://docs.myaltimate.com/develop/clicktorun/)

![autocomplete](media/images/runmodeltests.gif)

### <a id="queryexplanation"> Compiled query preview and explanation</a>

Get live preview of compiled query as your write code. Also, generate explanations for dbt™ code written previously (by somebody else). [(docs)](https://docs.myaltimate.com/develop/explanation/)

![explanation](media/images/explanation.gif)

### <a id="healthcheck"> Project health check</a>

Identify issues in your dbt™ project like columns not present, models not materialized. [(docs)](https://docs.myaltimate.com/test/healthcheck/)

![healthcheck](media/images/healthcheck.gif)

### <a id="validateSQL"> SQL validator</a>

Validate SQL to identify issues like mistyped keywords, extra parentheses, columns no present in database [(docs)](https://docs.myaltimate.com/test/sqlvalidation/)

![sql-validator](media/images/sqlValidation.gif)

### <a id="bqcost"> Big Query cost estimator</a>

Estimate data that will be processed by dbt™ model in BigQuery [(docs)](https://docs.myaltimate.com/test/bigquerycost/)

![bqcostestimator](media/images/bqcostestimator.gif)

### <a id="otherfeatures"> Other features</a>

**dbt™ logs view (force tailing)**

![dbt-log](media/images/dbt-log.gif)

Please check [documentation](https://docs.myaltimate.com/arch/faq/) for additional info.
For any issues or bugs, please [contact us](https://www.altimate.ai/support) via chat or Slack.


================================================
FILE: altimate_notebook_kernel.py
================================================
import json
import re
from datetime import  datetime
import jupyter_client
import queue

class CustomDecoder(json.JSONDecoder):
    def __init__(self, *args, **kwargs):
        super().__init__(object_hook=self.object_hook, *args, **kwargs)
    def object_hook(self, obj):
        for key, value in obj.items():
            if value == 'null':
                obj[key] = None
        return obj


# Notebook kernel which will responsible for creating kernel executors for each notebook
# should shut down kernel after notebook is closed
# also store the cell outputs/data and use it for further executions
# TODO: implement as required - extract to separate file


# a method which will be called once a notebook is open, create an instance of this class
# save doc uri as unique identifier for the notebook
# initialize a jupyter kernel executor on notebook open and shutdown on close
# store results of each cell execution and update after each execution
# handle cell deletions
# destroy this instance when notebook is closed

class JupyterKernelExecutor:
    def __init__(self):
        self.kernel_manager = jupyter_client.KernelManager()
        self.kernel_manager.start_kernel()
        self.kernel_client = self.kernel_manager.client()
        self.kernel_client.start_channels()
        print('session pid', self.kernel_client.session.pid)
        # print('ip', self.kernel_manager.connection_file.split('-')[1])
        # Get the connection file
        connection_file = self.kernel_manager.connection_file
        # Load connection info
        connection_info = jupyter_client.find_connection_file(connection_file)
        with open(connection_info) as f:
            connection_data = json.load(f)

        # Extract WebSocket URL
        websocket_url = f"ws://{connection_data['ip']}:{connection_data['shell_port']}/api/kernels/{self.kernel_manager.kernel_id}/channels"
        print(connection_data, self.kernel_manager.kernel_name, self.kernel_manager.kernel_spec.name)

    def execute(self, code, user_expressions=None):
        self.kernel_client.wait_for_ready()

        # print("Executing code:", code, user_expressions)
        # Execute the code
        self.kernel_client.execute(code, silent=False, store_history=True, user_expressions=user_expressions)

        # Capture and return the output
        output = []
        start_time = datetime.now()
        while True:
            try:
                msg = self.kernel_client.get_iopub_msg(timeout=1)

                def datetime_converter(o):
                    if isinstance(o, datetime):
                        return o.__str__()

                # print("msg", msg)

                if msg['msg_type'] == 'stream':
                    # for stdout
                    output.append({'mime': 'text/plain', 'value': msg['content']['text']})
                elif msg['msg_type'] == 'comm_open':
                    state = msg['content']['data']['state']
                    state['model_id'] = msg['content']['comm_id']
                    # Handle comm_open messages
                    output.append({'mime': 'application/vnd.jupyter.widget-view+json', 'value': state})
                elif msg['msg_type'] in ['execute_result', 'display_data']:
                    # Flag to check if any key other than 'text/plain' exists
                    other_keys_exist = False

                    # Iterate over the keys in msg['content']['data']
                    for key, value in msg['content']['data'].items():
                        # Check if the key is not 'text/plain'
                        if key != 'text/plain':
                            # Append the dictionary to the output list
                            output.append({'mime': key, 'value': value})
                            other_keys_exist = True

                    # If no other keys exist, add the 'text/plain' value
                    if not other_keys_exist and 'text/plain' in msg['content']['data']:
                        output.append({'mime': 'text/plain', 'value': msg['content']['data']['text/plain']})
                elif msg['msg_type'] == 'error':
                    output.append({'mime': 'text/plain', 'value': '\n'.join(msg['content']['traceback'])})
                elif msg['msg_type'] == 'status' and msg['content']['execution_state'] == 'idle':
                    break
            except queue.Empty:
                if (datetime.now() - start_time).total_seconds() > 30:  # Timeout after 30 seconds
                    break
        return output

    def shutdown(self):
        # Shutdown the kernel client and kernel manager
        self.kernel_client.stop_channels()
        self.kernel_manager.shutdown_kernel()
        del self.kernel_client

class AltimateNotebookKernel:
    def __init__(self, doc_uri):
        """
        Initialize the AltimateNotebookKernel instance.
        
        Parameters:
        doc_uri (str): The unique identifier for the notebook.
        """
        self.doc_uri = doc_uri
        self.kernel_executor = self.initialize_kernel_executor()
        self.cell_results = {}

    def get_session_id(self):
        return self.kernel_executor.kernel_client.session.pid
    
    def close_notebook(self):
        """
        Method to be called when the notebook is closed.
        Shuts down the Jupyter kernel executor.
        """
        if self.kernel_executor:
            self.shutdown_kernel_executor()
            self.kernel_executor = None
            print(f"Notebook {self.doc_uri} closed and kernel shut down.")

    def get_connection_file(self):
        return self.kernel_executor.kernel_manager.connection_file
    
    def initialize_kernel_executor(self):
        """
        Initializes the Jupyter kernel executor.
        
        Returns:
        kernel_executor: The initialized kernel executor.
        """
        kernel_executor = JupyterKernelExecutor()
        return kernel_executor

    def shutdown_kernel_executor(self):
        """
        Shuts down the Jupyter kernel executor.
        """
        # Placeholder for actual kernel shutdown logic
        print("Kernel executor shut down.")
    
    def get_sql_result_by_cell(self, cell_id):
        code = f"cell_{cell_id}"
        return self.kernel_executor.execute(code)

    def store_sql_result(self, cell_id, result):
        """
        Stores the result of a cell execution.
        
        Parameters:
        cell_id (str): The unique identifier for the cell.
        result: The result of the cell execution.
        """
        resultJson =  json.loads(result)
        
        # Construct the code to store the result in the Jupyter kernel
        code = f"""
        cell_{cell_id} = {resultJson}
        """
        self.execute_python(code)
        
    def execute_python(self, code):
        """
        Executes a cell and stores the result.
        
        Parameters:
        cell_id (str): The unique identifier for the cell.
        code (str): The code to be executed in the cell.
        
        Returns:
        result: The result of the cell execution.
        """
        response = self.kernel_executor.execute(code)
        return response
    
    def delete_cell(self, cell_id):
        """
        Handles cell deletion.
        
        Parameters:
        cell_id (str): The unique identifier for the cell to be deleted.
        """
        if cell_id in self.cell_results:
            del self.cell_results[cell_id]
            print(f"Cell {cell_id} deleted.")

    def destroy_instance(self):
        """
        Destroys the instance when the notebook is closed.
        """
        self.close_notebook()
        self.cell_results.clear()
        print(f"Instance for notebook {self.doc_uri} destroyed.")


================================================
FILE: codecov.yml
================================================
coverage:
  status:
    project:
      default:
        target: 10%    # the required coverage value
        threshold: 1%  # the leniency in hitting the target
    patch:
      default:
        target: 90%
        threshold: 1%

ignore:
  - "test/**/*"       # ignore test files
  - "out/**/*"        # ignore compiled output
  - "**/*.d.ts"      # ignore type declaration files 

================================================
FILE: docker-setup/Dockerfile
================================================
FROM codercom/code-server:latest

USER root

# Install Node.js 20
RUN curl -fsSL https://deb.nodesource.com/setup_20.x | bash - \
    && apt-get install -y nodejs \
    && corepack enable

# Install Python 3, pip, git, and other dependencies
RUN apt-get update && apt-get install -y \
    python3 \
    python3-pip \
    python3-venv \
    git \
    xvfb \
    && rm -rf /var/lib/apt/lists/*

# Install dbt-duckdb globally (available for all users)
RUN pip3 install --break-system-packages dbt-duckdb

USER coder

# Create altimate directory
RUN mkdir -p ~/.altimate

# Set up dbt profiles for both test projects
# Projects are copied from the read-only extension-src mount to writable home dirs at container startup
RUN mkdir -p ~/.dbt && printf '%s\n' \
    'jaffle_shop:' \
    '  target: dev' \
    '  outputs:' \
    '    dev:' \
    '      type: duckdb' \
    '      path: /home/coder/jaffle-shop-duckdb/jaffle_shop.duckdb' \
    '      threads: 4' \
    '' \
    'dbt_core_sample_duckdb:' \
    '  target: go_sales' \
    '  outputs:' \
    '    go_sales:' \
    '      type: duckdb' \
    '      path: /home/coder/dbt-core-sample-duckdb/go_sales.db' \
    > ~/.dbt/profiles.yml

# Install all required extensions for dbt Power User (extensionDependencies in package.json)
RUN code-server --install-extension ms-python.python \
    && code-server --install-extension samuelcolvin.jinjahtml \
    && code-server --install-extension altimateai.vscode-altimate-mcp-server

EXPOSE 3001

WORKDIR /home/coder
COPY --chown=coder:coder start-code-server.sh /usr/local/bin/
ENTRYPOINT []
CMD ["/usr/local/bin/start-code-server.sh"]


================================================
FILE: docker-setup/README.md
================================================
# Docker Development Setup

Develop and test the dbt Power User extension in code-server (VS Code in browser) with volume-mounted source for hot-reload.

## Quick Start

```bash
npm run docker:deploy
```

This builds the extension, starts the container, and enters watch mode. Open http://localhost:3001/?folder=/home/coder/project in your browser.

## How It Works

The extension source is **volume-mounted** into the container (read-only), so you don't need to rebuild a VSIX or the Docker image for every change:

1. `deploy.sh` runs `npm run build` to build the extension
2. Docker container starts with the repo mounted at `/home/coder/extension-src`
3. `start-code-server.sh` symlinks the mounted source into code-server's extensions directory
4. `npm run watch` runs on the host — any source change triggers a rebuild
5. Reload the browser to pick up changes

## Configuration

### Custom dbt Project

By default, the container uses the built-in `jaffle_shop_duckdb` project. To use your own:

1. Copy `.env.example` to `.env`
2. Set `DBT_PROJECT_PATH=/absolute/path/to/your/project`
3. Re-run `npm run docker:deploy`

## What's Pre-Installed

- **code-server**: VS Code in the browser (port 3001, no auth)
- **Node.js 20**: For extension host
- **Python 3 + dbt-duckdb**: For dbt integration
- **jaffle_shop_duckdb**: Sample dbt project with pre-configured profile and deps
- **Python extension**: Required dependency for dbt Power User
- **Xvfb**: For headless testing

## Commands

| Command                 | Description                                  |
| ----------------------- | -------------------------------------------- |
| `npm run docker:deploy` | Build, start container, and enter watch mode |
| `npm run docker:logs`   | View container logs                          |
| `npm run docker:stop`   | Stop the container                           |

## Playwright MCP Testing

Use Playwright MCP tools to programmatically verify the extension in Docker.

### Prerequisites

Add to `.mcp.json` (project or global):

```json
{
  "playwright": {
    "command": "npx",
    "args": [
      "@playwright/mcp@latest",
      "--executable-path",
      "/usr/bin/chromium-browser",
      "--headless"
    ]
  }
}
```

> **Note:** The `--executable-path` above is a Linux example. On macOS, point to your browser binary instead (e.g. `"/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"`), or omit `--executable-path` entirely and run `npx playwright install` to use Playwright's bundled Chromium.

The package is `@playwright/mcp` (NOT `@anthropic-ai/mcp-playwright`).

### Automated E2E Test Checklist

Follow this exact sequence — each step is one tool call:

**1. Verify bundle before deploying** (saves debugging stale code later):

```bash
grep -c "myKeyFunction" dist/extension.js  # confirm expected code is bundled
```

**2. Deploy with `--build`** (NEVER use `docker compose restart` — code-server caches extension state):

```bash
docker compose -f docker-setup/docker-compose.yml up --build -d
```

**3. Wait for ready + seed dbt** (seed BEFORE browser connects — extension gets its own DuckDB connection):

```bash
for i in $(seq 1 15); do curl -sf http://localhost:3001/healthz > /dev/null 2>&1 && break; sleep 2; done
CID=$(docker ps -q --filter "name=docker-setup-code-server")
docker exec $CID bash -c 'cd /home/coder/jaffle-shop-duckdb && dbt seed && dbt run'
```

**4. Check extension activation via logs** (don't waste time clicking through the UI):

```bash
CID=$(docker ps -q --filter "name=docker-setup-code-server")
latest=$(docker exec $CID bash -c 'ls -td /home/coder/.local/share/code-server/logs/*/ | head -1')
docker exec $CID grep "innoverio\|removed" "${latest}remoteagent.log"
docker exec $CID grep "innoverio" "${latest}exthost1/remoteexthost.log"
```

- ✅ `ExtensionService#_doActivateExtension innoverio.vscode-dbt-power-user` = activated
- ❌ `Marked extension as removed` = `.obsolete` bug (fixed in PR #1859)

**5. Create test SQL files** (do this from the host before connecting Playwright):

```bash
docker exec $CID bash -c 'cat > /home/coder/jaffle-shop-duckdb/test_query.sql << "SQL"
SELECT * FROM {{ ref("customers") }} LIMIT 10
SQL'
```

**6. Connect Playwright and navigate**:

```
mcp__playwright__browser_navigate → http://localhost:3001/?folder=/home/coder/jaffle-shop-duckdb
mcp__playwright__browser_wait_for → 20 seconds (extension activation + dbt parsing)
```

**7. Open file** — two approaches, tree click is more reliable:

_Option A: Click file tree_ (recommended — Ctrl+P can be flaky in Playwright):

```
mcp__playwright__browser_evaluate →
  const items = document.querySelectorAll('[role="treeitem"]');
  const target = Array.from(items).find(i => i.getAttribute('aria-label') === 'test_query.sql');
  if (target) { target.click(); target.click(); } // double-click to pin tab
```

_Option B: Quick Open_ (sometimes the file doesn't open — retry if title doesn't change):

```
mcp__playwright__browser_press_key → Control+P
mcp__playwright__browser_snapshot → find textbox ref
mcp__playwright__browser_type → ref=<textbox>, text='test_query.sql', submit=true
```

**8. Execute and capture**:

```
mcp__playwright__browser_wait_for → 2 seconds
mcp__playwright__browser_press_key → Control+Enter
mcp__playwright__browser_wait_for → 12 seconds
mcp__playwright__browser_take_screenshot
```

### Common Pitfalls

| Pitfall                                       | Symptom                                  | Fix                                                                                                                                                                                                                     |
| --------------------------------------------- | ---------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `docker compose restart` after rebuild        | Tests pass/fail inconsistently           | Always use `up --build`                                                                                                                                                                                                 |
| Browser connects before `dbt seed`            | "Table does not exist" error             | Seed first, then navigate                                                                                                                                                                                               |
| Extension marked as "removed"                 | No dbt commands in palette               | Symlink must use versioned name (`innoverio.vscode-dbt-power-user-0.60.1`), not bare name. `extensions.json` registration alone is insufficient — code-server's obsolete scanner matches directory names. See PR #1859. |
| Wrong Playwright package                      | MCP fails to connect                     | Use `@playwright/mcp`, not `@anthropic-ai/mcp-playwright`                                                                                                                                                               |
| `cd` into `node_modules/` for symlink ops     | Subsequent commands run from wrong dir   | Use absolute paths or don't cd                                                                                                                                                                                          |
| Multiple worktrees on same Docker setup       | Port conflict / container name collision | Use `docker compose -p <project-name>` and different ports in `docker-compose.override.yml`                                                                                                                             |
| Quick Open (`Ctrl+P`) doesn't open file       | File stays on previous tab               | Use `evaluate()` to click tree items directly: `document.querySelectorAll('[role="treeitem"]')` find + click. More reliable than Quick Open in Playwright.                                                              |
| `.sql` files open as "MS SQL" not "Jinja SQL" | No dbt-specific syntax highlighting      | Expected until `jinjahtml` activates. Extension activation order varies — `jinjahtml` maps `.sql` → `jinja-sql` but may not be ready when the file first opens. Reload or reopen the file.                              |

## Troubleshooting

**Container won't start:**

```bash
npm run docker:stop
cd docker-setup && docker compose up --build
```

**Extension not loading:**

```bash
# Check the symlink exists
docker exec -it docker-setup-code-server-1 ls -la ~/.local/share/code-server/extensions/

# Check extension source is mounted
docker exec -it docker-setup-code-server-1 ls /home/coder/extension-src/package.json
```

**Rebuild from scratch:**

```bash
npm run docker:stop
cd docker-setup && docker compose build --no-cache && docker compose up -d
```

**Check dbt installation:**

```bash
docker exec -it docker-setup-code-server-1 dbt --version
```


================================================
FILE: docker-setup/deploy.sh
================================================
#!/bin/bash
set -e

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(dirname "$SCRIPT_DIR")"

cd "$PROJECT_ROOT"

# Determine docker compose command (V2 syntax with fallback)
if docker compose version &>/dev/null; then
    DC="docker compose -f docker-setup/docker-compose.yml"
else
    DC="docker-compose -f docker-setup/docker-compose.yml"
fi

# Step 1: Check for .env file with DBT_PROJECT_PATH
if [ -f "$SCRIPT_DIR/.env" ]; then
    echo "Loading .env from docker-setup/.env"
    export $(grep -v '^#' "$SCRIPT_DIR/.env" | xargs)
fi

if [ -n "$DBT_PROJECT_PATH" ]; then
    echo "Using custom dbt project: $DBT_PROJECT_PATH"
else
    echo "Using built-in jaffle_shop_duckdb project"
fi

# Step 2: Build the extension
echo ""
echo "Building extension..."
npm run build

# Step 3: Build and start the container
echo ""
echo "Building and starting code-server container..."
$DC up --build -d

# Step 4: Wait for code-server to be ready
echo ""
echo "Waiting for code-server to be ready..."
MAX_WAIT=60
WAITED=0
until curl -sf http://localhost:3001/healthz > /dev/null 2>&1; do
    if [ $WAITED -ge $MAX_WAIT ]; then
        echo "Timed out waiting for code-server after ${MAX_WAIT}s"
        echo "Check logs with: npm run docker:logs"
        exit 1
    fi
    sleep 2
    WAITED=$((WAITED + 2))
    echo "  Waiting... (${WAITED}s)"
done
echo "code-server is ready at http://localhost:3001/?folder=/home/coder/project"

# Step 5: Start watch for auto-recompilation
echo ""
echo "Starting watch mode for hot-reload..."
echo "  Changes to extension source will auto-rebuild."
echo "  After rebuild, reload code-server in browser to pick up changes."
echo ""
npm run watch


================================================
FILE: docker-setup/docker-compose.yml
================================================
services:
  code-server:
    build:
      context: .
      dockerfile: Dockerfile
    ports:
      - "3001:3001"
    environment:
      - PORT=3001
    volumes:
      - ..:/home/coder/extension-src:ro
      - ${DBT_PROJECT_PATH:-/home/coder/jaffle-shop-duckdb}:/home/coder/project
    restart: unless-stopped


================================================
FILE: docker-setup/start-code-server.sh
================================================
#!/bin/bash

# Copy test projects from read-only extension-src mount to writable home dirs and install deps
for project in jaffle-shop-duckdb dbt-core-sample-duckdb; do
    src="/home/coder/extension-src/test-fixtures/$project"
    dest="/home/coder/$project"
    if [ -d "$src" ] && [ ! -d "$dest" ]; then
        echo "Setting up $project..."
        cp -r "$src" "$dest"
        cd "$dest" && dbt deps 2>&1 || true
    fi
done

# Symlink the volume-mounted extension source into code-server extensions directory
EXTENSIONS_DIR="$HOME/.local/share/code-server/extensions"
mkdir -p "$EXTENSIONS_DIR"

# Read version from package.json for the symlink name.
# code-server's obsolete scanner matches directory names against the registry format
# `publisher.name-version`. Without the version suffix, it marks the extension as
# removed on every boot — even if extensions.json has the correct entry.
EXT_VERSION=$(node -e "console.log(require('/home/coder/extension-src/package.json').version)")
EXT_DIR_NAME="innoverio.vscode-dbt-power-user-${EXT_VERSION}"

# Remove any stale symlink or directory
rm -rf "$EXTENSIONS_DIR/innoverio.vscode-dbt-power-user"
rm -rf "$EXTENSIONS_DIR"/innoverio.vscode-dbt-power-user-*
rm -rf "$EXTENSIONS_DIR/altimate.vscode-dbt-power-user"

# Create symlink with version suffix (required by code-server)
ln -s /home/coder/extension-src "$EXTENSIONS_DIR/$EXT_DIR_NAME"

# Register the symlinked extension in extensions.json so code-server doesn't mark it as obsolete.
# code-server only knows about extensions installed via `code-server --install-extension`;
# symlinked extensions must be added to the registry manually.
EXTJSON="$EXTENSIONS_DIR/extensions.json"
if [ ! -f "$EXTJSON" ]; then
    echo "[]" > "$EXTJSON"
fi
node -e "
  const fs = require('fs');
  const pkg = JSON.parse(fs.readFileSync('/home/coder/extension-src/package.json', 'utf8'));
  const id = pkg.publisher + '.' + pkg.name;
  const dirName = '$EXT_DIR_NAME';
  let exts = JSON.parse(fs.readFileSync('$EXTJSON', 'utf8'));
  exts = exts.filter(e => !e.identifier || e.identifier.id !== id);
  exts.push({
    identifier: { id },
    version: pkg.version,
    location: { \$mid: 1, path: '$EXTENSIONS_DIR/' + dirName, scheme: 'file' },
    relativeLocation: dirName,
    metadata: { installedTimestamp: Date.now(), source: 'vsix' }
  });
  fs.writeFileSync('$EXTJSON', JSON.stringify(exts, null, 2));
  console.log('Registered', id, '@' + pkg.version, 'in extensions.json');
"

# Clear .obsolete so code-server doesn't skip our extension on first scan
echo '{}' > "$EXTENSIONS_DIR/.obsolete"

# Determine project directory
if [ -d "/home/coder/project" ] && [ "$(ls -A /home/coder/project 2>/dev/null)" ]; then
    PROJECT_DIR="/home/coder/project"
else
    PROJECT_DIR="/home/coder/jaffle_shop_duckdb"
fi

# Start code-server with the project open
exec code-server \
    --bind-addr 0.0.0.0:${PORT:-3001} \
    --auth none \
    --disable-telemetry \
    --disable-workspace-trust \
    --log debug \
    "$PROJECT_DIR"


================================================
FILE: documentation/docs/arch/beta.md
================================================
/// admonition | Only use the following steps for "dbt Cloud" environments. If you have a dbt Core environment, use the [required config instructions for "dbt Core" environments](../setup/reqdConfig.md). If you have a dbt Fusion environment, use the [required config instructions for "dbt Fusion" environments](../setup/reqdConfigFusion.md).
    type: warning
///

/// admonition | dbt Cloud integration is available as beta functionality
    type: tip
///

## Enable dbt Cloud Integration by adding an API key

dbt Cloud integration in Power User VSCode extension requires an API key. There are also multiple preview features in the extension including [generate dbt documentation](../document/generatedoc.md), [column lineage](../test/lineage.md), [query explanation](../develop/explanation.md), [generate dbt model from SQL](../develop/genmodelSQL.md) that are also enabled with an API key.

/// details | You can get an API key for free by signing up at [www.altimate.ai](https://www.altimate.ai)

<interactive demo to get an API key>

<div style="position: relative; padding-bottom: calc(51.70312500000001% + 44px); height: 0;"><iframe src=https://app.supademo.com/embed/yanO4l-w5hH0xzXf93w-d frameborder="0" webkitallowfullscreen="true" mozallowfullscreen="true" allowfullscreen style="position: absolute; top: 0; left: 0; width: 100%; height: 100%;"></iframe></div>

///

You need to add the API key from "Settings->API key" in your Altimate instance to the VSCode extension settings. You also need to add "Instance name" in the extension settings. Please get your instance name from your Altimate AI URL. If your URL for Altimate instance is - "companyx.app.myaltimate.com", then instance name is "companyx".

Go to the VSCode extension settings, and then add an API key and instance name.

/// details | Here's a demo of how to add an instance name and an API Key to the extension settings

<Interactive demo to add API key in the extension>

<div style="position: relative; padding-bottom: calc(57.25% + 44px); height: 0;"><iframe src=https://app.supademo.com/embed/clnjpwl3u07x4pedv9ifjfuf9 frameborder="0" webkitallowfullscreen="true" mozallowfullscreen="true" allowfullscreen style="position: absolute; top: 0; left: 0; width: 100%; height: 100%;"></iframe></div>
///

## Use the setup wizard for configuration (recommended)

/// admonition | Need to setup environment variables? Refer to this [section](https://docs.myaltimate.com/setup/optConfig/#environment-variables-setup)
    type: warning
///

This method will save a bunch of time for you, and you can also validate your configuration. Setup wizard will help you in associating sql files with jinja-sql, selecting the right Python interpreter, make sure dbt dependencies are correctly installed etc. In the end, it will also validate your configuration.

You can start the setup wizard by clicking on dbt status icon in the bottom status bar, and performing the following necessary steps as shown in the recorded demo below:

<div style="position: relative; padding-bottom: 56.25%; height: 0;"><iframe src="https://www.loom.com/embed/9e77435a96374622934daf5ff4e741e0?sid=1d407b78-eecc-436c-a49d-d9ffe858ba5d" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen style="position: absolute; top: 0; left: 0; width: 100%; height: 100%;"></iframe></div>

**Here are the steps covered in the setup wizard**

**Select Python Interpreter**

Click on the action button - "Select Python Interpreter" and choose your preferred python interpreter. Usually, choosing an interpreter that's recommended or mapped to your virtual environment software (e.g. venv) as per the list is a good idea. If you know the path of your Python environment, you can choose it from the list, or if the path is not present, you can enter it manually.

/// admonition | If needed, please run 'where python' command on terminal to see if it shows path to Python interpreter that you are using.
    type: tip
///

**Install dbt**

If dbt is not installed in your environment (dbt status icon on bottom status bar will show it), Click on "Install dbt Cloud" button in the next step. This will install latest version of dbt Cloud CLI in your environment.

**Validate Project**

Last step is clicking on button - "Validate Project" It will run a bunch of checks to make sure your dbt environment and project are setup correctly.
If there are some issues, it will tell you exactly what's wrong as well.

/// admonition | If you still can't get the extension setup correctly, please check the [troubleshooting page](../troubleshooting.md)
    type: tip
///

## Recorded Demo

<div style="position: relative; padding-bottom: 56.25%; height: 0;"><iframe src="https://www.loom.com/embed/9e77435a96374622934daf5ff4e741e0?sid=a36e1758-8dc0-46b5-affe-0d14957120de" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen style="position: absolute; top: 0; left: 0; width: 100%; height: 100%;"></iframe></div>

## Questions and Answers

#### Is dbt Cloud or dbt Fusion integration free?

Answer: Yes, integration with dbt Cloud or dbt Fusion is free and treated the same as integration with dbt Core. It will not count towards the usage quota.

![Image](images/pricing_clarifications.png)

#### Why do I need to add the Altimate API key?

The API key is necessary for authentication with our backend. VSCode supports login-based authentication, but it often logs out between sessions, which can disrupt the workflow. The API key provides a more stable and streamlined experience. This is particularly beneficial for large teams, allowing them to integrate the key into their deployment secrets when setting up VSCode as a remote environment. In the future, integration with [Cloud Service token](https://docs.getdbt.com/docs/dbt-cloud-apis/authentication)s might be necessary for deeper cloud interactions, thus having the Altimate integration in place from the start makes sense.

#### What benefits does registering an API key provide?

A direct line of communication with our users is established with the authentication in place. This is essential for efficiently communicating hotfixes, new releases, and deprecation warnings. It helps to minimize operational challenges and ensures that users are not left with outdated versions or unaware of updates due to the limitations of VSCode or lack of IDE restarts. Our main goal is to prevent any disruption in your development environment and to support our users proactively.

#### What if I don't want to use preview features or accidentally send data to Altimate?

We understand the concern about using preview features and the risk of accidental data transmission. To address this, we have implemented stringent data security practices, which you can review in our [security FAQ](https://docs.myaltimate.com/arch/faq/). Our solutions have passed security reviews by several large organizations in the US, and we are open to undergoing similar reviews for your organization. Additionally, we are working on making some preview features available offline through our [open-source Python CLI package](https://github.com/AltimateAI/datapilot-cli).

#### How are you addressing concerns about data transmission in preview features?

To directly address concerns about data transmission, we have added a "local-mode-only" setting in VSCode. If enabled, this setting prevents backend calls for any feature except authentication. This setting can be reviewed by your security team since our [client code](https://github.com/AltimateAI/vscode-dbt-power-user/blob/master/src/altimate.ts) is open-source.

Add the following setting in vscode settings.json

```json
{
   dbt.isLocalMode: True
}
```


================================================
FILE: documentation/docs/arch/faq.md
================================================
The dbt Power User extension is developed and maintained by [Altimate AI](https://www.altimate.ai). We are a software company based in the San Francisco Bay Area and have many large enterprise companies as customers.
We have done many security/governance reviews for these companies and we are SOC 2 Type 2 certified.

Here is our [Privacy Policy](https://www.altimate.ai/privacy) and [Terms of Use](https://www.altimate.ai/terms).

/// admonition | If you need us to do a security review with your IT / security teams, please [contact us](https://www.altimate.ai/support) via chat or Slack.
    type: tip
///

### **Security Measures & Protocols**

### 1. **Is my data encrypted during transmission?**

Yes, all data transmitted to and from our service is encrypted using Transport Layer Security (TLS). This ensures that your data remains confidential and cannot be intercepted or tampered with during transmission.

### 2. **How do you prevent unauthorized access to your systems?**

Our systems are designed with multiple layers of security:

- **Transmission**: We use Transport Layer Security (TLS) to encrypt data during transmission.
- **Infrastructure Security**: Our service is hosted on AWS, operating within a Private Virtual Private Cloud (VPC). This provides a secluded environment, significantly reducing intrusion risks.
- **Internal Access Controls**: Only authorized developers have access to our servers. Access rights are managed and restricted using AWS's Role-Based Access Control (RBAC) mechanism.

### 3. **Do you comply with industry security standards (e.g., ISO 27001, SOC 2)?**

We take security and compliance very seriously at Altimate AI, and we have SOC 2 TYPE 2 certification already.

### 4. **Where are your data centers located, and what security measures are in place there?**

Our data centers are managed through Amazon Web Services (AWS), which has facilities in multiple geographic regions around the world. By leveraging AWS, we ensure our users benefit from the rigorous security standards that this leading cloud provider upholds.

### 5. **How are users authenticated and managed?**

Users are authenticated with email and password combinations in the SaaS UI. In the VSCode extension, Python package, users use the API key associated with their account. In the enterprise edition, we provide OAuth authentication as well.

### 6. **Do you have a disaster recovery and business continuity plan?**

Yes, at Altimate AI, we have a robust disaster recovery plan in place. Our data is backed up frequently to ensure minimal data loss. In the event of any system failure, our recovery processes are designed to restore services within an hour. This quick recovery time minimizes disruptions and ensures the continuity of our services for our users.

/// admonition | If you need us to do a security review with your IT/security teams, please [contact us](https://www.altimate.ai/support) via chat or Slack.
    type: tip
///

---

### **Data Privacy & Retention**

### 1. **What data do you collect and for what purposes?**

The only data we collect is any feedback you may choose to provide us. This feedback is stored for a brief period of 30 days. Its sole purpose is to assist us in quality improvement efforts, allowing us to identify areas where our models can be further refined and enhanced.

We also collect telemetry data as per VSCode guidelines using telemetry framework offered by VSCode. Telemetry is used for error and usage reporting in order to make the extension better.
You can disable telemetry if needed, as per instructions [here](https://code.visualstudio.com/docs/getstarted/telemetry#_disable-telemetry-reporting).

### 2. **How do you ensure my data privacy?**

At Altimate AI, ensuring the privacy of your data is a top priority. Here's how we uphold it:

- **Data Isolation**: We employ a multi-tenant architecture that inherently isolates data on a per-tenant basis.
- **Strict Access Controls**: Only a select group of authorized developers can access the collected metadata. We employ Amazon Web Services' Identity and Access Management (IAM) policies to meticulously restrict and control access to our various data stores.

### 3. **How long do you retain my data?**

At Altimate AI, we maintain a strict policy of not retaining data related to the requests you make while using our service. The only data we retain is any feedback you may choose to provide us. This feedback is stored for a brief period of 30 days. Its sole purpose is to assist us in quality improvement efforts, allowing us to identify areas where our models can be further refined and enhanced.

### 4. **What's your stance on GDPR?**

We do not store any actual customer data, we only store aggregate statistics and metadata. As a result, GDPR data deletion requests do not need to be propagated to us because we do not store such data.
Our customers typically do not request or require DPAs. However, we're happy to provide a DPA or review a vendor DPA if your organization needs it.

/// admonition | If you need us to do a security review with your IT/security teams, please [contact us](https://www.altimate.ai/support) via chat or Slack.
    type: tip
///

### 5. **What is your cookie policy?**

We store only essential cookies, but not to track user data but only to keep few features working as expected. We use only following first party cookies

- **Intercom**: Used for support requests. Cookies stored by Intercom and their cookies policy is defined [here](https://www.intercom.com/help/en/articles/2361922-intercom-messenger-cookies)
- **Supertokens**: Used for SSO authentication and these cookies will be stored only for tenants with SSO. More details on Supertokens cookies policy can be viewed [here](https://supertokens.com/docs/passwordless/common-customizations/sessions/cookie-consent)

---

### **Use of Data for AI Model Training**

### 1. **Do you use my data to train your AI models?**

At Altimate AI, our primary objective is to provide accurate and efficient documentation using our AI models. However, we do not use any specific client data to train our models. Our models are designed to be tenant-agnostic, meaning they do not learn or differentiate based on individual client data. Any data processed by our service is not repurposed for model training or enhancement.

### 2. **How do you ensure my data isn't unintentionally used for model improvement?**

We employ strict data isolation and access controls. The multi-tenant architecture isolates data on a per-tenant basis, and our internal access controls ensure that only a select group of authorized developers can access the metadata. Coupled with our tenant-agnostic model approach, our infrastructure is designed to prevent any unintentional usage of your data outside its primary purpose.

### 3. **Can I opt-in or opt-out of allowing my data to be used for model training in the future?**

Currently, we do not use client data for model training, so there's no opt-in or opt-out mechanism. If our policy were to change in the future, we would provide users with clear communication and choices regarding the use of their data.

/// admonition | If you need us to do a security review with your IT/security teams, please [contact us](https://www.altimate.ai/support) via chat or Slack.
    type: tip
///

---

### **LLM & AI Security**

### 1. **How does Altimate handle LLM access?**

Altimate gives you two options for LLM access:

- **BYOK (Bring Your Own Key)** — Always free and unlimited. Use your own API keys from any of 35+ supported providers (Anthropic, OpenAI, AWS Bedrock, Azure OpenAI, Google, Ollama, and more). With BYOK, your data goes directly to your chosen provider — **Altimate never sees it**.

- **[Altimate LLM Gateway](llm-gateway.md)** — A managed option for users who don't want to manage API keys. The gateway dynamically routes to the best model for each task. See below for its security details.

### 2. **Does the Altimate LLM Gateway store my prompts or responses?**

Your full prompts and responses are not retained after processing. Your data is not used to train, fine-tune, or improve any models.

The gateway does store limited **metadata** for each request:

- Number of prompt and completion tokens
- Latency
- Model used

This metadata is used for billing, performance monitoring, and routing optimization.

Additionally, a small number of prompts are sampled for **anonymous categorization** to power routing and model ranking. This categorization is stored completely anonymously and is never associated with your account or user ID. No code, SQL, credentials, or PII are retained.

You can opt out of all telemetry by reaching out to us via the Intercom chat built into the [Altimate dashboard](https://app.myaltimate.com).

### 3. **What metadata does the Altimate LLM Gateway collect?**

| Metadata | Purpose |
|----------|---------|
| Number of prompt tokens | Usage tracking and billing |
| Number of completion tokens | Usage tracking and billing |
| Latency | Performance monitoring |
| Model used | Routing optimization |
| Anonymous prompt categorization (sampled) | Model ranking and routing |

Prompt categorization is stored completely anonymously — never linked to your account or user ID. You can opt out via the Intercom chat in the [Altimate dashboard](https://app.myaltimate.com).

/// admonition | If you need us to do a security review with your IT/security teams, please [contact us](https://www.altimate.ai/support) via chat or Slack.
    type: tip
///

---

## **What data get sent to the SaaS backend for the preview features?**

### Model Definition

- **Model Name:** The name of the model.
- **Model Schema:** Schema details of the model.
- **Model SQL:** SQL queries related to the model.
- **Adapter Type:** Type of adapter used.

The above model attributes will be referenced in the following feature descriptions

### 1. Documentation Generations

- **Model Attributes:** Refer to the Model Definition.
- **Existing Documentation:** Any existing documentation for the model.
- **Parent Models:** Corresponding parent models associated with the current model.

### 2. SQL to Model

- **SQL:** SQL queries used.
- **Adapter Type:** Type of adapter used (Refer to Model Definition for adapter type details).
- **All Models Present:** List of all models present.
- **All Sources Present:** List of all sources present.

### 3. SQL Explanation

- **SQL:** SQL queries used for explanation.
- **Adapter Type:** Type of adapter used (Refer to Model Definition for adapter type details).

### 4. Column Lineage

- **SQL:** SQL queries related to column lineage.
- **Adapter Type:** Type of adapter used (Refer to Model Definition for adapter type details).
- **Model Attributes:** Refer to the Model Definition.
- **Upstream and Downstream Models Attributes:** Information about all upstream and downstream models. Includes models open in the LINEAGE panel in the extension and additional ones necessary for generating the lineage. (Refer to the model Definition for details about model attributes).

### 5. Defer-to-prod (with saas mode - "DataPilot dbt integration" option)

- **dbt manifest file** In the SaaS mode - when you configure "DataPilot dbt integration", manifest files are uploaded to the SaaS instance.

/// admonition | If you would like to connect your on-premise storage for manifest file uploads, please [contact us](https://www.altimate.ai/support) via chat or Slack.
    type: info
///

All of the details can be found in the code [here](https://github.com/AltimateAI/vscode-dbt-power-user/blob/master/src/altimate.ts). Please note that we only send meta-data, such as model schema and queries to the backend. We never send actual data to the backend and we do not store any of the meta-data.

/// admonition | If you need us to do a security review with your IT/security teams, please [contact us](https://www.altimate.ai/support) via chat or Slack.
    type: tip
///


================================================
FILE: documentation/docs/arch/llm-gateway.md
================================================
---
status: new
---

# Altimate LLM Gateway

The Altimate LLM Gateway is a managed LLM service that gives you access to the best AI models — **60-80% cheaper** than buying tokens directly from providers. No API keys to manage, no billing across multiple providers, no rate limits to worry about.

## How It Works

The gateway dynamically routes each request to the best model for the task across **Sonnet 4.6, Opus 4.6, GPT-5.4, GPT-5.3, and GPT-5.4-mini**. You pay a flat token price regardless of which model handles your request — no surprise bills from expensive model routing.

## Pricing

| Plan | Price | Tokens/mo | $/M tokens | Overage (per 1M tokens) |
|------|-------|-----------|------------|------------------------|
| **Community** | $0/mo | 10M (one-time) | Free | BYOK only |
| **Pro Tier 1** | $29/mo | 20M | $1.45 | $5/M tokens |
| **Pro Tier 2** | $89/mo | 70M | $1.27 | $3/M tokens |
| **Enterprise** | Custom | Custom | Custom | Negotiated |

Tokens are counted as input + output combined. All tiers get access to all models — the upgrade incentive is volume, not capability.

## What Would This Cost You Directly?

Buying 20M tokens directly from providers:

| Model | Direct Cost (20M tokens) | With Altimate Pro Tier 1 | Savings |
|-------|--------------------------|--------------------------|---------|
| Sonnet 4.6 | ~$84 | **$29** | ~65% |
| Opus 4.6 | ~$140 | **$29** | ~79% |
| GPT-5.4 (short context) | ~$75 | **$29** | ~61% |
| GPT-5.4 (long context) | ~$135 | **$29** | ~79% |

With Altimate, you pay $29 flat regardless of which model handles your task. Buying the same 20M tokens directly from providers would cost $75-140 depending on the model — and you'd have to manage API keys, billing, and rate limits across multiple providers yourself.

## BYOK vs. Gateway

| | BYOK (Bring Your Own Key) | Altimate LLM Gateway |
|---|---|---|
| **Cost** | Free and unlimited | Token-based pricing (10M tokens free) |
| **API Keys** | You manage your own keys | No keys needed |
| **Models** | Any model from your provider | Dynamic routing across best-in-class models |
| **Data Path** | Direct to your provider — Altimate never sees it | Through Altimate — see [Security FAQ](faq.md#llm-ai-security) for data handling details |
| **Best For** | Users with existing API keys or strict data residency requirements | Users who want simplicity and cost savings |

Both options are always available. You can use BYOK and the gateway side by side.

## Models Available

The gateway routes across the following models based on task complexity, context length, and quality requirements:

| Model | Provider | Strengths |
|-------|----------|-----------|
| **Claude Sonnet 4.6** | Anthropic | Excellent price/performance for most data engineering tasks |
| **Claude Opus 4.6** | Anthropic | Highest quality for complex reasoning and analysis |
| **GPT-5.4** | OpenAI | Strong general-purpose capabilities |
| **GPT-5.3** | OpenAI | Cost-effective for simpler tasks |
| **GPT-5.4-mini** | OpenAI | Fast, lightweight tasks |

You don't choose the model — the gateway selects the optimal one for each request automatically.

## Security

The Altimate LLM Gateway is designed with enterprise security requirements in mind:

### Data Handling

- **Your data is not used to train, fine-tune, or improve any models.**
- The gateway stores limited metadata (token counts, latency, model used) for billing and routing.
- A small number of prompts are sampled for anonymous categorization to improve routing. See [Security FAQ](faq.md#llm-ai-security) for full details.

### Compliance

- **SOC 2 Type II** certified
- **TLS 1.3** encryption for all data in transit
- AWS infrastructure in private VPC with network isolation
- IAM-based RBAC with MFA enforcement for developer access


/// admonition | If you need us to do a security review with your IT/security teams, please [contact us](https://www.altimate.ai/support) via chat or Slack.
    type: tip
///

## Getting Started

1. Install the [Datamates extension](https://marketplace.visualstudio.com/items?itemName=altimateai.vscode-altimate-mcp-server) in your IDE
2. Open the command palette (`Cmd+Shift+P` / `Ctrl+Shift+P`) and select **Datamates: Open Altimate Code Chat**
3. The Community plan with 10M free tokens is available immediately — no credit card required

To upgrade or manage your plan, visit the [Altimate pricing page](https://www.altimate.ai/pricing).


================================================
FILE: documentation/docs/arch/pricingfaq.md
================================================
The Power User for dbt extension is developed and maintained by [Altimate AI](https://www.altimate.ai). We are a software company based in the San Francisco Bay Area, and have many large enterprise companies as customers.

### **Info about pricing plans is available on the [Pricing page](https://www.altimate.ai/pricing)**

### 1. **Are you going to charge for current free features in the "power user for dbt" extension?**

No. We have no plans to convert previously available free features into paid features. Newly developed features may be released with a credit quota for the free community plan. Please check the [pricing page](https://www.altimate.ai/pricing) for more details.

### 2. **What exactly is credit for the feature?**

You can find the definition of credit for different features in the table below.

| Feature            | Definition of credit                                                                                                                                                                                         |
| ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| Docs Generation    | Each generated description = 1 credit. For bulk generation, 3 generated descriptions = 1 credit. If you bulk generate descriptions for more than 300 columns, only first 100 credits are counted             |
| Column Lineage     | Each column lineage generation = 1 credit. Once the lineage for a particular column in a model is generated, no additional credits are counted for that particular column lineage unless VSCode is restarted |
| Query Explanation  | Each query explanation= 1 credit, Follow-up question = 1 credit                                                                                                                                              |
| Model Generation   | Each dbt model generation = 2 credits                                                                                                                                                                        |
| Model Updates      | Each model change generation = 1 credit                                                                                                                                                                      |
| Tests Generation   | Each test generation = 1 credit. No credit count for adding default tests without code generation.                                                                                                           |
| Defer to Prod      | Each dbt command executed with defer flag (saas mode) = 1 credit                                                                                                                                             |
| Query Translation  | Each query translation = 3 credits                                                                                                                                                                           |
| Project Governance | Each scan = 5 credits. Same project scan is not counted again unless VSCode is restarted.                                                                                                                    |
| Collaboration      | One share = 5 credits. It doesn't matter how many comments are added, only first time share operation is counted.                                                                                            |
| SQL Visualizer     | Each DAG Generation = 1 credit. No additional credits are counted for creating that particular DAB unless VSCode is restarted                                                                                |
| AI agent in UI     | Each agent execution = 1 credit                                                                                                                                                                              |

Features that are not listed here, have unlimited free usage. Their usage is not counted towards the no. of credits

### 3. **What is considered an upgrade or downgrade of the subscription?**

Upgrade or downgrade of the subscription is determined based on the price of the subscription plan. If the price of the original subscription plan is higher than the price of the newer subscription plan, it's considered a downgrade. If the price of the original subscription plan is lower than the price of the new subscription plan, it's considered an upgrade.

### 4. **What happens during an upgrade of the subscription?**

As soon as you upgrade the subscription, changes will be made to your instance for the new subscription. You will be charged the difference between a new subscription price and the prorated current subscription price based on the no. of credits remaining.

### 5. **What happens during a downgrade of the subscription?**

Your current subscription will be downgraded at the end of the current billing cycle. There is no refund when you downgrade your subscription, as the subscription is downgraded at the end of the billing cycle.

### 6. **What happens if I change from a yearly subscription to a monthly subscription?**

If the price of the monthly subscription is lower than the yearly subscription, it's considered a downgrade. So, the change in the subscription will be made only after the current billing period is over.

If you would like to make an immediate change to your subscription, make the change at a yearly plan level. It will be considered an upgrade and will be effective immediately.

/// admonition | If you can't find your question here, please [contact us](https://www.altimate.ai/support) via Slack.
    type: tip
///


================================================
FILE: documentation/docs/develop/autocomplete.md
================================================
dbt-power user extension auto-completes model, macro, column names in the VSCode

## Models

a) Autocomplete model

![Autocomplete model](images/autocompleteModel.gif)

b) Go to model definition

![Go to model definition](images/definitionModel.gif)

## Macros

/// details | a) Autocomplete macro

![Autocomplete macro](images/autocompleteMacro.gif)

///

/// details | b) Go to macro definition

![Go to macro definition](images/definitionMacro.gif)

///

## Sources

/// details | a) Autocomplete source

![Autocomplete source](images/autocompleteSource.gif)

///

/// details | b) Go to source definition

![Go to source definition](images/definitionSource.gif)

///

## Doc blocks

/// details | a) Autocomplete doc block

![Autocomplete doc block](images/autocompleteDoc.gif)

///

/// details | b) Go to doc block definition

![Go to doc block definition](images/definitionDoc.gif)

///


================================================
FILE: documentation/docs/develop/clicktorun.md
================================================
There are two methods to do it. You can either do it from the top right corner toolbar or from the extension side pane

### Method 1: Build and run models from the toolbar

The toolbar action to build models is present on the top right corner of the VSCode as shown in the image below:

![buildRunModels](images/buildRunModels.png)

### Method 2: Run models from the side panel

![extensionPanel](images/extensionPanel.gif)

/// admonition | You cannot build models from the side panel
    type: info

///


================================================
FILE: documentation/docs/develop/compiledCode.md
================================================
## Preview compiled code (SQL)

The toolbar action to preview compiled code is present on the top right corner of the VSCode as shown in the image below:

![buildRunModels](images/compiledPreview.png)


================================================
FILE: documentation/docs/develop/explanation.md
================================================
Query explanation is invaluable to understanding a complex piece of dbt or SQL code (especially written by others!).

## Start Query Explanation

You can get an explanation for the entire query code in the file or selected parts. If you need an explanation for only some part of the code, select that code first. You can trigger the query explanation functionality in three different ways.

### Right Click Menu #Right-click, select "DataPilot" menu, and choose an action to "explain" the query.<br>

![rightClick](images/queryExplainRightClick.png)<br>

### Utilize SQL actions menu

Press "SQL actions" button from the toolbar. It will open the "SQL actions" menu drawer, as shown below. Please select the "Explain query" action.<br>

![sqlActions](images/queryExplainSQLActions.png) <br>

### Explain query button from the query results panel

There is an explain query button in the query results panel where you can see compiled SQL. Pressing that button will start query explanation workflow.<br>

![explainButton](images/queryExplainButton.png)<br>

## Get more details in the DataPilot chat

Once you start the query explanation workflow in the DataPilot chat panel on the left-hand side, DataPilot will show more specific suggestions to get detailed explanations on specific areas. You can choose one of those suggestions or ask more questions in the input box below the suggestions, as shown in the image below.

![explainSuggestion](images/queryExplainSuggestion.png)<br>

## Recorded demo video

<iframe width="800" height="600" src="https://www.youtube.com/embed/OfAmF9cJHEw?si=ueaufGL_MObAJpbf" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>

/// admonition | Please provide feedback on the generated explanations using thumbs up / down buttons. Your feedback will help us tremendously to improve this functionality.
    type: tip
///

/// admonition | This feature requires an API key. You can get it by signing up for free at [www.altimate.ai](https://www.altimate.ai)
    type: info
///


================================================
FILE: documentation/docs/develop/genmodelSQL.md
================================================
You can convert existing SQL into dbt model as below. The extension automatically converts SQL to jinja-sql by populating right references.

<Interactive demo for converting SQL to dbt model>

<div style="position: relative; padding-bottom: calc(57.25% + 44px); height: 0;"><iframe src=https://app.supademo.com/embed/clntspo5o0ickpeygblm175kb frameborder="0" webkitallowfullscreen="true" mozallowfullscreen="true" allowfullscreen style="position: absolute; top: 0; left: 0; width: 100%; height: 100%;"></iframe></div>

/// admonition | This feature requires an API key. You can get it by signing up for free at [www.altimate.ai](https://www.altimate.ai)
    type: info
///


================================================
FILE: documentation/docs/develop/genmodelSource.md
================================================
Generating model from sources defined in yaml file is very easy as below:

![Generate model from source](images/generateModelSource.gif)

/// details | You can configure a file name template and prefix in the extension settings

![Generate model settings](images/genModelSettings.png)

///

/// admonition | Why does the generated model appear with the syntax {{ adapter.quote(column_name)}}?
    type: info

This syntax provides a safe way for the adapter to quote the columns.
Since the extension supports different adapters, this is the easiest way to ensure that it works for all of them.
///


================================================
FILE: documentation/docs/develop/translateSQL.md
================================================
You can translate SQL queries from one dialect to another using this functionality. For example, translate query in Postgres SQL dialect to Snowflake SQL dialect

### Supported SQL dialects

athena, bigquery, clickhouse, databricks, doris, drill, duckdb, hive, mysql, oracle, postgres, presto, prql, redshift, snowflake, spark, sqlite, starrocks, tableau, teradata, trino, tsql

### Step 1: Create a new file and add SQL query

![newTranslateFile](images/newTranslateFile.png)

### Step 2: Right click, and choose DataPilot -> Translate (SQL Dialect)

![rightClickTranslate](images/rightClickTranslate.png)

### Step 3: Provide source and destination dialect

DataPilot chat interface will open on the left hand side, where you should provide source and destination dialects.

Source dialect: Current dialect of the SQL present in the file
Destination dialect: The SQL dialect in which you want to translate the query

/// admonition | Destination dialect value is auto-populated in the drop-down based on the data backend for current dbt Project. It can be changed by clicking on it.
    type: tip
///

Hit the "Translate" button after source and destination dialects are provided.

![translateButton](images/translateButton.png)

/// admonition | Query Translate (SQL Dialect) functionality works on the whole file, and not selected code snippet. DataPilot will proceed with assumption that the whole file needs to be translated.
    type: info
///

### Step 4: Review Translated SQL and Explanation

In this step, DataPilot will give you translated SQL along with explanation of what has been changed in translation.

Different databases use different functions for common operations or sometimes syntax is different. DataPilot translation takes care of these differences and it also provides explanation of those differences.

![actulTranslation](images/actualTranslation.png)

/// admonition | You can click on "Replace" button below translated query, and translate query will replace the original query in the file.
    type: tip
///

### Step 5: Convert SQL to dbt Model (optional)

If needed, you can covert SQL from a file to a dbl model
with the SQL to dbt Model functionality [(details)](genmodelSQL.md)

### Limitations

/// details | Following are a few limitations

- If there are functions we can't identify, then we will not be able to convert it. In those scenario, it will be kept as is.
- We do not look at data types. If there are some data types which are not supported in the target database, we may not be able translate those
  ///

### Recorded Demo

<iframe width="800" height="600" src="https://www.youtube.com/embed/ssLpEFVNE3c?si=aT8JgDlq2BKMHzN5" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>


================================================
FILE: documentation/docs/develop/updatemodel.md
================================================
Updating or changing an existing dbt (or SQL) model using natural language is quite straightforward with this functionality.

### Step 1: Trigger the Operation

Select a piece of code, or if you want to use a whole file, right-click and choose the DataPilot menu and choose the "change" submenu

![Start Query Change](images/startDataPilotChange.png)

### Step 2: Instructions for Changes

Give instructions for changes in the input text box

![Input to DataPilot for change](images/changeDataPilotChat.png)

### Step 3: Copy the Code #Copy the changed code and put it in a file

![Copy Changed Code](images/createCodeFile.png)

### Recorded demo video

<iframe width="800" height="600" src="https://www.youtube.com/embed/TqyNhLTRD0M?si=TJXknBYz1fVpMFAi" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>

/// admonition | Please provide feedback on the generated explanations using thumbs up / down buttons. Your feedback will help us tremendously to improve this functionality.
    type: tip
///

/// admonition | This feature requires an API key. You can get it by signing up for free at [www.altimate.ai](https://www.altimate.ai)
    type: info
///


================================================
FILE: documentation/docs/discover/setupui.md
================================================
This page covers the setup steps necessary to view your dbt documentation and lineage in the SaaS UI.
The steps below ship your manifest.json and catalog.json projects to SaaS UI in order to visualize information like dbt model/column descriptions and column lineage.

/// admonition | Please note that this lineage and documentation in UI functionality is not yet supported with dbt 1.8
    type: info
///

/// admonition | If you want to re-create any existing dbt core integration using Connections, kindly delete the existing integration first and then create a fresh connection.
    type: warning
///

## Step 1: Create a dbt Core Connection

1. Navigate to **Settings -> Connections** and click **Create new connection**

    ![DBT Core Connection](images/DBT_Cloud_Connection.png)

2. Select **dbt Core** as the connection type & provide the required connection name & description details

    ![Create DBT Core Connection](images/DBT_Core_Create_Connection.png)

3. Provide **Environment Name** & Click **Create Connection** to create the dbt Core connection

    ![Final Create DBT Core Connection](images/DBT_Core_Create_Final_Connection.png)

| Field                  | Description                                                                                                                                                                                        |
| ---------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Connection name        | Unique connection name, this can be mapped to your dbt Project                                                                                                                                     |
| Connection description | A brief description of the connection (e.g., "Production dbt Core project for analytics")                                                                                                          |
| Environment name       | Environment name can be based on which environment that you are going to upload manifest.json and catalog.json files from. For now, just add the value as "prod" for your production environments.  |

## Step 2: Install the open-source DataPilot CLI

The next step is to install the latest version of DataPilot CLI. It will be used to upload manifest and catalog files to the SaaS instance. Please run the following command to install the latest version of the DataPilot CLI.

```
pip install altimate-datapilot-cli --upgrade
```

Here's the link to the repo: [https://github.com/AltimateAI/datapilot-cli](https://github.com/AltimateAI/datapilot-cli)

## Step 3: Execute the command for uploading the manifest and catalog files

Go to **Settings -> Connections** page and click on the dbt core connection name for the connection created. Copy the command for uploading files in the overlay screen on the side.

/// admonition | manifest and catalog files don't contain any information about your data. It's all metadata about your environment. Please feel free to check our [security page](https://docs.myaltimate.com/arch/faq/) for more info on how we protect your metadata.
    type: info
///

![DBT Core Connection Details](images/copyCommand.png)<br>

You need to update the following placeholders in the copied command -

| Placeholder                    | Description                                                                                                                        | Example                         |
| ------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------- | ------------------------------- |
| Path/to/manifest/file          | This is path to your manifest file in the project directory. It's usually stored in the 'target' directory in your dbt project.    | ./target/manifest.json          |
| Path/to/catalog/file           | This is the path to your catalog file in the project directory. It's usually stored in the 'target' directory in your dbt project. | ./target/catalog.json           |
| Path/to/run-results/file       | Path to your run results file in the project directory                                                                              | ./target/run_results.json       |
| Path/to/semantic-manifest/file | Path to your semantic manifest file in the project directory                                                                        | ./target/semantic_manifest.json |
| Path/to/sources/file           | Path to your sources file in the project directory                                                                                  | ./target/sources.json           |

/// admonition | In addition to the required `manifest.json` and `catalog.json`, we now support uploading additional artifacts — `run_results.json`, `semantic_manifest.json`, and `sources.json` — for richer insights. These are optional but recommended for complete visibility into your dbt project.
    type: info
///

/// admonition | If you are missing manifest.json or catalog.json files in the target directory, please run the `dbt build` and `dbt docs generate` commands. Also, you can add steps to upload the manifest and catalog files command in your dbt pipelines. That way, you will always have up-to-date documentation and lineage in UI without any manual steps.
    type: tip
///

Here's the sample output after running the command and successfully uploading your files.

```
(.venv) pradnesh@pradneshs-MacBook-Air jaffle_shop % datapilot dbt onboard --backend-url https://api.tryaltimate.com --token 00x0x0x0x0x0x0 --instance-name freemegatenant --dbt_core_integration_id 1 --dbt_core_integration_environment prod --manifest-path ./target/manifest.json --catalog-path ./target/catalog.json
Manifest onboarded successfully!
Catalog onboarded successfully!
Manifest and catalog ingestion has started. You can check the status at https://freemegatenant.demo.tryaltimate.com/settings/integrations/1/prod

```

/// admonition | It takes a few minutes to upload the files and sync that info with the rest of the UI. You can check the status of the upload by going to the link provided in the command output.
    type: tip
///

## Automating with CI/CD Pipelines

To ensure your dbt documentation and lineage in the UI stays up-to-date automatically, we strongly recommend integrating the manifest and catalog upload process into your CI/CD pipeline. This eliminates manual steps and ensures that any changes to your dbt project are immediately reflected in the SaaS UI.

## Automatic Sync with dbt Cloud Connection

For dbt Cloud users, you can now set up automatic artifact syncing in the SaaS UI using the dbt Cloud API connection. This eliminates the need for manual file uploads or CLI commands.

### Prerequisites: Create a dbt Cloud Service Token

Before setting up the connection, create a service token in dbt Cloud with **Job Viewer** permission. This grants read-only access to the Jobs API for fetching artifacts (manifest.json, catalog.json) from your dbt Cloud runs.

1. Click your account name in the left menu and select **Account settings**
2. Select **Service Tokens** from the left sidebar
3. Click **+ New Token**
4. Enter a descriptive name (e.g., "Altimate Integration")
5. Assign the **Job Viewer** permission and select the projects you want to sync
6. Click **Save**
7. **Important**: Copy and save the token immediately — you won't be able to view it again

![DBT Cloud Connection](images/dbtCreateServiceToken.png)

![DBT Cloud Connection](images/dbtServiceTokenPermission.png)

> **Note**: Permission availability may vary by dbt Cloud plan. Refer to the [dbt Cloud Service Tokens documentation](https://docs.getdbt.com/docs/dbt-cloud-apis/service-tokens) for details.

![DBT Cloud Connection](images/DBT_Cloud_Connection.png)

### Setup Steps

1. Navigate to **Settings -> Connections** and click **Create new connection**
2. Select **dbt Cloud** as the connection type
3. Provide the required connection details:
4. **Service Account Token**: Generate a new Service Token from dbt Cloud Account Settings ([learn more](https://docs.getdbt.com/docs/dbt-cloud-apis/service-tokens))
5. **Account ID**: Available at `https://cloud.getdbt.com/next/settings/accounts/{{account_id}}`
6. **Custom URL** (optional): For custom dbt Cloud instances (defaults to `https://cloud.getdbt.com/api/v2/`)
7. Click **Test Connection** to verify your setup
8. Configure the sync schedule:
    - **Scheduled**: Sync artifacts on a regular schedule. Select from Daily, Weekly, or Monthly frequency options and choose the time (UTC) when sync should occur (e.g., Daily at 12:00 AM UTC)
    - **Real-time**: (Coming soon) Immediate sync when dbt Cloud runs complete
9. Click **Create Connection**

After creation, your dbt Cloud projects and environments will be automatically discovered.
<div style="position: relative; box-sizing: content-box; max-height: 80vh; max-height: 80svh; width: 100%; aspect-ratio: 1.73; padding: 40px 0 40px 0;">
  <iframe src="https://app.supademo.com/embed/cml93jv5t01in180iqac81nl2?embed_v=2&utm_source=embed" loading="lazy" title="dbt Cloud Integration" allow="clipboard-write" frameborder="0" webkitallowfullscreen="true" mozallowfullscreen="true" allowfullscreen style="position: absolute; top: 0; left: 0; width: 100%; height: 100%;"></iframe>
</div>

/// admonition | Automatic syncing keeps your documentation and lineage always up-to-date without manual intervention
    type: tip
///

/// admonition | The dbt cloud connection deletion has a processing delay of a few hours. If you need to recreate the same connection immediately, contact us.
    type: warning
///




================================================
FILE: documentation/docs/discover/viewdocs.md
================================================
This page highlights functionality for searching and viewing documentation for your DBT Projects. Please go to Code -> dbt from the navigation menu on the left-hand side to view all your dbt models, seeds, and other components.

/// admonition | [Setups steps](./setupui.md) needed for the information to show in SaaS UI
    type: warning
///

## Search and Filter

On top of that, you can search for specific entities or columns by name via the search bar. This search also searches across the descriptions written for models and columns. On the left-hand side, there are different filters available for dbt project name, entity type, materialization etc., so you can filter different entities easily.
![dbt Models](images/dbtModel.png)<br>

## View Schema

Suppose you want to get a quick view of the schema. Click "View Schema" button for a particular dbt Model, and the side screen will quickly show the view of schemas. In this view, you can also quickly see the documentation written for the model and columns.
![view Schemas](images/viewSchema.png)<br>

## View Details (Docs)

The "View details" button takes you to a more detailed view, where you can see the schema, documentation, lineage, and code information.
![view Details](images/viewDetails.png)<br>

In addition to schemas, you can also view the actual code and compiled code in the "Code" tab.

## Recorded Demo

<iframe width="560" height="315" src="https://www.youtube.com/embed/JUuQM6Hxcwg?si=HAAU3UQWHQR7LssQ" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>

/// admonition | Using this feature requires an API key. You can get it by signing up for free at [www.altimate.ai](https://www.altimate.ai) Also, you need to perform the setup steps outlined on the [Setup UI page](setupui.md)
    type: info
///


================================================
FILE: documentation/docs/discover/viewlineage.md
================================================
In the DataPilot SaaS UI, you can see model level as well as column level lineage. You can also see the types of changes that occurred during the column lineage traversal
e.g. column was unchanged or alias was used

/// admonition | [Setups steps](./setupui.md) needed for the information to show in SaaS UI
    type: warning
///

## View Model Level Lineage

Go to code -> dbt from the left-hand navigation menu and see the available list of dbt Models. You can also search on the top or use provided filters to find the exact model you are looking for.

![dbt Models](images/dbtModel.png)<br>

Click on the "View Details" button and go to the Lineage tab. You can expand the lineage further by clicking on (+) signs on individual blocks.

![View Lineage](images/viewLineage.png)<br>

/// admonition | If you click on the specific model in the lineage view, the lineage graph for only that model will be highlighted, as shown in the image above.
    type: tip
///

## View Column Level Lineage

In order to view column-level lineage, first click on "View Details" button in one of models shown in the lineage view. This will display a list of columns present in the model.
Click on the column for which you need to view the lineage.

![Column Selection](images/columnSelection.png)<br>

Once you click on the column, you will see the column lineage view as below:

![Lineage SaaS](images/lineageSaaS.png)<br>

## Code transformations

You can also see how that particular column was created from previous stage columns via transformation information available as icons at each block level.
The following type of transformations are shown in this view:

| Type           | Description                                           |
| -------------- | ----------------------------------------------------- |
| Original       | The original column in the lineage graph              |
| Alias          | Alias was used on the previous stage columns          |
| Transformation | Transformation was used on the previous stage columns |
| Unchanged      | No change was made in the previous stage column       |
| Not sure       | Not known how this column was created                 |

If code is available for a particular transformation, a small code icon is displayed. When you click on the code icon, it shows the list of code transformations that were performed to create that column.

![SaaS Code](images/saasCode.png)

## Recorded Demo

<iframe width="560" height="315" src="https://www.youtube.com/embed/JUuQM6Hxcwg?si=cT8KfuVBz-lm43WC&amp;start=116" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>

/// admonition | Using this feature requires an API key. You can get it by signing up for free at [www.altimate.ai](https://www.altimate.ai) Also, you need to perform the setup steps outlined on the [Setup UI page](setupui.md)
    type: info
///


================================================
FILE: documentation/docs/document/docblocks.md
================================================
# Support for dbt Doc Blocks

dbt Power User provides comprehensive support for dbt doc blocks, allowing you to create, manage, and reference documentation blocks throughout your dbt project.

<div style="position: relative; box-sizing: content-box; max-height: 80vh; max-height: 80svh; width: 100%; aspect-ratio: 1.5470008952551477; padding: 40px 0 40px 0;"><iframe src="https://app.supademo.com/embed/cmc2au66hkebpsn1r4gfbewnf?embed_v=2" loading="lazy" title="Use Doc Blocks in dbt with the Power User for dbt Extension" allow="clipboard-write" frameborder="0" webkitallowfullscreen="true" mozallowfullscreen="true" allowfullscreen style="position: absolute; top: 0; left: 0; width: 100%; height: 100%;"></iframe></div>

## What are dbt Doc Blocks?

Doc blocks are reusable documentation components in dbt that allow you to define documentation once and reference it multiple times across your project. They're defined in `.md` files and can contain any markdown content including text, images, tables, and code snippets.

```markdown
{% docs doc_description %}
This is a reusable documentation block that can be referenced throughout your dbt project.

{% enddocs %}
```

## Referencing Doc Blocks

### In Schema Files

Doc blocks can be referenced in your `schema.yml` files for consistent documentation across models:

```yaml
version: 2

models:
  - name: my_model
    description: "{{ doc('my_model') }}"
    columns:
      - name: model_id
        description: "{{ doc('model_id') }}"
```

## Propagating Doc Blocks

Using the Propagate Docs Selector - you can select which downstream models you want to propagate docs to:

![propagateSelector](images/propagateSelector.png)


================================================
FILE: documentation/docs/document/generatedoc.md
================================================
Instead of writing documentation manually, you can generate the documentation!

### Bulk generate documentation

Bulk documentation generation is possible for all columns. You can also choose to bulk-generate documentation only for columns that are missing descriptions.

![Bulk Edit Options](images/bulkEditOptions.png)

### Regenerate documentation based on preferences around length and persona

We have added the DataPilot chat panel on the left-hand side. There, you can regenerate documentation based on specific preferences e.g. personas, content length.

### Language and Persona Settings

When it comes to generating documentation, the following settings are available: <br>
**Language:** You can choose between French, English, Dutch, German at this time. <br>
**Personas:** you can choose between technical user, business user and general user. If you specify general user, we don't use specific persona to generate documentation.

<div style="position: relative; box-sizing: content-box; max-height: 80vh; max-height: 80svh; width: 100%; aspect-ratio: 2.319778188539741; padding: 40px 0 40px 0;"><iframe src="https://app.supademo.com/embed/cm8og6wbf02pi110iisz3eqfc?embed_v=2" loading="lazy" title="Documentation Settings" allow="clipboard-write" frameborder="0" webkitallowfullscreen="true" mozallowfullscreen="true" allowfullscreen style="position: absolute; top: 0; left: 0; width: 100%; height: 100%;"></iframe></div>
<br>Settings can be configured in the settings panel. Settings panel is opened by clicking "Settings" button in the top right corner of the Documentation Editor tab.

Existing documentation (whether generated or written manually) can be further updated using regeneration functionality with DataPilot.

/// admonition | Save changes in YAML file
    type: tip
You can save the changes in the existing or a new YAML file with save button at the bottom of the panel.
If you see any issues with the content that's saved in the YAML file, please check the [optional config section](../setup/optConfig.md/#column-name-setup-for-yaml-file-updates).
///

### Propagate docs to downstream models

You can propagate already written descriptions to downstream model columns easily.

**First, click on "Docs Propagation" button for the particular column**

![Propagate Docs](images/propagateDocs.png)

**Select columns in different models where docs should be propagated**

Select the checkboxes for right columns in models and click on the "Propagate documentation to selected models" button

![Choose Models](images/chooseModels.png)

### Personalize and Coach AI

You can personalize and coach the Documentation Writer AI teammate.

/// admonition | Personalize and Coach Documentation Writer AI
    type: tip
Please check more info about how to personalize and coach documentation writer AI teammate [here](../teammates/coach.md).
If you would like to learn more about AI teammates, please check this [doc page](../teammates/introduction.md)
///

### Documentation Collaboration

You can also enable reviews of documentation via collaboration workflow. Please check details [here](../govern/collaboration.md#document-collaboration-workflow)

### Interactive Demo

Here's a demo of generating model and column descriptions:

<interactive demo of generating documentation>

<div style="position: relative; padding-bottom: calc(86.34704370179949% + 42px); height: 0;"><iframe src="https://app.supademo.com/embed/cm8oeopuq03drzh0i0yyvsxw7" allow="clipboard-write" frameborder="0" webkitallowfullscreen="true" mozallowfullscreen="true" allowfullscreen style="position: absolute; top: 0; left: 0; width: 100%; height: 100%;"></iframe></div>

/// admonition | Document generation or propagation requires an API key. You can get it by signing up for free at [www.altimate.ai](https://wwww.altimate.ai)
    type: info
///

### Recorded Demo

<div style="position: relative; width: 100%; padding-bottom: 56.25%;">
  <iframe style="position: absolute; top: 0; left: 0; width: 100%; height: 100%;" 
          src="https://www.youtube.com/embed/8EuBDEuYZ2o" 
          title="YouTube video player" 
          frameborder="0" 
          allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" 
          referrerpolicy="strict-origin-when-cross-origin" 
          allowfullscreen>
  </iframe>
</div>


================================================
FILE: documentation/docs/document/write.md
================================================
You can write descriptions for dbt models and columns in the Documentation Editor. The documentation editor also shows the descriptions that were written previously. Those previously written descriptions can be updated as well.

For columns that are not referenced in the dbt model, you can click “sync with db” button to get those columns shown in the documentation editor.

/// admonition | Save changes in YAML file
    type: tip
You can save the changes in the existing or a new YAML file with the save button at the bottom of the panel.
If you see any issues with the content that's saved in the YAML file, please check the [optional config section](../setup/optConfig.md/#column-name-setup-for-yaml-file-updates).
///

<Interactive demo of documentation editor>

<div style="position: relative; padding-bottom: calc(91.09497964721845% + 42px); height: 0;"><iframe src="https://app.supademo.com/embed/zNPSarhtOahAfzA-kw2jV" allow="clipboard-write" frameborder="0" webkitallowfullscreen="true" mozallowfullscreen="true" allowfullscreen style="position: absolute; top: 0; left: 0; width: 100%; height: 100%;"></iframe></div>

/// admonition | You can also generate the documentation, please refer the section on [generate documentation](generatedoc.md)
    type: tip
///


================================================
FILE: documentation/docs/govern/collaboration.md
================================================
Collab functionality enables you to discuss code and documentation easily with the stakeholders via VSCode and UI. Many stakeholders are not comfortable using IDE directly; this functionality enables them also to have a discussion with technical users.

## Code Collaboration Workflow

/// admonition | Code Collaboration workflow allows you to discuss code without creating a PR
    type: tip
///

### Start a discussion

You can start a discussion at the file or code block levels (single or multiple lines) by pressing (+) sign next to the code.

![StartDiscussion](images/startDiscussion.png)<br>

/// admonition | If you click on the display icon as shown in the image above, you can show details of the discussion previously started
    type: tip
///

When a discussion is started, the extension generates dbt docs and uploads those docs to the Altimate AI SaaS instance so that non-technical stakeholders can contribute to the discussion via SaaS UI as well.

### Add a comment

Once the discussion is started, you can publish a comment and also tag other users from the Altimate AI SaaS instance.

![Add comment](images/discussionText.png)<br>

/// admonition | If you don't want to tag the user but still want to share the link with them, just copy the link from the comments box, and share it with them manually (Slack, Email etc.)
    type: tip
///

### Email notification (if a user is tagged)

Tagger user receives an email notification with a link to open the discussion in the Altimate AI UI.

![Sample Email](images/sampleEmail.png)<br>

### Non-technical users can reply to comment via UI

![Comment UI](images/commentUI.png)

### Technical user can see the comment in IDE directly

The technical user who started the discussion in IDE can see the replies from other users directly in the IDE.

![List Comments](images/listComments.png)

The discussion can continue from here onwards or it can be resolved by clicking resolve action available on top of the comment textbox. Discussion can be started from a UI also
similarly, by clicking on (+) sign next to the code blocks.

## Document Collaboration Workflow

Table and column descriptions can also be reviewed and discussed with this functionality.

### Start a discussion

Discussion can be started via VSCode in the Documentation Editor panel or from SaaS product UI also from the link shared as covered in code collaboration workflow above.

![Doc Discussion](images/startDocDiscussion.png)

### Add a comment

You can add a comment and tag a user to the comment. In that case, that particular user will receive an email notification to open the discussion. Please check the code collaboration workflow for email notification example.

![Doc Comment](images/docDiscussion.png)

### View all doc discussions

You can view all doc discussion on line no. 1 of the model file, and copy discussion links from there. Click on the display icon shown on the left-hand side of line no. 1.

You can copy the documentation discussion link from here and share it with other users. You can also resolve the discussion as needed.

![Doc Comment](images/firstLineList.png)

## Lineage Export Workflow

You can export lineage from IDE to SaaS UI and share the URL with other team members for better collaboration

### Export lineage

You can export model-level and column-level lineage. Just click the export button at the top of the panel and give the export a name.

![Export Action](images/exportAction.png)

Once you create an export, a link will be generated at the bottom. You can copy this link and share it with others.

![Export Link](images/exportLink.png)

### View Lineage in SaaS

Anyone can use this link, and view the lineage in SaaS UI.

![Lineage View](images/lineageView.png)

You can also view the lineage from the list of all exported lineage views available from "Collab" -> "Export Lineage" left-hand side navigation

![Lineage List](images/lineageList.png)

/// admonition | In order to view the lineage in SaaS UI from the link, a user needs to be registered in the same Altimate AI instance
    type: info
///

## Recorded Demo

<iframe width="800" height="600" src="https://www.youtube.com/embed/pI1U94j-pOI?si=ckfDMYqeVgjBmg-7" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>

/// admonition | This feature requires an API key. You can get it by signing up for free at [www.altimate.ai](https://www.altimate.ai)
    type: info
///


================================================
FILE: documentation/docs/govern/governance.md
================================================
Prevent issues from getting shipped to production! Project governance functionality lets you swiftly scan all dbt projects in your workspace against dbt best practices and organizational guidelines to quickly bring issues to your attention.

## Available via Extension & Python Package

Project governance functionality is available in the power user extension and the open-source Python package.

/// admonition | Also, the project governance functionality is available as a Python package, so the checks can be integrated in your Git, CI/CD workflows. More details [here](https://datapilot.readthedocs.io/en/latest/insights.html)
    type: tip
///

## Configure Checks

You can configure different checks per your preferences in a local YAML file or the SaaS configuration stored in the Altimate AI backend. Navigate to the Action panel in the extension

First, navigate to the Actions panel in the extension and go to "Project Governance" tab. Then, choose the dbt project for which you want to perform a governance check.
![ActionsPanel](images/actionsPanel.png)<br>

### Manual Configuration of Checks

The configuration of checks and the list of checks to be performed can be defined in a YAML file.
More details on the configuration and YAML file [here](https://datapilot.readthedocs.io/en/latest/configuration.html#project-health-configuration)

Select the YAML file by clicking on "Select Config Path"
![ConfigPath](images/configPath.png)<br>

### SaaS Configuration of Checks

/// admonition | SaaS configuration method allows you to share multiple configurations and reference those as per environments, teams, and projects.
    type: tip
///

First, navigate to governance menu item on left hand side nav and choose "new dbt Governance Config".
![newCheckConfig](images/newCheckConfig.png)<br>

In the governance config, a name and description should be provided. The owner field is automatically populated by the name of the current user.

In the model section, you can define regex patterns for names to define different types of models. The default configuration is already pre-populated as:

```
  staging: "^stg_.*"       # Regex for staging models
  mart: "^(mrt_|mart_|fct_|dim_).*"  # Regex for mart models
  intermediate: "^int_.*"  # Regex for intermediate models
  base: "^base_.*"         # Regex for base models
```

Below that section, there are different types of checks available. Few of the checks, require additional configuration.
In that case, please click on the "configure" button next to the check to provide necessary configuration. You can search for specific checks and select / deselect checks that should be included in the config.

This list also shows files required to perform the check. Checks require either a manifest file or catalog file or both files.
You can filter checks based on the type of files required. Please hit the "save" button after you are done creating dbt Governance config on this screen.

![listChecks](images/listChecks.png)<br>

Select the right config for checks from the list

![SaaSCheckConfig](images/saasCheckConfig.png)<br>

## Do the Scan

Click the start scan button. You may be asked to install Altimate AI DataPilot package.

/// admonition | DataPilot python package is [open source package](https://github.com/AltimateAI/datapilot), that's actually used to do governance checks with the power user extension
    type: tip
///

The scan usually runs in a few seconds, but depending on the size of your project and manifest / catalog files it may take longer.

![DataPilotPackage](images/DataPilotPackage.png)<br>

## View Scan Results

View the scan results right below the "Start Scan" button after the scan is finished. Scan results are organized by file type and check type and can be filtered on the same.
You can clear results via a button or start the scan again.

![ScanResults](images/scanResults.png)<br>

## List of Checks

Checks between the Python package and Power User extension are the same. You can find a complete list of checks [here](https://datapilot.readthedocs.io/en/latest/insights.html)

## Recorded Demo

<iframe width="800" height="600" src="https://www.youtube.com/embed/3nJ9otNNIwQ?si=2K-bzC0_q74o6VXZ" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>


================================================
FILE: documentation/docs/govern/multiproject.md
================================================
# Multi Project Support with dbt-loom

Power User extension now supports dbt-loom, where native features like query preview, compiled code, column lineage support multi-project references.

## Setup dbt-loom in your project

- Instructions on how to [install and configure dbt-loom](https://github.com/nicholasyager/dbt-loom)
- Sample project [example with dbt-loom configured](https://github.com/Bl3f/dbt-loom-example)

/// admonition | Please make sure dbt_loom.config.yml file is in the root of your multi-project directory
    type: warning
///

## Reference models from other projects in code via auto-complete

Use standard dbt-loom syntax to reference models from other projects. For example,

```
{{ ref('core', 'orders') }}
```

where 'orders' model from the 'core' project is referenced.

![Reference Loom](images/referenceLoom.png)

## Visualize Lineage with models from the other projects

When you visualize the model or column lineage, models from other projects will be shown with the special "ext" type as below.

![Lineage Loom](images/lineageLoom.png)

## Limitations

- Clicking on referenced model name in the code, and then opening that model file doesn't work for multi-project references.

## Recorded Demo

<div style="position: relative; padding-bottom: 62.5%; height: 0;"><iframe src="https://www.loom.com/embed/539c361693de4cc6bebb96e1fdda1f04?sid=d3390ef2-7af5-4993-b08d-cfb664571992" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen style="position: absolute; top: 0; left: 0; width: 100%; height: 100%;"></iframe></div>


================================================
FILE: documentation/docs/govern/notebooks.md
================================================
**Why Notebooks?**

Notebooks allow you to codify your usual ad-hoc data analysis, data preparation workflows, so they can be reused. For example, if you have a workflow for standard data analysis - check for duplicates, check timezone field, make sure only certain values are present for a "customer_type" column - you can create a notebook to codify these steps. Then, you can always trigger this notebook with a click of button for a table or data output of particular model to validate or clean the data. In these notebooks, you can create different 'cells' mapping to jinja-sql, python or markdown text in a single file, and you can execute these cells together.

**Notebook templates**

You can also utilize some out-of-the-box notebook templates for common tasks - e.g. profile the data results, create a config file for the project, create dbt staging models etc.

**Notebook sharing**

Many times, this ad-hoc work is dependent on organizational best practices and the type of data that your team works on. So, these notebooks can be reused by your team members as well as extended teams. That's why we have enabled sharing - where you can share notebooks with other users in your Altimate AI saas instance. This is especially useful when you have popular notebooks spread across multiple code repositories.

/// admonition | We would love to hear your feedback on what additional functionality we can build in this area. If you have encountered any issues in this functionality, please message us over [chat](https://app.myaltimate.com/contactus)
    type: tip
///

## Enable notebooks in VSCode

You just need to add the following line to the settings.json file in your .vscode directory at the root of your repo.

```
"dbt.enableNotebooks": true,
```

/// admonition | If you don't have the .vscode directory at the root of the repo, please create it
    type: info
///

Then, reload or restart your VSCode.

## Create new notebook

You can create a notebook by going to File -> New File and then choosing the option of
DataPilot Notebook as shown below.

![Start Notebook](images/startNotebook.png)<br>

After this, it will give you an option of creating a blank notebook or use one of the existing templates.
For now, let's choose a "blank notebook". The first code cell will be automatically created for you.

![Cells Info](images/cellsInfo.png)<br>

You can add additional code cells or markdown text cells. There are additional options available for the code cell to run cells, split, delete etc. as below

![Cell Actions](images/cellActions.png)<br>

After you are done, you can just save the notebook file like any other file in VSCode.

## Use notebook templates

There are a few ways in which you can trigger notebook templates.

/// admonition | The notebook templates may use some standard Python packages, and VSCode may ask for your confirmation before installing the necessary packages
    type: info
///

**There is a contextual notebook menu available at the top of the file when you open any SQL file in VSCode**
![Top Menu](images/topMenu.png)<br>

After notebook is created based on the template, just click on "Run all" button on top to execute the notebook and get results.
Following notebook templates are available today:

### [Template] Profile the query

This template will have two cell blocks. First block will have SQL / jinja query and it will produce preview of data results.
The second block will have python code for profiling the query.

### [Template] Get test suggestions

This template will recommend tests based on the context of the dbt model, and generate code for those tests as well.
![testCode](images/testCode.png)<br>

### [Template] Generate dbt base model SQL

This template will generate base model SQL based on your input of source name and table information.
![baseModel](images/baseModel.png)<br>

### [Template] Generate dbt model yaml

This template creates config yaml for documentation and tests for the particular dbt model from where the action is triggered.
![configYaml](images/configYaml.png)<br>

### [Template] Generate dbt model CTE

This template generates model CTEs from dbt model file.

**You can also create notebooks from the "Actions" tab in VSCode (present in the bottom panel)**

![actionsTab](images/actionsTab.png)<br>

There are some notebook templates available as pre-configured notebooks. These templates are used at
dbt Project level.

### [Template] Generate dbt source yaml

Based on schema name specified in the code block, it can generate source yaml for you automatically.
You need to provide schema name as an input in the code block.

![sourceYaml](images/sourceYaml.png)<br>

### [Template] Extract exposures from Metabase

This template helps extract exposures from Metabase
![expoMetabase](images/expoMetabase.png)<br>

/// admonition | We would love to hear your feedback on what additional templates or functionality we can build in this area. If you have encountered any issues in this functionality, please message us over [chat](https://app.myaltimate.com/contactus)
    type: tip
///

## Share notebook

Once you save the notebook, you can share it with other users in DataPilot instance. This enables you to share notebooks across repositories with the whole organization.

![shareNotebook](images/shareNotebook.png)<br>

## Recorded demo

<div style="position: relative; padding-bottom: 62.5%; height: 0;"><iframe src="https://www.loom.com/embed/326aecdce9ee42e8b2d28e366d52be5a?sid=fee59cc0-ea1f-4dcd-a22b-908f121b2255" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen style="position: absolute; top: 0; left: 0; width: 100%; height: 100%;"></iframe></div>


================================================
FILE: documentation/docs/govern/querybookmarks.md
================================================
# Query History and Bookmarks

Now, you can see the history of all the SQL queries or dbt models you ran. So, you can re-run them to view and compare results to see how your data has changed between code changes. You can also look at the compiled SQL code of queries that were run previously.

Queries from the query history can also be bookmarked and tagged. So, you can reuse those queries next time you need to do a similar ad-hoc analysis.

Users can also share their query bookmarks with other users in your org-specific DataPilot SaaS instance. That way, you can have a shared repository of the most useful queries across the team.

/// admonition | Your VSCode session stores only the last 10 queries in the query history, and this info is stored locally on your machine and not in the SaaS instance.
    type: info
///

## View Query History

You can view query history in the "History" tab of the "Query History" panel. You can also search your query history for specific queries.

![Query History](images/queryHistory.png)<br>

## Execute Query from History

If you hover over the query from the history, you can perform a few actions, like executing the query (play icon) or bookmarking the query (bookmark icon). If you execute the query, the results are shown in the main code editor window as shown below:

![Execute History](images/executeHistory.png)<br>

/// admonition | In this way, you can [compare query results](https://docs.myaltimate.com/test/queryResults/#compare-query-results) between different runs of your query
    type: info
///

## Add Bookmark

If you execute some query frequently, you can also bookmark that query by clicking the bookmark button when you hover the query entry in the history.

![Bookmark Query](images/addBookmark.png)<br>

/// admonition | You can add tags to your queries for better organization. You can also search your bookmarks by text or by tags. Many users use tags to categorize queries based on a specific purpose or a project.
    type: tip
///

## Share Bookmark

You can share your bookmarks with other users in your Altimate AI instance so they can utilize those queries. When you share a bookmark, it's shared with all the users in "your" Altimate AI SaaS instance.

![Share Query](images/shareBookmark.png)<br>

## View Code

Query or bookmark code can be easily viewed by clicking on the query. Also, this code can be opened in the main code editor window by clicking on the icon as shown below:

![View Code](images/bookmarkCode.png)<br>

## Recorded Demo

<iframe width="560" height="315" src="https://www.youtube.com/embed/1TPAyE5EJ5Y?si=JQqP2cXIEu_AUvwU" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>

/// admonition | This feature requires an API key. You can get it by signing up for free at [www.altimate.ai](https://www.altimate.ai)
    type: info
///


================================================
FILE: documentation/docs/index.md
================================================
# Accelerate dbt and SQL Development by 3x


Welcome to the docs for [dbt Power User VSCode Extension](https://marketplace.visualstudio.com/items?itemName=innoverio.vscode-dbt-power-user), an [open sourced](https://github.com/AltimateAI/vscode-dbt-power-user) extension created by [Altimate AI](https://www.altimate.ai/).

It offers various features across three important phases of dbt and SQL work - develop, test, and collaborate.

<div class="html-in-md">

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Accelerate dbt and SQL Development by 3x</title>
    <style>
        .container {
            max-width: 1000px;
            margin: 0 auto;
            padding: 15px;
            background: linear-gradient(145deg, var(--bg-secondary), var(--bg-primary));
            border-radius: 20px;
            -webkit-background-clip: text;
            -webkit-text-fill-color: text;
            box-shadow: 0 10px 30px var(--shadow-color);
        }
        .workflow {
            display: flex;
            flex-direction: column;
            margin-bottom: 20px;
        }
        .steps {
            display: flex;
            justify-content: space-between;
            width: 100%;
            position: relative;
            margin-bottom: 20px;
        }
        .step {
            background: linear-gradient(135deg, var(--gradient-start), var(--gradient-end));
            font-size: 20px;
            padding: 10px;
            border-radius: 12px;
            text-align: center;
            z-index: 1;
            width: 45%;
            box-shadow: 0 4px 20px rgba(66, 133, 244, 0.3);
            transition: transform 0.3s ease, box-shadow 0.3s ease;
        }
        .step:hover {
            transform: translateY(-2px);
            box-shadow: 0 6px 20px rgba(66, 133, 244, 0.4);
        }
        .details {
            display: flex;
            justify-content: space-between;
            gap: 20px;
        }
        .column {
            width: 45%;
            padding: 10px;
            border-radius: 15px;
            background: transparent;
            position: relative; 
            border: 1px solid var(--border-color);
            box-shadow: 0 4px 15px var(--shadow-color);
            transition: transform 0.3s ease, box-shadow 0.3s ease;
        }
        .column:hover {
            transform: translateY(-2px);
            box-shadow: 0 6px 20px rgba(0, 0, 0, 0.1);
        }
        ul {
            /* padding-left: 20px;
            margin: 0; */
        }
        li {
            margin-bottom: 15px;
            position: relative;
            padding-left: 10px;
        }
        li:last-child {
            margin-bottom: 0;
        }
        a {
            color: var(--text-secondary);
            text-decoration: none;
            transition: color 0.3s ease;
            position: relative;
        }
        a:hover {
            color: var(--gradient-end);
        }
        a::after {
            content: '';
            position: absolute;
            width: 100%;
            height: 2px;
            bottom: -2px;
            left: 0;
            background: linear-gradient(90deg, var(--gradient-start), var(--gradient-end));
            transform: scaleX(0);
            transform-origin: right;
            transition: transform 0.3s ease;
        }
        a:hover::after {
            transform: scaleX(1);
            transform-origin: left;
        }
        .connecting-line {
            width: 3px;
            height: 20px;
            background: linear-gradient(180deg, var(--gradient-start), var(--gradient-end));
            margin: 0 auto;
            box-shadow: 0 2px 8px rgba(66, 133, 244, 0.2);
        }
    </style>
</head>
<body>
    <div class="container">        
        <div class="workflow">
            <div class="steps">
                <div class="arrow"></div>
                <div class="step">Develop</div>
                <div class="step">Test</div>
                <div class="step">Collaborate</div>
            </div>
        </div>
        <div class="details">
            <div class="column">
                <ul>
                    <li><a href="test/sqlvisualizer">SQL Visualizer</a></li>
                    <li><a href="develop/explanation">Query Explanation</a></li>
                    <li><a href="develop/genmodelsource">Auto-gen dbt from source</a></li>
                    <li><a href="develop/genmodelSQL">Auto-gen dbt from SQL</a> </li>
                    <li><a href="develop/autocomplete">Auto-complete code</a> </li>
                    <li><a href="develop/clicktorun"> Click to Run Models</a></li>
                    <li><a href="develop/translateSQL">Query Translation</a></li>
                    <li><a href="develop/compiledCode">Compiled SQL preview</a></li>
                </ul>
            </div>
            <div class="column">
                <ul>
                    <li><a href="test/queryResults">Preview query results and analysis</a></li>
                    <li><a href="test/writetests">Tests Generation</a></li>
                    <li><a href="test/lineage">Column lineage with code visibility</a></li>
                    <li><a href="test/defertoprod">Defer to prod</a></li>
                    <li><a href="test/sqlvalidation">SQL validation without execution</a></li>
                </ul>
            </div>
            <div class="column">
                <ul>
                    <li><a href="govern/collaboration">Collaboration workflows</a></li>
                    <li><a href="document/generatedoc">Documentation generation</a></li>
                    <li><a href="govern/governance">Project governance in IDE, Git, CI/CD</a></li>
                    <li><a href="discover/viewlineage">SaaS UI for dbt docs and lineage</a></li>
                    <li><a href="govern/querybookmarks">Query history and Query bookmarks</a></li>
                </ul>
            </div>
        </div>
    </div>
</body>
</html>

</div>

## Datamates with AI Teammates

The Power User extension is part of the Datamates Platform. Datamates Platform offers the functionality to automate and accelerate the work of data teams in various areas
of platform engineering, data engineering, and analytics engineering. Datamates Platform consists of many AI teammates to help data teams with their work. For example, there is a documentation generator teammate that's specifically developed to handle data documentation work.

These AI teammates are available as part of the power user extension to offer the functionality ranging from dbt models, docs, tests generation to SQL translation & explanation. AI teammates can be coached by you and personalized for your specific requirements. To learn more - please check this section on [coaching AI teammates](./teammates/coach.md).

<br>
## Feature Comparison

The dbt Power User Extension has great features out of the box. Add a free [Altimate api key](setup/reqdConfig.md#enable-saas-features-by-adding-api-key) to unlock all the features in "With Altimate AI Key" below.

<div class="html-in-md">
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Feature Comparison</title>
</head>
<body>
    <div class="container">        
        <div class="workflow">
            <div class="steps">
                <div class="arrow"></div>
                <div class="step">dbt Power Users Extension</div>
                <div class="step">With Altimate AI Key</div>
            </div>
        </div>
        <div class="details">
            <div class="column">
                <ul>
                    <li><a href="test/sqlvisualizer">SQL Visualizer</a></li>
                    <li><a href="test/lineage/#model-lineage">Data Lineage: Model Level </a></li>
                    <li><a href="develop/genmodelsource">Auto-gen dbt from source</a></li>
                    <li><a href="develop/autocomplete">Auto-complete code</a> </li>
                    <li><a href="develop/clicktorun">Click to Run Models</a></li>
                    <li><a href="develop/compiledCode">Compiled SQL preview</a></li>
                    <li><a href="test/queryResults">Preview query results and analysis</a></li>
                    <li><a href="test/defertoprod">Defer to prod</a></li>
                    <li><a href="test/sqlvalidation">SQL validation without execution</a></li>
                </ul>
            </div>
            <div class="column">
                <ul>
                    <li><a href="https://datamates-docs.myaltimate.com/user-guide/home/">Datamates</a></li> 
                    <li><a href="test/lineage/#column-lineage">Data Lineage: Column Level </a></li>
                    <li><a href="develop/explanation">Query Explanation AI</a></li>
                    <li><a href="develop/translateSQL">Query Translation AI</a></li>
                    <li><a href="develop/genmodelSQL">Auto-gen dbt from SQL</a> </li>
                    <li><a href="test/writetests">Tests Generation AI</a></li>
                    <li><a href="document/generatedoc">Documentation Generation AI</a></li>
                    <li><a href="teammates/coach">Coach & Personalize AI Teammates</a></li>
                    <li><a href="govern/collaboration#start-a-discussion">Code Collaboration</a></li>
                    <li><a href="govern/collaboration#start-a-discussion_1">Documentation Collaboration</a></li>
                    <li><a href="govern/collaboration#lineage-export-workflow">Data Lineage - Export</a></li>
                    <li><a href="govern/collaboration#view-lineage-in-saas">Data Lineage - SaaS UI</a></li>
                    <li><a href="govern/governance#configure-checks">Project Governance - VS Code </a></li>              
                    <li><a href="govern/governance#available-via-extension-python-package">Project Governance - CI/CD </a></li>              
                    <li><a href="govern/governance#saas-configuration-of-checks">Project Governance - SaaS UI</a></li>         
                    <li><a href="discover/viewlineage">dbt Docs - SaaS UI (dbt core or cloud)</a></li>
                    <li><a href="govern/querybookmarks">Query History</a></li>
                    <li><a href="govern/querybookmarks">Query Bookmarks</a></li>
                    <li><a href="govern/querybookmarks">Query Sharing</a></li>
                    
                </ul>
            </div>
        </div>
    </div>
</body>
</html>

</div>

## Support

Power user extension and Datamates Platform is developed and maintained by [Altimate AI team](https://www.altimate.ai).
Please join the dbt Community Slack Channel [#tools-dbt-power-user](https://getdbt.slack.com/archives/C05KPDGRMDW) to meet with the community of users of the extension.

If you run into issues, please [contact us](https://www.altimate.ai/support) via Slack or chat


================================================
FILE: documentation/docs/javascripts/feedback,js
================================================
var feedback = document.forms.feedback
feedback.addEventListener("submit", function(ev) {
  ev.preventDefault()

  /* Retrieve page and feedback value */
  var page = document.location.pathname
  var data = ev.submitter.getAttribute("data-md-value")

  /* Send feedback value */
  console.log(page, data)
})

================================================
FILE: documentation/docs/overrides/.gitkeep
================================================


================================================
FILE: documentation/docs/overrides/main.html
================================================
{% extends "base.html" %}

{% block announce %}
<strong>New!</strong> Altimate Code &mdash; #1 on ADE-Bench. 100+ deterministic tools for dbt &amp; SQL. <a href="/arch/llm-gateway/">10M tokens of Sonnet, Opus &amp; GPT-5 &mdash; free!</a> <a class="md-banner-cta" href="/teammates/altimate-code/">Get Started &rarr;</a>
{% endblock %}

{% block extrahead %}
  <!-- Start of Reo Javascript -->
  <script type="text/javascript">
    !function(){var e,t,n;e="e4fe6006f75148d",t=function(){Reo.init({clientID:"e4fe6006f75148d"})},(n=document.createElement("script")).src="https://static.reo.dev/"+e+"/reo.js",n.defer=!0,n.onload=t,document.head.appendChild(n)}();
  </script>
  <!-- End of Reo Javascript -->
{% endblock %}


================================================
FILE: documentation/docs/setup/configuration.md
================================================
# Configuration Settings

This page provides a comprehensive overview of all available configuration settings in the dbt Power User extension. The settings are organized by category for easy reference.

## Core Settings

### dbt Integration Settings

#### dbt.dbtIntegration

- **Type**: string
- **Default**: "core"
- **Options**: ["core", "cloud", "fusion", "corecommand"]
- **Description**: Choose how you want to integrate with dbt. Use "core" for local dbt installations with Python bridge, "cloud" for dbt Cloud integration, "fusion" for dbt Fusion CLI integration, or "corecommand" for command-line based dbt core integration. This setting determines how the extension interacts with your dbt environment.

#### dbt.dbtPythonPathOverride

- **Type**: string
- **Description**: Specify a custom path to your Python executable or entrypoint. This is useful when you need to use a specific Python environment different from the VS Code Python extension's default. Most users should leave this empty and configure their Python environment through the VS Code Python extension instead.

#### dbt.dbtCustomRunnerImport

- **Type**: string
- **Default**: "from dbt.cli.main import dbtRunner"
- **Description**: Customize the Python import statement used to import the dbt runner. This is only applicable when using dbt core integration. Useful when you have a custom dbt implementation or need to use a specific dbt runner class.

#### dbt.installDepsOnProjectInitialization

- **Type**: boolean
- **Default**: true
- **Description**: Controls whether the extension automatically runs dbt deps when initializing a project. When enabled, the extension will automatically install all package dependencies specified in your packages.yml file when you first open a dbt project.

## Project Configuration

#### dbt.allowListFolders

- **Type**: array of strings
- **Default**: []
- **Description**: Specify which folders in your workspace should be considered for dbt operations. This is particularly useful in monorepos or workspaces with multiple dbt projects. Paths should be relative to the workspace root.

#### dbt.deferConfigPerProject

- **Type**: object
- **Description**: Configure how the extension handles model dependencies across environments.
- **Properties**:
  - `deferToProduction`: boolean - When true, allows running models without rebuilding parent models
  - `manifestPathForDeferral`: string - Path to the manifest file containing parent model information
  - `favorState`: boolean - When true, uses the deferred state even if the model exists in both environments

## Command Settings

#### dbt.runModelCommandAdditionalParams

- **Type**: array of strings
- **Default**: []
- **Description**: Add extra command-line parameters to all dbt run commands. Each parameter must be a separate array entry.

#### dbt.buildModelCommandAdditionalParams

- **Type**: array of strings
- **Default**: []
- **Description**: Add extra command-line parameters to all dbt build commands. Similar to runModelCommandAdditionalParams, but specifically for build commands.

## Query Settings

#### dbt.queryLimit

- **Type**: integer
- **Default**: 500
- **Minimum**: 1
- **Description**: Controls the maximum number of rows returned when using the Preview SQL Query command.

#### dbt.queryTemplate

- **Type**: string
- **Default**: "select from ({query}\n) as query limit {limit}"
- **Description**: Customize how preview queries are constructed. The template must include {query} and {limit} placeholders.

## UI/Display Settings

#### dbt.perspectiveTheme

- **Type**: string
- **Default**: "Vintage"
- **Options**: ["Vintage", "Pro Light", "Pro Dark", "Vaporwave", "Solarized", "Solarized Dark", "Monokai"]
- **Description**: Choose the visual theme for the query results viewer.

## Model Generation Settings

#### dbt.fileNameTemplateGenerateModel

- **Type**: string
- **Default**: "{prefix}{sourceName}{tableName}"
- **Options**:
  - "{prefix}{sourceName}{tableName}"
  - "{prefix}{tableName}"
  - "{tableName}"
- **Description**: Define how new model filenames are generated when creating models from sources.

#### dbt.prefixGenerateModel

- **Type**: string
- **Default**: "base"
- **Description**: Set the default prefix used when generating new models from sources.

## SQL Formatting

#### dbt.sqlFmtPath

- **Type**: string
- **Description**: Specify the path to your SQL formatter executable (sqlfmt).

#### dbt.sqlFmtAdditionalParams

- **Type**: array of strings
- **Default**: []
- **Description**: Add extra parameters to the SQL formatting command.

## Altimate AI Integration

#### dbt.altimateAiKey

- **Type**: string
- **DisplayName**: "Altimate AI API Key"
- **Description**: Required for features that need backend support. Sign up for a free Altimate AI account at app.myaltimate.com/register.

#### dbt.altimateInstanceName

- **Type**: string
- **DisplayName**: "Altimate AI Instance Name"
- **Description**: The instance name for your Altimate AI account.

## Feature Toggles

#### dbt.enableNewLineagePanel

- **Type**: boolean
- **Description**: Enable or disable the new lineage panel in dbt.

#### dbt.enableCollaboration

- **Type**: boolean
- **Default**: true
- **Description**: Enable or disable the documentation collaboration features.

#### dbt.disableQueryHistory

- **Type**: boolean
- **Default**: false
- **Description**: Control whether the extension keeps track of your query history and bookmarks.

#### dbt.enableNotebooks

- **Type**: boolean
- **Default**: false
- **Description**: Enable or disable the Datapilot notebooks feature.

## Lineage Settings

#### dbt.lineage.showSelectEdges

- **Type**: boolean
- **Default**: true
- **Description**: Control the visibility of SELECT statement relationships in the lineage graph.

#### dbt.lineage.showNonSelectEdges

- **Type**: boolean
- **Default**: false
- **Description**: Control the visibility of non-SELECT relationships in the lineage graph.

#### dbt.lineage.defaultExpansion

- **Type**: number
- **Default**: 1
- **Description**: Set how many levels of relationships are automatically expanded when viewing the lineage graph.

## Other Settings

#### dbt.unquotedCaseInsensitiveIdentifierRegex

- **Type**: string
- **Description**: Define a regular expression pattern to identify unquoted identifiers in your SQL code.

#### dbt.conversationsPollingInterval

- **Type**: integer
- **Default**: 900
- **Minimum**: 30
- **Description**: Set how frequently (in seconds) the extension checks for new comments and conversations in documentation.


================================================
FILE: documentation/docs/setup/cursor_installation_workaround.md
================================================
# Cursor IDE: Installation Workaround

/// admonition | Known Cursor Issue
    type: warning

Some Cursor IDE users experience the dbt Power User extension installation freezing for several minutes, followed by a **"Failed to fetch"** error dialog. This is a **known issue on Cursor's side** and has been reported and acknowledged by the Cursor team. See the [Cursor forum thread](https://forum.cursor.com/t/dbt-power-user-extension-installation-freezes-with-repeated-extensionquery-requests-and-failed-to-fetch-error/149385/4) for details.

Until the Cursor team resolves this, please try the workarounds below.
///

## Problem

When installing the dbt Power User extension in Cursor IDE:

1. The installation **freezes for several minutes** with repeated `extensionQuery` requests.
2. An error dialog appears with a **"Failed to fetch"** message.
3. The extension fails to install through the normal marketplace flow.

---

## Workaround 1: Register extension metadata and reinstall

This workaround tricks Cursor into recognizing the extension entry, then lets you cleanly reinstall it.

**Step 1.** Open the Cursor extensions metadata file at:

| Platform | Path |
Download .txt
gitextract_u70y3h9w/

├── .eslintrc.json
├── .github/
│   ├── ISSUE_TEMPLATE/
│   │   ├── bug_report.yml
│   │   ├── config.yaml
│   │   ├── config.yml
│   │   ├── feature_request.yml
│   │   └── sweep-template.yml
│   ├── actions/
│   │   └── common-build/
│   │       └── action.yml
│   ├── dependabot.yml
│   ├── pull_request_template.md
│   ├── scripts/
│   │   ├── analyze-vsix.py
│   │   └── generate-bundle-report.py
│   └── workflows/
│       ├── ci.yml
│       ├── deploy-docs-to-s3.yaml
│       └── tests.yml
├── .gitignore
├── .gitpod.yml
├── .husky/
│   └── pre-commit
├── .mcp.json
├── .nycrc.json
├── .prettierignore
├── .prettierrc
├── .vscodeignore
├── CLAUDE.md
├── CONTRIBUTING.md
├── LICENSE
├── README.md
├── altimate_notebook_kernel.py
├── codecov.yml
├── docker-setup/
│   ├── Dockerfile
│   ├── README.md
│   ├── deploy.sh
│   ├── docker-compose.yml
│   └── start-code-server.sh
├── documentation/
│   ├── docs/
│   │   ├── arch/
│   │   │   ├── beta.md
│   │   │   ├── faq.md
│   │   │   ├── llm-gateway.md
│   │   │   └── pricingfaq.md
│   │   ├── develop/
│   │   │   ├── autocomplete.md
│   │   │   ├── clicktorun.md
│   │   │   ├── compiledCode.md
│   │   │   ├── explanation.md
│   │   │   ├── genmodelSQL.md
│   │   │   ├── genmodelSource.md
│   │   │   ├── translateSQL.md
│   │   │   └── updatemodel.md
│   │   ├── discover/
│   │   │   ├── setupui.md
│   │   │   ├── viewdocs.md
│   │   │   └── viewlineage.md
│   │   ├── document/
│   │   │   ├── docblocks.md
│   │   │   ├── generatedoc.md
│   │   │   └── write.md
│   │   ├── govern/
│   │   │   ├── collaboration.md
│   │   │   ├── governance.md
│   │   │   ├── multiproject.md
│   │   │   ├── notebooks.md
│   │   │   └── querybookmarks.md
│   │   ├── index.md
│   │   ├── javascripts/
│   │   │   └── feedback,js
│   │   ├── overrides/
│   │   │   ├── .gitkeep
│   │   │   └── main.html
│   │   ├── setup/
│   │   │   ├── configuration.md
│   │   │   ├── cursor_installation_workaround.md
│   │   │   ├── faq.md
│   │   │   ├── installation.md
│   │   │   ├── optConfig.md
│   │   │   ├── reqdConfig.md
│   │   │   ├── reqdConfigCloud.md
│   │   │   ├── reqdConfigFusion.md
│   │   │   └── sso.md
│   │   ├── studio.md
│   │   ├── stylesheets/
│   │   │   └── extra.css
│   │   ├── teammates/
│   │   │   ├── altimate-code.md
│   │   │   ├── coach.md
│   │   │   └── introduction.md
│   │   ├── test/
│   │   │   ├── adhocquery.md
│   │   │   ├── bigquerycost.md
│   │   │   ├── defertoprod.md
│   │   │   ├── lineage.md
│   │   │   ├── queryResults.md
│   │   │   ├── runctes.md
│   │   │   ├── runtests.md
│   │   │   ├── sqlvalidation.md
│   │   │   ├── sqlvisualizer.md
│   │   │   ├── utilities.md
│   │   │   └── writetests.md
│   │   └── troubleshooting.md
│   ├── mkdocs.yml
│   ├── readme.md
│   └── requirements.txt
├── jest.config.js
├── monitoring/
│   ├── README.md
│   ├── app.py
│   ├── github_issues/
│   │   ├── app.py
│   │   ├── requirements.txt
│   │   └── templates/
│   │       └── index.html
│   ├── requirements.txt
│   └── templates/
│       └── index.html
├── package.json
├── package.nls.json
├── postInstall.js
├── prepareBuild.js
├── rsbuild.config.ts
├── snippets/
│   ├── snippets_markdown.json
│   ├── snippets_sql.json
│   └── snippets_yaml.json
├── src/
│   ├── altimate.ts
│   ├── autocompletion_provider/
│   │   ├── docAutocompletionProvider.ts
│   │   ├── index.ts
│   │   ├── macroAutocompletionProvider.ts
│   │   ├── modelAutocompletionProvider.ts
│   │   ├── sourceAutocompletionProvider.ts
│   │   └── usercompletion_provider.ts
│   ├── code_lens_provider/
│   │   ├── cteCodeLensProvider.ts
│   │   ├── index.ts
│   │   ├── sourceModelCreationCodeLensProvider.ts
│   │   ├── sqlActionsCodeLensProvider.ts
│   │   └── virtualSqlCodeLensProvider.ts
│   ├── commands/
│   │   ├── altimateScan.ts
│   │   ├── bigQueryCostEstimate.ts
│   │   ├── index.ts
│   │   ├── runModel.ts
│   │   ├── runTest.ts
│   │   ├── sqlToModel.ts
│   │   ├── tests/
│   │   │   ├── initCatalog.ts
│   │   │   ├── missingSchemaTest.ts
│   │   │   ├── scanContext.ts
│   │   │   ├── staleModelColumnTest.ts
│   │   │   ├── step.ts
│   │   │   ├── undocumentedModelColumnTest.ts
│   │   │   └── unmaterializedModelTest.ts
│   │   ├── validateSql.ts
│   │   └── walkthroughCommands.ts
│   ├── comment_provider/
│   │   ├── conversationProvider.ts
│   │   └── index.ts
│   ├── content_provider/
│   │   ├── index.ts
│   │   └── sqlPreviewContentProvider.ts
│   ├── cte_profiler/
│   │   ├── cteProfilerDecorationProvider.ts
│   │   ├── cteProfilerService.ts
│   │   └── cteProfilerTypes.ts
│   ├── dbtPowerUserExtension.ts
│   ├── dbt_client/
│   │   ├── datapilot.ts
│   │   ├── dbtProject.ts
│   │   ├── dbtProjectContainer.ts
│   │   ├── dbtProjectLog.ts
│   │   ├── dbtVersionEvent.ts
│   │   ├── dbtWorkspaceFolder.ts
│   │   ├── event/
│   │   │   ├── manifestCacheChangedEvent.ts
│   │   │   ├── projectConfigChangedEvent.ts
│   │   │   └── runResultsEvent.ts
│   │   ├── index.ts
│   │   ├── pythonEnvironment.ts
│   │   ├── runtimePythonEnvironmentProvider.ts
│   │   ├── vscodeConfiguration.ts
│   │   └── vscodeTerminal.ts
│   ├── definition_provider/
│   │   ├── docDefinitionProvider.ts
│   │   ├── index.ts
│   │   ├── macroDefinitionProvider.ts
│   │   ├── modelDefinitionProvider.ts
│   │   └── sourceDefinitionProvider.ts
│   ├── document_formatting_edit_provider/
│   │   ├── dbtDocumentFormattingEditProvider.ts
│   │   └── index.ts
│   ├── extension.ts
│   ├── hover_provider/
│   │   ├── depthDecorationProvider.ts
│   │   ├── index.ts
│   │   ├── macroHoverProvider.ts
│   │   ├── modelHoverProvider.ts
│   │   ├── sourceHoverProvider.ts
│   │   ├── utils.ts
│   │   └── yamlModelHoverProvider.ts
│   ├── inversify.config.ts
│   ├── lib/
│   │   ├── index.d.ts
│   │   └── index.js
│   ├── mcp/
│   │   ├── index.ts
│   │   ├── server.ts
│   │   ├── types.ts
│   │   └── utils.ts
│   ├── modules.ts
│   ├── quickpick/
│   │   ├── actionsQuickPick.ts
│   │   ├── index.ts
│   │   ├── notebookQuickPick.ts
│   │   ├── projectQuickPick.ts
│   │   └── sqlQuickPick.ts
│   ├── services/
│   │   ├── altimateAuthService.ts
│   │   ├── altimateCodeChatService.ts
│   │   ├── conversationService.ts
│   │   ├── dbtLineageService.ts
│   │   ├── dbtTestService.ts
│   │   ├── diagnosticsOutputChannel.ts
│   │   ├── docGenService.ts
│   │   ├── fileService.ts
│   │   ├── queryAnalysisService.ts
│   │   ├── queryManifestService.ts
│   │   ├── runHistoryService.ts
│   │   ├── sharedStateService.ts
│   │   ├── streamingService.ts
│   │   └── usersService.ts
│   ├── statusbar/
│   │   ├── deferToProductionStatusBar.ts
│   │   ├── index.ts
│   │   ├── targetStatusBar.ts
│   │   └── versionStatusBar.ts
│   ├── telemetry/
│   │   ├── events.ts
│   │   └── index.ts
│   ├── test/
│   │   ├── common.ts
│   │   ├── fixtures/
│   │   │   ├── formatter/
│   │   │   │   ├── README.md
│   │   │   │   ├── add-trailing-newline.sql
│   │   │   │   ├── basic-select-reformat.sql
│   │   │   │   ├── delete-blank-lines.sql
│   │   │   │   ├── issue-1717-exact-reproducer.sql
│   │   │   │   ├── issue-1717-long-lines.sql
│   │   │   │   ├── jinja-source-long-line.sql
│   │   │   │   ├── long-line-split-to-multiple.sql
│   │   │   │   ├── multi-chunk-changes.sql
│   │   │   │   └── no-changes-needed.sql
│   │   │   └── runHistory.ts
│   │   ├── integration/
│   │   │   ├── formatter.test.ts
│   │   │   ├── helpers/
│   │   │   │   ├── fixtureLoader.ts
│   │   │   │   └── sqlfmtRunner.ts
│   │   │   ├── index.ts
│   │   │   ├── runHistoryTreeview.test.ts
│   │   │   └── runTests.ts
│   │   ├── mock/
│   │   │   ├── lib.ts
│   │   │   ├── node-fetch.ts
│   │   │   └── vscode.ts
│   │   ├── setup.ts
│   │   └── suite/
│   │       ├── altimate.test.ts
│   │       ├── commandProcessExecution.test.ts
│   │       ├── conversationProvider.test.ts
│   │       ├── coverage.ts
│   │       ├── cteCodeLensProvider.test.ts
│   │       ├── dbtCloudDetection.test.ts
│   │       ├── dbtCoreDetection.test.ts
│   │       ├── dbtCoreIntegration.test.ts
│   │       ├── dbtIntegration.test.ts
│   │       ├── dbtProject.test.ts
│   │       ├── dbtProjectContainer.test.ts
│   │       ├── dbtTerminal.test.ts
│   │       ├── dbtWorkspaceFolder.test.ts
│   │       ├── diagnosticsOutputChannel.test.ts
│   │       ├── extension.test.ts
│   │       ├── index.ts
│   │       ├── jinjaGrammar.test.ts
│   │       ├── jupyterlabServicesCompat.test.ts
│   │       ├── macroDefinitionProvider.test.ts
│   │       ├── mcpSchemaCompat.test.ts
│   │       ├── newLineagePanel.test.ts
│   │       ├── resolveSettingsVariables.test.ts
│   │       ├── runHistoryService.test.ts
│   │       ├── runHistoryTreeItems.test.ts
│   │       ├── runHistoryTreeviewProvider.test.ts
│   │       ├── runTest.test.ts
│   │       ├── runTest.ts
│   │       ├── runtimePythonEnvironmentProvider.test.ts
│   │       ├── testParser.test.ts
│   │       └── utils.test.ts
│   ├── treeview_provider/
│   │   ├── index.ts
│   │   ├── modelTreeviewProvider.ts
│   │   ├── runHistoryTreeItems.ts
│   │   └── runHistoryTreeviewProvider.ts
│   ├── types/
│   │   └── istanbul-lib-instrument.d.ts
│   ├── types.ts
│   ├── utils.ts
│   ├── validation_provider/
│   │   └── index.ts
│   └── webview_provider/
│       ├── DbtDocsView.ts
│       ├── altimateWebviewProvider.ts
│       ├── datapilotPanel.ts
│       ├── docsEditPanel.ts
│       ├── index.ts
│       ├── insightsPanel.ts
│       ├── lineagePanel.ts
│       ├── newDocsGenPanel.ts
│       ├── newLineagePanel.ts
│       ├── onboardingPanel.ts
│       ├── queryResultPanel.ts
│       └── sqlLineagePanel.ts
├── sweep.yaml
├── syntaxes/
│   ├── jinja-sql.tmLanguage.json
│   └── jinja-yaml.tmLanguage.json
├── test-fixtures/
│   ├── .gitignore
│   ├── dbt-core-sample-duckdb/
│   │   ├── .coveragerc
│   │   ├── .github/
│   │   │   ├── dependabot.yml
│   │   │   └── workflows/
│   │   │       ├── gosales_ci_pylint.yml
│   │   │       ├── gosales_ci_sonarcloud.yml
│   │   │       ├── gosales_ci_sqlfluff.yml
│   │   │       └── static.yml
│   │   ├── .sqlfluff
│   │   ├── .user.yml
│   │   ├── README.md
│   │   ├── SECURITY.md
│   │   ├── assets/
│   │   │   ├── go-sales-erd.drawio
│   │   │   └── hld-duckdb-dbt-sample.drawio
│   │   ├── coverage.xml
│   │   ├── dbt_project.yml
│   │   ├── macros/
│   │   │   ├── .gitkeep
│   │   │   ├── custom_schema.sql
│   │   │   ├── scd2_hash.sql
│   │   │   └── scd2_ts.sql
│   │   ├── models/
│   │   │   ├── 01-raw/
│   │   │   │   ├── t_raw_go_1k.py
│   │   │   │   ├── t_raw_go_1k.yml
│   │   │   │   ├── t_raw_go_daily_sales.py
│   │   │   │   ├── t_raw_go_daily_sales.yml
│   │   │   │   ├── t_raw_go_products.py
│   │   │   │   ├── t_raw_go_products.yml
│   │   │   │   ├── t_raw_go_retailers.py
│   │   │   │   └── t_raw_go_retailers.yml
│   │   │   ├── 02-stg/
│   │   │   │   ├── t_stg_go_1k.sql
│   │   │   │   ├── t_stg_go_1k.yml
│   │   │   │   ├── t_stg_go_daily_sales.sql
│   │   │   │   ├── t_stg_go_daily_sales.yml
│   │   │   │   ├── t_stg_go_methods.sql
│   │   │   │   ├── t_stg_go_methods.yml
│   │   │   │   ├── t_stg_go_products.sql
│   │   │   │   ├── t_stg_go_products.yml
│   │   │   │   ├── t_stg_go_retailers.sql
│   │   │   │   └── t_stg_go_retailers.yml
│   │   │   ├── 03-det/
│   │   │   │   ├── t_dim_dates.sql
│   │   │   │   ├── t_dim_dates.yml
│   │   │   │   ├── t_dim_order_methods.sql
│   │   │   │   ├── t_dim_order_methods.yml
│   │   │   │   ├── t_dim_products.sql
│   │   │   │   ├── t_dim_products.yml
│   │   │   │   ├── t_dim_retailers.sql
│   │   │   │   ├── t_dim_retailers.yml
│   │   │   │   ├── t_fct_sales.sql
│   │   │   │   └── t_fct_sales.yml
│   │   │   └── 04-mrt/
│   │   │       ├── t_mrt_sales.sql
│   │   │       └── t_mrt_sales.yml
│   │   ├── packages.yml
│   │   ├── profiles.yml
│   │   ├── requirements.txt
│   │   ├── seeds/
│   │   │   ├── ref_go_methods.csv
│   │   │   └── seeds.yml
│   │   ├── shared_utils/
│   │   │   ├── __init__.py
│   │   │   ├── config.py
│   │   │   └── db_utils.py
│   │   ├── snapshots/
│   │   │   └── .gitkeep
│   │   ├── sonar-project.properites
│   │   └── tests/
│   │       ├── .gitkeep
│   │       ├── test_config.py
│   │       ├── test_data.py
│   │       └── test_db_utils.py
│   └── jaffle-shop-duckdb/
│       ├── .devcontainer.json
│       ├── .github/
│       │   ├── CODEOWNERS
│       │   └── workflows/
│       │       └── validate_on_platforms.yml
│       ├── .gitignore
│       ├── .python-version
│       ├── .sqlfluff
│       ├── .sqlfluffignore
│       ├── Dockerfile
│       ├── LICENSE
│       ├── README.md
│       ├── RELEASE.md
│       ├── dbt-completion.bash
│       ├── dbt_project.yml
│       ├── etc/
│       │   └── dbdiagram_definition.txt
│       ├── models/
│       │   ├── customers.sql
│       │   ├── docs.md
│       │   ├── orders.sql
│       │   ├── overview.md
│       │   ├── schema.yml
│       │   └── staging/
│       │       ├── schema.yml
│       │       ├── stg_customers.sql
│       │       ├── stg_orders.sql
│       │       └── stg_payments.sql
│       ├── profiles.yml
│       ├── pyproject.toml
│       ├── requirements.txt
│       └── seeds/
│           ├── .gitkeep
│           ├── raw_customers.csv
│           ├── raw_orders.csv
│           └── raw_payments.csv
├── tsconfig.json
├── typings.d.ts
└── webview_panels/
    ├── .eslintrc.cjs
    ├── .gitignore
    ├── .storybook/
    │   ├── __mocks__/
    │   │   ├── crypto.ts
    │   │   └── vscode.ts
    │   ├── main.ts
    │   ├── preview-head.html
    │   └── preview.tsx
    ├── README.md
    ├── eslint/
    │   └── typescript.cjs
    ├── index.html
    ├── package.json
    ├── postcss.config.mjs
    ├── public/
    │   └── .gitkeep
    ├── src/
    │   ├── App.tsx
    │   ├── AppConstants.tsx
    │   ├── AppRoutes.tsx
    │   ├── NoMatch.tsx
    │   ├── _variables.scss
    │   ├── assets/
    │   │   └── icons/
    │   │       ├── Images.stories.tsx
    │   │       ├── index.tsx
    │   │       └── styles.css
    │   ├── lib/
    │   │   ├── altimate/
    │   │   │   ├── DbtDocsRenderer.js
    │   │   │   ├── altimate-components.d.ts
    │   │   │   ├── altimate-components.js
    │   │   │   ├── main.css
    │   │   │   └── main.js
    │   │   └── index.ts
    │   ├── main.scss
    │   ├── main.tsx
    │   ├── modules/
    │   │   ├── AutoCollapsingNotification/
    │   │   │   └── AutoCollapsingNotification.tsx
    │   │   ├── app/
    │   │   │   ├── AppProvider.tsx
    │   │   │   ├── appSlice.ts
    │   │   │   ├── indexedDb.ts
    │   │   │   ├── requestExecutor.ts
    │   │   │   ├── types.ts
    │   │   │   ├── useAppContext.ts
    │   │   │   └── useListeners.ts
    │   │   ├── bigQuery/
    │   │   │   └── CostEstimator.tsx
    │   │   ├── commonActionButtons/
    │   │   │   ├── CommonActionButtons.tsx
    │   │   │   ├── FeedbackButton.tsx
    │   │   │   └── HelpButton.tsx
    │   │   ├── dataPilot/
    │   │   │   ├── DataPilotHelp.tsx
    │   │   │   ├── DataPilotProvider.tsx
    │   │   │   ├── Datapilot.stories.tsx
    │   │   │   ├── DefaultDatapilotView.tsx
    │   │   │   ├── components/
    │   │   │   │   ├── common/
    │   │   │   │   │   ├── AskDatapilotInput.tsx
    │   │   │   │   │   ├── DatapilotChatFollowup.tsx
    │   │   │   │   │   ├── Header.tsx
    │   │   │   │   │   ├── UserQuery.tsx
    │   │   │   │   │   └── useAiGenerationUtils.ts
    │   │   │   │   ├── docGen/
    │   │   │   │   │   ├── AiDocActionButton.tsx
    │   │   │   │   │   ├── AiDocChat.tsx
    │   │   │   │   │   ├── DataPilotDocGen.stories.tsx
    │   │   │   │   │   ├── NewGenerationResults.tsx
    │   │   │   │   │   └── types.ts
    │   │   │   │   ├── queryAnalysis/
    │   │   │   │   │   ├── QueryAnalysis.stories.tsx
    │   │   │   │   │   ├── QueryAnalysis.tsx
    │   │   │   │   │   ├── QueryAnalysisActionButton.tsx
    │   │   │   │   │   ├── commands.ts
    │   │   │   │   │   ├── components/
    │   │   │   │   │   │   ├── QueryTranslateDialectSelects.tsx
    │   │   │   │   │   │   └── constants.ts
    │   │   │   │   │   ├── provider/
    │   │   │   │   │   │   ├── QueryAnalysisProvider.tsx
    │   │   │   │   │   │   ├── queryAnalysisSlice.ts
    │   │   │   │   │   │   ├── types.ts
    │   │   │   │   │   │   └── useQueryAnalysisContext.ts
    │   │   │   │   │   ├── types.ts
    │   │   │   │   │   └── useQueryAnalysisAction.ts
    │   │   │   │   └── test/
    │   │   │   │       ├── AddCustomTest.tsx
    │   │   │   │       └── Tests.stories.tsx
    │   │   │   ├── constants.tsx
    │   │   │   ├── dataPilotSlice.ts
    │   │   │   ├── datapilot.module.scss
    │   │   │   ├── index.tsx
    │   │   │   ├── types.ts
    │   │   │   └── useDataPilotContext.ts
    │   │   ├── dbtDocs/
    │   │   │   ├── DbtDocsView.tsx
    │   │   │   └── ShareDbtDocsButton.tsx
    │   │   ├── defer/
    │   │   │   ├── DeferToProduction.tsx
    │   │   │   ├── ManifestSelection.tsx
    │   │   │   ├── constants.ts
    │   │   │   ├── defer.module.scss
    │   │   │   └── types.ts
    │   │   ├── documentationEditor/
    │   │   │   ├── DocumentationEditor.stories.tsx
    │   │   │   ├── DocumentationEditor.tsx
    │   │   │   ├── DocumentationProvider.tsx
    │   │   │   ├── components/
    │   │   │   │   ├── conversation/
    │   │   │   │   │   ├── AddCoversationButton.tsx
    │   │   │   │   │   ├── ConversationsRightPanel.tsx
    │   │   │   │   │   └── ShowConversationsButton.tsx
    │   │   │   │   ├── docGenerator/
    │   │   │   │   │   ├── BulkGenerateButton.tsx
    │   │   │   │   │   ├── Citations.tsx
    │   │   │   │   │   ├── CoachAi.tsx
    │   │   │   │   │   ├── CoachAiIfModified.tsx
    │   │   │   │   │   ├── DocBlockInserter.module.scss
    │   │   │   │   │   ├── DocBlockInserter.tsx
    │   │   │   │   │   ├── DocGenSelectedColumns.tsx
    │   │   │   │   │   ├── DocGeneratorColumn.tsx
    │   │   │   │   │   ├── DocGeneratorColumnsList.tsx
    │   │   │   │   │   ├── DocGeneratorInput.tsx
    │   │   │   │   │   ├── GenerateButton.tsx
    │   │   │   │   │   ├── SyncWithDatabase.tsx
    │   │   │   │   │   ├── coachAi.module.scss
    │   │   │   │   │   ├── constants.ts
    │   │   │   │   │   ├── docGenInput.module.scss
    │   │   │   │   │   └── generateAll.module.scss
    │   │   │   │   ├── documentationPropagation/
    │   │   │   │   │   ├── DocumentationPropagation.tsx
    │   │   │   │   │   └── styles.module.scss
    │   │   │   │   ├── help/
    │   │   │   │   │   ├── DocumentationHelpContent.tsx
    │   │   │   │   │   └── TestsHelpContent.tsx
    │   │   │   │   ├── model/
    │   │   │   │   │   └── Options.tsx
    │   │   │   │   ├── result/
    │   │   │   │   │   ├── DocGenerationResult.tsx
    │   │   │   │   │   ├── DocumentationResult.stories.tsx
    │   │   │   │   │   └── DocumentationResult.tsx
    │   │   │   │   ├── saveDocumentation/
    │   │   │   │   │   └── SaveDocumentation.tsx
    │   │   │   │   ├── score/
    │   │   │   │   │   ├── Score.stories.tsx
    │   │   │   │   │   ├── Score.tsx
    │   │   │   │   │   └── styles.module.scss
    │   │   │   │   ├── search/
    │   │   │   │   │   └── SearchColumnsInput.tsx
    │   │   │   │   ├── settings/
    │   │   │   │   │   └── DocGeneratorSettings.tsx
    │   │   │   │   ├── telemetry/
    │   │   │   │   │   └── index.ts
    │   │   │   │   └── tests/
    │   │   │   │       ├── AddTest.tsx
    │   │   │   │       ├── CustomTestButton.tsx
    │   │   │   │       ├── DbtTestCode.tsx
    │   │   │   │       ├── DisplayTestDetails.tsx
    │   │   │   │       ├── EntityWithTests.tsx
    │   │   │   │       ├── Test.tsx
    │   │   │   │       ├── TestDetails.tsx
    │   │   │   │       ├── forms/
    │   │   │   │       │   ├── AcceptedValues.tsx
    │   │   │   │       │   ├── Relationships.tsx
    │   │   │   │       │   └── TestForm.tsx
    │   │   │   │       ├── hooks/
    │   │   │   │       │   └── useTestFormSave.ts
    │   │   │   │       ├── types.ts
    │   │   │   │       └── utils.ts
    │   │   │   ├── state/
    │   │   │   │   ├── documentationSlice.ts
    │   │   │   │   ├── types.ts
    │   │   │   │   └── useDocumentationContext.ts
    │   │   │   ├── styles.module.scss
    │   │   │   ├── types.ts
    │   │   │   └── utils.ts
    │   │   ├── feedback/
    │   │   │   ├── ResultFeedbackButtons.tsx
    │   │   │   └── types.ts
    │   │   ├── healthCheck/
    │   │   │   ├── IssueDetail.tsx
    │   │   │   ├── IssueList.tsx
    │   │   │   ├── ProjectHealthChecker.tsx
    │   │   │   ├── ProjectHealthNewCheckButton.tsx
    │   │   │   ├── healthcheck.module.scss
    │   │   │   └── types.ts
    │   │   ├── home/
    │   │   │   └── Home.tsx
    │   │   ├── insights/
    │   │   │   ├── Insights.stories.tsx
    │   │   │   ├── Insights.tsx
    │   │   │   ├── components/
    │   │   │   │   └── help/
    │   │   │   │       ├── HelpButton.tsx
    │   │   │   │       └── HelpContent.tsx
    │   │   │   └── insights.module.scss
    │   │   ├── lineage/
    │   │   │   ├── ActionWidget.tsx
    │   │   │   ├── Demo.tsx
    │   │   │   ├── LineageView.tsx
    │   │   │   ├── MissingLineageMessage.tsx
    │   │   │   ├── components/
    │   │   │   │   ├── demo/
    │   │   │   │   │   └── DemoButton.tsx
    │   │   │   │   └── help/
    │   │   │   │       ├── HelpButton.tsx
    │   │   │   │       └── HelpContent.tsx
    │   │   │   ├── lineage.module.scss
    │   │   │   ├── tailwind-globals.css
    │   │   │   └── types.ts
    │   │   ├── logger/
    │   │   │   └── index.ts
    │   │   ├── markdown/
    │   │   │   ├── PreTag.tsx
    │   │   │   ├── Renderer.tsx
    │   │   │   └── markdown.module.scss
    │   │   ├── newFeature/
    │   │   │   └── NewFeatureIndicator.tsx
    │   │   ├── notebooks/
    │   │   │   ├── DeleteNotebookButton.tsx
    │   │   │   ├── NoNotebooks.tsx
    │   │   │   ├── NotebookPrivacySettingButton.tsx
    │   │   │   ├── Notebooks.tsx
    │   │   │   ├── NotebooksList.tsx
    │   │   │   ├── notebooklist.module.scss
    │   │   │   └── types.ts
    │   │   ├── onboarding/
    │   │   │   ├── AltimateSetupStep.tsx
    │   │   │   ├── DbtIntegrationSetup.tsx
    │   │   │   ├── InstallDbtStep.tsx
    │   │   │   ├── Onboarding.tsx
    │   │   │   ├── PrerequisitesStep.tsx
    │   │   │   ├── ProjectSetupStep.tsx
    │   │   │   ├── SetupWizard.tsx
    │   │   │   ├── TutorialsStep.tsx
    │   │   │   └── onboarding.module.scss
    │   │   ├── previewFeature/
    │   │   │   ├── PreviewFeatureIcon.tsx
    │   │   │   └── tooltip.module.scss
    │   │   ├── queryPanel/
    │   │   │   ├── QueryPanel.stories.tsx
    │   │   │   ├── QueryPanel.tsx
    │   │   │   ├── QueryPanelDefaultView.tsx
    │   │   │   ├── QueryPanelProvider.tsx
    │   │   │   ├── components/
    │   │   │   │   ├── QueryPanelContents/
    │   │   │   │   │   ├── QueryPanelContent.tsx
    │   │   │   │   │   ├── QueryPanelError.tsx
    │   │   │   │   │   ├── QueryPanelLoader.tsx
    │   │   │   │   │   ├── QueryPanelTitle.tsx
    │   │   │   │   │   └── types.ts
    │   │   │   │   ├── clearResultsButton/
    │   │   │   │   │   └── ClearResultsButton.tsx
    │   │   │   │   ├── filters/
    │   │   │   │   │   └── Filters.tsx
    │   │   │   │   ├── help/
    │   │   │   │   │   ├── HelpButton.tsx
    │   │   │   │   │   └── HelpContent.tsx
    │   │   │   │   ├── openInTabButton/
    │   │   │   │   │   └── OpenInTabButton.tsx
    │   │   │   │   ├── perspective/
    │   │   │   │   │   ├── PerspectiveErrorBoundary.tsx
    │   │   │   │   │   ├── PerspectivePlugins.ts
    │   │   │   │   │   ├── PerspectiveViewer.stories.tsx
    │   │   │   │   │   ├── PerspectiveViewer.tsx
    │   │   │   │   │   ├── perspective.d.ts
    │   │   │   │   │   ├── perspective.module.scss
    │   │   │   │   │   ├── perspective.scss
    │   │   │   │   │   └── themes.css
    │   │   │   │   ├── queryLimit/
    │   │   │   │   │   ├── QueryLimit.tsx
    │   │   │   │   │   └── styles.module.scss
    │   │   │   │   ├── queryPanelBookmarks/
    │   │   │   │   │   ├── BookmarkAccordion.tsx
    │   │   │   │   │   ├── BookmarkButton.tsx
    │   │   │   │   │   ├── BookmarkPrivacySettingButton.tsx
    │   │   │   │   │   ├── DeleteBookmarkButton.tsx
    │   │   │   │   │   ├── QueryBookmarkRow.tsx
    │   │   │   │   │   ├── QueryPanelBookmarks.tsx
    │   │   │   │   │   └── utils.ts
    │   │   │   │   ├── queryPanelQueryHistory/
    │   │   │   │   │   ├── ExecuteQueryButton.tsx
    │   │   │   │   │   ├── QueryHistoryRow.tsx
    │   │   │   │   │   └── QueryPanelHistory.tsx
    │   │   │   │   └── runAdhocQueryButton/
    │   │   │   │       ├── NewNotebook.tsx
    │   │   │   │       └── RunAdhocQueryButton.tsx
    │   │   │   ├── constants.ts
    │   │   │   ├── context/
    │   │   │   │   ├── queryPanelSlice.ts
    │   │   │   │   └── types.ts
    │   │   │   ├── querypanel.module.scss
    │   │   │   ├── useQueryPanelCommonActions.ts
    │   │   │   ├── useQueryPanelListeners.ts
    │   │   │   └── useQueryPanelState.ts
    │   │   └── vscode/
    │   │       └── index.ts
    │   ├── notebook/
    │   │   ├── index.tsx
    │   │   ├── renderer.module.scss
    │   │   └── renderer.tsx
    │   ├── testUtils/
    │   │   ├── conversations/
    │   │   │   └── index.ts
    │   │   ├── datapilot/
    │   │   │   ├── docGen.ts
    │   │   │   ├── index.ts
    │   │   │   ├── queryAnalysis.ts
    │   │   │   └── test.ts
    │   │   ├── documentation/
    │   │   │   └── index.ts
    │   │   ├── index.ts
    │   │   ├── queryResults/
    │   │   │   └── index.ts
    │   │   └── users/
    │   │       └── index.ts
    │   ├── uiCore/
    │   │   ├── components/
    │   │   │   ├── accordion/
    │   │   │   │   ├── Accordion.tsx
    │   │   │   │   └── accordion.module.scss
    │   │   │   ├── avatar/
    │   │   │   │   ├── Avatar.tsx
    │   │   │   │   └── styles.module.scss
    │   │   │   ├── button/
    │   │   │   │   └── Button.tsx
    │   │   │   ├── codeblock/
    │   │   │   │   ├── codeblock.module.scss
    │   │   │   │   └── index.tsx
    │   │   │   ├── drawer/
    │   │   │   │   ├── index.tsx
    │   │   │   │   └── styles.module.scss
    │   │   │   ├── dropdown/
    │   │   │   │   ├── Dropdown.tsx
    │   │   │   │   └── dropdown.module.scss
    │   │   │   ├── dropdownButton/
    │   │   │   │   ├── DropdownButton.tsx
    │   │   │   │   └── styles.module.scss
    │   │   │   ├── iconButton/
    │   │   │   │   ├── IconButton.tsx
    │   │   │   │   └── styles.module.scss
    │   │   │   ├── loader/
    │   │   │   │   ├── index.tsx
    │   │   │   │   └── styles.module.scss
    │   │   │   ├── loadingButton/
    │   │   │   │   ├── index.tsx
    │   │   │   │   └── loadingButton.module.scss
    │   │   │   ├── popoverWithButton/
    │   │   │   │   ├── PopoverWithButton.tsx
    │   │   │   │   └── styles.module.scss
    │   │   │   ├── select/
    │   │   │   │   ├── index.tsx
    │   │   │   │   └── select.module.scss
    │   │   │   ├── stack/
    │   │   │   │   ├── Stack.tsx
    │   │   │   │   └── stack.module.scss
    │   │   │   ├── tabs/
    │   │   │   │   ├── Tabs.tsx
    │   │   │   │   └── tabs.module.scss
    │   │   │   ├── tag/
    │   │   │   │   ├── Tag.tsx
    │   │   │   │   └── tag.module.scss
    │   │   │   └── tooltip/
    │   │   │       └── Tooltip.tsx
    │   │   ├── index.ts
    │   │   ├── theme.scss
    │   │   └── uiToolkitStories/
    │   │       ├── Colors.stories.tsx
    │   │       ├── Components.stories.tsx
    │   │       └── Typography.stories.tsx
    │   └── vite-env.d.ts
    ├── tailwind.config.ts
    ├── tsconfig.json
    ├── tsconfig.node.json
    ├── vite.config.renderer.ts
    └── vite.config.ts
Download .txt
Showing preview only (235K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (3650 symbols across 256 files)

FILE: .github/scripts/analyze-vsix.py
  function categorize (line 35) | def categorize(filename):
  function main (line 42) | def main():

FILE: .github/scripts/generate-bundle-report.py
  function format_size (line 16) | def format_size(bytes_val):
  function main (line 22) | def main():

FILE: altimate_notebook_kernel.py
  class CustomDecoder (line 7) | class CustomDecoder(json.JSONDecoder):
    method __init__ (line 8) | def __init__(self, *args, **kwargs):
    method object_hook (line 10) | def object_hook(self, obj):
  class JupyterKernelExecutor (line 30) | class JupyterKernelExecutor:
    method __init__ (line 31) | def __init__(self):
    method execute (line 49) | def execute(self, code, user_expressions=None):
    method shutdown (line 101) | def shutdown(self):
  class AltimateNotebookKernel (line 107) | class AltimateNotebookKernel:
    method __init__ (line 108) | def __init__(self, doc_uri):
    method get_session_id (line 119) | def get_session_id(self):
    method close_notebook (line 122) | def close_notebook(self):
    method get_connection_file (line 132) | def get_connection_file(self):
    method initialize_kernel_executor (line 135) | def initialize_kernel_executor(self):
    method shutdown_kernel_executor (line 145) | def shutdown_kernel_executor(self):
    method get_sql_result_by_cell (line 152) | def get_sql_result_by_cell(self, cell_id):
    method store_sql_result (line 156) | def store_sql_result(self, cell_id, result):
    method execute_python (line 172) | def execute_python(self, code):
    method delete_cell (line 186) | def delete_cell(self, cell_id):
    method destroy_instance (line 197) | def destroy_instance(self):

FILE: monitoring/app.py
  function get_client (line 28) | def get_client() -> LogsQueryClient:
  function run_query (line 35) | def run_query(kql: str, days: int) -> list[dict]:
  function dim_filter (line 61) | def dim_filter(key: str, value: str) -> str:
  function get_params (line 68) | def get_params() -> tuple[int, str, str]:
  function index (line 78) | def index():
  function api_versions (line 83) | def api_versions():
  function api_summary (line 98) | def api_summary():
  function api_trend (line 124) | def api_trend():
  function api_top_errors (line 140) | def api_top_errors():
  function api_by_mode (line 164) | def api_by_mode():
  function api_by_platform (line 180) | def api_by_platform():
  function api_by_version (line 200) | def api_by_version():
  function api_unhandled (line 216) | def api_unhandled():
  function api_details (line 250) | def api_details():
  function api_stack_analysis (line 289) | def api_stack_analysis():

FILE: monitoring/github_issues/app.py
  function _github_headers (line 47) | def _github_headers() -> dict:
  function _fetch_all_issues (line 55) | def _fetch_all_issues() -> list[dict]:
  function load_issues (line 95) | def load_issues(force: bool = False) -> list[dict]:
  function _parse (line 111) | def _parse(s: str | None) -> datetime | None:
  function _now (line 117) | def _now() -> datetime:
  function _get_params (line 125) | def _get_params() -> tuple[int, str, str, str]:
  function _apply_filters (line 133) | def _apply_filters(
  function index (line 154) | def index():
  function api_refresh (line 159) | def api_refresh():
  function api_filter_options (line 167) | def api_filter_options():
  function api_summary (line 184) | def api_summary():
  function api_trend (line 224) | def api_trend():
  function api_labels (line 268) | def api_labels():
  function api_age_buckets (line 286) | def api_age_buckets():
  function api_time_to_close (line 319) | def api_time_to_close():
  function api_milestones (line 360) | def api_milestones():
  function api_attention (line 387) | def api_attention():
  function api_details (line 436) | def api_details():
  function api_ai_themes (line 484) | def api_ai_themes():

FILE: postInstall.js
  function createJupyterKernelWithoutSerialization (line 13) | function createJupyterKernelWithoutSerialization() {
  function downloadZmqBinaries (line 53) | async function downloadZmqBinaries() {
  function installAltimateCoreAllPlatforms (line 71) | async function installAltimateCoreAllPlatforms() {
  function getZeroMQPreBuildsFoldersToKeep (line 183) | function getZeroMQPreBuildsFoldersToKeep(vsceTarget) {
  function pruneZeromqPrebuilds (line 225) | function pruneZeromqPrebuilds() {

FILE: prepareBuild.js
  function getZeroMQPreBuildsFoldersToKeep (line 4) | function getZeroMQPreBuildsFoldersToKeep() {
  function shouldCopyFileFromZmqFolder (line 55) | function shouldCopyFileFromZmqFolder(resourcePath) {
  function deleteUnnecessaryZeromqPrebuilts (line 118) | async function deleteUnnecessaryZeromqPrebuilts() {
  function getAltimateCorePackagesToKeep (line 152) | function getAltimateCorePackagesToKeep() {
  function deleteUnnecessaryAltimateCorePackages (line 173) | function deleteUnnecessaryAltimateCorePackages() {

FILE: rsbuild.config.ts
  constant DIST (line 5) | const DIST = path.resolve(__dirname, "dist");
  method setup (line 9) | setup(api) {

FILE: src/altimate.ts
  class UserInputError (line 14) | class UserInputError extends Error {}
  type ColumnLineage (line 16) | interface ColumnLineage {
  type Schemas (line 24) | interface Schemas {
  type ModelNode (line 28) | type ModelNode = {
  type ModelInfo (line 38) | type ModelInfo = {
  type DBTColumnLineageRequest (line 44) | interface DBTColumnLineageRequest {
  type DBTColumnLineageResponse (line 56) | interface DBTColumnLineageResponse {
  type SQLLineageRequest (line 63) | interface SQLLineageRequest {
  type SqlLineageDetails (line 70) | type SqlLineageDetails = Record<
  type SqlLineageResponse (line 81) | type SqlLineageResponse = {
  type SQLToModelRequest (line 87) | interface SQLToModelRequest {
  type DBTProjectHealthConfig (line 94) | interface DBTProjectHealthConfig {
  type DBTProjectHealthConfigResponse (line 103) | interface DBTProjectHealthConfigResponse {
  type SQLToModelResponse (line 107) | interface SQLToModelResponse {
  type NotebooksResponse (line 111) | interface NotebooksResponse {
  type AddNotebookRequest (line 115) | interface AddNotebookRequest {
  type UpdateNotebookRequest (line 122) | interface UpdateNotebookRequest {
  type OnewayFeedback (line 129) | interface OnewayFeedback {
  type QueryAnalysisType (line 136) | enum QueryAnalysisType {
  type QueryAnalysisChatType (line 143) | enum QueryAnalysisChatType {
  type QueryAnalysisChat (line 148) | interface QueryAnalysisChat {
  type QueryTranslateRequest (line 154) | interface QueryTranslateRequest {
  type QueryTranslateExplanationRequest (line 160) | interface QueryTranslateExplanationRequest {
  type DbtModel (line 167) | interface DbtModel {
  type QueryBookmark (line 179) | interface QueryBookmark {
  type QueryAnalysisRequest (line 190) | interface QueryAnalysisRequest {
  type CreateDbtTestRequest (line 198) | interface CreateDbtTestRequest {
  type DocsGenerateModelRequestV2 (line 205) | interface DocsGenerateModelRequestV2 {
  type DocsGenerateResponse (line 223) | interface DocsGenerateResponse {
  type DBTCoreIntegrationEnvironment (line 233) | interface DBTCoreIntegrationEnvironment {
  type SyncHistoryItem (line 239) | interface SyncHistoryItem {
  type DBTCoreIntegration (line 245) | interface DBTCoreIntegration {
  type DBTCoreIntegrationWithSync (line 256) | interface DBTCoreIntegrationWithSync extends DBTCoreIntegration {
  type TenantUser (line 260) | interface TenantUser {
  type FeedbackResponse (line 276) | interface FeedbackResponse {
  type BulkDocsPropRequest (line 280) | interface BulkDocsPropRequest {
  type SharedDoc (line 285) | interface SharedDoc {
  type Conversation (line 293) | interface Conversation {
  type ConversationGroup (line 300) | interface ConversationGroup {
  class AltimateRequest (line 321) | class AltimateRequest {
    method constructor (line 322) | constructor(
    method getAltimateUrl (line 329) | public getAltimateUrl(): string {
    method internalFetch (line 333) | private async internalFetch(url: string, init?: RequestInit) {
    method getInstanceName (line 337) | getInstanceName() {
    method getAIKey (line 341) | getAIKey() {
    method enabled (line 345) | public enabled(): boolean {
    method fetchAsStream (line 349) | async fetchAsStream<R>(
    method uploadToS3 (line 363) | async uploadToS3(
    method throwIfLocalMode (line 371) | private throwIfLocalMode(endpoint: string) {
    method fetch (line 402) | async fetch<T>(
    method isAuthenticated (line 429) | async isAuthenticated() {
    method generateModelDocsV2 (line 440) | async generateModelDocsV2(docsGenerate: DocsGenerateModelRequestV2) {
    method sendFeedback (line 447) | async sendFeedback(feedback: OnewayFeedback) {
    method getColumnLevelLineage (line 454) | async getColumnLevelLineage(req: DBTColumnLineageRequest) {
    method runModeller (line 461) | async runModeller(req: SQLToModelRequest) {
    method validateCredentials (line 468) | async validateCredentials(instance: string, key: string, baseUrl?: str...
    method createDbtIntegration (line 503) | async createDbtIntegration(
    method checkApiConnectivity (line 543) | async checkApiConnectivity() {
    method fetchProjectIntegrations (line 562) | async fetchProjectIntegrations() {
    method fetchProjectIntegrationWithSync (line 566) | async fetchProjectIntegrationWithSync(
    method getHealthcheckConfigs (line 575) | async getHealthcheckConfigs() {
    method logDBTHealthcheckConfig (line 581) | async logDBTHealthcheckConfig(configId: string) {
    method logDBTHealthcheckStartScan (line 585) | async logDBTHealthcheckStartScan() {
    method getDatapilotVersion (line 589) | async getDatapilotVersion(extension_version: string) {
    method getUsersInTenant (line 595) | async getUsersInTenant() {
    method getCurrentUser (line 599) | async getCurrentUser() {
    method getAllSharedDbtDocs (line 603) | async getAllSharedDbtDocs(projectNames: string[]) {
    method getAppUrlByShareId (line 611) | async getAppUrlByShareId(shareId: SharedDoc["share_id"]) {
    method addConversationToGroup (line 620) | async addConversationToGroup(
    method createConversationGroup (line 636) | async createConversationGroup(
    method resolveConversation (line 649) | async resolveConversation(
    method loadConversationsByShareId (line 659) | async loadConversationsByShareId(shareId: SharedDoc["share_id"]) {
    method createDbtDocsShare (line 665) | async createDbtDocsShare(
    method verifyDbtDocsUpload (line 686) | async verifyDbtDocsUpload(share_id: number) {
    method getQueryBookmarks (line 695) | async getQueryBookmarks() {
    method sqlLineage (line 699) | async sqlLineage(req: SQLLineageRequest) {
    method bulkDocsPropCredit (line 706) | async bulkDocsPropCredit(req: BulkDocsPropRequest) {
    method getPreConfiguredNotebooks (line 713) | async getPreConfiguredNotebooks() {
    method getNotebooks (line 722) | async getNotebooks(
    method addNotebook (line 737) | async addNotebook(req: AddNotebookRequest) {
    method deleteNotebook (line 744) | async deleteNotebook(id: number) {
    method updateNotebook (line 750) | async updateNotebook(id: number, req: UpdateNotebookRequest) {
    method updateNotebookPrivacy (line 757) | async updateNotebookPrivacy(id: number, privacy: string) {
    method trackBulkTestGen (line 767) | async trackBulkTestGen(sessionId: string) {

FILE: src/autocompletion_provider/docAutocompletionProvider.ts
  class DocAutocompletionProvider (line 19) | class DocAutocompletionProvider
    method constructor (line 27) | constructor(
    method dispose (line 38) | dispose() {
    method provideCompletionItems (line 47) | provideCompletionItems(
    method onManifestCacheChanged (line 72) | private onManifestCacheChanged(event: ManifestCacheChangedEvent): void {
    method showDocNameAutocompletionItems (line 86) | private showDocNameAutocompletionItems(projectRootpath: Uri) {

FILE: src/autocompletion_provider/index.ts
  class AutocompletionProviders (line 9) | class AutocompletionProviders implements Disposable {
    method constructor (line 12) | constructor(
    method dispose (line 57) | dispose() {

FILE: src/autocompletion_provider/macroAutocompletionProvider.ts
  class MacroAutocompletionProvider (line 20) | class MacroAutocompletionProvider
    method constructor (line 26) | constructor(
    method dispose (line 37) | dispose() {
    method provideCompletionItems (line 46) | provideCompletionItems(
    method onManifestCacheChanged (line 59) | private onManifestCacheChanged(event: ManifestCacheChangedEvent): void {

FILE: src/autocompletion_provider/modelAutocompletionProvider.ts
  class ModelAutocompletionProvider (line 21) | class ModelAutocompletionProvider
    method constructor (line 37) | constructor(
    method dispose (line 48) | dispose() {
    method provideCompletionItems (line 57) | provideCompletionItems(
    method onManifestCacheChanged (line 138) | private onManifestCacheChanged(event: ManifestCacheChangedEvent): void {

FILE: src/autocompletion_provider/sourceAutocompletionProvider.ts
  class SourceAutocompletionProvider (line 20) | class SourceAutocompletionProvider
    method constructor (line 33) | constructor(
    method dispose (line 44) | dispose() {
    method provideCompletionItems (line 53) | provideCompletionItems(
    method onManifestCacheChanged (line 89) | private onManifestCacheChanged(event: ManifestCacheChangedEvent): void {
    method showSourceNameAutocompletionItems (line 115) | private showSourceNameAutocompletionItems(projectRootpath: Uri) {
    method showTableNameAutocompletionItems (line 119) | private showTableNameAutocompletionItems(

FILE: src/autocompletion_provider/usercompletion_provider.ts
  class UserCompletionProvider (line 11) | class UserCompletionProvider
    method constructor (line 16) | constructor(private usersService: UsersService) {}
    method dispose (line 18) | dispose() {
    method provideCompletionItems (line 27) | provideCompletionItems(): ProviderResult<

FILE: src/code_lens_provider/cteCodeLensProvider.ts
  type CteInfo (line 12) | interface CteInfo {
  class CteCodeLensProvider (line 20) | class CteCodeLensProvider implements CodeLensProvider, Disposable {
    method constructor (line 36) | constructor(
    method dispose (line 41) | dispose() {
    method provideCodeLenses (line 50) | public provideCodeLenses(
    method detectCtes (line 114) | private detectCtes(document: TextDocument): CteInfo[] {
    method findWithKeywords (line 213) | private findWithKeywords(text: string): number[] {
    method handleSqlStringLiteral (line 263) | private handleSqlStringLiteral(
    method handleSqlComment (line 309) | private handleSqlComment(text: string, pos: number): number {
    method isPositionInsideComment (line 393) | private isPositionInsideComment(content: string, position: number): bo...
    method findCteIdentifiersOnly (line 480) | private findCteIdentifiersOnly(
    method validateCteMatchWithComments (line 535) | private validateCteMatchWithComments(
    method findWithClauseEnd (line 595) | private findWithClauseEnd(text: string, withStartPos: number): number {
    method extractCtesFromWithClause (line 672) | private extractCtesFromWithClause(
    method findMatchingClosingParen (line 758) | private findMatchingClosingParen(text: string, openParenPos: number): ...

FILE: src/code_lens_provider/index.ts
  class CodeLensProviders (line 9) | class CodeLensProviders implements Disposable {
    method constructor (line 11) | constructor(
    method dispose (line 51) | dispose() {

FILE: src/code_lens_provider/sourceModelCreationCodeLensProvider.ts
  type Position (line 13) | interface Position {
  type GenerateModelFromSourceParams (line 17) | interface GenerateModelFromSourceParams {
  class SourceModelCreationCodeLensProvider (line 26) | class SourceModelCreationCodeLensProvider implements CodeLensProvider {
    method provideCodeLenses (line 32) | public provideCodeLenses(

FILE: src/code_lens_provider/sqlActionsCodeLensProvider.ts
  type GitChange (line 20) | interface GitChange {
  type GitRepoState (line 24) | interface GitRepoState {
  type GitRepository (line 30) | interface GitRepository {
  type GitAPI (line 34) | interface GitAPI {
  class SqlActionsCodeLensProvider (line 39) | class SqlActionsCodeLensProvider
    method constructor (line 48) | constructor(private altimateCodeChatService: AltimateCodeChatService) {
    method initGitWatcher (line 82) | private initGitWatcher() {
    method watchGitState (line 94) | private watchGitState() {
    method attachRepoWatcher (line 113) | private attachRepoWatcher(repo: GitRepository) {
    method updateChangedFiles (line 132) | private updateChangedFiles(repo: GitRepository) {
    method provideCodeLenses (line 148) | provideCodeLenses(
    method provideSqlCodeLenses (line 158) | private provideSqlCodeLenses(document: TextDocument): CodeLens[] {
    method provideYamlCodeLenses (line 200) | private provideYamlCodeLenses(document: TextDocument): CodeLens[] {
    method dispose (line 276) | dispose() {

FILE: src/code_lens_provider/virtualSqlCodeLensProvider.ts
  class VirtualSqlCodeLensProvider (line 15) | class VirtualSqlCodeLensProvider
    method constructor (line 20) | constructor(
    method dispose (line 26) | dispose() {
    method getProjectName (line 35) | private getProjectName() {
    method provideCodeLenses (line 47) | public provideCodeLenses(

FILE: src/commands/altimateScan.ts
  class AltimateScan (line 19) | class AltimateScan {
    method constructor (line 25) | constructor(
    method onManifestCacheChanged (line 55) | private async onManifestCacheChanged(event: ManifestCacheChangedEvent) {
    method clearProblems (line 64) | async clearProblems() {
    method getProblems (line 81) | async getProblems() {
    method runSteps (line 117) | async runSteps(scanContext: ScanContext) {
    method initCatalog (line 146) | public async initCatalog(scanContext: ScanContext): Promise<void> {
    method showDiagnostics (line 157) | showDiagnostics(scanContext: ScanContext) {

FILE: src/commands/bigQueryCostEstimate.ts
  class BigQueryCostEstimate (line 10) | class BigQueryCostEstimate {
    method constructor (line 11) | constructor(
    method estimateCost (line 18) | async estimateCost({ returnResult }: { returnResult?: boolean }) {
    method getProject (line 75) | private getProject() {

FILE: src/commands/index.ts
  class VSCodeCommands (line 67) | class VSCodeCommands implements Disposable {
    method constructor (line 70) | constructor(
    method printProjectInfo (line 1245) | private async printProjectInfo(project: DBTProject) {
    method runSelectedQuery (line 1332) | private runSelectedQuery(uri: Uri, range: Range): void {
    method runCteWithDependencies (line 1355) | private async runCteWithDependencies(
    method quoteSqlIdentifier (line 1510) | private quoteSqlIdentifier(identifier: string): string {
    method generateShortHash (line 1524) | private generateShortHash(input: string): string {
    method dispose (line 1535) | dispose() {

FILE: src/commands/runModel.ts
  class RunModel (line 9) | class RunModel {
    method constructor (line 10) | constructor(private dbtProjectContainer: DBTProjectContainer) {}
    method runModelOnActiveWindow (line 12) | runModelOnActiveWindow(type?: RunModelType) {
    method buildModelOnActiveWindow (line 20) | buildModelOnActiveWindow(type?: RunModelType) {
    method runTestsOnActiveWindow (line 28) | runTestsOnActiveWindow() {
    method compileModelOnActiveWindow (line 36) | compileModelOnActiveWindow() {
    method compileQueryOnActiveWindow (line 44) | compileQueryOnActiveWindow() {
    method getQuery (line 55) | private getQuery() {
    method executeQueryOnActiveWindow (line 65) | executeQueryOnActiveWindow() {
    method runModelOnNodeTreeItem (line 77) | runModelOnNodeTreeItem(type: RunModelType) {
    method showCompiledSQLOnActiveWindow (line 113) | showCompiledSQLOnActiveWindow() {
    method generateSchemaYMLOnActiveWindow (line 119) | generateSchemaYMLOnActiveWindow() {
    method showRunSQLOnActiveWindow (line 125) | showRunSQLOnActiveWindow() {
    method generateDBTDocsOnActiveWindow (line 132) | generateDBTDocsOnActiveWindow() {
    method runDBTModel (line 139) | runDBTModel(modelPath: Uri, type?: RunModelType) {
    method buildDBTModel (line 143) | buildDBTModel(modelPath: Uri, type?: RunModelType) {
    method compileDBTModel (line 147) | compileDBTModel(modelPath: Uri, type?: RunModelType) {
    method generateDBTDocs (line 151) | generateDBTDocs(modelPath: Uri, type?: RunModelType) {
    method compileDBTQuery (line 155) | compileDBTQuery(modelPath: Uri, query: string) {
    method runDBTTest (line 159) | runDBTTest(modelPath: Uri, testName: string) {
    method runDBTModelTest (line 163) | runDBTModelTest(modelPath: Uri) {
    method executeSQL (line 168) | async executeSQL(uri: Uri, query: string, modelName: string) {
    method showCompiledSQL (line 172) | showCompiledSQL(modelPath: Uri) {
    method generateSchemaYML (line 176) | generateSchemaYML(modelPath: Uri) {
    method showRunSQL (line 181) | showRunSQL(modelPath: Uri) {
    method createModelBasedonSourceConfig (line 185) | createModelBasedonSourceConfig(params: GenerateModelFromSourceParams) {

FILE: src/commands/runTest.ts
  class RunTest (line 17) | class RunTest {
    method constructor (line 18) | constructor(
    method getSingularTestName (line 34) | getSingularTestName(uri: Uri): string | undefined {
    method runSingularTest (line 52) | runSingularTest(uri: Uri, testName: string): void {
    method runSingularTestOnActiveWindowIfApplicable (line 62) | runSingularTestOnActiveWindowIfApplicable(): boolean {

FILE: src/commands/sqlToModel.ts
  class SqlToModel (line 15) | class SqlToModel {
    method constructor (line 17) | constructor(
    method onManifestCacheChanged (line 30) | private async onManifestCacheChanged(event: ManifestCacheChangedEvent) {
    method getModelFromSql (line 39) | async getModelFromSql() {

FILE: src/commands/tests/initCatalog.ts
  class InitCatalog (line 5) | class InitCatalog implements AltimateScanStep {
    method run (line 6) | public async run(scanContext: ScanContext) {

FILE: src/commands/tests/missingSchemaTest.ts
  class MissingSchemaTest (line 6) | class MissingSchemaTest implements AltimateScanStep {
    method run (line 7) | public async run(scanContext: ScanContext) {

FILE: src/commands/tests/scanContext.ts
  type AltimateCatalog (line 6) | interface AltimateCatalog {
  class ScanContext (line 9) | class ScanContext {
    method constructor (line 16) | constructor(

FILE: src/commands/tests/staleModelColumnTest.ts
  class StaleModelColumnTest (line 8) | class StaleModelColumnTest implements AltimateScanStep {
    method getTextLocation (line 9) | private getTextLocation(
    method run (line 53) | public async run(scanContext: ScanContext) {

FILE: src/commands/tests/step.ts
  type AltimateScanStep (line 3) | interface AltimateScanStep {

FILE: src/commands/tests/undocumentedModelColumnTest.ts
  class UndocumentedModelColumnTest (line 6) | class UndocumentedModelColumnTest implements AltimateScanStep {
    method run (line 7) | public async run(scanContext: ScanContext) {

FILE: src/commands/tests/unmaterializedModelTest.ts
  class UnmaterializedModelTest (line 5) | class UnmaterializedModelTest implements AltimateScanStep {
    method run (line 6) | public async run(scanContext: ScanContext) {

FILE: src/commands/validateSql.ts
  class ValidateSql (line 30) | class ValidateSql {
    method constructor (line 33) | constructor(
    method onManifestCacheChanged (line 46) | private async onManifestCacheChanged(event: ManifestCacheChangedEvent) {
    method showError (line 55) | private showError(exc: unknown) {
    method validateSql (line 87) | async validateSql() {
    method getProject (line 260) | private getProject() {
    method getEvent (line 268) | private getEvent(): ManifestCacheProjectAddedEvent | undefined {

FILE: src/commands/walkthroughCommands.ts
  type PromptAnswer (line 20) | enum PromptAnswer {
  type DbtInstallationPromptAnswer (line 25) | enum DbtInstallationPromptAnswer {
  class WalkthroughCommands (line 31) | class WalkthroughCommands {
    method constructor (line 32) | constructor(
    method validateProjects (line 42) | async validateProjects(
    method installDeps (line 97) | async installDeps(
    method installDbt (line 144) | async installDbt(): Promise<void> {
    method installDbtFusion (line 162) | private async installDbtFusion(): Promise<void> {
    method installDbtCloud (line 222) | private async installDbtCloud(): Promise<void> {
    method installDbtCore (line 272) | private async installDbtCore(): Promise<void> {
    method mapToAdapterPackage (line 371) | private mapToAdapterPackage(adapter: string): string {

FILE: src/comment_provider/conversationProvider.ts
  type ConversationCommentThread (line 36) | interface ConversationCommentThread extends CommentThread {
  class ConversationComment (line 42) | class ConversationComment implements Comment {
    method constructor (line 46) | constructor(
  constant ALLOWED_FILE_EXTENSIONS (line 60) | const ALLOWED_FILE_EXTENSIONS = [".sql"];
  class ConversationProvider (line 61) | class ConversationProvider implements Disposable {
    method constructor (line 72) | constructor(
    method isCollaborationEnabled (line 124) | private isCollaborationEnabled() {
    method setupPolling (line 138) | private setupPolling() {
    method loadThreads (line 154) | private async loadThreads() {
    method addContextValue (line 322) | private addContextValue(thread: ConversationCommentThread) {
    method convertTextFromDbToCommentFormat (line 332) | private convertTextFromDbToCommentFormat(text: string) {
    method convertTextToDbFormat (line 337) | private convertTextToDbFormat(text: string) {
    method addComment (line 341) | private addComment(reply: CommentReply) {
    method copyThreadLink (line 359) | async copyThreadLink(thread: ConversationCommentThread) {
    method viewInDocEditor (line 381) | async viewInDocEditor(thread: ConversationCommentThread) {
    method viewInDbtDocs (line 409) | async viewInDbtDocs(thread: ConversationCommentThread) {
    method getNodeMeta (line 434) | private getNodeMeta(uri: Uri, resourceName: string) {
    method createCommentThread (line 469) | createCommentThread(uri: Uri, range: Range) {
    method saveConversation (line 473) | async saveConversation(
    method createConversation (line 570) | async createConversation(
    method replyToConversation (line 631) | async replyToConversation(reply: CommentReply) {
    method resolveConversation (line 678) | async resolveConversation(commentThread: ConversationCommentThread) {
    method dispose (line 715) | dispose() {

FILE: src/comment_provider/index.ts
  class CommentProviders (line 4) | class CommentProviders implements Disposable {
    method constructor (line 6) | constructor(private conversationProvider: ConversationProvider) {
    method dispose (line 10) | dispose() {

FILE: src/content_provider/index.ts
  class ContentProviders (line 4) | class ContentProviders implements Disposable {
    method constructor (line 7) | constructor(private sqlPreviewContentProvider: SqlPreviewContentProvid...
    method dispose (line 16) | dispose() {

FILE: src/content_provider/sqlPreviewContentProvider.ts
  class SqlPreviewContentProvider (line 17) | class SqlPreviewContentProvider
    method constructor (line 27) | constructor(
    method dispose (line 87) | dispose(): void {
    method onDidChange (line 98) | get onDidChange(): Event<Uri> {
    method provideTextDocumentContent (line 102) | provideTextDocumentContent(uri: Uri): string | Thenable<string> {
    method requestCompilation (line 116) | private async requestCompilation(uri: Uri) {

FILE: src/cte_profiler/cteProfilerDecorationProvider.ts
  class CteProfilerDecorationProvider (line 17) | class CteProfilerDecorationProvider implements Disposable {
    method constructor (line 25) | constructor(
    method dispose (line 77) | dispose() {
    method toggle (line 89) | toggle(): void {
    method updateDecorations (line 96) | private updateDecorations(editor: TextEditor): void {
  function formatProfileText (line 197) | function formatProfileText(timeMs: number, rows: number): string {
  function formatTime (line 201) | function formatTime(timeMs: number): string {
  function formatRows (line 208) | function formatRows(rows: number): string {
  function tierToThemeColor (line 218) | function tierToThemeColor(tier: CteProfileEntry["tier"]): string {

FILE: src/cte_profiler/cteProfilerService.ts
  class CteProfilerService (line 17) | class CteProfilerService implements Disposable {
    method constructor (line 27) | constructor(
    method dispose (line 33) | dispose() {
    method getResult (line 43) | getResult(uri: string): CteProfileResult | undefined {
    method isRunning (line 47) | get isRunning(): boolean {
    method profileModel (line 51) | async profileModel(
    method cancel (line 200) | cancel(): void {
    method clearResults (line 207) | clearResults(): void {
    method buildCountQuery (line 212) | private buildCountQuery(
    method stripColumnList (line 263) | private stripColumnList(rawName: string): string {
    method extractRowCount (line 270) | private extractRowCount(data: Record<string, unknown>[]): number {
    method classifyTiers (line 278) | private classifyTiers(entries: CteProfileEntry[]): CteProfileEntry[] {
    method quoteSqlIdentifier (line 302) | private quoteSqlIdentifier(identifier: string): string {
    method extractModelName (line 312) | private extractModelName(uri: Uri): string {

FILE: src/cte_profiler/cteProfilerTypes.ts
  type CteProfileEntry (line 1) | interface CteProfileEntry {
  type CteProfileResult (line 10) | interface CteProfileResult {

FILE: src/dbtPowerUserExtension.ts
  type PromptAnswer (line 20) | enum PromptAnswer {
  class DBTPowerUserExtension (line 25) | class DBTPowerUserExtension implements Disposable {
    method constructor (line 45) | constructor(
    method dispose (line 85) | dispose() {
    method activate (line 94) | async activate(context: ExtensionContext): Promise<void> {

FILE: src/dbt_client/datapilot.ts
  class AltimateDatapilot (line 10) | class AltimateDatapilot {
    method constructor (line 12) | constructor(
    method getWorkspaceFolder (line 22) | private getWorkspaceFolder() {
    method checkIfAltimateDatapilotInstalled (line 27) | async checkIfAltimateDatapilotInstalled(): Promise<string> {
    method installAltimateDatapilot (line 49) | async installAltimateDatapilot(datapilotVersion: string) {

FILE: src/dbt_client/dbtProject.ts
  type FileNameTemplateMap (line 83) | interface FileNameTemplateMap {
  type JsonObj (line 87) | interface JsonObj {
  class DBTProject (line 91) | class DBTProject implements Disposable {
    method constructor (line 131) | constructor(
    method initializePythonEnvironmentListener (line 310) | private initializePythonEnvironmentListener(): void {
    method isDbtLoomInstalled (line 328) | private async isDbtLoomInstalled(): Promise<boolean> {
    method stampCloudVariantOnTelemetry (line 342) | private stampCloudVariantOnTelemetry(): void {
    method invalidateCacheUsingUniqueIds (line 354) | private invalidateCacheUsingUniqueIds(uniqueIds: string[]) {
    method getProjectName (line 362) | getProjectName() {
    method getProjectRoot (line 366) | getProjectRoot() {
    method getSelectedTarget (line 370) | getSelectedTarget() {
    method getTargetNames (line 374) | getTargetNames() {
    method setSelectedTarget (line 378) | async setSelectedTarget(targetName: string) {
    method getDBTProjectFilePath (line 389) | getDBTProjectFilePath() {
    method getTargetPath (line 393) | getTargetPath() {
    method getPackageInstallPath (line 397) | getPackageInstallPath() {
    method getModelPaths (line 401) | getModelPaths() {
    method getSeedPaths (line 405) | getSeedPaths() {
    method getMacroPaths (line 409) | getMacroPaths() {
    method getManifestPath (line 413) | getManifestPath() {
    method getCatalogPath (line 421) | getCatalogPath() {
    method getPythonBridgeStatus (line 429) | getPythonBridgeStatus() {
    method getAllDiagnostic (line 433) | getAllDiagnostic(): Diagnostic[] {
    method mapSeverityToVSCode (line 489) | private mapSeverityToVSCode(severity: string): DiagnosticSeverity {
    method convertDiagnosticDataToVSCode (line 504) | private convertDiagnosticDataToVSCode(data: DBTDiagnosticData): Diagno...
    method updateDiagnosticsInProblemsPanel (line 517) | updateDiagnosticsInProblemsPanel(): void {
    method performDatapilotHealthcheck (line 547) | async performDatapilotHealthcheck(args: DataPilotHealtCheckParams) {
    method initialize (line 608) | async initialize(): Promise<void> {
    method rebuildManifest (line 637) | async rebuildManifest(): Promise<void> {
    method onPythonEnvironmentChanged (line 641) | private async onPythonEnvironmentChanged() {
    method refreshProjectConfig (line 651) | async refreshProjectConfig(): Promise<void> {
    method parseManifest (line 655) | async parseManifest(): Promise<ParsedManifest | undefined> {
    method getAdapterType (line 659) | getAdapterType() {
    method findPackageName (line 663) | findPackageName(uri: Uri): string | undefined {
    method contains (line 675) | contains(uri: Uri) {
    method runModel (line 682) | async runModel(runModelParams: RunModelParams) {
    method unsafeRunModelImmediately (line 702) | async unsafeRunModelImmediately(runModelParams: RunModelParams) {
    method buildModel (line 707) | async buildModel(runModelParams: RunModelParams) {
    method unsafeBuildModelImmediately (line 727) | async unsafeBuildModelImmediately(runModelParams: RunModelParams) {
    method buildProject (line 734) | async buildProject() {
    method unsafeBuildProjectImmediately (line 756) | async unsafeBuildProjectImmediately() {
    method runTest (line 761) | async runTest(testName: string) {
    method unsafeRunTestImmediately (line 781) | async unsafeRunTestImmediately(testName: string) {
    method runModelTest (line 786) | async runModelTest(modelName: string) {
    method unsafeRunModelTestImmediately (line 808) | async unsafeRunModelTestImmediately(modelName: string) {
    method handleNoCredentialsError (line 813) | private handleNoCredentialsError(error: unknown) {
    method validateIntegrationPrerequisites (line 821) | private validateIntegrationPrerequisites(): boolean {
    method requiresAuthentication (line 860) | private requiresAuthentication(): boolean {
    method throwIfNotAuthenticated (line 867) | throwIfNotAuthenticated() {
    method compileModel (line 873) | async compileModel(runModelParams: RunModelParams) {
    method unsafeCompileModelImmediately (line 890) | async unsafeCompileModelImmediately(runModelParams: RunModelParams) {
    method unsafeGenerateDocsImmediately (line 897) | async unsafeGenerateDocsImmediately(args?: string[]) {
    method generateDocs (line 901) | async generateDocs() {
    method clean (line 918) | clean() {
    method debug (line 924) | debug(focus: boolean = true) {
    method installDbtPackages (line 929) | async installDbtPackages(packages: string[]) {
    method installDeps (line 934) | async installDeps(silent = false) {
    method compileNode (line 939) | async compileNode(modelName: string): Promise<string | undefined> {
    method unsafeCompileNode (line 977) | async unsafeCompileNode(modelName: string): Promise<string | undefined> {
    method validateSql (line 984) | async validateSql(request: {
    method validateSQLDryRun (line 1002) | async validateSQLDryRun(query: string) {
    method getDBTVersion (line 1017) | getDBTVersion(): number[] | undefined {
    method compileQuery (line 1021) | async compileQuery(
    method showCompiledSql (line 1054) | showCompiledSql(modelPath: Uri) {
    method showRunSQL (line 1058) | showRunSQL(modelPath: Uri) {
    method createYMLContent (line 1062) | createYMLContent(
    method unsafeCompileQuery (line 1074) | async unsafeCompileQuery(
    method getColumnsOfModel (line 1085) | async getColumnsOfModel(modelName: string) {
    method getColumnsOfSource (line 1093) | async getColumnsOfSource(sourceName: string, tableName: string) {
    method getColumnValues (line 1103) | async getColumnValues(model: string, column: string) {
    method getBulkSchemaFromDB (line 1136) | async getBulkSchemaFromDB(req: DBTNode[], signal: AbortSignal) {
    method getCatalog (line 1151) | async getCatalog(): Promise<Catalog> {
    method generateSchemaYML (line 1183) | async generateSchemaYML(modelPath: Uri, modelName: string) {
    method generateModel (line 1231) | async generateModel(
    method executeSQLOnQueryPanel (line 1336) | async executeSQLOnQueryPanel(query: string, modelName: string) {
    method executeSQLWithLimitOnQueryPanel (line 1343) | async executeSQLWithLimitOnQueryPanel(
    method immediatelyExecuteSQLWithLimit (line 1370) | async immediatelyExecuteSQLWithLimit(
    method executeSQLWithLimit (line 1388) | async executeSQLWithLimit(query: string, modelName: string, limit: num...
    method immediatelyExecuteSQL (line 1402) | async immediatelyExecuteSQL(
    method executeSQL (line 1418) | executeSQL(query: string, modelName: string): Promise<QueryExecution> {
    method dispose (line 1429) | async dispose() {
    method findModelInTargetfolder (line 1438) | private async findModelInTargetfolder(modelPath: Uri, type: string) {
    method isResourceNode (line 1460) | static isResourceNode(resourceType: string): boolean {
    method isResourceHasDbColumns (line 1464) | static isResourceHasDbColumns(resourceType: string): boolean {
    method getNonEphemeralParents (line 1468) | getNonEphemeralParents(keys: string[]): string[] {
    method getChildrenModels (line 1472) | getChildrenModels({ table }: { table: string }): Table[] {
    method getParentModels (line 1476) | getParentModels({ table }: { table: string }): Table[] {
    method mergeColumnsFromDB (line 1480) | mergeColumnsFromDB(
    method findPackageVersion (line 1522) | public findPackageVersion(packageName: string) {
    method getBulkCompiledSql (line 1532) | async getBulkCompiledSql(models: string[]) {
    method getNodesWithDBColumns (line 1547) | async getNodesWithDBColumns(modelsToFetch: string[], signal: AbortSign...
    method applyDeferConfig (line 1722) | async applyDeferConfig(): Promise<void> {
    method throwDiagnosticsErrorIfAvailable (line 1727) | throwDiagnosticsErrorIfAvailable() {
    method retrieveDeferConfigFromSettings (line 1762) | private retrieveDeferConfigFromSettings(): DeferConfig | undefined {
    method getDeferConfig (line 1785) | getDeferConfig(): DeferConfig {
    method createQueue (line 1792) | private createQueue(queueName: string) {
    method addCommandToQueue (line 1796) | private addCommandToQueue(queueName: string, command: DBTCommand): void {
    method pickCommandToRun (line 1809) | private async pickCommandToRun(queueName: string): Promise<void> {
    method getCurrentProjectIntegration (line 1857) | private getCurrentProjectIntegration(): DBTProjectIntegration {

FILE: src/dbt_client/dbtProjectContainer.ts
  type PromptAnswer (line 33) | enum PromptAnswer {
  type ProjectRegisteredUnregisteredEvent (line 38) | interface ProjectRegisteredUnregisteredEvent {
  type DBTProjectsInitializationEvent (line 44) | interface DBTProjectsInitializationEvent {}
  class DBTProjectContainer (line 46) | class DBTProjectContainer implements Disposable {
    method constructor (line 70) | constructor(
    method setContext (line 109) | setContext(context: ExtensionContext) {
    method showErrorIfDbtOrPythonNotInstalled (line 113) | showErrorIfDbtOrPythonNotInstalled() {
    method showErrorIfDbtIsNotInstalled (line 117) | showErrorIfDbtIsNotInstalled() {
    method initializeDBTProjects (line 121) | async initializeDBTProjects(): Promise<void> {
    method showWalkthrough (line 132) | async showWalkthrough() {
    method initializeWalkthrough (line 149) | async initializeWalkthrough() {
    method extensionUri (line 170) | get extensionUri() {
    method extensionVersion (line 174) | get extensionVersion() {
    method setToWorkspaceState (line 178) | setToWorkspaceState(key: string, value: any) {
    method getFromWorkspaceState (line 181) | getFromWorkspaceState(key: string): any {
    method setToGlobalState (line 184) | setToGlobalState(key: string, value: any) {
    method getFromGlobalState (line 188) | getFromGlobalState(key: string): any {
    method extensionId (line 192) | get extensionId(): string {
    method pythonInstalled (line 196) | get pythonInstalled(): boolean {
    method dbtInstalled (line 200) | get dbtInstalled(): boolean {
    method detectDBT (line 214) | async detectDBT(): Promise<void> {
    method reinitialize (line 218) | async reinitialize(): Promise<void> {
    method initialize (line 238) | async initialize() {
    method executeSQL (line 242) | executeSQL(uri: Uri, query: string, modelName: string): void {
    method runModel (line 254) | runModel(modelPath: Uri, type?: RunModelType) {
    method buildModel (line 260) | buildModel(modelPath: Uri, type?: RunModelType) {
    method buildProject (line 266) | buildProject(modelPath: Uri, type?: RunModelType) {
    method runTest (line 270) | runTest(modelPath: Uri, testName: string) {
    method runModelTest (line 274) | runModelTest(modelPath: Uri, modelName: string) {
    method runModelByName (line 278) | runModelByName(projectUri: Uri, modelName: string) {
    method compileModel (line 286) | compileModel(modelPath: Uri, type?: RunModelType) {
    method generateDocs (line 292) | generateDocs(modelPath: Uri) {
    method compileQuery (line 296) | compileQuery(modelPath: Uri, query: string) {
    method showRunSQL (line 300) | showRunSQL(modelPath: Uri) {
    method showCompiledSQL (line 304) | showCompiledSQL(modelPath: Uri) {
    method generateSchemaYML (line 308) | generateSchemaYML(modelPath: Uri, modelName: string) {
    method findDBTProject (line 312) | findDBTProject(uri: Uri): DBTProject | undefined {
    method getProjects (line 316) | getProjects(): DBTProject[] {
    method findProjectByName (line 322) | findProjectByName(projectName: string): DBTProject | undefined {
    method rerunFromHistory (line 328) | rerunFromHistory(entry: RunResultsEventData): void {
    method parseHistoryArgs (line 381) | private parseHistoryArgs(args: string[]): RunModelParams {
    method getAdapters (line 392) | getAdapters(): string[] {
    method getPythonEnvironment (line 402) | getPythonEnvironment() {
    method dispose (line 406) | dispose() {
    method createModelParams (line 418) | private createModelParams(modelPath: Uri, type?: RunModelType) {
    method registerWorkspaceFolder (line 438) | private async registerWorkspaceFolder(
    method unregisterWorkspaceFolder (line 475) | private unregisterWorkspaceFolder(workspaceFolder: WorkspaceFolder): v...
    method findDBTWorkspaceFolder (line 487) | private findDBTWorkspaceFolder(uri: Uri): DBTWorkspaceFolder | undefin...
    method checkIfAltimateDatapilotInstalled (line 491) | async checkIfAltimateDatapilotInstalled() {
    method installAltimateDatapilot (line 499) | async installAltimateDatapilot() {
    method executeAltimateDatapilotHealthcheck (line 507) | executeAltimateDatapilotHealthcheck(args: DataPilotHealtCheckParams) {

FILE: src/dbt_client/dbtProjectLog.ts
  class DBTProjectLog (line 15) | class DBTProjectLog implements Disposable {
    method constructor (line 24) | constructor(onProjectConfigChanged: Event<ProjectConfigChangedEvent>) {
    method onProjectConfigChanged (line 30) | private onProjectConfigChanged(event: ProjectConfigChangedEvent) {
    method readLogFileFromLastPosition (line 61) | private readLogFileFromLastPosition(event: ProjectConfigChangedEvent):...
    method dispose (line 102) | public dispose() {

FILE: src/dbt_client/dbtVersionEvent.ts
  type DBTInstallationVerificationEvent (line 1) | interface DBTInstallationVerificationEvent {

FILE: src/dbt_client/dbtWorkspaceFolder.ts
  class DBTWorkspaceFolder (line 33) | class DBTWorkspaceFolder implements Disposable {
    method constructor (line 44) | constructor(
    method getAllowListFolders (line 64) | getAllowListFolders() {
    method retryWithBackoff (line 88) | private async retryWithBackoff<T>(
    method discoverProjects (line 122) | async discoverProjects() {
    method findDBTProject (line 203) | findDBTProject(uri: Uri): DBTProject | undefined {
    method getProjects (line 207) | getProjects(): DBTProject[] {
    method contains (line 211) | contains(uri: Uri) {
    method getAdapters (line 221) | getAdapters(): string[] {
    method dispose (line 229) | dispose() {
    method registerDBTProject (line 239) | private async registerDBTProject(uri: Uri) {
    method unregisterDBTProject (line 283) | private async unregisterDBTProject(uri: Uri) {
    method createConfigWatcher (line 299) | private createConfigWatcher(): FileSystemWatcher {
    method notInVenv (line 327) | private notInVenv(path: string): boolean {
    method notInDBtPackages (line 340) | private notInDBtPackages(

FILE: src/dbt_client/event/manifestCacheChangedEvent.ts
  type ManifestCacheProjectAddedEvent (line 15) | interface ManifestCacheProjectAddedEvent {
  type ManifestCacheProjectRemovedEvent (line 29) | interface ManifestCacheProjectRemovedEvent {
  type ManifestCacheChangedEvent (line 33) | interface ManifestCacheChangedEvent {
  type RebuildManifestStatusChange (line 38) | interface RebuildManifestStatusChange {
  type RebuildManifestCombinedStatusChange (line 43) | interface RebuildManifestCombinedStatusChange {

FILE: src/dbt_client/event/projectConfigChangedEvent.ts
  class ProjectConfigChangedEvent (line 2) | class ProjectConfigChangedEvent {
    method constructor (line 3) | constructor(public project: DBTProject) {}

FILE: src/dbt_client/event/runResultsEvent.ts
  class RunResultsEvent (line 3) | class RunResultsEvent {
    method constructor (line 4) | constructor(

FILE: src/dbt_client/index.ts
  type PythonInterpreterPromptAnswer (line 8) | enum PythonInterpreterPromptAnswer {
  class DBTClient (line 13) | class DBTClient implements Disposable {
    method dbtInstalled (line 20) | public get dbtInstalled() {
    method pythonInstalled (line 23) | public get pythonInstalled() {
    method constructor (line 30) | constructor(
    method dispose (line 37) | dispose() {
    method detectDBT (line 46) | async detectDBT(): Promise<void> {
    method checkAllInstalled (line 56) | private async checkAllInstalled(): Promise<void> {
    method showErrorIfDbtOrPythonNotInstalled (line 81) | async showErrorIfDbtOrPythonNotInstalled() {
    method executeInstallDbtCommand (line 115) | private async executeInstallDbtCommand(message: string, option: string) {
    method showErrorIfDbtIsNotInstalled (line 131) | async showErrorIfDbtIsNotInstalled() {
    method getPythonEnvironment (line 170) | getPythonEnvironment() {
    method pythonPathExists (line 174) | private pythonPathExists() {

FILE: src/dbt_client/pythonEnvironment.ts
  type EnvFrom (line 14) | type EnvFrom = "process" | "integrated" | "dotenv";
  type EnvVarsResult (line 15) | interface EnvVarsResult {
  type PythonExecutionDetails (line 19) | interface PythonExecutionDetails {
  class PythonEnvironment (line 25) | class PythonEnvironment {
    method constructor (line 32) | constructor(
    method dispose (line 37) | async dispose(): Promise<void> {
    method printEnvVars (line 46) | async printEnvVars(workspaceFolder?: WorkspaceFolder) {
    method pythonPath (line 60) | public get pythonPath() {
    method pythonVersion (line 67) | public get pythonVersion(): string | undefined {
    method refreshPythonVersion (line 72) | public async refreshPythonVersion(): Promise<void> {
    method environmentVariables (line 93) | public get environmentVariables(): EnvironmentVariables {
    method getEnvironmentVariables (line 97) | public getEnvironmentVariables(
    method onPythonEnvironmentChanged (line 108) | public get onPythonEnvironmentChanged() {
    method initialize (line 112) | async initialize(): Promise<void> {
    method getResolvedConfigValue (line 120) | getResolvedConfigValue(key: string, workspaceFolder?: WorkspaceFolder) {
    method substituteSettingsVariables (line 131) | private substituteSettingsVariables(
    method detectPythonFromShell (line 174) | public async detectPythonFromShell(): Promise<string | undefined> {
    method findTerminalWithShellIntegration (line 217) | private findTerminalWithShellIntegration(): Terminal | undefined {
    method executeInTerminal (line 227) | private async executeInTerminal(
    method activatePythonExtension (line 284) | private async activatePythonExtension(): Promise<PythonExecutionDetail...

FILE: src/dbt_client/runtimePythonEnvironmentProvider.ts
  class VSCodeRuntimePythonEnvironmentProvider (line 11) | class VSCodeRuntimePythonEnvironmentProvider
    method constructor (line 16) | constructor(
    method getCurrentEnvironment (line 30) | getCurrentEnvironment(): RuntimePythonEnvironment {
    method onEnvironmentChanged (line 46) | onEnvironmentChanged(
  class StaticRuntimePythonEnvironment (line 62) | class StaticRuntimePythonEnvironment
    method constructor (line 65) | constructor(
    method pythonPath (line 70) | get pythonPath(): string {
    method getEnvironmentVariables (line 74) | getEnvironmentVariables(workspacePath: string): EnvironmentVariables {

FILE: src/dbt_client/vscodeConfiguration.ts
  class VSCodeDBTConfiguration (line 10) | class VSCodeDBTConfiguration implements DBTConfiguration {
    method getDbtCustomRunnerImport (line 11) | getDbtCustomRunnerImport(): string {
    method getDbtIntegration (line 20) | getDbtIntegration(): string {
    method getRunModelCommandAdditionalParams (line 29) | getRunModelCommandAdditionalParams(): string[] {
    method getBuildModelCommandAdditionalParams (line 38) | getBuildModelCommandAdditionalParams(): string[] {
    method getTestModelCommandAdditionalParams (line 47) | getTestModelCommandAdditionalParams(): string[] {
    method getQueryTemplate (line 56) | getQueryTemplate(): string {
    method getQueryLimit (line 62) | getQueryLimit(): number {
    method getEnableNotebooks (line 68) | getEnableNotebooks(): boolean {
    method getDisableQueryHistory (line 77) | getDisableQueryHistory(): boolean {
    method getInstallDepsOnProjectInitialization (line 86) | getInstallDepsOnProjectInitialization(): boolean {
    method getDisableDepthsCalculation (line 95) | getDisableDepthsCalculation(): boolean {
    method getWorkingDirectory (line 104) | getWorkingDirectory(): string {
    method getAltimateUrl (line 108) | getAltimateUrl(): string {
    method getIsLocalMode (line 114) | getIsLocalMode(): boolean {
    method getAltimateInstanceName (line 120) | getAltimateInstanceName(): string | undefined {
    method getAltimateAiKey (line 126) | getAltimateAiKey(): string | undefined {

FILE: src/dbt_client/vscodeTerminal.ts
  class VSCodeDBTTerminal (line 9) | class VSCodeDBTTerminal implements DBTTerminal {
    method constructor (line 17) | constructor(private telemetry: TelemetryService) {}
    method show (line 19) | async show(status: boolean) {
    method log (line 26) | log(message: string, ...args: any[]) {
    method trace (line 34) | trace(message: string) {
    method debug (line 39) | debug(name: string, message: string, ...args: any[]) {
    method info (line 44) | info(
    method warn (line 57) | warn(
    method error (line 70) | error(
    method dispose (line 92) | dispose() {
    method requireTerminal (line 99) | private async requireTerminal() {

FILE: src/definition_provider/docDefinitionProvider.ts
  class DocDefinitionProvider (line 17) | class DocDefinitionProvider implements DefinitionProvider, Disposable {
    method constructor (line 23) | constructor(
    method dispose (line 34) | dispose() {
    method provideDefinition (line 43) | provideDefinition(
    method onManifestCacheChanged (line 80) | private onManifestCacheChanged(event: ManifestCacheChangedEvent): void {
    method getDocDefinition (line 92) | private getDocDefinition(

FILE: src/definition_provider/index.ts
  class DefinitionProviders (line 8) | class DefinitionProviders implements Disposable {
    method constructor (line 11) | constructor(
    method dispose (line 37) | dispose() {

FILE: src/definition_provider/macroDefinitionProvider.ts
  class MacroDefinitionProvider (line 17) | class MacroDefinitionProvider implements DefinitionProvider, Disposable {
    method constructor (line 22) | constructor(
    method dispose (line 33) | dispose() {
    method provideDefinition (line 42) | provideDefinition(
    method onManifestCacheChanged (line 98) | private onManifestCacheChanged(event: ManifestCacheChangedEvent): void {
    method getMacroDefinition (line 110) | private getMacroDefinition(

FILE: src/definition_provider/modelDefinitionProvider.ts
  class ModelDefinitionProvider (line 20) | class ModelDefinitionProvider implements DefinitionProvider, Disposable {
    method constructor (line 26) | constructor(
    method dispose (line 39) | dispose() {
    method provideDefinition (line 48) | provideDefinition(
    method onManifestCacheChanged (line 101) | private onManifestCacheChanged(event: ManifestCacheChangedEvent): void {
    method getDefinitionFor (line 113) | private getDefinitionFor(

FILE: src/definition_provider/sourceDefinitionProvider.ts
  class SourceDefinitionProvider (line 20) | class SourceDefinitionProvider
    method constructor (line 28) | constructor(
    method dispose (line 39) | dispose() {
    method provideDefinition (line 48) | provideDefinition(
    method onManifestCacheChanged (line 93) | private onManifestCacheChanged(event: ManifestCacheChangedEvent): void {
    method getSourceDefinition (line 105) | private getSourceDefinition(

FILE: src/document_formatting_edit_provider/dbtDocumentFormattingEditProvider.ts
  class DbtDocumentFormattingEditProvider (line 28) | class DbtDocumentFormattingEditProvider implements DocumentFormattingEdi...
    method constructor (line 32) | constructor(
    method provideDocumentFormattingEdits (line 39) | provideDocumentFormattingEdits(
    method executeSqlFmt (line 47) | private async executeSqlFmt(document: TextDocument) {
    method findSqlFmtPath (line 118) | private async findSqlFmtPath(): Promise<string | undefined> {
    method discoverSqlFmtPath (line 136) | private async discoverSqlFmtPath(): Promise<string | undefined> {
    method getToolBinCandidates (line 170) | private getToolBinCandidates(exe: string): string[] {
    method findSqlFmtInUvTools (line 212) | private async findSqlFmtInUvTools(exe: string): Promise<string | undef...
    method processDiffOutput (line 231) | private processDiffOutput(
    method isAddChange (line 284) | private isAddChange(change: parseDiff.Change): change is parseDiff.Add...
    method isNormalChange (line 288) | private isNormalChange(
    method isDeleteChange (line 294) | private isDeleteChange(

FILE: src/document_formatting_edit_provider/index.ts
  class DocumentFormattingEditProviders (line 5) | class DocumentFormattingEditProviders implements Disposable {
    method constructor (line 8) | constructor(
    method dispose (line 19) | dispose() {

FILE: src/extension.ts
  function activate (line 6) | async function activate(context: ExtensionContext) {
  function deactivate (line 14) | function deactivate() {}

FILE: src/hover_provider/depthDecorationProvider.ts
  class DepthDecorationProvider (line 18) | class DepthDecorationProvider implements HoverProvider, Disposable {
    method constructor (line 25) | constructor(private dbtProjectContainer: DBTProjectContainer) {
    method dispose (line 73) | dispose() {
    method updateDecorations (line 83) | private updateDecorations(editor: TextEditor): void {
    method createDepthDecoration (line 118) | private createDepthDecoration(
    method provideHover (line 139) | public provideHover(

FILE: src/hover_provider/index.ts
  class HoverProviders (line 9) | class HoverProviders implements Disposable {
    method constructor (line 12) | constructor(
    method dispose (line 51) | dispose() {

FILE: src/hover_provider/macroHoverProvider.ts
  class MacroHoverProvider (line 22) | class MacroHoverProvider implements HoverProvider, Disposable {
    method constructor (line 25) | constructor(
    method dispose (line 32) | dispose() {
    method provideHover (line 41) | provideHover(
    method getNodesReferencingMacro (line 77) | private getNodesReferencingMacro(

FILE: src/hover_provider/modelHoverProvider.ts
  class ModelHoverProvider (line 21) | class ModelHoverProvider implements HoverProvider, Disposable {
    method constructor (line 27) | constructor(
    method dispose (line 40) | dispose() {
    method getProject (line 49) | private getProject(uri: Uri): DBTProject | undefined {
    method provideHover (line 65) | provideHover(
    method onManifestCacheChanged (line 124) | private onManifestCacheChanged(event: ManifestCacheChangedEvent): void {
    method getHoverMarkdownFor (line 136) | private getHoverMarkdownFor(

FILE: src/hover_provider/sourceHoverProvider.ts
  class SourceHoverProvider (line 19) | class SourceHoverProvider implements HoverProvider, Disposable {
    method constructor (line 25) | constructor(
    method dispose (line 36) | dispose() {
    method provideHover (line 45) | provideHover(
    method onManifestCacheChanged (line 89) | private onManifestCacheChanged(event: ManifestCacheChangedEvent): void {
    method getSourceHover (line 101) | private getSourceHover(

FILE: src/hover_provider/utils.ts
  function generateHoverMarkdownString (line 10) | function generateHoverMarkdownString(

FILE: src/hover_provider/yamlModelHoverProvider.ts
  type YamlMapItem (line 18) | interface YamlMapItem {
  class YamlModelHoverProvider (line 25) | class YamlModelHoverProvider implements HoverProvider, Disposable {
    method constructor (line 30) | constructor(
    method dispose (line 41) | dispose() {
    method provideHover (line 50) | provideHover(
    method getModelNameAtPosition (line 100) | private getModelNameAtPosition(
    method getSourceNameAtPosition (line 166) | private getSourceNameAtPosition(
    method onManifestCacheChanged (line 260) | private onManifestCacheChanged(event: ManifestCacheChangedEvent): void {

FILE: src/lib/index.d.ts
  class DatapilotNotebookSerializer (line 30) | class DatapilotNotebookSerializer
  type NotebookItem (line 44) | interface NotebookItem {
  type NotebookSchema (line 57) | interface NotebookSchema {
  type NotebookCellSchema (line 61) | interface NotebookCellSchema {
  type PreconfiguredNotebookItem (line 68) | interface PreconfiguredNotebookItem {
  type NotebookCellEvent (line 77) | interface NotebookCellEvent {
  type OpenNotebookRequest (line 85) | interface OpenNotebookRequest {
  type NotebookDependency (line 91) | interface NotebookDependency {
  class NotebookDependencies (line 98) | class NotebookDependencies {
  type ConnectionSettings (line 122) | interface ConnectionSettings {
  type RawKernelType (line 134) | interface RawKernelType {
  type WidgetPayload (line 143) | interface WidgetPayload {
  type IPyWidgetMessage (line 146) | interface IPyWidgetMessage {
  type NotebookContext (line 150) | interface NotebookContext {
  class NotebookKernelClient (line 153) | class NotebookKernelClient implements Disposable {
  class ClientMapper (line 209) | class ClientMapper {
  type ModelTestArgs (line 223) | interface ModelTestArgs {
  type DbtSourceYamlArgs (line 227) | interface DbtSourceYamlArgs {
  type DbtModelArgs (line 232) | interface DbtModelArgs {
  type ExposureArgs (line 238) | interface ExposureArgs {
  class DatapilotNotebookController (line 242) | class DatapilotNotebookController implements Disposable {
  class NotebookFileSystemProvider (line 291) | class NotebookFileSystemProvider implements FileSystemProvider {
  class NotebookService (line 336) | class NotebookService implements Disposable {
  class NotebookProviders (line 357) | class NotebookProviders implements Disposable {
  type DBColumn (line 373) | interface DBColumn {
  type ColumnConfig$1 (line 377) | interface ColumnConfig$1 {
  type Model (line 383) | interface Model {
  type DbtConfig (line 390) | interface DbtConfig {
  type QueryFn (line 393) | type QueryFn = (query: string) => Promise<QueryExecutionResult | undefin...
  type ColumnConfig (line 395) | interface ColumnConfig {
  type Props (line 400) | interface Props {

FILE: src/lib/index.js
  function L (line 8) | function L(o, e, t, n) {
  function $ (line 20) | function $(o, e) {
  function me (line 25) | function me(o, e, t) {
  function q (line 28) | function q(o, e) {
  function fe (line 61) | function fe() {
  class le (line 67) | class le {
    method dispose (line 68) | dispose() {
    method deserializeNotebook (line 71) | async deserializeNotebook(e, t) {
    method serializeNotebook (line 94) | async serializeNotebook(e, t) {
  function J (line 128) | function J(o) {
  function te (line 141) | function te(o) {
  function Y (line 154) | function Y(o) {
  function we (line 162) | function we(o) {
  function re (line 178) | function re(o) {
  function ke (line 187) | function ke(o, e) {
  function Te (line 215) | function Te(o) {
  function G (line 220) | function G(o) {
  function _e (line 236) | function _e(o) {
  function Ee (line 242) | function Ee(o) {
  function ve (line 259) | function ve(o) {
  function K (line 262) | function K(o) {
  function Ne (line 266) | function Ne(o) {
  function Q (line 279) | function Q(o) {
  function Ce (line 290) | function Ce(o) {
  function Se (line 298) | function Se(o) {
  class Ie (line 333) | class Ie {
    method value (line 334) | get value() {
    method constructor (line 337) | constructor(e = null) {
    method resolve (line 384) | resolve(e) {
    method reject (line 389) | reject(e) {
    method promise (line 393) | get promise() {
    method resolved (line 396) | get resolved() {
    method rejected (line 399) | get rejected() {
    method completed (line 402) | get completed() {
  function Me (line 406) | function Me(o = null) {
  function Pe (line 412) | function Pe(o) {
  function De (line 417) | function De(o) {
  function xe (line 428) | function xe(o) {
  function Ae (line 444) | function Ae(o) {
  function je (line 467) | function je(o) {
  function V (line 481) | function V() {}
  function Le (line 483) | function Le() {
  function $e (line 488) | function $e(o, e) {
  function Fe (line 517) | function Fe(o) {
  function We (line 547) | function We(o, e) {
  class Be (line 558) | class Be {
    method constructor (line 559) | constructor(e, t) {
    method dispose (line 634) | dispose() {
    method close (line 637) | close() {
    method emit (line 651) | emit(e, ...t) {
    method send (line 673) | send(e, t) {
    method addReceiveHook (line 676) | addReceiveHook(e) {
    method removeReceiveHook (line 679) | removeReceiveHook(e) {
    method addSendHook (line 682) | addSendHook(e) {
    method removeSendHook (line 685) | removeSendHook(e) {
    method generateChannel (line 688) | generateChannel(e, t, n) {
    method processSocketMessages (line 698) | async processSocketMessages(e, t) {
    method generateChannels (line 704) | generateChannels(e) {
    method onIncomingMessage (line 730) | onIncomingMessage(e, t) {
    method handleIncomingMessage (line 737) | async handleIncomingMessage(e, t) {
    method sendMessage (line 741) | sendMessage(e, t) {
    method handleOutgoingMessage (line 748) | async handleOutgoingMessage(e, t) {
    method postToSocket (line 759) | postToSocket(e, t) {
  class Ue (line 765) | class Ue {
    method postMessage (line 766) | get postMessage() {
    method constructor (line 769) | constructor(e, t, n, r) {
    method rawKernel (line 796) | get rawKernel() {
    method initializeKernel (line 799) | initializeKernel(e, t, n, r) {
    method mirrorSend (line 853) | async mirrorSend(e, t) {
    method raisePostMessage (line 874) | raisePostMessage(e, t) {
    method mirrorExecuteRequest (line 877) | mirrorExecuteRequest(e) {
    method onKernelSocketMessage (line 883) | async onKernelSocketMessage(e) {
    method onKernelSocketResponse (line 926) | onKernelSocketResponse(e) {
  class M (line 932) | class M {
    method postMessage (line 933) | get postMessage() {
    method constructor (line 936) | constructor(e, t, n, r) {
    method isInitialized (line 1055) | async isInitialized() {
    method dispose (line 1068) | async dispose() {
    method jupyterPackagesVersions (line 1082) | get jupyterPackagesVersions() {
    method getDependenciesVersion (line 1085) | async getDependenciesVersion() {
    method getKernel (line 1088) | async getKernel() {
    method initializeNotebookKernel (line 1098) | async initializeNotebookKernel(e) {
    method onKernelSocketResponse (line 1142) | onKernelSocketResponse(e) {
    method storeContext (line 1146) | async storeContext(e) {
    method storeDataInKernel (line 1150) | async storeDataInKernel(e, t) {
    method registerCommTarget (line 1171) | async registerCommTarget(e) {
    method getPythonCodeByType (line 1188) | async getPythonCodeByType(e, t) {
    method executePython (line 1196) | async executePython(e, t, n) {
    method handleUpdateDisplayDataMessage (line 1304) | handleUpdateDisplayDataMessage(e) {
    method handleCommOpen (line 1318) | handleCommOpen(e) {
    method handleCommMsg (line 1327) | handleCommMsg(e) {
    method handleExecuteResult (line 1347) | handleExecuteResult(e, t) {
    method addToCellData (line 1360) | addToCellData(e, t, n) {
    method canMimeTypeBeRenderedByWidgetManager (line 1389) | canMimeTypeBeRenderedByWidgetManager(e) {
    method handleExecuteInput (line 1401) | handleExecuteInput(e) {}
    method handleStatusMessage (line 1402) | handleStatusMessage(e) {}
    method handleStreamMessage (line 1403) | handleStreamMessage(e, t) {
    method handleDisplayData (line 1444) | handleDisplayData(e, t) {
    method handleClearOutput (line 1453) | handleClearOutput(e) {
    method handleError (line 1468) | handleError(e, t) {
  method constructor (line 1487) | constructor(e, t, n, r) {
  method checkPythonDependencies (line 1513) | async checkPythonDependencies(e) {
  method checkDbtDependencies (line 1529) | checkDbtDependencies(e, t) {
  method installMissingPythonPackages (line 1540) | async installMissingPythonPackages(e, t) {
  method installMissingDbtPackages (line 1610) | async installMissingDbtPackages(e, t) {
  method verifyAndInstallDependenciesIfNeeded (line 1672) | async verifyAndInstallDependenciesIfNeeded(e, t) {
  method getDependenciesVersion (line 1690) | async getDependenciesVersion() {
  method validateAndInstallNotebookDependencies (line 1717) | async validateAndInstallNotebookDependencies() {
  method notebookDependenciesAreInstalled (line 1808) | async notebookDependenciesAreInstalled() {
  method constructor (line 1838) | constructor(e, t, n) {
  method initializeNotebookClient (line 1864) | async initializeNotebookClient(e) {
  method getNotebookClient (line 1886) | getNotebookClient(e) {
  method constructor (line 1910) | constructor(e, t, n, r, s, a) {
  method getNotebookByTemplate (line 2045) | async getNotebookByTemplate(e) {
  method modelTestSuggestions (line 2139) | async modelTestSuggestions(e) {
  method generateDbtSourceYaml (line 2142) | async generateDbtSourceYaml(e) {
  method generateDbtDbtModelSql (line 2145) | async generateDbtDbtModelSql(e) {
  method generateDbtDbtModelYaml (line 2148) | async generateDbtDbtModelYaml(e) {
  method generateDbtDbtModelCTE (line 2151) | async generateDbtDbtModelCTE(e) {
  method extractExposuresFromMetabase (line 2154) | async extractExposuresFromMetabase(e) {
  method extractExposuresFromTableau (line 2157) | async extractExposuresFromTableau(e) {
  method getFileName (line 2160) | async getFileName(e, t) {
  method createNotebook (line 2178) | async createNotebook(e) {
  method sendMessageToPreloadScript (line 2252) | sendMessageToPreloadScript(e) {}
  method genUniqueId (line 2253) | genUniqueId(e) {
  method updateCellId (line 2256) | async updateCellId(e, t) {
  method onNotebookClose (line 2287) | async onNotebookClose(e) {
  method onDidChangeSelectedNotebooks (line 2298) | async onDidChangeSelectedNotebooks({ notebook: e, selected: t }) {
  method onNotebookOpen (line 2307) | async onNotebookOpen(e) {
  method waitForControllerAssociation (line 2342) | async waitForControllerAssociation(e, t = 2e3) {
  method isControllerAssociatedWithNotebook (line 2350) | isControllerAssociatedWithNotebook(e) {
  method dispose (line 2353) | dispose() {
  method _executeAll (line 2356) | async _executeAll(e, t, n) {
  method filterIPyWidgets (line 2381) | filterIPyWidgets(e, t = !1) {
  method updateContextVariablesInKernel (line 2393) | updateContextVariablesInKernel(e, t, n) {
  method _doExecution (line 2403) | async _doExecution(e, t, n, r, s, a) {
  class He (line 2522) | class He {
    method constructor (line 2523) | constructor() {
    method dispose (line 2531) | dispose() {
    method provideCellStatusBarItems (line 2534) | provideCellStatusBarItems(e) {
  method constructor (line 2549) | constructor(e, t) {
  method watch (line 2581) | watch(e, t) {
  method stat (line 2584) | stat(e) {
  method readDirectory (line 2592) | readDirectory(e) {
  method createDirectory (line 2595) | createDirectory(e) {}
  method getNotebookData (line 2596) | async getNotebookData(e) {
  method readFile (line 2601) | async readFile(e) {
  method writeFile (line 2615) | async writeFile(e, t, n) {
  method delete (line 2618) | delete(e, t) {
  method rename (line 2625) | rename(e, t, n) {
  method getFileNameFromUri (line 2631) | getFileNameFromUri(e) {
  method customSave (line 2634) | async customSave(e, t) {
  method saveNotebook (line 2669) | async saveNotebook(e, t) {
  class Ye (line 2704) | class Ye {
    method constructor (line 2705) | constructor(e) {
    method dispose (line 2730) | dispose() {
    method getCellByNotebookAutocompleteMap (line 2736) | getCellByNotebookAutocompleteMap() {
    method onNotebookCellChanged (line 2739) | onNotebookCellChanged(e) {
  method constructor (line 2811) | constructor(e, t, n, r) {
  method bindNotebookActions (line 2850) | bindNotebookActions() {
  method dispose (line 2866) | dispose() {
  class U (line 3003) | class U {
    method constructor (line 3004) | constructor(e, t) {
  class et (line 3029) | class et extends U {
    method generateRangeTests (line 3030) | async generateRangeTests({
  class tt (line 3089) | class tt extends U {
    method getColumnCombinations (line 3090) | getColumnCombinations(e, t) {
    method combinations (line 3095) | combinations(e, t) {
    method buildLimitStatement (line 3103) | buildLimitStatement(e, t, n) {
    method buildCountDistinctQuery (line 3106) | buildCountDistinctQuery(e, t, n) {
    method generateUniquenessTests (line 3128) | async generateUniquenessTests({
  class nt (line 3173) | class nt extends U {
    method getAcceptedValuesTestSuggestions (line 3174) | async getAcceptedValuesTestSuggestions({
  class ot (line 3252) | class ot extends U {
    method generateStringLengthTests (line 3253) | async generateStringLengthTests({
  class rt (line 3324) | class rt extends U {
    method generateRecencyTests (line 3325) | async generateRecencyTests({

FILE: src/mcp/index.ts
  class DbtPowerUserMcpServer (line 10) | class DbtPowerUserMcpServer implements Disposable {
    method constructor (line 14) | constructor(
    method updateMcpExtensionApi (line 37) | async updateMcpExtensionApi() {
    method registerToolsInMcpExtension (line 86) | private async registerToolsInMcpExtension() {
    method dispose (line 129) | dispose() {

FILE: src/mcp/server.ts
  type ToolInput (line 13) | type ToolInput = z4.infer<typeof ToolInputSchema>;
  function toToolInput (line 23) | function toToolInput(schema: z.ZodSchema<unknown>): ToolInput {
  constant DBT_BEST_PRACTICES_CONTENT (line 81) | const DBT_BEST_PRACTICES_CONTENT = `# dbt Project Best Practices for AI ...
  type ToolName (line 151) | enum ToolName {
  class DbtPowerUserMcpServerTools (line 171) | class DbtPowerUserMcpServerTools implements Disposable {
    method constructor (line 172) | constructor(
    method dispose (line 653) | dispose() {}
    method safeGetProjectProperty (line 668) | private async safeGetProjectProperty<T>(

FILE: src/mcp/types.ts
  type ToolInput (line 7) | type ToolInput = z.infer<typeof ToolSchema.shape.inputSchema>;
  type McpTool (line 9) | type McpTool = {
  type McpOnboardingStep (line 18) | type McpOnboardingStep = {
  type ToolRegistry (line 27) | type ToolRegistry = {

FILE: src/quickpick/actionsQuickPick.ts
  class DbtPowerUserControlCenterAction (line 11) | class DbtPowerUserControlCenterAction {
    method openActions (line 12) | async openActions() {
  class DbtPowerUserControlPanelItem (line 115) | class DbtPowerUserControlPanelItem implements QuickPickItem {
    method constructor (line 122) | constructor(

FILE: src/quickpick/index.ts
  class DbtPowerUserActionsCenter (line 9) | class DbtPowerUserActionsCenter implements Disposable {
    method constructor (line 12) | constructor(
    method dispose (line 59) | dispose() {

FILE: src/quickpick/notebookQuickPick.ts
  type NotebookQuickPickItem (line 3) | interface NotebookQuickPickItem extends QuickPickItem {
  class NotebookQuickPick (line 10) | class NotebookQuickPick {
    method showNotebookPicker (line 11) | async showNotebookPicker(): Promise<void> {

FILE: src/quickpick/projectQuickPick.ts
  type ProjectQuickPickItem (line 4) | interface ProjectQuickPickItem extends QuickPickItem {
  class ProjectQuickPick (line 10) | class ProjectQuickPick {
    method projectPicker (line 11) | async projectPicker(

FILE: src/quickpick/sqlQuickPick.ts
  class DbtSQLAction (line 12) | class DbtSQLAction {
    method constructor (line 13) | constructor(private dbtProjectContainer: DBTProjectContainer) {}
    method getProject (line 15) | private getProject() {
    method openQuickPick (line 23) | async openQuickPick() {
  class SQLActionItem (line 131) | class SQLActionItem implements QuickPickItem {
    method constructor (line 138) | constructor(

FILE: src/services/altimateAuthService.ts
  type PromptAnswer (line 5) | enum PromptAnswer {
  class AltimateAuthService (line 9) | class AltimateAuthService {
    method constructor (line 10) | constructor(
    method handlePreviewFeatures (line 19) | handlePreviewFeatures(): boolean {
    method getCredentialsMessage (line 31) | getCredentialsMessage(): string | undefined {
    method isAuthenticated (line 50) | isAuthenticated(): boolean {
    method getConfig (line 59) | getConfig(): { key: string; instance: string } | undefined {
    method showAPIKeyMessage (line 68) | private async showAPIKeyMessage(message: string) {

FILE: src/services/altimateCodeChatService.ts
  class AltimateCodeChatService (line 4) | class AltimateCodeChatService implements Disposable {
    method openChat (line 7) | async openChat(options: {
    method getEditorContext (line 40) | getEditorContext(): {
    method getContextForUri (line 76) | getContextForUri(uri: Uri): {
    method getRelativePath (line 90) | getRelativePath(uri: Uri): string {
    method dispose (line 104) | dispose() {

FILE: src/services/conversationService.ts
  class ConversationService (line 12) | class ConversationService {
    method constructor (line 20) | public constructor(
    method getConversations (line 28) | public getConversations() {
    method loadSharedDocs (line 32) | public async loadSharedDocs() {
    method getAppUrlByShareId (line 70) | public async getAppUrlByShareId(shareId: SharedDoc["share_id"]) {
    method createConversationGroup (line 90) | public async createConversationGroup(
    method addConversationToGroup (line 113) | public async addConversationToGroup(
    method resolveConversation (line 147) | public async resolveConversation(
    method loadConversationsByShareId (line 173) | public async loadConversationsByShareId(shareId: SharedDoc["share_id"]) {
    method shareDbtDocs (line 194) | public async shareDbtDocs(data: {

FILE: src/services/dbtLineageService.ts
  type CllEvents (line 27) | enum CllEvents {
  constant CAN_COMPILE_SQL_NODE (line 33) | const CAN_COMPILE_SQL_NODE = [
  class DbtLineageService (line 41) | class DbtLineageService {
    method constructor (line 42) | public constructor(
    method getUpstreamTables (line 50) | getUpstreamTables({ table }: { table: string }) {
    method getDownstreamTables (line 54) | getDownstreamTables({ table }: { table: string }) {
    method getConnectedTables (line 58) | private getConnectedTables(
    method createTable (line 91) | createTable(
    method getConnectedNodeCount (line 213) | private getConnectedNodeCount(g: NodeGraphMap, key: string) {
    method getConnectedColumns (line 217) | async getConnectedColumns(

FILE: src/services/dbtTestService.ts
  class DbtTestService (line 33) | class DbtTestService {
    method constructor (line 34) | public constructor(
    method removeDuplicateTests (line 46) | public removeDuplicateTests(
    method returnTestMetadataFromKwargs (line 68) | private returnTestMetadataFromKwargs(test: TestMetaData) {
    method getConfigByTest (line 136) | public getConfigByTest(
    method createTest (line 244) | public async createTest(
    method getTestsForCurrentModel (line 300) | public async getTestsForCurrentModel() {
    method getTestsForModel (line 316) | public async getTestsForModel(modelName: string) {
    method generateTestsForColumns (line 385) | public async generateTestsForColumns(

FILE: src/services/diagnosticsOutputChannel.ts
  class DiagnosticsOutputChannel (line 4) | class DiagnosticsOutputChannel {
    method constructor (line 7) | constructor() {
    method show (line 14) | show(): void {
    method log (line 18) | log(message: string): void {
    method logNewLine (line 22) | logNewLine(): void {
    method logLine (line 26) | logLine(line: string): void {
    method logHorizontalRule (line 30) | logHorizontalRule(): void {
    method logBlock (line 36) | logBlock(block: string[]): void {
    method logBlockWithHeader (line 46) | logBlockWithHeader(header: string[], block: string[]): void {
    method dispose (line 58) | dispose(): void {

FILE: src/services/docGenService.ts
  type DBTDocumentationMessage (line 33) | interface DBTDocumentationMessage {
  type DocumentationSchemaColumn (line 38) | interface DocumentationSchemaColumn {
  type DocumentationSchemaModel (line 45) | interface DocumentationSchemaModel {
  type DocumentationSchema (line 51) | interface DocumentationSchema {
  type GenerateDocsForColumnsProps (line 56) | interface GenerateDocsForColumnsProps {
  type GenerateDocsForModelProps (line 64) | interface GenerateDocsForModelProps {
  type FeedbackRequestProps (line 74) | interface FeedbackRequestProps {
  constant COLUMNS_PER_CHUNK (line 81) | const COLUMNS_PER_CHUNK = 3;
  class DocGenService (line 83) | class DocGenService {
    method constructor (line 84) | public constructor(
    method getCompiledDocumentationFromNode (line 94) | private getCompiledDocumentationFromNode(
    method getCurrentNode (line 124) | private getCurrentNode(modelName: string): NodeMetaData | undefined {
    method generateDocsForColumn (line 134) | private async generateDocsForColumn(
    method transmitAIGeneratedColumnDocs (line 203) | private async transmitAIGeneratedColumnDocs(
    method transmitError (line 226) | private async transmitError(panel?: WebviewView | WebviewPanel) {
    method transmitAIGeneratedModelDocs (line 234) | private async transmitAIGeneratedModelDocs(
    method getCompiledDocumentationForCurrentActiveFile (line 253) | public async getCompiledDocumentationForCurrentActiveFile() {
    method getUncompiledDocumentationForCurrentActiveFile (line 259) | public async getUncompiledDocumentationForCurrentActiveFile() {
    method getDocumentationValidationMessage (line 265) | private getDocumentationValidationMessage(
    method getDocumentation (line 320) | private async getDocumentation(
    method getCompiledDocumentation (line 461) | public async getCompiledDocumentation(
    method getUncompiledDocumentation (line 467) | public async getUncompiledDocumentation(
    method chunk (line 473) | private chunk(a: string[], n: number) {
    method generateDocsForColumns (line 482) | public async generateDocsForColumns({
    method generateDocsForModel (line 620) | public async generateDocsForModel({
    method sendFeedback (line 723) | public async sendFeedback({

FILE: src/services/fileService.ts
  class FileService (line 6) | class FileService {
    method openFileByPath (line 7) | public async openFileByPath(path?: string): Promise<TextEditor> {

FILE: src/services/queryAnalysisService.ts
  type QueryTranslateIncomingRequest (line 18) | interface QueryTranslateIncomingRequest {
  type QueryTranslateExplanationIncomingRequest (line 24) | interface QueryTranslateExplanationIncomingRequest {
  class QueryAnalysisService (line 31) | class QueryAnalysisService {
    method constructor (line 32) | public constructor(
    method getSelectedQuery (line 43) | public getSelectedQuery() {
    method executeQueryTranslate (line 68) | public async executeQueryTranslate(params: QueryTranslateIncomingReque...
    method executeQueryTranslateExplanation (line 118) | public async executeQueryTranslateExplanation(
    method executeQueryAnalysis (line 148) | public async executeQueryAnalysis(
    method getFollowupQuestions (line 226) | public async getFollowupQuestions({

FILE: src/services/queryManifestService.ts
  class QueryManifestService (line 13) | class QueryManifestService {
    method constructor (line 16) | public constructor(
    method onManifestCacheChanged (line 35) | private async onManifestCacheChanged(event: ManifestCacheChangedEvent) {
    method getProject (line 44) | public getProject(): DBTProject | undefined {
    method getProjectByUri (line 48) | public getProjectByUri(uri?: Uri): DBTProject | undefined {
    method getProjectNamesInWorkspace (line 55) | public getProjectNamesInWorkspace(): string[] | undefined {
    method getProjectByName (line 66) | public getProjectByName(projectName: string) {
    method getEventByCurrentProject (line 71) | public getEventByCurrentProject():
    method getEventByDocument (line 86) | public getEventByDocument(currentFilePath: Uri) {
    method getSourcesInProject (line 109) | public getSourcesInProject(currentFilePath?: Uri) {
    method getModelsInProject (line 135) | public getModelsInProject(
    method getOrPickProjectFromWorkspace (line 159) | public async getOrPickProjectFromWorkspace() {

FILE: src/services/runHistoryService.ts
  class RunHistoryService (line 12) | class RunHistoryService implements Disposable {
    method addEntry (line 35) | addEntry(entry: RunResultsEventData): RunResultsEventData {
    method clear (line 51) | clear(): void {
    method entries (line 56) | get entries(): readonly RunResultsEventData[] {
    method dispose (line 60) | dispose(): void {

FILE: src/services/sharedStateService.ts
  class SharedStateService (line 4) | class SharedStateService {
    method constructor (line 7) | public constructor() {
    method fire (line 11) | public fire(data: SharedStateEventEmitterProps) {

FILE: src/services/streamingService.ts
  class StreamingService (line 4) | class StreamingService {
    method constructor (line 5) | public constructor(
    method fetchAsStream (line 10) | public async fetchAsStream<R>({

FILE: src/services/usersService.ts
  class UsersService (line 12) | class UsersService implements Disposable {
    method constructor (line 19) | public constructor(
    method dispose (line 33) | dispose() {
    method onDBTInstallationVerification (line 42) | private async onDBTInstallationVerification(
    method loadUsersInTenant (line 60) | private async loadUsersInTenant() {
    method loadCurrentUser (line 77) | private async loadCurrentUser() {
    method getUserById (line 91) | public getUserById(userId: TenantUser["id"]) {
    method user (line 95) | get user() {
    method users (line 99) | get users() {

FILE: src/statusbar/deferToProductionStatusBar.ts
  class DeferToProductionStatusBar (line 13) | class DeferToProductionStatusBar implements Disposable {
    method constructor (line 20) | constructor(
    method dispose (line 49) | dispose() {
    method showTextInStatusBar (line 59) | private showTextInStatusBar(text: string) {
    method updateStatusBar (line 68) | public updateStatusBar() {
    method getCurrentProject (line 92) | private getCurrentProject() {

FILE: src/statusbar/index.ts
  class StatusBars (line 6) | class StatusBars implements Disposable {
    method constructor (line 9) | constructor(
    method initialize (line 19) | initialize() {
    method dispose (line 24) | dispose() {

FILE: src/statusbar/targetStatusBar.ts
  class TargetStatusBar (line 12) | class TargetStatusBar implements Disposable {
    method constructor (line 19) | constructor(
    method dispose (line 33) | dispose() {
    method updateStatusBar (line 43) | public async updateStatusBar() {
    method getCurrentProject (line 69) | private getCurrentProject() {

FILE: src/statusbar/versionStatusBar.ts
  class VersionStatusBar (line 13) | class VersionStatusBar implements Disposable {
    method constructor (line 21) | constructor(private dbtProjectContainer: DBTProjectContainer) {
    method dispose (line 32) | dispose() {
    method getDbtText (line 42) | private getDbtText() {
    method onRebuildManifestStatusChange (line 56) | private onRebuildManifestStatusChange(
    method onDBTInstallationVerification (line 79) | private async onDBTInstallationVerification(
    method showTextInStatusBar (line 96) | private showTextInStatusBar(text: string, command?: Command) {

FILE: src/telemetry/events.ts
  type TelemetryEventPriority (line 1) | enum TelemetryEventPriority {
  type TelemetryEvents (line 9) | enum TelemetryEvents {

FILE: src/telemetry/index.ts
  class TelemetryService (line 4) | class TelemetryService implements vscode.Disposable {
    method constructor (line 11) | constructor() {
    method setTelemetryCustomAttribute (line 15) | setTelemetryCustomAttribute(key: string, value: string) {
    method startTelemetryEvent (line 19) | startTelemetryEvent(
    method endTelemetryEvent (line 29) | endTelemetryEvent(
    method getFeatureName (line 50) | private getFeatureName(eventName: string) {
    method sendTelemetryEvent (line 58) | sendTelemetryEvent(
    method sendTelemetryError (line 85) | sendTelemetryError(
    method removeGenericSecretsFromStackTrace (line 118) | private removeGenericSecretsFromStackTrace(
    method dispose (line 130) | dispose(): void {

FILE: src/test/common.ts
  class MockEventEmitter (line 1) | class MockEventEmitter<T> {
    method fire (line 16) | fire(data: T): void {
    method dispose (line 20) | dispose(): void {

FILE: src/test/integration/helpers/fixtureLoader.ts
  type FormatterFixture (line 4) | interface FormatterFixture {
  function loadFormatterFixtures (line 17) | function loadFormatterFixtures(

FILE: src/test/integration/helpers/sqlfmtRunner.ts
  function isShandySqlfmt (line 10) | function isShandySqlfmt(candidatePath: string): boolean {
  function findSqlfmt (line 30) | function findSqlfmt(): string | null {
  type SqlfmtResult (line 60) | interface SqlfmtResult {
  type SqlfmtFormatResult (line 66) | interface SqlfmtFormatResult {
  function runSqlfmt (line 82) | function runSqlfmt(sqlContent: string): SqlfmtResult {
  function runSqlfmtFormat (line 115) | function runSqlfmtFormat(sqlContent: string): SqlfmtFormatResult {
  function postProcessDiff (line 147) | function postProcessDiff(diff: string): string {

FILE: src/test/integration/index.ts
  function run (line 5) | async function run(): Promise<void> {

FILE: src/test/integration/runTests.ts
  function main (line 4) | async function main() {

FILE: src/test/mock/lib.ts
  type NotebookKernelClient (line 1) | interface NotebookKernelClient {
  type NotebookDependencies (line 6) | interface NotebookDependencies {

FILE: src/test/mock/node-fetch.ts
  class AbortError (line 2) | class AbortError extends Error {
    method constructor (line 3) | constructor(message: string) {

FILE: src/test/mock/vscode.ts
  class Position (line 14) | class Position {
    method constructor (line 15) | constructor(
    method isEqual (line 21) | isEqual(other: Position): boolean {
    method isBefore (line 25) | isBefore(other: Position): boolean {
    method isAfter (line 32) | isAfter(other: Position): boolean {
    method isBeforeOrEqual (line 39) | isBeforeOrEqual(other: Position): boolean {
    method isAfterOrEqual (line 43) | isAfterOrEqual(other: Position): boolean {
  class Range (line 48) | class Range {
    method constructor (line 52) | constructor(start: Position, end: Position) {
  class Location (line 58) | class Location {
    method constructor (line 60) | constructor(
  method constructor (line 82) | constructor(
  method constructor (line 89) | constructor(
  class TextEdit (line 96) | class TextEdit {
    method constructor (line 97) | constructor(
    method insert (line 102) | static insert(position: Position, newText: string): TextEdit {
    method replace (line 106) | static replace(range: Range, newText: string): TextEdit {
    method delete (line 110) | static delete(range: Range): TextEdit {
  class EventEmitter (line 197) | class EventEmitter<T> {
    method fire (line 212) | fire(data: T): void {
    method dispose (line 216) | dispose(): void {

FILE: src/test/suite/altimate.test.ts
  type FetchFn (line 12) | type FetchFn = (

FILE: src/test/suite/conversationProvider.test.ts
  function extractHighlight (line 17) | function extractHighlight(

FILE: src/test/suite/coverage.ts
  function setupCoverage (line 15) | function setupCoverage() {

FILE: src/test/suite/dbtProject.test.ts
  method constructor (line 76) | constructor(message?: string) {
  method constructor (line 88) | constructor(message: string) {

FILE: src/test/suite/dbtWorkspaceFolder.test.ts
  function contains (line 16) | function contains(

FILE: src/test/suite/extension.test.ts
  method isActive (line 69) | get isActive() {

FILE: src/test/suite/index.ts
  function run (line 6) | async function run(): Promise<void> {

FILE: src/test/suite/jinjaGrammar.test.ts
  function toJsRegex (line 17) | function toJsRegex(pattern: string, extraFlags = ""): RegExp {

FILE: src/test/suite/mcpSchemaCompat.test.ts
  function toToolInput (line 23) | function toToolInput(schema: z.ZodType): Record<string, unknown> {

FILE: src/test/suite/runTest.ts
  function main (line 4) | async function main() {

FILE: src/treeview_provider/index.ts
  class TreeviewProviders (line 11) | class TreeviewProviders implements Disposable {
    method constructor (line 14) | constructor(
    method dispose (line 50) | dispose() {

FILE: src/treeview_provider/modelTreeviewProvider.ts
  type IconPath (line 37) | interface IconPath {
  method constructor (line 55) | constructor(label: string, key: string, url?: string) {
  class Model (line 62) | class Model extends Node {}
  class Seed (line 64) | class Seed extends Node {}
  class Test (line 65) | class Test extends Node {
  class Analysis (line 75) | class Analysis extends Node {
  class Exposure (line 78) | class Exposure extends Node {
  class Function (line 81) | class Function extends Node {
  class Metric (line 84) | class Metric extends Node {
  class Snapshot (line 88) | class Snapshot extends Node {}
  class Source (line 90) | class Source extends Node {
  method constructor (line 111) | constructor(
  method dispose (line 129) | dispose() {
  method onManifestCacheChanged (line 138) | private onManifestCacheChanged(event: ManifestCacheChangedEvent): void {
  method getTreeItem (line 148) | getTreeItem(element: NodeTreeItem): NodeTreeItem | Thenable<ModelTreeIte...
  method getChildren (line 152) | getChildren(element?: NodeTreeItem): Thenable<NodeTreeItem[]> {
  method nodeDataToNode (line 187) | private nodeDataToNode(nodeData: NodeData): Node | undefined {
  method getNodeTreeItem (line 216) | private getNodeTreeItem(node: Node): NodeTreeItem {
  method getTreeItems (line 241) | private getTreeItems(
  class DocumentationTreeviewProvider (line 278) | @provide(DocumentationTreeviewProvider)
    method constructor (line 287) | constructor(private dbtProjectContainer: DBTProjectContainer) {
    method onManifestCacheChanged (line 301) | private onManifestCacheChanged(event: ManifestCacheChangedEvent): void {
    method getTreeItem (line 311) | getTreeItem(element: DocTreeItem): TreeItem {
    method getChildren (line 322) | getChildren(element: DocTreeItem): ProviderResult<DocTreeItem[]> {
    method refresh (line 392) | refresh(): void {
  class DocTreeItem (line 397) | class DocTreeItem extends TreeItem {
    method constructor (line 403) | constructor(node: DocNode) {
  class DocNode (line 423) | class DocNode extends Node {
    method constructor (line 426) | constructor(label: string, key: string, url: string, description: stri...
  class NodeTreeItem (line 432) | class NodeTreeItem extends TreeItem {
    method constructor (line 438) | constructor(node: Node) {
    method setDepth (line 457) | setDepth(depth: number) {
  class ActionTreeItem (line 473) | class ActionTreeItem extends TreeItem {
    method constructor (line 476) | constructor(
  class IconActionsTreeviewProvider (line 489) | @provide(IconActionsTreeviewProvider)
    method getTreeItem (line 492) | getTreeItem(element: ActionTreeItem): ActionTreeItem {
    method getChildren (line 500) | getChildren(element: ActionTreeItem): ProviderResult<ActionTreeItem[]> {
  class ModelTreeItem (line 542) | class ModelTreeItem extends NodeTreeItem {
  class SourceTreeItem (line 546) | class SourceTreeItem extends NodeTreeItem {
  class SeedTreeItem (line 558) | class SeedTreeItem extends NodeTreeItem {
  class SnapshotTreeItem (line 570) | class SnapshotTreeItem extends NodeTreeItem {
  class ExposureTreeItem (line 582) | class ExposureTreeItem extends NodeTreeItem {
  class FunctionTreeItem (line 594) | class FunctionTreeItem extends NodeTreeItem {
  class AnalysisTreeItem (line 598) | class AnalysisTreeItem extends NodeTreeItem {
  class TestTreeItem (line 602) | class TestTreeItem extends NodeTreeItem {
  class ModelTestTreeview (line 614) | class ModelTestTreeview extends ModelTreeviewProvider {
    method constructor (line 615) | constructor(dbtProjectContainer: DBTProjectContainer) {
  class ParentModelTreeview (line 620) | class ParentModelTreeview extends ModelTreeviewProvider {
    method constructor (line 621) | constructor(dbtProjectContainer: DBTProjectContainer) {
  class ChildrenModelTreeview (line 626) | class ChildrenModelTreeview extends ModelTreeviewProvider {
    method constructor (line 627) | constructor(dbtProjectContainer: DBTProjectContainer) {
  class DocumentationTreeview (line 632) | class DocumentationTreeview extends DocumentationTreeviewProvider {
    method constructor (line 633) | constructor(dbtProjectContainer: DBTProjectContainer) {
  class IconActionsTreeview (line 638) | class IconActionsTreeview extends IconActionsTreeviewProvider {}
  function lookupModelByEditorContent (line 641) | function lookupModelByEditorContent(

FILE: src/treeview_provider/runHistoryTreeItems.ts
  class RunTreeItem (line 18) | class RunTreeItem extends TreeItem {
    method constructor (line 19) | constructor(public readonly entry: RunResultsEventData) {
    method getCollapsibleState (line 28) | private static getCollapsibleState(
    method getDescription (line 37) | private static getDescription(entry: RunResultsEventData): string {
    method getIcon (line 59) | private static getIcon(entry: RunResultsEventData): ThemeIcon {
    method getTooltip (line 81) | private static getTooltip(entry: RunResultsEventData): string {
  function getStatusIcon (line 96) | function getStatusIcon(status: RunStatus): {
  class ResultTreeItem (line 118) | class ResultTreeItem extends TreeItem {
    method constructor (line 119) | constructor(public readonly result: RunResultEntry) {
    method getDisplayName (line 128) | static getDisplayName(result: RunResultEntry): string {
    method formatTestName (line 137) | private static formatTestName(result: RunResultEntry): string {
    method getDescription (line 148) | private static getDescription(result: RunResultEntry): string {
    method getIcon (line 157) | private static getIcon(result: RunResultEntry): ThemeIcon {
    method getTooltip (line 162) | private static getTooltip(result: RunResultEntry): string {
  type RunHistoryTreeItem (line 178) | type RunHistoryTreeItem = RunTreeItem | ResultTreeItem;

FILE: src/treeview_provider/runHistoryTreeviewProvider.ts
  class RunHistoryTreeviewProvider (line 15) | class RunHistoryTreeviewProvider
    method constructor (line 26) | constructor(private runHistoryService: RunHistoryService) {
    method getTreeItem (line 35) | getTreeItem(element: RunHistoryTreeItem): TreeItem {
    method getChildren (line 40) | getChildren(element?: RunHistoryTreeItem): RunHistoryTreeItem[] {
    method dispose (line 53) | dispose(): void {

FILE: src/types.ts
  constant TYPES (line 1) | const TYPES = {

FILE: src/types/istanbul-lib-instrument.d.ts
  type InstrumenterOptions (line 2) | interface InstrumenterOptions {
  type Instrumenter (line 10) | interface Instrumenter {

FILE: src/utils.ts
  function extendErrorWithSupportLinks (line 96) | function extendErrorWithSupportLinks(error: string): string {
  function stripANSI (line 103) | function stripANSI(src: string): string {
  function getFirstWorkspacePath (line 110) | function getFirstWorkspacePath(): string {
  function getFormattedDateTime (line 297) | function getFormattedDateTime(): string {
  type YamlModel (line 326) | interface YamlModel {
  type YamlModelItem (line 331) | interface YamlModelItem {
  function getCurrentlySelectedModelNameInYamlConfig (line 339) | function getCurrentlySelectedModelNameInYamlConfig(): string {
  function removeProtocol (line 394) | function removeProtocol(input: string): string {
  function getDepthColor (line 398) | function getDepthColor(depth: number): string {
  function extractDbtSubcommand (line 429) | function extractDbtSubcommand(command: string): string {
  function resolveSettingsVariables (line 439) | function resolveSettingsVariables(

FILE: src/validation_provider/index.ts
  class ValidationProvider (line 11) | class ValidationProvider implements Disposable {
    method constructor (line 16) | constructor(
    method handleConfigurationChange (line 31) | private handleConfigurationChange() {
    method setDBTContext (line 51) | setDBTContext() {
    method validateCredentials (line 66) | validateCredentials() {
    method validateCredentialsSilently (line 70) | validateCredentialsSilently() {
    method _validateCredentials (line 74) | private async _validateCredentials(silent: boolean) {
    method isAuthenticated (line 125) | isAuthenticated() {
    method throwIfNotAuthenticated (line 129) | throwIfNotAuthenticated() {
    method dispose (line 136) | dispose() {

FILE: src/webview_provider/DbtDocsView.ts
  class DbtDocsView (line 16) | class DbtDocsView extends AltimateWebviewProvider {
    method constructor (line 23) | public constructor(
    method onWebviewReady (line 53) | protected onWebviewReady() {
    method onEvent (line 70) | protected async onEvent({ command, payload }: SharedStateEventEmitterP...
    method renderWebviewView (line 103) | protected renderWebviewView() {
    method renderWebview (line 116) | private renderWebview(webview: WebviewPanel) {

FILE: src/webview_provider/altimateWebviewProvider.ts
  type UpdateConfigProps (line 34) | type UpdateConfigProps = {
  type HandleCommandProps (line 40) | interface HandleCommandProps extends Record<string, unknown> {
  type SharedStateEventEmitterProps (line 45) | interface SharedStateEventEmitterProps {
  type SendMessageProps (line 50) | interface SendMessageProps extends Record<string, unknown> {
  class AltimateWebviewProvider (line 61) | class AltimateWebviewProvider implements WebviewViewProvider {
    method constructor (line 73) | public constructor(
    method isWebviewView (line 98) | public isWebviewView(
    method sendResponseToWebview (line 104) | protected sendResponseToWebview({
    method handleSyncRequestFromWebview (line 129) | protected async handleSyncRequestFromWebview(
    method onManifestCacheChanged (line 166) | protected onManifestCacheChanged(event: ManifestCacheChangedEvent): vo...
    method onEvent (line 175) | protected async onEvent({ command, payload }: SharedStateEventEmitterP...
    method renderWebviewView (line 190) | protected renderWebviewView(webview: Webview) {
    method isUpdateConfigProps (line 198) | private isUpdateConfigProps(
    method onWebviewReady (line 204) | protected onWebviewReady() {
    method handleWarningMessage (line 208) | private async handleWarningMessage(
    method handleCommand (line 226) | protected async handleCommand(message: HandleCommandProps): Promise<vo...
    method checkIfWebviewReady (line 501) | protected async checkIfWebviewReady() {
    method resolveWebviewView (line 512) | resolveWebviewView(
    method setupWebviewOptions (line 522) | private setupWebviewOptions(context: WebviewViewResolveContext) {
    method getHtml (line 541) | protected getHtml(webview: Webview, extensionUri: Uri) {
    method dispose (line 840) | dispose() {
  function getNonce (line 850) | function getNonce() {

FILE: src/webview_provider/datapilotPanel.ts
  class DataPilotPanel (line 25) | class DataPilotPanel extends AltimateWebviewProvider {
    method constructor (line 31) | public constructor(
    method handleCommand (line 64) | async handleCommand(message: HandleCommandProps): Promise<void> {
    method onEvent (line 245) | protected async onEvent({ command, payload }: SharedStateEventEmitterP...
    method onWebviewReady (line 288) | protected onWebviewReady() {
    method postToWebview (line 300) | private postToWebview(message: Record<string, unknown> | undefined) {
    method handleDatapilotEvent (line 317) | private handleDatapilotEvent(

FILE: src/webview_provider/docsEditPanel.ts
  type Source (line 60) | enum Source {
  type MetadataColumn (line 65) | interface MetadataColumn {
  type DBTDocumentationColumn (line 70) | interface DBTDocumentationColumn extends MetadataColumn {
  type DBTDocumentation (line 76) | interface DBTDocumentation {
  type AIColumnDescription (line 88) | interface AIColumnDescription {
  type DocsGenPanelView (line 94) | interface DocsGenPanelView extends WebviewViewProvider {
  class DocsEditViewPanel (line 103) | class DocsEditViewPanel implements WebviewViewProvider {
    method constructor (line 116) | public constructor(
    method getProject (line 153) | private getProject(): DBTProject | undefined {
    method transmitError (line 161) | private async transmitError() {
    method transmitData (line 169) | private async transmitData() {
    method getDocBlocksForCurrentProject (line 188) | private getDocBlocksForCurrentProject(): Array<{
    method transmitColumns (line 210) | private async transmitColumns(columns: MetadataColumn[]) {
    method transmitConfig (line 219) | private async transmitConfig() {
    method updateGraphStyle (line 228) | private async updateGraphStyle() {
    method resolveWebviewView (line 243) | public async resolveWebviewView(
    method resolveWebview (line 258) | public async resolveWebview(
    method renderWebviewView (line 269) | private renderWebviewView(context: WebviewViewResolveContext) {
    method setupWebviewOptions (line 274) | private setupWebviewOptions(context: WebviewViewResolveContext) {
    method getTestDataByModel (line 284) | private getTestDataByModel(
    method getTestMetadataKwArgs (line 347) | private getTestMetadataKwArgs(
    method getTestDataByColumn (line 371) | private getTestDataByColumn(
    method convertColumnNamesByCaseConfig (line 491) | private convertColumnNamesByCaseConfig(
    method setOrDeleteInParsedDocument (line 531) | private setOrDeleteInParsedDocument(
    method findEntityInParsedDoc (line 543) | private findEntityInParsedDoc(
    method setupWebviewHooks (line 571) | private setupWebviewHooks(context: WebviewViewResolveContext) {
    method reloadDocumentationFromManifest (line 899) | private async reloadDocumentationFromManifest() {
    method saveDocumentation (line 907) | private async saveDocumentation(message: any, syncRequestId: string) {
    method handleSyncRequestFromWebview (line 1137) | private async handleSyncRequestFromWebview(
    method sendResponseToWebview (line 1172) | private sendResponseToWebview({
    method onManifestCacheChanged (line 1191) | private async onManifestCacheChanged(event: ManifestCacheChangedEvent) {
  function getHtml (line 1211) | function getHtml(webview: Webview, extensionUri: Uri) {
  function getNonce (line 1231) | function getNonce() {
  function getUri (line 1241) | function getUri(webview: Webview, extensionUri: Uri, pathList: string[]) {

FILE: src/webview_provider/index.ts
  class WebviewViewProviders (line 8) | class WebviewViewProviders implements Disposable {
    method constructor (line 11) | constructor(
    method dispose (line 47) | dispose() {

FILE: src/webview_provider/insightsPanel.ts
  type UpdateConfigPropsArray (line 37) | type UpdateConfigPropsArray = {
  type DbtProject (line 42) | interface DbtProject {
  type SelectFilesProps (line 47) | type SelectFilesProps = {
  type PromptAnswer (line 52) | enum PromptAnswer {
  class InsightsPanel (line 56) | class InsightsPanel extends AltimateWebviewProvider {
    method constructor (line 63) | public constructor(
    method getCurrentProject (line 138) | private getCurrentProject() {
    method updateDeferConfig (line 150) | private async updateDeferConfig(
    method fetchProjectIntegrations (line 251) | private async fetchProjectIntegrations(
    method testRemoteManifest (line 326) | private async testRemoteManifest(
    method getProjects (line 367) | private async getProjects(syncRequestId: string | undefined) {
    method selectDirectoryForManifest (line 407) | private async selectDirectoryForManifest(syncRequestId?: string) {
    method selectFiles (line 433) | private async selectFiles(
    method emitError (line 467) | private emitError(syncRequestId: string | undefined, errorMsg: string) {
    method altimateScan (line 475) | private async altimateScan(
    method handleCommand (line 603) | async handleCommand(message: HandleCommandProps): Promise<void> {

FILE: src/webview_provider/lineagePanel.ts
  type LineagePanelView (line 22) | interface LineagePanelView extends WebviewViewProvider {
  class LineagePanel (line 30) | class LineagePanel implements WebviewViewProvider, Disposable {
    method constructor (line 39) | public constructor(
    method getPanel (line 63) | private getPanel() {
    method onManifestCacheChanged (line 67) | private onManifestCacheChanged(event: ManifestCacheChangedEvent): void {
    method dispose (line 77) | dispose() {
    method resolveWebviewView (line 95) | resolveWebviewView(

FILE: src/webview_provider/newDocsGenPanel.ts
  class NewDocsGenPanel (line 32) | class NewDocsGenPanel
    method constructor (line 40) | public constructor(
    method onManifestCacheChanged (line 68) | protected onManifestCacheChanged(event: ManifestCacheChangedEvent): vo...
    method onWebviewReady (line 72) | protected onWebviewReady() {
    method transmitConversationsData (line 77) | private transmitConversationsData() {
    method resolveWebview (line 91) | resolveWebview(
    method getDbtTestCode (line 99) | private getDbtTestCode(test: TestMetaData, modelName: string) {
    method createConversation (line 117) | private async createConversation({
    method handleCommand (line 150) | async handleCommand(message: HandleCommandProps): Promise<void> {
    method onEvent (line 287) | protected async onEvent({ command, payload }: SharedStateEventEmitterP...

FILE: src/webview_provider/newLineagePanel.ts
  class DerivedCancellationTokenSource (line 38) | class DerivedCancellationTokenSource extends CancellationTokenSource {
    method constructor (line 39) | constructor(linkedToken: CancellationToken) {
  class NewLineagePanel (line 47) | class NewLineagePanel
    method constructor (line 56) | public constructor(
    method changedActiveTextEditor (line 80) | public changedActiveTextEditor(event: TextEditor | undefined) {
    method eventMapChanged (line 90) | eventMapChanged(eventMap: Map<string, ManifestCacheProjectAddedEvent>)...
    method changedActiveColorTheme (line 95) | changedActiveColorTheme() {
    method init (line 111) | init() {
    method renderStartingNode (line 117) | private renderStartingNode() {
    method handleCommand (line 127) | async handleCommand(message: {
    method handleColumnLineage (line 315) | private async handleColumnLineage(
    method addModelColumnsFromDB (line 352) | private async addModelColumnsFromDB(project: DBTProject, node: NodeMet...
    method addSourceColumnsFromDB (line 358) | private async addSourceColumnsFromDB(
    method getExposureDetails (line 371) | private async getExposureDetails({
    method getFunctionDetails (line 394) | private async getFunctionDetails({
    method getColumns (line 411) | private async getColumns({
    method getFilename (line 591) | private getFilename(): string | undefined {
    method getMissingLineageMessage (line 604) | private getMissingLineageMessage() {
    method getStartingNode (line 623) | private getStartingNode():
    method renderWebviewView (line 693) | protected renderWebviewView(webview: Webview) {

FILE: src/webview_provider/onboardingPanel.ts
  class OnboardingPanel (line 26) | class OnboardingPanel extends AltimateWebviewProvider {
    method constructor (line 32) | public constructor(
    method initializePythonEnvironmentListener (line 66) | private async initializePythonEnvironmentListener() {
    method onEvent (line 95) | protected async onEvent({ command, payload }: SharedStateEventEmitterP...
    method renderWebviewView (line 155) | protected renderWebviewView() {
    method renderWebview (line 168) | private renderWebview(webview: WebviewPanel) {
    method onWebviewReady (line 173) | protected onWebviewReady() {
    method handleCommand (line 186) | async handleCommand(message: HandleCommandProps): Promise<void> {

FILE: src/webview_provider/queryResultPanel.ts
  type JsonObj (line 47) | interface JsonObj {
  type QueryPanelViewType (line 51) | enum QueryPanelViewType {
  type OutboundCommand (line 57) | enum OutboundCommand {
  type RenderQuery (line 66) | interface RenderQuery {
  type RenderError (line 74) | interface RenderError {
  type InjectConfig (line 80) | interface InjectConfig {
  type InboundCommand (line 86) | enum InboundCommand {
  type RecInfo (line 108) | interface RecInfo {
  type RecSummary (line 112) | interface RecSummary {
  type RecTroubleshoot (line 116) | interface RecTroubleshoot {
  type RecError (line 123) | interface RecError {
  type RecConfig (line 127) | interface RecConfig {
  type RecOpenUrl (line 132) | interface RecOpenUrl {
  type QueryHistory (line 136) | interface QueryHistory {
  class QueryResultPanel (line 149) | class QueryResultPanel extends AltimateWebviewProvider {
    method constructor (line 162) | public constructor(
    method sendUpdatedContextToWebview (line 221) | private async sendUpdatedContextToWebview() {
    method collectQueryResultsDebugInfo (line 244) | private collectQueryResultsDebugInfo() {
    method updateEnableNotebooksInContext (line 251) | private updateEnableNotebooksInContext() {
    method createQueryResultsPanelVirtualDocument (line 260) | private async createQueryResultsPanelVirtualDocument(editorName: strin...
    method updateViewTypeToWebview (line 277) | private updateViewTypeToWebview(viewType: QueryPanelViewType) {
    method onEvent (line 284) | protected async onEvent({ command, payload }: SharedStateEventEmitterP...
    method resolveWebviewView (line 309) | public async resolveWebviewView(
    method bindWebviewOptions (line 330) | private bindWebviewOptions(context: WebviewViewResolveContext) {
    method getProject (line 341) | private async getProject(projectName?: string) {
    method executeIncomingQuery (line 353) | private async executeIncomingQuery(message: {
    method handleOpenCodeInEditor (line 396) | private async handleOpenCodeInEditor(message: {
    method setupWebviewHooks (line 407) | private setupWebviewHooks() {
    method executeQueryFromActiveWindow (line 598) | private async executeQueryFromActiveWindow(message: { limit: number }) {
    method sendQueryPanelViewEvent (line 631) | private sendQueryPanelViewEvent() {
    method renderWebviewView (line 642) | protected renderWebviewView(webview: Webview) {
    method transmitData (line 650) | private async transmitData(
    method transmitError (line 675) | private async transmitError(
    method transmitConfig (line 690) | private transmitConfig() {
    method transmitLoading (line 708) | private async transmitLoading() {
    method transmitReset (line 724) | private async transmitReset() {
    method transmitDataWrapper (line 734) | private async transmitDataWrapper(result: ExecuteSQLResult, query: str...
    method updateQueryHistory (line 754) | private updateQueryHistory(
    method executeQuery (line 808) | public async executeQuery(
    method onWebviewReady (line 888) | protected onWebviewReady() {

FILE: src/webview_provider/sqlLineagePanel.ts
  type SQLLineage (line 35) | type SQLLineage = {
  class SQLLineagePanel (line 42) | class SQLLineagePanel
    method constructor (line 51) | public constructor(
    method dispose (line 87) | dispose() {
    method changedActiveColorTheme (line 96) | changedActiveColorTheme() {
    method getEvent (line 112) | private getEvent(): ManifestCacheProjectAddedEvent | undefined {
    method getActiveEditorFilename (line 120) | getActiveEditorFilename() {
    method getProject (line 124) | private getProject() {
    method getMissingLineageMessage (line 132) | private getMissingLineageMessage() {
    method getSQLLineage (line 144) | async getSQLLineage(token: CancellationToken): Promise<SQLLineage> {
    method renderSqlVisualizer (line 249) | async renderSqlVisualizer(
    method handleCommand (line 266) | async handleCommand(message: {
    method addModelColumnsFromDB (line 319) | private async addModelColumnsFromDB(project: DBTProject, node: NodeMet...
    method addSourceColumnsFromDB (line 325) | private async addSourceColumnsFromDB(
    method getColumns (line 338) | private async getColumns({

FILE: test-fixtures/dbt-core-sample-duckdb/models/01-raw/t_raw_go_1k.py
  function model (line 20) | def model(dbt, session):  # pylint: disable=unused-argument # noqa: ARG001

FILE: test-fixtures/dbt-core-sample-duckdb/models/01-raw/t_raw_go_daily_sales.py
  function model (line 22) | def model(dbt, session):  # pylint: disable=unused-argument # noqa: ARG001

FILE: test-fixtures/dbt-core-sample-duckdb/models/01-raw/t_raw_go_products.py
  function model (line 21) | def model(dbt, session):  # pylint: disable=unused-argument # noqa: ARG001

FILE: test-fixtures/dbt-core-sample-duckdb/models/01-raw/t_raw_go_retailers.py
  function model (line 21) | def model(dbt, session):  # pylint: disable=unused-argument # noqa: ARG001

FILE: test-fixtures/dbt-core-sample-duckdb/shared_utils/config.py
  function get_db_config (line 7) | def get_db_config(database: str) -> dict:

FILE: test-fixtures/dbt-core-sample-duckdb/shared_utils/db_utils.py
  function db_query (line 11) | def db_query(sql: str, database: str) -> pd.DataFrame:

FILE: test-fixtures/dbt-core-sample-duckdb/tests/test_config.py
  function test_get_db_config_valid (line 11) | def test_get_db_config_valid(_):
  function test_get_db_config_invalid (line 18) | def test_get_db_config_invalid(_):

FILE: test-fixtures/dbt-core-sample-duckdb/tests/test_db_utils.py
  function test_db_query_success (line 12) | def test_db_query_success(mock_read_sql, mock_connect, mock_get_config):

FILE: webview_panels/.storybook/__mocks__/vscode.ts
  function decorator (line 47) | function decorator(story, { parameters }) {

FILE: webview_panels/.storybook/main.ts
  method viteFinal (line 25) | async viteFinal(config) {

FILE: webview_panels/src/assets/icons/index.tsx
  type Props (line 36) | interface Props {

FILE: webview_panels/src/lib/altimate/DbtDocsRenderer.js
  function e (line 5) | function e(u) {
  function r (line 149) | function r(yt) {
  function l (line 152) | function l() {
  function h (line 154) | function h(yt, ft, Rt, Wt, le) {
  function p (line 169) | function p(yt, ft) {
  function v (line 173) | function v(yt, ft) {
  function s (line 178) | function s(yt, ft) {
  function j (line 186) | function j(yt) {
  function R (line 195) | function R(yt, ft) {
  function M (line 203) | function M(yt, ft) {
  function z (line 208) | function z(yt, ft) {
  function V (line 213) | function V(yt, ft) {
  function G (line 216) | function G(yt, ft) {
  function Y (line 226) | function Y(yt, ft) {
  function Z (line 233) | function Z(yt, ft, Rt) {
  function gt (line 251) | function gt(yt, ft) {
  function be (line 261) | function be(yt, ft) {
  function ce (line 273) | function ce() {
  function xe (line 303) | function xe(yt, ft) {
  function we (line 309) | function we(yt) {
  function ae (line 312) | function ae(yt, ft) {
  function Le (line 317) | function Le(yt) {
  function lt (line 326) | function lt(yt, ft) {
  function h (line 402) | function h(d) {
  function A (line 1317) | function A(p) {
  function w (line 1324) | function w() {
  function E (line 1332) | function E() {
  function c (line 1351) | function c(p, f) {
  function a (line 1357) | function a(p, f) {
  function i (line 1388) | function i(p, f) {
  function d (line 1393) | function d(p) {
  function y (line 1716) | function y(s, S) {
  function x (line 1719) | function x(s, S) {
  function g (line 1723) | function g(s) {
  function o (line 1730) | function o(s) {
  function c (line 1734) | function c(s) {
  function t (line 1759) | function t(s) {
  function v (line 1783) | function v(s) {
  function k (line 1789) | function k(s, S) {
  function g (line 1804) | function g(o, c, a) {
  function y (line 1850) | function y(r) {
  function g (line 1856) | function g(r) {
  function r (line 1865) | function r() {
  function o (line 2014) | function o(c, a, n, t, r) {
  function o (line 2075) | function o(a, n, t) {
  function a (line 2094) | function a(n, t, r, l, h) {
  function t (line 2202) | function t(r, l, h, i) {
  function x (line 2295) | function x() {
  function w (line 2398) | function w(y, x, g, o) {
  function E (line 2405) | function E(y) {
  function w (line 3111) | function w(rt, pt) {
  function E (line 3128) | function E(rt) {
  function y (line 3132) | function y(rt) {
  function x (line 3135) | function x(rt) {
  function g (line 3138) | function g(rt) {
  function o (line 3141) | function o(rt) {
  function c (line 3144) | function c(rt) {
  function R (line 3157) | function R(rt, pt) {
  function V (line 3167) | function V(rt) {
  function G (line 3170) | function G(rt) {
  function Y (line 3173) | function Y(rt) {
  function tt (line 3178) | function tt(rt) {
  function Z (line 3184) | function Z(rt) {
  function gt (line 3192) | function gt(rt, pt) {
  function xt (line 3208) | function xt(rt) {
  function St (line 3215) | function St(rt) {
  function zt (line 3220) | function zt(rt, pt) {
  function Nt (line 3229) | function Nt(rt) {
  function re (line 3232) | function re(rt) {
  function be (line 3240) | function be(rt, pt, $t, It) {
  function ne (line 3295) | function ne(rt, pt) {
  function ce (line 3298) | function ce(rt) {
  function xe (line 3304) | function xe(rt) {
  function le (line 3315) | function le(rt) {
  function ye (line 3320) | function ye(rt) {
  function pe (line 3325) | function pe(rt) {
  function je (line 3330) | function je(rt) {
  function Me (line 3335) | function Me(rt, pt) {
  function rr (line 3348) | function rr(rt) {
  function zr (line 3357) | function zr(rt, pt) {
  function ln (line 3361) | function ln(rt) {
  function mn (line 3364) | function mn(rt, pt) {
  function un (line 3367) | function un(rt) {
  function Kr (line 3370) | function Kr(rt) {
  function yn (line 3373) | function yn(rt, pt) {
  function nn (line 3380) | function nn(rt, pt, $t) {
  function Ei (line 3384) | function Ei(rt, pt) {
  function ri (line 3392) | function ri(rt) {
  function Yn (line 3395) | function Yn(rt) {
  function tn (line 3400) | function tn(rt) {
  function xn (line 3405) | function xn(rt, pt, $t) {
  function Tn (line 3425) | function Tn(rt, pt, $t) {
  function Kn (line 3428) | function Kn(rt, pt) {
  function ar (line 3431) | function ar(rt, pt, $t) {
  function Yr (line 3434) | function Yr(rt, pt, $t) {
  function gn (line 3442) | function gn() {
  function vn (line 3444) | function vn(rt) {
  function Wr (line 3449) | function Wr(rt, pt, $t) {
  function Ur (line 3455) | function Ur(rt, pt) {
  function Fn (line 3462) | function Fn(rt) {
  function $a (line 3489) | function $a(rt) {
  function wo (line 3493) | function wo(rt, pt, $t) {
  function Vn (line 3534) | function Vn(rt, pt, $t) {
  function ko (line 3544) | function ko(rt) {
  function Ao (line 3548) | function Ao(rt) {
  function Po (line 3552) | function Po(rt, pt, $t, It, ee) {
  function Ri (line 3574) | function Ri(rt, pt, $t, It) {
  function wn (line 3596) | function wn(rt, pt) {
  function Dn (line 3608) | function Dn(rt, pt, $t) {
  function Wi (line 3623) | function Wi(rt, pt, $t) {
  function Eo (line 3634) | function Eo(rt, pt) {
  function hi (line 3637) | function hi(rt) {
  function ro (line 3642) | function ro() {
  function Ro (line 3650) | function Ro(rt, pt) {
  function sr (line 3655) | function sr(rt, pt) {
  function gi (line 3662) | function gi(rt, pt, $t) {
  function ha (line 3667) | function ha(rt) {
  function _i (line 3676) | function _i(rt, pt, $t, It) {
  function Yi (line 3683) | function Yi(rt, pt, $t) {
  function xi (line 3696) | function xi(rt, pt, $t) {
  function Xi (line 3700) | function Xi(rt, pt) {
  function fn (line 3703) | function fn(rt, pt, $t) {
  function mi (line 3713) | function mi(rt, pt, $t) {
  function No (line 3721) | function No(rt) {
  function Zi (line 3736) | function Zi(rt, pt, $t) {
  function qn (line 3742) | function qn(rt, pt, $t) {
  function co (line 3745) | function co(rt, pt, $t) {
  function fo (line 3753) | function fo(rt, pt, $t) {
  function wi (line 3761) | function wi(rt, pt, $t, It) {
  function Uo (line 3775) | function Uo(rt, pt) {
  function ga (line 3778) | function ga(rt, pt) {
  function Vo (line 3781) | function Vo(rt, pt, $t) {
  function io (line 3792) | function io(rt, pt, $t) {
  function Hn (line 3804) | function Hn(rt) {
  function Ni (line 3807) | function Ni(rt, pt, $t) {
  function Mn (line 3817) | function Mn(rt) {
  function Mi (line 3820) | function Mi(rt, pt, $t) {
  function So (line 3836) | function So(rt, pt) {
  function oo (line 3854) | function oo(rt) {
  function Xt (line 3857) | function Xt(rt, pt, $t) {
  function P (line 3875) | function P(rt, pt, $t) {
  function U (line 3878) | function U(rt, pt, $t) {
  function W (line 3881) | function W(rt, pt, $t) {
  function et (line 3884) | function et(rt, pt, $t) {
  function dt (line 3887) | function dt(rt) {
  function mt (line 3890) | function mt(rt, pt) {
  function Zt (line 3900) | function Zt(rt, pt, $t, It) {
  function Ae (line 3911) | function Ae(rt) {
  function de (line 3922) | function de(rt) {
  function Be (line 3928) | function Be(rt, pt) {
  function We (line 3933) | function We(rt, pt, $t) {
  function tr (line 3939) | function tr(rt, pt) {
  function bn (line 3945) | function bn(rt, pt) {
  function Rn (line 3948) | function Rn(rt) {
  function y (line 4013) | function y(x, g, o, c) {
  function i (line 4073) | function i(d) {
  function i (line 4160) | function i(d) {
  function E (line 4229) | function E(g) {
  function x (line 4244) | function x(g, o, c, a) {
  function A (line 4281) | function A(x, g) {
  function w (line 4287) | function w(x, g) {
  function E (line 4295) | function E(x, g) {
  function y (line 4303) | function y(x, g) {
  function g (line 4321) | function g(n, t) {
  function n (line 4342) | function n(t, r, l, h) {
  function i (line 4504) | function i(f) {
  function v (line 4561) | function v($, P, U) {
  function k (line 4568) | function k($) {
  function S (line 4574) | function S($) {
  function on (line 4768) | function on(bt, Pt, Jt, Se) {
  function Ho (line 4802) | function Ho() {
  function Fi (line 4808) | function Fi(bt) {
  function Pi (line 4811) | function Pi(bt) {
  function Ma (line 4821) | function Ma(bt, Pt) {
  function vt (line 4825) | function vt(bt, Pt) {
  function Qo (line 4833) | function Qo(bt) {
  function La (line 4838) | function La(bt) {
  function ho (line 4844) | function ho(bt) {
  function qr (line 4849) | function qr(bt) {
  function lo (line 4857) | function lo(bt) {
  function Go (line 5173) | function Go() {
  function go (line 5175) | function go(bt) {
  function mo (line 5179) | function mo(bt, Pt, Jt) {
  function vo (line 5203) | function vo(bt) {
  function na (line 5209) | function na(bt, Pt, Jt, Se, se) {
  function Ne (line 5214) | function Ne(bt, Pt, Jt, Se, se, Oe) {
  function ps (line 5236) | function ps(bt) {
  function z (line 5380) | function z($, P) {
  function G (line 5384) | function G($, P, U) {
  function nt (line 5451) | function nt($, P) {
  function ct (line 5533) | function ct($) {
  function ot (line 5536) | function ot($) {
  function gt (line 5539) | function gt($, P, U, W) {
  function Zt (line 5652) | function Zt(ve, Ae, de, me) {
  function zt (line 5720) | function zt() {
  function ne (line 5744) | function ne($, P) {
  function ce (line 5747) | function ce($) {
  function we (line 5753) | function we() {
  function Dt (line 5790) | function Dt($, P, U) {
  function je (line 5914) | function je($, P, U, W) {
  function Ze (line 5928) | function Ze($) {
  function ir (line 5932) | function ir($, P) {
  function Kr (line 5960) | function Kr($, P) {
  function yn (line 5964) | function yn($, P) {
  function Ei (line 5970) | function Ei($, P, U, W, et) {
  function xn (line 5986) | function xn() {
  function Tn (line 5989) | function Tn() {
  function Kn (line 5992) | function Kn($, P) {
  function ar (line 6000) | function ar($, P, U, W, et, dt) {
  function Yr (line 6016) | function Yr($, P, U) {
  function Ur (line 6252) | function Ur($, P) {
  function Pn (line 6255) | function Pn($) {
  function Fn (line 6258) | function Fn($) {
  function In (line 6261) | function In($, P) {
  function ni (line 6271) | function ni($, P) {
  function Xn (line 6275) | function Xn($, P, U, W) {
  function ur (line 6296) | function ur($, P, U) {
  function To (line 6441) | function To($, P, U) {
  function wo (line 6445) | function wo($, P) {
  function $ (line 6454) | function $() {
  function P (line 6461) | function P(ve) {
  function Ao (line 6488) | function Ao($) {
  function ui (line 6496) | function ui($, P, U) {
  function Ri (line 6500) | function Ri($, P, U, W, et, dt) {
  function qo (line 6512) | function qo($, P, U) {
  function wn (line 6520) | function wn($, P, U, W, et) {
  function Eo (line 6658) | function Eo() {
  function hi (line 6661) | function hi() {
  function ro (line 6666) | function ro($, P) {
  function Ro (line 6672) | function Ro($, P, U) {
  function sr (line 6676) | function sr($, P, U) {
  function $i (line 6900) | function $i($) {
  function _i (line 6903) | function _i($) {
  function Yi (line 6906) | function Yi($) {
  function qn (line 7121) | function qn($, P, U, W) {
  function Ni (line 7169) | function Ni($) {
  function Mn (line 7178) | function Mn($, P, U, W) {
  function Mi (line 7189) | function Mi($, P) {
  function rt (line 7306) | function rt(pt, $t, It, ee) {
  function n (line 7795) | function n(S, j) {
  function t (line 7809) | function t(S, j) {
  function r (line 7816) | function r(S, j) {
  function l (line 7840) | function l(S) {
  function h (line 7846) | function h(S) {
  function i (line 7850) | function i(S, j) {
  function d (line 7855) | function d(S, j) {
  function v (line 7907) | function v(S, j, I, R) {
  function k (line 7915) | function k(S, j) {
  function s (line 7924) | function s(S, j, I) {
  function E (line 7943) | function E(y, x) {
  function x (line 8016) | function x(g) {
  function w (line 8060) | function w(x, g, o) {
  function x (line 8072) | function x(g, o, c, a, n, t) {
  function y (line 8107) | function y(x, g, o) {
  function w (line 8146) | function w(E, y) {
  function y (line 8179) | function y(x) {
  function E (line 8204) | function E(y, x) {
  function y (line 8254) | function y(x) {
  function f (line 8291) | function f(v, k, s) {
  function o (line 8515) | function o(c) {
  function A (line 8623) | function A() {
  function E (line 8634) | function E(g) {
  function g (line 8666) | function g(o, c, a) {
  function g (line 8702) | function g(ot) {
  function St (line 8720) | function St(zt) {
  function h (line 8725) | function h(ot) {
  function at (line 8773) | function at(ot) {
  function nt (line 8781) | function nt(ot) {
  function ot (line 8797) | function ot(gt) {
  function A (line 8986) | function A(w) {
  function S (line 9130) | function S(I) {
  function o (line 9226) | function o(i, d, p, f) {
  function c (line 9229) | function c(i, d, p, f) {
  function a (line 9238) | function a() {
  function n (line 9242) | function n(i, d, p) {
  function t (line 9246) | function t(i, d, p) {
  function l (line 9281) | function l() {
  function w (line 9792) | function w(E, y) {
  function g (line 9816) | function g(o) {
  function x (line 9824) | function x(g) {
  function w (line 9971) | function w(E) {
  function g (line 9991) | function g(i) {
  function o (line 9994) | function o(i) {
  function c (line 9999) | function c(i) {
  function t (line 10024) | function t(i) {
  function r (line 10027) | function r(i) {
  function l (line 10031) | function l(i) {
  function i (line 10152) | function i(d, p) {
  function y (line 10232) | function y(x) {
  function E (line 10277) | function E(y, x, g, o) {
  function g (line 10330) | function g(o) {
  function i (line 10404) | function i(d) {
  function x (line 10573) | function x(g) {
  function d (line 10634) | function d(p, f) {
  function g (line 10676) | function g(o) {
  function g (line 10705) | function g(o) {
  function E (line 10748) | function E(y) {
  function x (line 10805) | function x(g) {
  function c (line 10858) | function c(h) {
  function E (line 10923) | function E() {
  function x (line 10936) | function x(g) {
  function x (line 11011) | function x(o) {
  function o (line 11033) | function o(c) {
  function E (line 11088) | function E(y) {
  function o (line 11141) | function o() {
  function g (line 11146) | function g(o) {
  function g (line 11170) | function g() {
  function x (line 11175) | function x(g) {
  function o (line 11196) | function o() {
  function g (line 11201) | function g(o) {
  function w (line 11246) | function w(E, y) {
  function w (line 11267) | function w(E) {
  function s (line 11313) | function s() {
  function s (line 11397) | function s(S) {
  function d (line 11456) | function d(s) {
  function f (line 11487) | function f(s, S, j) {
  function v (line 11504) | function v(s) {
  function E (line 11588) | function E(y, x) {
  function A (line 11607) | function A(o) {
  function w (line 11610) | function w(o, c) {
  function E (line 11613) | function E(o, c) {
  function y (line 11616) | function y(o, c, a, n) {
  function x (line 11624) | function x(o, c, a, n) {
  function g (line 11633) | function g(o, c) {
  function x (line 11804) | function x(g) {
  function o (line 11930) | function o() {
  function a (line 12252) | function a(l) {
  function A (line 12269) | function A() {
  function E (line 12440) | function E() {
  function E (line 12512) | function E(y) {
  function A (line 12665) | function A() {
  function A (line 12733) | function A(E) {
  function w (line 12742) | function w() {
  function E (line 12792) | function E(g, o) {
  function y (line 12800) | function y(g, o) {
  function x (line 12805) | function x(g, o, c) {
  function Sn (line 12900) | function Sn(Xt, ke, $) {
  function Do (line 12913) | function Do(Xt, ke, $, P) {
  function Dn (line 12920) | function Dn(Xt, ke) {
  function Wi (line 12924) | function Wi(Xt, ke) {
  function Eo (line 12928) | function Eo(Xt, ke) {
  function hi (line 12933) | function hi(Xt, ke) {
  function ro (line 12940) | function ro(Xt, ke) {
  function Ro (line 12943) | function Ro(Xt, ke, $) {
  function sr (line 12948) | function sr(Xt, ke) {
  function Ci (line 12953) | function Ci(Xt, ke) {
  function gi (line 12958) | function gi(Xt, ke, $, P) {
  function ha (line 12963) | function ha(Xt, ke, $, P) {
  function Io (line 12968) | function Io(Xt, ke) {
  function _i (line 12974) | function _i(Xt, ke, $) {
  function Yi (line 12980) | function Yi(Xt, ke, $, P) {
  function ci (line 12985) | function ci(Xt, ke, $) {
  function Ii (line 12991) | function Ii(Xt, ke, $, P) {
  function xi (line 12995) | function xi(Xt) {
  function Xi (line 12998) | function Xi(Xt, ke) {
  function fn (line 13002) | function fn(Xt) {
  function mi (line 13007) | function mi(Xt) {
  function No (line 13012) | function No(Xt, ke, $, P, U) {
  function no (line 13017) | function no(Xt, ke) {
  function di (line 13024) | function di(Xt, ke) {
  function Zi (line 13028) | function Zi(Xt) {
  function qn (line 13031) | function qn(Xt) {
  function co (line 13036) | function co(Xt, ke) {
  function fo (line 13041) | function fo(Xt, ke) {
  function wi (line 13044) | function wi(Xt, ke) {
  function Oi (line 13048) | function Oi(Xt, ke) {
  function Uo (line 13052) | function Uo(Xt, ke) {
  function io (line 13254) | function io(Xt) {
  function po (line 13257) | function po(Xt) {
  function Hn (line 13260) | function Hn(Xt) {
  function Ni (line 13266) | function Ni(Xt, ke) {
  function Mn (line 13271) | function Mn(Xt, ke) {
  function Mi (line 13278) | function Mi(Xt) {
  function So (line 13284) | function So(Xt) {
  function Li (line 13290) | function Li(Xt) {
  function ki (line 13296) | function ki(Xt) {
  function ji (line 13303) | function ji(Xt) {
  function vt (line 13326) | function vt(b) {
  function b (line 13334) | function b() {
  function La (line 13344) | function La() {
  function ho (line 13346) | function ho(b, C) {
  function qr (line 13349) | function qr(b) {
  function lo (line 13352) | function lo(b) {
  function Go (line 13359) | function Go(b) {
  function go (line 13366) | function go(b) {
  function mo (line 13373) | function mo(b) {
  function vo (line 13377) | function vo(b) {
  function na (line 13381) | function na(b, C) {
  function Ne (line 13387) | function Ne(b) {
  function ps (line 13391) | function ps(b, C) {
  function bt (line 13394) | function bt(b) {
  function Pt (line 13397) | function Pt(b, C, B) {
  function Jt (line 13400) | function Jt(b, C, B) {
  function Se (line 13404) | function Se(b, C) {
  function se (line 13408) | function se(b, C, B, J) {
  function Oe (line 13413) | function Oe(b, C) {
  function De (line 13416) | function De(b, C, B) {
  function Ve (line 13424) | function Ve(b, C) {
  function Ye (line 13429) | function Ye(b, C, B) {
  function hr (line 13432) | function hr(b, C, B, J, ut, Et) {
  function jr (line 13515) | function jr(b, C, B) {
  function Er (line 13524) | function Er(b, C, B) {
  function Vr (line 13530) | function Vr(b, C, B, J) {
  function fi (line 13620) | function fi(b, C) {
  function oi (line 13626) | function oi(b, C, B) {
  function qi (line 13634) | function qi(b, C) {
  function Lr (line 13640) | function Lr(b, C, B, J, ut) {
  function $n (line 13649) | function $n(b, C) {
  function Ji (line 13652) | function Ji(b, C) {
  function ia (line 13655) | function ia(b, C) {
  function oa (line 13660) | function oa(b, C) {
  function hs (line 13665) | function hs(b, C, B) {
  function Ki (line 13669) | function Ki(b) {
  function nl (line 13683) | function nl(b, C) {
  function ju (line 13686) | function ju(b, C) {
  function Tu (line 13689) | function Tu(b, C) {
  function il (line 13692) | function il(b, C, B) {
  function gs (line 13711) | function gs(b, C, B) {
  function Nl (line 13715) | function Nl(b) {
  function ms (line 13718) | function ms(b, C, B, J, ut) {
  function za (line 13796) | function za(b, C, B, J) {
  function Di (line 13815) | function Di(b) {
  function ol (line 13819) | function ol(b) {
  function al (line 13822) | function al(b) {
  function $o (line 13829) | function $o(b) {
  function vs (line 13841) | function vs(b, C) {
  function Ml (line 13844) | function Ml(b, C) {
  function sl (line 13850) | function sl(b) {
  function Ll (line 13856) | function Ll(b, C) {
  function bs (line 13862) | function bs(b, C, B, J, ut) {
  function zl (line 13885) | function zl(b, C) {
  function Oa (line 13889) | function Oa(b, C, B) {
  function Ds (line 13925) | function Ds(b, C, B) {
  function Rs (line 13932) | function Rs(b, C, B, J) {
  function ll (line 13939) | function ll(b, C) {
  function Is (line 13949) | function Is(b, C) {
  function Ka (line 13952) | function Ka(b, C) {
  function xr (line 13960) | function xr(b, C) {
  function ys (line 13963) | function ys(b) {
  function Bl (line 13966) | function Bl(b, C) {
  function ts (line 13970) | function ts(b, C, B, J) {
  function Du (line 13994) | function Du(b) {
  function Wo (line 13997) | function Wo(b, C, B) {
  function Fl (line 14003) | function Fl(b, C) {
  function Ms (line 14009) | function Ms(b, C, B) {
  function ul (line 14020) | function ul(b, C, B, J) {
  function ql (line 14032) | function ql(b, C) {
  function Ul (line 14042) | function Ul(b) {
  function bo (line 14045) | function bo(b) {
  function ya (line 14052) | function ya(b, C, B) {
  function ja (line 14069) | function ja(b, C) {
  function Vl (line 14072) | function Vl(b, C, B, J) {
  function Ba (line 14075) | function Ba(b, C, B, J) {
  function es (line 14079) | function es(b, C) {
  function rs (line 14089) | function rs(b, C, B) {
  function cl (line 14097) | function cl(b, C, B) {
  function dl (line 14104) | function dl(b) {
  function fl (line 14107) | function fl(b) {
  function xa (line 14110) | function xa(b, C) {
  function wa (line 14114) | function wa(b, C, B) {
  function Wl (line 14121) | function Wl(b, C) {
  function pl (line 14126) | function pl(b) {
  function Yl (line 14130) | function Yl(b, C) {
  function hl (line 14134) | function hl(b, C) {
  function gl (line 14144) | function gl(b, C, B, J) {
  function Ls (line 14151) | function Ls(b, C, B, J) {
  function yo (line 14158) | function yo(b, C) {
  function Jo (line 14163) | function Jo(b, C, B, J) {
  function xs (line 14172) | function xs(b, C) {
  function Fa (line 14178) | function Fa(b) {
  function zs (line 14188) | function zs(b, C) {
  function qa (line 14196) | function qa(b) {
  function ws (line 14205) | function ws(b) {
  function aa (line 14211) | function aa(b) {
  function Ua (line 14216) | function Ua(b) {
  function ml (line 14241) | function ml(b) {
  function Mo (line 14254) | function Mo(b) {
  function ns (line 14275) | function ns(b, C, B, J, ut, Et, Lt, Gt, fe, $e) {
  function Bs (line 14290) | function Bs(b, C) {
  function ks (line 14299) | function ks(b, C) {
  function Fs (line 14310) | function Fs(b) {
  function As (line 14320) | function As(b, C) {
  function Xl (line 14326) | function Xl(b) {
  function qs (line 14335) | function qs(b) {
  function Zl (line 14340) | function Zl(b, C, B, J, ut, Et, Lt, Gt, fe, $e) {
  function vl (line 14357) | function vl(b) {
  function Ql (line 14370) | function Ql(b) {
  function ka (line 14380) | function ka(b, C, B, J, ut, Et, Lt, Gt) {
  function Us (line 14441) | function Us(b, C, B, J) {
  function Jl (line 14444) | function Jl(b, C, B, J, ut, Et) {
  function Iu (line 14447) | function Iu(b) {
  function Kl (line 14450) | function Kl(b, C, B, J, ut, Et) {
  function Aa (line 14479) | function Aa(b) {
  function bl (line 14482) | function bl(b) {
  function Vs (line 14485) | function Vs(b) {
  function Es (line 14491) | function Es(b) {
  function is (line 14498) | function is(b) {
  function Sr (line 14501) | function Sr() {
  function Hs (line 14505) | function Hs(b, C) {
  function xl (line 14509) | function xl(b) {
  function Va (line 14516) | function Va(b, C) {
  function Ss (line 14530) | function Ss(b, C, B) {
  function os (line 14538) | function os(b) {
  function Gs (line 14541) | function Gs(b) {
  function Yo (line 14544) | function Yo(b, C) {
  function xo (line 14548) | function xo(b, C, B) {
  function kl (line 14553) | function kl(b, C) {
  function Cs (line 14558) | function Cs(b) {
  function as (line 14583) | function as(b) {
  function tu (line 14587) | function tu(b) {
  function eu (line 14590) | function eu(b, C) {
  function ru (line 14595) | function ru(b, C, B) {
  function nu (line 14604) | function nu(b, C) {
  function Mu (line 14607) | function Mu(b, C) {
  function Ws (line 14614) | function Ws(b, C) {
  function ou (line 14621) | function ou(b, C, B) {
  function au (line 14649) | function au(b) {
  function Ys (line 14659) | function Ys(b, C) {
  function sa (line 14678) | function sa(b) {
  function Ga (line 14683) | function Ga(b) {
  function lu (line 14696) | function lu(b) {
  function uu (line 14710) | function uu(b, C, B) {
  function cu (line 14716) | function cu(b, C, B) {
  function du (line 14722) | function du(b) {
  function El (line 14725) | function El(b) {
  function Lo (line 14738) | function Lo(b) {
  function m (line 14743) | function m(b, C) {
  function D (line 14755) | function D(b) {
  function H (line 14767) | function H(b) {
  function F (line 14776) | function F(b, C) {
  function Tt (line 14797) | function Tt(b) {
  function Vt (line 14801) | function Vt(b, C) {
  function At (line 14818) | function At(b, C) {
  function wt (line 14821) | function wt(b, C) {
  function ue (line 14834) | function ue(b, C) {
  function Xe (line 14851) | function Xe(b, C, B) {
  function He (line 14862) | function He(b, C) {
  function Cr (line 14884) | function Cr(b, C, B) {
  function dn (line 14931) | function dn(b, C) {
  function _n (line 14942) | function _n(b) {
  function cr (line 14974) | function cr(b, C) {
  function Qn (line 14988) | function Qn(b) {
  function zn (line 14991) | function zn(b) {
  function Ko (line 14997) | function Ko(b) {
  function Zo (line 15002) | function Zo(b) {
  function Ta (line 15007) | function Ta(b) {
  function Zs (line 15010) | function Zs(b) {
  function ai (line 15013) | function ai(b) {
  function Un (line 15017) | function Un(b) {
  function gu (line 15023) | function gu(b) {
  function _s (line 15026) | function _s(b) {
  function Xa (line 15038) | function Xa(b) {
  function _o (line 15041) | function _o(b) {
  function Yt (line 15049) | function Yt(b) {
  function Kt (line 15060) | function Kt(b) {
  function te (line 15063) | function te(b) {
  function Ce (line 15067) | function Ce(b) {
  function Pe (line 15070) | function Pe(b) {
  function ze (line 15082) | function ze(b) {
  function qe (line 15085) | function qe(b) {
  function En (line 15109) | function En(b, C, B) {
  function an (line 15113) | function an(b, C) {
  function Gr (line 15121) | function Gr(b) {
  function pn (line 15124) | function pn(b) {
  function Ui (line 15147) | function Ui(b, C) {
  function Jn (line 15157) | function Jn(b) {
  function la (line 15163) | function la(b) {
  function Pa (line 15166) | function Pa(b) {
  function jl (line 15180) | function jl(b, C, B) {
  function Os (line 15200) | function Os(b) {
  function rn (line 15206) | function rn(b) {
  function jn (line 15209) | function jn(b) {
  function Da (line 15221) | function Da(b, C, B) {
  function ua (line 15237) | function ua() {
  function ss (line 15240) | function ss(b) {
  function uo (line 15248) | function uo() {
  function Ca (line 15251) | function Ca() {
  function A (line 16015) | function A(y) {
  function w (line 16018) | function w(y, x, g, o) {
  function E (line 16029) | function E(y, x, g, o) {
  function w (line 16182) | function w(a, n) {
  function E (line 16186) | function E(a, n, t) {
  function y (line 16191) | function y(a, n, t) {
  function l (line 16225) | function l(i, d) {
  function h (line 16241) | function h(i, d) {
  function A (line 16670) | function A(m) {
  function w (line 16674) | function w(m) {
  function E (line 16677) | function E(m, O) {
  function k (line 16699) | function k(m) {
  function s (line 16705) | function s(m, O, D) {
  function S (line 16722) | function S(m, O, D) {
  function j (line 16727) | function j(m) {
  function I (line 16732) | function I() {
  function R (line 16735) | function R(m, O) {
  function M (line 16738) | function M(m, O, D) {
  function z (line 16749) | function z(m) {
  function V (line 16752) | function V(m) {
  function G (line 16755) | function G(m) {
  function tt (line 16762) | function tt(m, O) {
  function Z (line 16765) | function Z() {
  function at (line 16767) | function at(m) {
  function nt (line 16770) | function nt(m) {
  function ht (line 16775) | function ht(m) {
  function ct (line 16778) | function ct(m) {
  function ot (line 16781) | function ot(m) {
  function gt (line 16784) | function gt(m) {
  function xt (line 16787) | function xt(m) {
  function St (line 16790) | function St(m) {
  function zt (line 16793) | function zt(m) {
  function Nt (line 16796) | function Nt(m) {
  function re (line 16799) | function re(m) {
  function be (line 16802) | function be(m) {
  function ne (line 16812) | function ne(m) {
  function ce (line 16815) | function ce(m) {
  function xe (line 16818) | function xe(m) {
  function we (line 16821) | function we(m) {
  function ae (line 16824) | function ae(m) {
  function Le (line 16827) | function Le(m) {
  function yt (line 16836) | function yt(m) {
  function ft (line 16839) | function ft(m) {
  function Rt (line 16842) | function Rt(m, O) {
  function Wt (line 16845) | function Wt(m, O) {
  function le (line 16849) | function le(m, O, D) {
  function ye (line 16918) | function ye(m, O) {
  function pe (line 16921) | function pe(m, O) {
  function Ze (line 16983) | function Ze(m, O, D) {
  function ir (line 16986) | function ir(m, O) {
  function Ar (line 16989) | function Ar(m, O) {
  function rr (line 16997) | function rr(m, O) {
  function zr (line 17001) | function zr(m, O) {
  function ln (line 17004) | function ln(m) {
  function un (line 17008) | function un(m, O) {
  function Kr (line 17013) | function Kr(m, O) {
  function yn (line 17016) | function yn(m, O, D) {
  function nn (line 17021) | function nn(m) {
  function Ei (line 17032) | function Ei(m) {
  function ri (line 17038) | function ri(m) {
  function Yn (line 17045) | function Yn(m) {
  function tn (line 17048) | function tn(m, O) {
  function Kn (line 17079) | function Kn(m, O) {
  function ar (line 17100) | function ar(m, O, D) {
  function Yr (line 17143) | function Yr() {
  function gn (line 17146) | function gn(m) {
  function Wr (line 17156) | function Wr(m, O) {
  function Pn (line 17162) | function Pn() {
  function Fn (line 17165) | function Fn(m, O, D) {
  function In (line 17170) | function In(m, O, D) {
  function ni (line 17177) | function ni(m, O) {
  function Xn (line 17181) | function Xn(m) {
  function ur (line 17186) | function ur() {
  function _r (line 17189) | function _r(m) {
  function Si (line 17203) | function Si(m, O) {
  function $a (line 17212) | function $a(m, O) {
  function Nn (line 17237) | function Nn(m, O) {
  function pi (line 17240) | function pi(m) {
  function Eo (line 17262) | function Eo(m) {
  function hi (line 17265) | function hi(m) {
  function ro (line 17269) | function ro(m, O) {
  function sr (line 17291) | function sr(m) {
  function Ci (line 17307) | function Ci(m) {
  function gi (line 17310) | function gi(m, O) {
  function ha (line 17313) | function ha(m) {
  function Io (line 17318) | function Io(m) {
  function $i (line 17322) | function $i(m, O, D, N) {
  function _i (line 17344) | function _i(m, O) {
  function Yi (line 17348) | function Yi(m, O) {
  function ci (line 17352) | function ci(m, O, D) {
  function Ii (line 17363) | function Ii(m, O) {
  function xi (line 17366) | function xi(m, O) {
  function Xi (line 17377) | function Xi(m, O) {
  function fn (line 17388) | function fn(m, O) {
  function mi (line 17398) | function mi(m, O) {
  function No (line 17401) | function No(m, O, D) {
  function no (line 17409) | function no(m) {
  function di (line 17412) | function di(m, O) {
  function Zi (line 17417) | function Zi(m) {
  function Oi (line 17460) | function Oi(m, O) {
  function Uo (line 17464) | function Uo(m, O, D) {
  function ga (line 17467) | function ga(m, O, D) {
  function Vo (line 17471) | function Vo() {
  function io (line 17486) | function io(m, O) {
  function m (line 17547) | function m(O, D) {
  function Hn (line 17739) | function Hn() {
  function oo (line 17777) | function oo(m) {
  function Xt (line 17780) | function Xt(m) {
  function ke (line 17784) | function ke(m, O) {
  function $ (line 17939) | function $() {
  function U (line 18014) | function U(m, O) {
  function W (line 18017) | function W(m) {
  function q (line 18042) | function q(H, F, Q) {
  function X (line 18048) | function X() {
  function X (line 18098) | function X(H, F, Q) {
  function D (line 18150) | function D(N) {
  function X (line 18174) | function X(H) {
  function it (line 18193) | function it(st) {
  function Q (line 18264) | function Q() {
  function ve (line 18275) | function ve(m, O, D, N, q) {
  function Ae (line 18334) | function Ae() {
  function de (line 18346) | function de() {
  function me (line 18405) | function me() {
  function tr (line 18415) | function tr(m, O) {
  function bn (line 19364) | function bn(m, O) {
  function Br (line 19371) | function Br(m) {
  function Or (line 19376) | function Or(m, O) {
  function rt (line 19385) | function rt(m) {
  function It (line 19395) | function It(m, O) {
  function ee (line 19401) | function ee() {
  function Ht (line 19457) | function Ht() {
  function he (line 19465) | function he() {
  function Ee (line 19482) | function Ee() {
  function Wn (line 19502) | function Wn(m) {
  function yr (line 19505) | function yr() {
  function Xr (line 19518) | function Xr() {
  function Zn (line 19533) | function Zn(m, O) {
  function ao (line 19555) | function ao(m) {
  function ti (line 19567) | function ti(m) {
  function so (line 19577) | function so(m, O, D, N) {
  function ea (line 19582) | function ea(m) {
  function ei (line 19585) | function ei() {
  function Bi (line 19809) | function Bi() {
  function el (line 19816) | function el() {
  function Ia (line 19883) | function Ia() {
  function cs (line 19990) | function cs() {
  function Na (line 20015) | function Na() {
  function Co (line 20063) | function Co(m, O, D) {
  function ra (line 20075) | function ra(m, O) {
  function ds (line 20080) | function ds(m, O, D) {
  function fs (line 20091) | function fs(m, O) {
  function on (line 20094) | function on(m, O) {
  function Ho (line 20097) | function Ho(m) {
  function Fi (line 20101) | function Fi(m, O, D) {
  function Pi (line 20119) | function Pi(m, O, D) {
  function Ma (line 20132) | function Ma(m, O, D) {
  function Qo (line 20188) | function Qo(m) {
  function La (line 20193) | function La(m, O) {
  function ho (line 20198) | function ho() {
  function qr (line 20286) | function qr() {
  function go (line 20332) | function go(m) {
  function ps (line 20499) | function ps(m, O) {
  function bt (line 20502) | function bt(m, O) {
  function Pt (line 20733) | function Pt(m, O, D) {
  function Jt (line 20800) | function Jt(m) {
  function Se (line 20806) | function Se(m) {
  function se (line 20809) | function se(m) {
  function Oe (line 20818) | function Oe(m) {
  function De (line 20821) | function De(m) {
  function Ve (line 20824) | function Ve(m, O, D) {
  function Ye (line 20827) | function Ye(m) {
  function hr (line 20830) | function hr() {
  function jr (line 20941) | function jr() {
  function Er (line 20959) | function Er() {
  function Vr (line 20977) | function Vr(m, O, D) {
  function Cn (line 21141) | function Cn(m) {
  function Tr (line 21144) | function Tr(m) {
  function fi (line 21147) | function fi(m) {
  function oi (line 21150) | function oi() {
  function qi (line 21170) | function qi() {
  function Lr (line 21489) | function Lr() {
  function Ji (line 22090) | function Ji(m) {
  function ia (line 22093) | function ia(m) {
  function oa (line 22117) | function oa() {
  function hs (line 22234) | function hs() {
  function Ki (line 22272) | function Ki() {
  function nl (line 22298) | function nl() {
  function ju (line 22303) | function ju(m) {
  function il (line 22339) | function il() {
  function gs (line 22376) | function gs() {
  function ms (line 22415) | function ms() {
  function $o (line 22459) | function $o(m) {
  function vs (line 22475) | function vs(m, O) {
  function Ml (line 22478) | function Ml() {
  function sl (line 22481) | function sl(m) {
  function Ll (line 22504) | function Ll() {
  function bs (line 22507) | function bs(m) {
  function zl (line 22526) | function zl() {
  function Oa (line 22562) | function Oa(m, O, D, N, q, X) {
  function Ds (line 22596) | function Ds(m) {
  function Rs (line 22600) | function Rs(m) {
  function ll (line 22608) | function ll(m) {
  function Is (line 22614) | function Is(m, O, D, N, q) {
  function Ka (line 22667) | function Ka(m, O, D, N) {
  function xr (line 22673) | function xr(m, O, D, N, q) {
  function ys (line 22679) | function ys(m, O, D) {
  function Bl (line 22685) | function Bl(m) {
  function ts (line 22689) | function ts(m) {
  function Ns (line 22699) | function Ns(m, O) {
  function Fl (line 22741) | function Fl(m) {
  function Ms (line 22764) | function Ms() {
  function Ul (line 22771) | function Ul() {
  function bo (line 22776) | function bo(m, O, D) {
  function ya (line 22779) | function ya(m) {
  function ja (line 22843) | function ja(m) {
  function q (line 22870) | function q(X, H, F) {
  function rs (line 22921) | function rs(m, O, D, N, q) {
  function N (line 23049) | function N(q) {
  function xa (line 23055) | function xa(m) {
  function Hl (line 23058) | function Hl(m) {
  function wa (line 23079) | function wa(m) {
  function Vt (line 23200) | function Vt(oe, _t) {
  function zs (line 23228) | function zs(m) {
  function qa (line 23233) | function qa(m, O, D, N, q, X) {
  function ws (line 23275) | function ws(m, O) {
  function aa (line 23309) | function aa(m, O, D, N) {
  function Ua (line 23362) | function Ua(m, O, D, N, q) {
  function ml (line 23370) | function ml(m) {
  function Mo (line 23381) | function Mo(m) {
  function ns (line 23384) | function ns(m) {
  function Bs (line 23387) | function Bs(m) {
  function ks (line 23398) | function ks(m, O, D) {
  function Fs (line 23406) | function Fs(m, O, D, N, q) {
  function m (line 23461) | function m(O, D, N) {
  function Us (line 23536) | function Us(m, O) {
  function Es (line 23600) | function Es(m, O, D, N, q, X) {
  function Gs (line 23760) | function Gs(m, O, D, N, q, X, H, F, Q) {
  function F (line 23872) | function F(K, it) {
  function Q (line 23875) | function Q(K) {
  function X (line 23894) | function X() {
  function F (line 23987) | function F() {
  function Cs (line 23999) | function Cs(m) {
  function m (line 24029) | function m(O, D) {
  function as (line 24045) | function as(m, O) {
  function zo (line 24093) | function zo(cr, Jr, An, Ln, er) {
  function br (line 24096) | function br(cr) {
  function Qt (line 24139) | function Qt(wt, Ot) {
  function At (line 24145) | function At(wt) {
  function Bt (line 24227) | function Bt(Qt) {
  function K (line 24502) | function K() {
  function Wa (line 24539) | function Wa(m, O) {
  function X (line 24596) | function X() {
  function F (line 24602) | function F(Q) {
  function Lo (line 24775) | function Lo(m, O, D) {
  function Xs (line 24788) | function Xs(m) {
  function q (line 24847) | function q(H, F, Q) {
  function oe (line 24904) | function oe(Bt, Qt, At, wt) {
  function _t (line 24909) | function _t(Bt, Qt, At) {
  function x (line 25268) | function x(a, n) {
  function g (line 25278) | function g(a, n, t) {
  function l (line 25441) | function l() {
  function x (line 25621) | function x(t) {
  function g (line 25629) | function g(t) {
  function o (line 25633) | function o(t, r, l) {
  function c (line 25651) | function c(t) {
  function a (line 25659) | function a(t, r, l, h, i) {
  function n (line 25674) | function n(t, r, l, h) {
  function I (line 25700) | function I() {
  function M (line 25731) | function M() {
  function I (line 25768) | function I(G) {
  function R (line 25771) | function R() {
  function M (line 25774) | function M(G) {
  function z (line 25785) | function z(G, Y, tt) {
  function V (line 25795) | function V() {
  function A (line 25838) | function A(E) {
  function w (line 25844) | function w(E) {
  function x (line 25854) | function x(a, n, t, r, l) {
  method creationContext (line 25931) | get creationContext() {
  function at (line 25938) | function at(nt) {
  function c (line 25972) | function c(a, n, t, r, l) {
  function A (line 26056) | function A(r, l) {
  function r (line 26070) | function r(h, i) {
  function M (line 26128) | function M(Z) {
  function z (line 26147) | function z() {
  function V (line 26165) | function V(Z) {
  function G (line 26182) | function G(Z) {
  function Y (line 26191) | function Y(Z) {
  function tt (line 26204) | function tt(Z, at) {
  function a (line 26217) | function a(r) {
  function n (line 26220) | function n(r, l, h) {
  function t (line 26248) | function t(r, l, h) {
  function A (line 26274) | function A(w, E, y) {
  function t (line 26326) | function t(r) {
  function E (line 26368) | function E(f) {
  function x (line 26492) | function x(f, v) {
  function g (line 26497) | function g(f) {
  function o (line 26500) | function o() {
  function c (line 26502) | function c(f) {
  function a (line 26505) | function a(f, v) {
  function n (line 26508) | function n(f) {
  function t (line 26516) | function t(f, v) {
  function r (line 26526) | function r(f, v) {
  function i (line 26757) | function i() {
  function d (line 26759) | function d(f) {
  function p (line 26765) | function p(f, v, k) {
  function t (line 27349) | function t(r, l) {
  function g (line 27439) | function g(o) {
  function k (line 28309) | function k(ct) {
  function j (line 28321) | function j(ct, ot) {
  function R (line 28326) | function R(ct, ot) {
  function a (line 28406) | function a(n, t) {
  function a (line 28416) | function a(n) {
  function r (line 28532) | function r(d) {
  function c (line 29140) | function c() {
  function a (line 29143) | function a() {
  function t (line 29182) | function t(d) {
  function l (line 29188) | function l(d) {
  function p (line 29311) | function p(s, S, j) {
  function o (line 29624) | function o(c, a) {
  function o (line 29637) | function o() {
  function t (line 29781) | function t(S) {
  function a (line 31207) | function a(l, h, i, d) {
  function n (line 31218) | function n(l, h, i) {
  function t (line 31225) | function t(l, h, i) {
  function r (line 31231) | function r(l, h, i) {
  function a (line 31315) | function a(t) {
  function n (line 31326) | function n(t, r) {
  function I (line 31500) | function I(V) {
  function S (line 31697) | function S(j) {
  function c (line 32217) | function c(v, k, s) {
  function a (line 32221) | function a(v, k) {
  function n (line 32226) | function n(v, k) {
  function r (line 32359) | function r(v, k) {
  function l (line 32366) | function l(v) {
  function c (line 32407) | function c(n) {
  function a (line 32431) | function a(n) {
  function h (line 32546) | function h(p) {
  function i (line 32555) | function i(p) {
  function d (line 32571) | function d(p) {
  function l (line 32746) | function l(f, v) {
  function n (line 32775) | function n(t, r) {
  function k (line 32869) | function k(at, nt) {
  function s (line 32872) | function s(at, nt) {
  function S (line 32875) | function S(at) {
  function j (line 32878) | function j(at, nt, ht) {
  function I (line 32881) | function I(at, nt, ht) {
  function R (line 32884) | function R(at, nt) {
  function M (line 32892) | function M() {
  function z (line 32895) | function z(at, nt, ht) {
  function V (line 32902) | function V(at) {
  function Y (line 32910) | function Y() {
  function c (line 32931) | function c(t) {
  function a (line 32934) | function a(t, r, l) {
  function n (line 32943) | function n(t, r) {
  function c (line 32959) | function c(n, t, r, l, h) {
  function a (line 32964) | function a(n, t) {
  function i (line 33593) | function i() {
  function d (line 33596) | function d() {
  function d (line 34711) | function d(s, S, j) {
  function p (line 34807) | function p(s, S) {
  function f (line 34810) | function f(s, S, j, I, R) {
  function v (line 34813) | function v(s, S, j, I) {
  function t (line 34867) | function t(r) {
  function t (line 35040) | function t(r) {
  function n (line 35096) | function n(t) {
  function l (line 35191) | function l(k) {
  function n (line 35580) | function n(t) {
  function a (line 35659) | function a(n) {
  function n (line 35690) | function n(t) {
  function n (line 35723) | function n(t) {
  function o (line 35746) | function o(a) {
  function z (line 36039) | function z(nt, ht) {
  function V (line 36055) | function V(nt) {
  function G (line 36068) | function G(nt) {
  function Y (line 36163) | function Y(nt, ht, ct) {
  function tt (line 36166) | function tt(nt, ht) {
  function n (line 36284) | function n(t) {
  function a (line 36623) | function a(n, t, r) {
  function Le (line 36735) | function Le(yt, ft, Rt, Wt, le) {
  function l (line 38311) | function l(i) {
  function d (line 38573) | function d(p, f) {
  function ht (line 39385) | function ht(Rt, Wt, le, ye, pe) {
  function ct (line 39389) | function ct(Rt, Wt) {
  function a (line 39544) | function a(t) {
  function n (line 39548) | function n(t, r, l) {
  function E (line 39665) | function E(y, x) {
  function h (line 39729) | function h(d) {
  function i (line 39732) | function i(d) {
  function w (line 39769) | function w() {
  function E (line 39772) | function E() {
  function y (line 39775) | function y(l) {
  function a (line 39802) | function a() {
  function n (line 39805) | function n() {
  function t (line 39829) | function t(l, h) {
  function r (line 39832) | function r() {
  function l (line 39858) | function l(i) {
  function h (line 39862) | function h(i) {
  function V (line 39882) | function V(nt) {
  function G (line 39886) | function G(nt) {
  function Y (line 39889) | function Y(nt) {
  function tt (line 39893) | function tt() {
  function Z (line 39904) | function Z(nt) {
  function at (line 39907) | function at() {
  function f (line 39992) | function f(v) {
  function r (line 40042) | function r(R) {
  function l (line 40045) | function l(R, M) {
  function h (line 40048) | function h(R) {
  function i (line 40053) | function i(R) {
  function d (line 40056) | function d(R) {
  function p (line 40059) | function p(R, M, z) {
  function f (line 40084) | function f(R, M, z, V) {
  function v (line 40095) | function v(R) {
  function k (line 40098) | function k(R) {
  function s (line 40106) | function s(R, M) {
  function S (line 40110) | function S(R) {
  function j (line 40116) | function j() {
  function I (line 40122) | function I(R) {
  function y (line 40204) | function y(x) {
  function x (line 40244) | function x(n) {
  function a (line 40252) | function a(n) {
  function x (line 40509) | function x(g) {
  function A (line 40973) | function A(w, E) {
  function w (line 41225) | function w(y) {
  function E (line 41231) | function E(y) {
  function x (line 41279) | function x(g) {
  function a (line 41367) | function a(t) {
  function gt (line 41550) | function gt(xt) {
  function S (line 41608) | function S(I, R) {
  function j (line 41611) | function j(I) {
  function c (line 41981) | function c(a) {
  function y (line 42045) | function y(g, o, c, a, n) {
  function x (line 42055) | function x(g, o, c) {
  function e (line 42060) | function e() {
  function u (line 42064) | function u(w) {
  function A (line 42067) | function A(w, E) {
  function y (line 42132) | function y(x) {
  function o (line 42138) | function o(d) {
  function c (line 42143) | function c(d, p) {
  function a (line 42152) | function a(d, p, f) {
  function n (line 42165) | function n(d, p) {
  function t (line 42168) | function t(d, p, f, v, k) {
  function r (line 42174) | function r(d) {
  function l (line 42179) | function l(d, p, f) {
  function h (line 42191) | function h(d, p, f, v) {
  function i (line 42203) | function i(d, p, f) {
  function g (line 42213) | function g(o) {
  function w (line 42294) | function w(E, y, x, g, o, c) {
  function A (line 42311) | function A(x) {
  function w (line 42318) | function w(x) {
  function E (line 42322) | function E(x) {
  function y (line 42325) | function y(x) {
  function c (line 42356) | function c(t, r, l) {
  function a (line 42361) | function a(t, r) {
  function n (line 42370) | function n(t, r) {
  function A (line 42413) | function A(w, E, y) {
  function g (line 42520) | function g(a) {
  function o (line 42528) | function o(a) {
  function w (line 42554) | function w(E, y, x) {
  function E (line 42632) | function E(r, l) {
  function y (line 42652) | function y(r, l) {
  function x (line 42674) | function x(r, l, h) {
  function g (line 42682) | function g(r, l, h) {
  function o (line 42689) | function o(r, l, h, i) {
  function c (line 42709) | function c(r, l, h, i, d) {
  function a (line 42762) | function a(r, l) {
  function n (line 42773) | function n(r, l) {
  function t (line 42787) | function t(r, l) {
  function x (line 43140) | function x(o) {
  function g (line 43143) | function g(o) {
  function g (line 43323) | function g(n, t) {
  function o (line 43331) | function o(n, t) {
  function c (line 43334) | function c(n, t) {
  function a (line 43337) | function a(n) {
  function A (line 43666) | function A(w) {
  function g (line 44221) | function g(o) {
  function l (line 44252) | function l(i) {
  function h (line 44257) | function h(i) {
  function w (line 44512) | function w(E) {
  function l (line 45001) | function l(i, d, p) {
  function h (line 45024) | function h(i, d, p) {
  function A (line 45300) | function A(w) {
  function w (line 45394) | function w(g, o) {
  function E (line 45399) | function E(g) {
  function y (line 45415) | function y(g) {
  function x (line 45422) | function x(g, o) {
  function d (line 45459) | function d(M, z, V) {
  function p (line 45472) | function p(M, z) {
  function f (line 45482) | function f(M, z) {
  function v (line 45491) | function v(M, z) {
  function k (line 45498) | function k(M, z) {
  function s (line 45505) | function s(M, z) {
  function S (line 45511) | function S(M, z) {
  function j (line 45518) | function j(M, z) {
  function I (line 45525) | function I(M, z) {
  function R (line 45533) | function R(M, z) {
  function e (line 45797) | function e(u) {

FILE: webview_panels/src/lib/altimate/altimate-components.d.ts
  type Citation (line 31) | interface Citation {
  class CLL (line 42) | class CLL {
  type CllEvents (line 54) | enum CllEvents {
  type CoachAiConfirmationResponse (line 60) | interface CoachAiConfirmationResponse {
  type CoachAiResponse (line 66) | interface CoachAiResponse {
  type CoachFormProps (line 76) | interface CoachFormProps {
  type CollectColumn (line 85) | interface CollectColumn {
  type Column (line 90) | interface Column {
  type ColumnLineage (line 99) | interface ColumnLineage {
  type Columns (line 107) | interface Columns {
  type Confidence (line 113) | interface Confidence {
  type ContentCategory (line 118) | enum ContentCategory {
  type Conversation (line 124) | interface Conversation {
  type ConversationGroup (line 131) | interface ConversationGroup {
  type ConversationSources (line 160) | enum ConversationSources {
  type DbtDocsShareDetails (line 168) | interface DbtDocsShareDetails {
  type Details (line 174) | type Details = Record<string, {
  type ExposureMetaData (line 188) | interface ExposureMetaData {
  type Learning (line 217) | interface Learning extends z.infer<typeof learningSchema> {
  type LineageProviderProps (line 262) | interface LineageProviderProps {
  type LineageRef (line 275) | interface LineageRef {
  type LineageType (line 279) | type LineageType = "static" | "dynamic" | "sql";
  type ModalArgs (line 283) | interface ModalArgs {
  type OpNodeArgs (line 288) | interface OpNodeArgs {
  type PersonalizationScope (line 293) | enum PersonalizationScope {
  type ProjectGovernorAllowedFiles (line 298) | enum ProjectGovernorAllowedFiles {
  type ProjectGovernorCheck (line 303) | interface ProjectGovernorCheck extends z.infer<typeof ProjectGovernorChe...
  type ProjectGovernorCheckConfirmationResponse (line 307) | interface ProjectGovernorCheckConfirmationResponse {
  type ProjectGovernorCheckFormValues (line 311) | interface ProjectGovernorCheckFormValues {
  type ProjectGovernorCheckTypes (line 339) | enum ProjectGovernorCheckTypes {
  type ProjectGovernorCheckValidateResponse (line 346) | interface ProjectGovernorCheckValidateResponse {
  type Props (line 351) | interface Props extends ButtonHTMLAttributes<HTMLButtonElement> {
  type Props_10 (line 355) | interface Props_10 {
  type Props_11 (line 358) | interface Props_11 {
  type Props_12 (line 365) | interface Props_12 {
  type Props_2 (line 370) | interface Props_2 {
  type Props_3 (line 377) | interface Props_3 extends ButtonProps {
  type Props_4 (line 381) | interface Props_4 {
  type Props_5 (line 392) | interface Props_5 extends BadgeProps {
  type Props_6 (line 396) | interface Props_6 {
  type Props_7 (line 403) | interface Props_7 {
  type Props_8 (line 413) | interface Props_8 {
  type Props_9 (line 425) | interface Props_9 extends ProChatProps<any> {
  type SelectedColumn (line 433) | interface SelectedColumn {
  type SqlLineage (line 438) | interface SqlLineage {
  type StaticLineage (line 445) | interface StaticLineage {
  type StaticLineageDetails (line 456) | type StaticLineageDetails = Record<string, {
  type StatusInfoMessage (line 472) | interface StatusInfoMessage {
  type Table (line 479) | interface Table {
  type TaskLabels (line 496) | enum TaskLabels {
  type TeamMateActionType (line 508) | enum TeamMateActionType {
  type TeamMateAvailability (line 514) | enum TeamMateAvailability {
  type TeamMateConfig (line 519) | interface TeamMateConfig {
  type TeamMateContextProps (line 531) | interface TeamMateContextProps {
  type TeamMateState (line 544) | interface TeamMateState {
  type User (line 550) | interface User {
  type ViewsCodeModalArgs (line 568) | interface ViewsCodeModalArgs {
  type ViewsTypes (line 576) | type ViewsTypes = keyof typeof VIEWS_TYPE_COLOR;
  type HTMLElementEventMap (line 581) | interface HTMLElementEventMap {

FILE: webview_panels/src/lib/altimate/main.js
  function fn (line 86) | function fn(e) {
  function w4 (line 103) | function w4() {
  function E4 (line 145) | function E4() {
  class A4 (line 1001) | class A4 extends f4 {
    method constructor (line 1002) | constructor(t) {
    method getDerivedStateFromError (line 1007) | static getDerivedStateFromError(t) {
    method resetErrorBoundary (line 1013) | resetErrorBoundary() {
    method componentDidCatch (line 1027) | componentDidCatch(t, n) {
    method componentDidUpdate (line 1031) | componentDidUpdate(t, n) {
    method render (line 1046) | render() {
  function M4 (line 1078) | function M4() {
  function t (line 1125) | function t(n) {
  function L4 (line 1137) | function L4() {
  function D4 (line 1406) | function D4() {
  function j4 (line 1578) | function j4() {
  function F4 (line 1761) | function F4() {
  function R4 (line 1935) | function R4() {
  function I4 (line 2121) | function I4() {
  function H4 (line 2292) | function H4() {
  function z4 (line 2525) | function z4() {
  function P4 (line 2735) | function P4() {
  function B4 (line 2899) | function B4() {
  function V4 (line 3070) | function V4() {
  function $4 (line 3286) | function $4() {
  function W4 (line 3463) | function W4() {
  function Z4 (line 3870) | function Z4() {
  function U4 (line 4277) | function U4() {
  function q4 (line 4478) | function q4() {
  function Y4 (line 4695) | function Y4() {
  function G4 (line 4867) | function G4() {
  function K4 (line 5104) | function K4() {
  function X4 (line 5341) | function X4() {
  function Q4 (line 5578) | function Q4() {
  function J4 (line 5815) | function J4() {
  function e6 (line 6052) | function e6() {
  function t6 (line 6289) | function t6() {
  function n6 (line 6485) | function n6() {
  function o6 (line 6678) | function o6() {
  function r6 (line 6871) | function r6() {
  function i6 (line 7083) | function i6() {
  function a6 (line 7249) | function a6() {
  function l6 (line 7421) | function l6() {
  function s6 (line 7632) | function s6() {
  function c6 (line 7851) | function c6() {
  function u6 (line 8066) | function u6() {
  function d6 (line 8276) | function d6() {
  function f6 (line 8444) | function f6() {
  function h6 (line 8983) | function h6() {
  function p6 (line 9510) | function p6() {
  function g6 (line 9689) | function g6() {
  function m6 (line 9942) | function m6() {
  function b6 (line 10113) | function b6() {
  function y6 (line 10320) | function y6() {
  function C6 (line 10545) | function C6() {
  function v6 (line 10845) | function v6() {
  function x6 (line 11041) | function x6() {
  function r (line 11706) | function r(i) {
  function h (line 11780) | function h() {
  function p (line 11854) | function p() {
  function s (line 11951) | function s() {
  function u (line 11998) | function u(c, d, p, h, m) {
  function h (line 12216) | function h(m, b, y, g, x) {
  function M (line 12283) | function M() {
  function E (line 12323) | function E(M) {
  function s (line 12676) | function s(u) {
  function m (line 12760) | function m() {
  function h (line 12800) | function h() {
  function y (line 12949) | function y(g, x) {
  function I6 (line 13550) | function I6(e) {
  function H6 (line 13556) | function H6(e) {
  function vt (line 13599) | function vt(e, ...t) {
  function Jn (line 13610) | function Jn(e) {
  function vn (line 13613) | function vn(e) {
  function wd (line 13625) | function wd(e) {
  function Ti (line 13634) | function Ti(e, t) {
  function na (line 13641) | function na(e) {
  function fs (line 13645) | function fs(e, t) {
  function Ed (line 13648) | function Ed(e, t, n) {
  function B6 (line 13652) | function B6(e, t) {
  function oa (line 13655) | function oa(e) {
  function ra (line 13658) | function ra(e) {
  function Bn (line 13661) | function Bn(e) {
  function hs (line 13664) | function hs(e, t) {
  function fc (line 13694) | function fc(e, t = !1) {
  function V6 (line 13705) | function V6() {
  function ia (line 13708) | function ia(e) {
  function eo (line 13712) | function eo(e) {
  function Sd (line 13717) | function Sd() {
  function W6 (line 13720) | function W6(e, t) {
  function _2 (line 13731) | function _2(e, t) {
  function ps (line 13738) | function ps(e) {
  function gs (line 13741) | function gs(e) {
  function A2 (line 13744) | function A2(e) {
  function Z6 (line 13747) | function Z6(e) {
  function M2 (line 13751) | function M2(e, t) {
  function Oi (line 13771) | function Oi(e, t, n) {
  function T2 (line 13791) | function T2(e, t, n, o, r, i, a) {
  function Ni (line 13813) | function Ni(e, t, n = !1) {
  function U6 (line 13816) | function U6(e, t) {
  method get (line 13848) | get(e, t) {
  method has (line 13859) | has(e, t) {
  method ownKeys (line 13862) | ownKeys(e) {
  method set (line 13865) | set(e, t, n) {
  method deleteProperty (line 13884) | deleteProperty(e, t) {
  method getOwnPropertyDescriptor (line 13895) | getOwnPropertyDescriptor(e, t) {
  method defineProperty (line 13907) | defineProperty() {
  method getPrototypeOf (line 13910) | getPrototypeOf(e) {
  method setPrototypeOf (line 13913) | setPrototypeOf() {
  function El (line 13938) | function El(e, t) {
  function q6 (line 13942) | function q6(e, t, n) {
  function kd (line 13955) | function kd(e, t) {
  function ms (line 13964) | function ms(e) {
  function Sl (line 13967) | function Sl(e) {
  method constructor (line 13971) | constructor(e) {
  method createDraft (line 14028) | createDraft(e) {
  method finishDraft (line 14034) | finishDraft(e, t) {
  method setAutoFreeze (line 14045) | setAutoFreeze(e) {
  method setUseStrictShallowCopy (line 14053) | setUseStrictShallowCopy(e) {
  method applyPatches (line 14056) | applyPatches(e, t) {
  function bs (line 14070) | function bs(e, t) {
  function G6 (line 14078) | function G6(e) {
  function _d (line 14081) | function _d(e) {
  function O2 (line 14105) | function O2(e, t) {
  function N2 (line 14138) | function N2(e) {
  function L2 (line 14141) | function L2(e, t, n) {
  function Md (line 14155) | function Md(e) {
  function K6 (line 14217) | function K6(e) {
  function X6 (line 14220) | function X6(e, t) {
  function J6 (line 14268) | function J6(e, t) {
  function e8 (line 14271) | function e8({ creators: e } = {}) {
  function t8 (line 14437) | function t8(e, t, n, o) {
  function n8 (line 14454) | function n8() {
  function o8 (line 14491) | function o8({ type: e, reducerName: t, createNotation: n }, o, r) {
  function r8 (line 14506) | function r8(e) {
  function i8 (line 14509) | function i8(e) {
  function a8 (line 14512) | function a8({ type: e, reducerName: t }, n, o, r) {
  function Gr (line 14540) | function Gr() {}
  function ot (line 14541) | function ot(e) {
  function Nd (line 14737) | function Nd(e) {
  class v8 (line 14741) | class v8 extends O.Component {
    method getSnapshotBeforeUpdate (line 14742) | getSnapshotBeforeUpdate(t) {
    method componentDidUpdate (line 14756) | componentDidUpdate() {}
    method render (line 14757) | render() {
  function x8 (line 14761) | function x8({ children: e, isPresent: t }) {
  function E8 (line 14845) | function E8() {
  function j2 (line 14849) | function j2(e) {
  function i7 (line 15280) | function i7(e) {
  function a7 (line 15286) | function a7(e) {
  function l7 (line 15293) | function l7() {
  function Di (line 15296) | function Di(e) {
  function zt (line 15299) | function zt() {
  function s7 (line 15314) | function s7(e, t) {
  function c7 (line 15318) | function c7(e, t) {
  function u7 (line 15327) | function u7(e, t, n) {
  function ve (line 15330) | function ve(e) {
  function ys (line 15337) | function ys(e, t) {
  function d7 (line 15347) | function d7(e, t) {
  function bo (line 15359) | function bo(e) {
  function yi (line 15376) | function yi(e) {
  function f7 (line 15393) | function f7(e, t) {
  function ji (line 15396) | function ji(e) {
  function be (line 15406) | function be(e, t, n) {
  function g7 (line 15443) | function g7(e) {
  function m7 (line 15446) | function m7(e, t) {
  function b7 (line 15468) | function b7() {
  function Fi (line 15471) | function Fi(e, t) {
  function y7 (line 15474) | function y7(e, t) {
  function C7 (line 15484) | function C7(e, t) {
  function pr (line 15499) | function pr(e) {
  function v7 (line 15518) | function v7(e, t) {
  function x7 (line 15528) | function x7(e) {
  function gr (line 15532) | function gr(e, t, n) {
  function Cs (line 15545) | function Cs(e, t) {
  function w7 (line 15550) | function w7(e) {
  function E7 (line 15553) | function E7(e) {
  function S7 (line 15560) | function S7(e, t) {
  function k7 (line 15575) | function k7() {
  function bn (line 15579) | function bn(e) {
  function Id (line 15588) | function Id(e, t) {
  function V2 (line 15683) | function V2(e, t) {
  function $2 (line 15695) | function $2(e) {
  function W2 (line 15757) | function W2(e, t) {
  function lo (line 15769) | function lo(e) {
  function Vd (line 15808) | function Vd(e) {
  function Z2 (line 15900) | function Z2(e, t) {
  function Uo (line 15912) | function Uo(e) {
  function I7 (line 15972) | function I7() {
  function H7 (line 16115) | function H7() {
  function $d (line 16288) | function $d() {
  function z7 (line 16304) | function z7() {
  function wc (line 16357) | function wc() {
  function Wd (line 16364) | function Wd() {
  function P7 (line 16372) | function P7() {
  function B7 (line 16442) | function B7() {
  function V7 (line 16959) | function V7() {
  function ru (line 17726) | function ru(e, t) {
  function iu (line 17738) | function iu(e) {
  function la (line 17753) | function la(e, t) {
  function Yd (line 17798) | function Yd(e) {
  function Gd (line 17933) | function Gd(e) {
  function u9 (line 18016) | function u9(e) {
  function Kd (line 18041) | function Kd(e) {
  function au (line 18213) | function au(e, t) {
  function qt (line 18225) | function qt(e) {
  function p9 (line 18240) | function p9(e) {
  function g9 (line 18252) | function g9() {
  function n (line 18328) | function n(o) {
  function k (line 19474) | function k(T) {
  function yt (line 20536) | function yt(e) {
  function X9 (line 20559) | function X9() {
  function Q9 (line 20634) | function Q9() {
  function l3 (line 20773) | function l3() {
  function J9 (line 20793) | function J9() {
  function eh (line 20871) | function eh() {
  function s3 (line 21009) | function s3(e, t = lh, n) {
  function ut (line 21025) | function ut(e, t) {
  function sa (line 21047) | function sa() {
  function xi (line 21055) | function xi(e) {
  function uh (line 21058) | function uh(e, t) {
  function dh (line 21112) | function dh(e, t) {
  function pu (line 21116) | function pu(e, t, n) {
  function ca (line 21132) | function ca(e) {
  function fh (line 21140) | function fh(e) {
  function hh (line 21149) | function hh(e) {
  function c3 (line 21154) | function c3(e) {
  function ph (line 21158) | function ph() {}
  function Oc (line 21159) | function Oc(e) {
  function gh (line 21166) | function gh(e) {
  function mh (line 21179) | function mh(e) {
  function bh (line 21182) | function bh() {
  function u3 (line 21185) | function u3(e) {
  function yh (line 21192) | function yh(e) {
  function Ch (line 21197) | function Ch(e) {
  function d3 (line 21204) | function d3(e) {
  function f3 (line 21209) | function f3(e) {
  function xh (line 21215) | function xh(e) {
  function wh (line 21220) | function wh() {
  function Eh (line 21223) | function Eh(e) {
  function kh (line 21227) | function kh() {
  function _h (line 21230) | function _h(e) {
  function Ah (line 21235) | function Ah(e) {
  function Mh (line 21240) | function Mh(e) {
  function h3 (line 21247) | function h3(e) {
  function Th (line 21250) | function Th() {
  function Ii (line 21253) | function Ii(e, t) {
  function Oh (line 21275) | function Oh(e) {
  function Nh (line 21280) | function Nh(e, t, n, o, r, i) {
  function Lh (line 21285) | function Lh(e, t, n, o, r, i, a) {
  function Dh (line 21304) | function Dh(e) {
  function jh (line 21307) | function jh(e, t) {
  function Fh (line 21339) | function Fh(e) {
  function Rh (line 21342) | function Rh() {
  function Ih (line 21345) | function Ih(e, t, n) {
  function Hh (line 21358) | function Hh(e) {
  function zh (line 21380) | function zh() {
  function Ph (line 21390) | function Ph(e) {
  function Bh (line 21410) | function Bh(e, t) {
  function Vh (line 21413) | function Vh() {
  function $h (line 21417) | function $h() {
  function Wh (line 21420) | function Wh() {
  function Zh (line 21428) | function Zh() {
  function Uh (line 21433) | function Uh() {
  function qh (line 21436) | function qh(e) {
  function Yh (line 21442) | function Yh(e) {
  function Gh (line 21447) | function Gh(e) {
  function Kh (line 21452) | function Kh(e, t) {
  function Xh (line 21457) | function Xh(e, t) {
  function Qh (line 21462) | function Qh(e, t) {
  function Jh (line 21468) | function Jh(e, t) {
  function ep (line 21476) | function ep(e, t) {
  function p3 (line 21496) | function p3(e) {
  function tp (line 21503) | function tp(e) {
  function np (line 21508) | function np(e, t, n) {
  function op (line 21513) | function op(e, t, n) {
  function rp (line 21519) | function rp(e, t, n) {
  function Oo (line 21526) | function Oo(e, t) {
  function ip (line 21532) | function ip(e) {
  function ap (line 21537) | function ap(e, t) {
  function lp (line 21542) | function lp(e, t) {
  function sp (line 21548) | function sp(e, t) {
  function g3 (line 21553) | function g3(e) {
  function Nc (line 21556) | function Nc(e) {
  function m3 (line 21559) | function m3(e) {
  function b3 (line 21579) | function b3(e, t) {
  function y3 (line 21582) | function y3(e, t) {
  function cp (line 21585) | function cp(e) {
  function up (line 21590) | function up(e) {
  function dp (line 21595) | function dp(e, t) {
  function fp (line 21600) | function fp(e, t) {
  function hp (line 21609) | function hp() {
  function pp (line 21612) | function pp(e) {
  function gp (line 21617) | function gp(e) {
  function mp (line 21623) | function mp(e) {
  function bp (line 21628) | function bp() {
  function yp (line 21631) | function yp(e) {
  function Cp (line 21636) | function Cp(e) {
  function vp (line 21642) | function vp(e) {
  function xp (line 21647) | function xp() {
  function wp (line 21650) | function wp() {
  function Ep (line 21653) | function Ep() {
  function Sp (line 21657) | function Sp() {
  function kp (line 21660) | function kp(e) {
  function _p (line 21666) | function _p() {
  function Ap (line 21669) | function Ap(e, t) {
  function Mp (line 21679) | function Mp() {
  function Tp (line 21683) | function Tp() {
  function Op (line 21686) | function Op() {
  function Np (line 21691) | function Np() {
  function Lp (line 21696) | function Lp(e) {
  function Dp (line 21699) | function Dp(e) {
  function jp (line 21702) | function jp(e) {
  function Fp (line 21707) | function Fp(e) {
  function Rp (line 21720) | function Rp(e) {
  function Ip (line 21733) | function Ip(e, t, n) {
  function Hp (line 21752) | function Hp(e, t, n) {
  function C3 (line 21769) | function C3(e, t, n) {
  function zp (line 21780) | function zp(e, t) {
  function Pp (line 21785) | function Pp(e, t) {
  function Bp (line 21790) | function Bp(e, t) {
  function Nt (line 21799) | function Nt(e, t) {
  function jr (line 21802) | function jr() {
  function $p (line 21805) | function $p() {
  function Yt (line 21846) | function Yt(e) {
  function Wp (line 21851) | function Wp(e) {
  function ln (line 21856) | function ln(e, t) {
  function Hl (line 21880) | function Hl(e) {
  function yo (line 21883) | function yo(e) {
  function x3 (line 21886) | function x3(e) {
  function w3 (line 21894) | function w3(e, t) {
  function _s (line 21907) | function _s(
  function Up (line 21940) | function Up(e) {
  function qp (line 21943) | function qp() {
  function Yp (line 21946) | function Yp(e, t) {
  function Gp (line 21949) | function Gp() {
  function Kp (line 21952) | function Kp() {
  function Lc (line 22127) | function Lc(e, t, n) {
  function E3 (line 22130) | function E3(e, t) {
  function Fr (line 22135) | function Fr() {}
  method copy (line 22299) | copy(e) {
  method displayable (line 22302) | displayable() {
  function bu (line 22313) | function bu() {
  function rg (line 22316) | function rg() {
  function ig (line 22319) | function ig() {
  function yu (line 22322) | function yu() {
  function wr (line 22325) | function wr(e) {
  function Cu (line 22385) | function Cu(e) {
  function ni (line 22388) | function ni(e, t, n, o) {
  function ag (line 22391) | function ag(e) {
  function As (line 22397) | function As(e, t, n, o) {
  function wt (line 22400) | function wt(e, t, n, o) {
  method brighter (line 22407) | brighter(e) {
  method darker (line 22413) | darker(e) {
  method rgb (line 22419) | rgb() {
  method clamp (line 22422) | clamp() {
  method displayable (line 22425) | displayable() {
  function vu (line 22445) | function vu() {
  function lg (line 22448) | function lg() {
  function xu (line 22451) | function xu() {
  function zi (line 22455) | function zi(e) {
  function Gn (line 22458) | function Gn(e) {
  function qn (line 22461) | function qn(e) {
  function wu (line 22464) | function wu(e, t, n, o) {
  function S3 (line 22474) | function S3(e) {
  function sg (line 22500) | function sg(e, t, n, o) {
  function Gt (line 22503) | function Gt(e, t, n, o) {
  method brighter (line 22510) | brighter(e) {
  method darker (line 22516) | darker(e) {
  method rgb (line 22522) | rgb() {
  method clamp (line 22535) | clamp() {
  method displayable (line 22538) | displayable() {
  method formatHsl (line 22547) | formatHsl() {
  function Eu (line 22553) | function Eu(e) {
  function oi (line 22556) | function oi(e) {
  function zl (line 22559) | function zl(e, t, n) {
  function cg (line 22571) | function cg(e, t) {
  function ug (line 22576) | function ug(e, t, n) {
  function dg (line 22586) | function dg(e) {
  function _3 (line 22593) | function _3(e, t) {
  function o (line 22599) | function o(r, i) {
  function Nn (line 22612) | function Nn(e, t) {
  function fg (line 22623) | function fg(e) {
  function hg (line 22628) | function hg(e) {
  function pg (line 22633) | function pg(e, t) {
  function A3 (line 22672) | function A3(e, t, n, o, r, i) {
  function gg (line 22690) | function gg(e) {
  function mg (line 22696) | function mg(e) {
  function M3 (line 22704) | function M3(e, t, n, o) {
  function _u (line 22752) | function _u(e) {
  function vg (line 22755) | function vg(e) {
  function xg (line 22758) | function xg(e) {
  function r (line 22762) | function r(i, a) {
  function Dc (line 22821) | function Dc() {
  function Eg (line 22824) | function Eg() {
  function Vi (line 22827) | function Vi() {
  function N3 (line 22847) | function N3(e, t, n) {
  function Sg (line 22851) | function Sg() {
  function Au (line 22857) | function Au() {
  function kg (line 22865) | function kg() {
  function _g (line 22870) | function _g() {
  function Os (line 22877) | function Os(e) {
  function Mu (line 22887) | function Mu(e, t, n) {
  function da (line 22910) | function da(e, t, n, o, r, i) {
  function jc (line 22930) | function jc(e, t) {
  function hn (line 22935) | function hn(e, t) {
  function en (line 22940) | function en(e, t) {
  function Tg (line 22945) | function Tg(e, t, n) {
  function Si (line 23010) | function Si(e, t) {
  function Og (line 23032) | function Og(e) {
  function Ng (line 23037) | function Ng(e, t) {
  function Lg (line 23053) | function Lg(e, t, n) {
  function Dg (line 23071) | function Dg(e, t) {
  function Fc (line 23080) | function Fc(e, t, n) {
  function D3 (line 23092) | function D3(e, t) {
  function jg (line 23104) | function jg(e) {
  function Fg (line 23109) | function Fg(e) {
  function Rg (line 23114) | function Rg(e, t, n) {
  function Ig (line 23123) | function Ig(e, t, n) {
  function Hg (line 23132) | function Hg(e, t, n) {
  function zg (line 23149) | function zg(e, t, n) {
  function Pg (line 23166) | function Pg(e, t) {
  function Bg (line 23178) | function Bg(e, t) {
  function Vg (line 23183) | function Vg(e, t) {
  function $g (line 23188) | function $g(e, t) {
  function Wg (line 23196) | function Wg(e, t) {
  function Zg (line 23204) | function Zg(e, t) {
  function Ug (line 23212) | function Ug(e, t) {
  function qg (line 23217) | function qg(e, t) {
  function Yg (line 23225) | function Yg(e) {
  function Gg (line 23231) | function Gg(e, t) {
  function Kg (line 23236) | function Kg(e, t) {
  function Xg (line 23244) | function Xg(e) {
  function Qg (line 23250) | function Qg(e, t) {
  function Jg (line 23256) | function Jg(e) {
  function em (line 23260) | function em(e, t) {
  function tm (line 23267) | function tm(e) {
  function nm (line 23271) | function nm(e) {
  function om (line 23278) | function om(e) {
  function rm (line 23300) | function rm(e) {
  function im (line 23309) | function im(e, t, n) {
  function am (line 23319) | function am(e, t) {
  function lm (line 23325) | function lm(e) {
  function sm (line 23332) | function sm() {
  function cm (line 23335) | function cm(e) {
  function um (line 23352) | function um(e) {
  function fm (line 23374) | function fm() {
  function hm (line 23377) | function hm(e, t) {
  function j3 (line 23385) | function j3(e) {
  function pm (line 23390) | function pm(e, t, n) {
  function gm (line 23399) | function gm(e, t, n) {
  function mm (line 23411) | function mm(e, t) {
  function bm (line 23425) | function bm(e, t, n) {
  function ym (line 23435) | function ym(e, t, n) {
  function Cm (line 23440) | function Cm(e, t, n) {
  function vm (line 23448) | function vm(e, t, n) {
  function xm (line 23455) | function xm(e) {
  function wm (line 23460) | function wm(e) {
  function Em (line 23466) | function Em(e) {
  function Sm (line 23474) | function Sm(e) {
  function km (line 23479) | function km(e) {
  function _m (line 23487) | function _m(e) {
  function Am (line 23494) | function Am() {
  function Mm (line 23517) | function Mm() {
  function wn (line 23544) | function wn(e, t, n, o) {
  function F3 (line 23547) | function F3() {
  function Om (line 23583) | function Om(e) {
  function Lm (line 23593) | function Lm(e, t) {
  function Dm (line 23598) | function Dm(e) {
  function jm (line 23611) | function jm(e, { sourceEvent: t, target: n, transform: o, dispatch: r }) {
  function yn (line 23620) | function yn(e, t, n) {
  function Bl (line 23663) | function Bl(e) {
  function Yo (line 23666) | function Yo(e) {
  function Fm (line 23669) | function Fm(e) {
  function Rm (line 23672) | function Rm() {
  function Nu (line 23691) | function Nu() {
  function Im (line 23694) | function Im(e) {
  function Hm (line 23701) | function Hm() {
  function zm (line 23704) | function zm(e, t, n) {
  function Pm (line 23714) | function Pm() {
  function qe (line 24192) | function qe(e, t) {
  function I3 (line 24211) | function I3({ position: e, children: t, className: n, style: o, ...r }) {
  function $m (line 24224) | function $m({ proOptions: e, position: t = "bottom-right" }) {
  function js (line 24382) | function js(e) {
  function Go (line 24465) | function Go(e, t, n) {
  function $3 (line 24473) | function $3({ sourceX: e, sourceY: t, targetX: n, targetY: o }) {
  function W3 (line 24480) | function W3({
  function ju (line 24527) | function ju({ pos: e, x1: t, y1: n, x2: o, y2: r }) {
  function Z3 (line 24532) | function Z3({
  function Xm (line 24626) | function Xm({
  function Qm (line 24712) | function Qm(e, t, n, o) {
  function Fs (line 24725) | function Fs({
  function Jm (line 24824) | function Jm({ sourceX: e, sourceY: t, targetX: n, targetY: o }) {
  function ai (line 24869) | function ai(e, t) {
  function Iu (line 24872) | function Iu({ pos: e, x1: t, y1: n, x2: o, y2: r, c: i }) {
  function U3 (line 24884) | function U3({
  function Hu (line 25113) | function Hu(e, t, n, o) {
  function lb (line 25135) | function lb(e, t, n, o, r, i) {
  function Q3 (line 25203) | function Q3(e, t, n, o, r, i, a) {
  function cb (line 25239) | function cb({ nodes: e, nodeId: t, handleId: n, handleType: o }) {
  function Wc (line 25253) | function Wc(e, t) {
  function Vl (line 25263) | function Vl(e) {
  function ub (line 25272) | function ub(e, t) {
  function J3 (line 25276) | function J3({
  function pb (line 25601) | function pb(e, t) {
  function mb (line 25620) | function mb({ onSelectionChange: e }) {
  function co (line 25634) | function co(e, t) {
  function Ce (line 25639) | function Ce(e, t, n) {
  function wb (line 25776) | function wb({ rfId: e }) {
  function Eb (line 25789) | function Eb({ rfId: e, disableKeyboardA11y: t }) {
  function Bu (line 25870) | function Bu(e, t, n) {
  function Vu (line 25875) | function Vu(e, t) {
  function c5 (line 25878) | function c5(e, t, n, o) {
  function u5 (line 25898) | function u5(e, t, n) {
  function $l (line 25926) | function $l(e, t, n, o) {
  function d5 (line 25963) | function d5(e, t = {}) {
  function Sb (line 26004) | function Sb(e, t) {
  function kb (line 26018) | function kb(e, t) {
  function si (line 26024) | function si({ changedNodes: e, changedEdges: t, get: n, set: o }) {
  function tn (line 26157) | function tn() {
  function Nb (line 26375) | function Nb(e) {
  function Rb (line 26657) | function Rb() {
  function Zu (line 26670) | function Zu(e, t) {
  function Ib (line 26700) | function Ib(e, t) {
  function Hb (line 26739) | function Hb(e, t) {
  function go (line 26747) | function go(e, t) {
  function h5 (line 26907) | function h5(e, t) {
  function Uu (line 26913) | function Uu(e, t, n) {
  function Pb (line 26922) | function Pb(e, t, n, o) {
  function Bb (line 26953) | function Bb(e, t) {
  function p5 (line 26958) | function p5(e, t, n, o, r = [0, 0], i) {
  function Zl (line 26999) | function Zl({ nodeId: e, dragItems: t, nodeInternals: n }) {
  function Ko (line 27027) | function Ko(e, t, n) {
  function zs (line 27035) | function zs({ id: e, store: t, unselect: n = !1, nodeRef: o }) {
  function Vb (line 27060) | function Vb() {
  function Ul (line 27077) | function Ul(e) {
  function g5 (line 27080) | function g5({
  function m5 (line 27305) | function m5() {
  function Wb (line 27555) | function Wb({
  function Yb (line 27726) | function Yb(e) {
  function Gb (line 27742) | function Gb(e) {
  function ny (line 28104) | function ny(e) {
  function Ku (line 28121) | function Ku(e, t, n = null) {
  function Xu (line 28149) | function Xu(e, t) {
  function ry (line 28166) | function ry({
  function Qu (line 28194) | function Qu(e) {
  function ay (line 28227) | function ay(e, t, n = !1) {
  function ly (line 28259) | function ly(e, t, n) {
  function uy (line 28317) | function uy(e) {
  function by (line 28549) | function by({ children: e }) {
  function yy (line 28560) | function yy(e) {
  function xy (line 28674) | function xy({ containerStyle: e, style: t, type: n, component: o }) {
  function e0 (line 28708) | function e0(e, t) {
  function Oy (line 29483) | function Oy() {
  function Ny (line 29492) | function Ny() {
  function Ly (line 29499) | function Ly() {
  function Dy (line 29508) | function Dy() {
  function jy (line 29517) | function jy() {
  function Ry (line 29647) | function Ry({ color: e
Condensed preview — 654 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (6,904K chars).
[
  {
    "path": ".eslintrc.json",
    "chars": 596,
    "preview": "{\n  \"root\": true,\n  \"parser\": \"@typescript-eslint/parser\",\n  \"parserOptions\": {\n    \"ecmaVersion\": 12,\n    \"sourceType\":"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/bug_report.yml",
    "chars": 2383,
    "preview": "---\nname: Bug report\ndescription: Report a bug or an issue you've found with dbt Power User\nlabels: bug\nbody:\n  - type: "
  },
  {
    "path": ".github/ISSUE_TEMPLATE/config.yaml",
    "chars": 204,
    "preview": "---\ncontact_links:\n  - name: Ask a question or get help right here\n    url: https://github.com/innoverio/vscode-dbt-powe"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/config.yml",
    "chars": 204,
    "preview": "---\ncontact_links:\n  - name: Ask a question or get help right here\n    url: https://github.com/innoverio/vscode-dbt-powe"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/feature_request.yml",
    "chars": 1320,
    "preview": "---\nname: Feature request\ndescription: Suggest an idea for dbt Power User\nlabels: enhancement\nbody:\n  - type: textarea\n "
  },
  {
    "path": ".github/ISSUE_TEMPLATE/sweep-template.yml",
    "chars": 896,
    "preview": "name: Sweep Issue\ntitle: 'Sweep: '\ndescription: For small bugs, features, refactors, and tests to be handled by Sweep, a"
  },
  {
    "path": ".github/actions/common-build/action.yml",
    "chars": 743,
    "preview": "# .github/actions/common-build/action.yml\nname: \"Common Build\"\ndescription: \"Common build steps for the project\"\n\ninputs"
  },
  {
    "path": ".github/dependabot.yml",
    "chars": 197,
    "preview": "version: 2\nupdates:\n  # python dependencies\n  - package-ecosystem: \"npm\"\n    directory: \"/\"\n    schedule:\n      interval"
  },
  {
    "path": ".github/pull_request_template.md",
    "chars": 592,
    "preview": "## Overview\n\n### Problem\n\nDescribe the problem you are solving. Mention the ticket/issue if applicable.\n\n### Solution\n\nD"
  },
  {
    "path": ".github/scripts/analyze-vsix.py",
    "chars": 2364,
    "preview": "\"\"\"Analyze a VSIX file and output size data as JSON.\n\nReads the first .vsix file in the current directory, categorizes i"
  },
  {
    "path": ".github/scripts/generate-bundle-report.py",
    "chars": 3368,
    "preview": "\"\"\"Generate a bundle size report comparing current build against master baseline.\n\nReads bundle-baseline.json (current b"
  },
  {
    "path": ".github/workflows/ci.yml",
    "chars": 8183,
    "preview": "on:\n  push:\n    branches:\n      - master\n  pull_request:\n    branches:\n      - master\n  release:\n    types:\n      - crea"
  },
  {
    "path": ".github/workflows/deploy-docs-to-s3.yaml",
    "chars": 1394,
    "preview": "name: Deploy Static Website to AWS\n\n# Defines when the action will run.\n# This example triggers the workflow on push eve"
  },
  {
    "path": ".github/workflows/tests.yml",
    "chars": 2312,
    "preview": "name: Tests\n\non:\n  push:\n    branches: [\"*\"]\n  pull_request:\n    branches: [\"*\"]\n\njobs:\n  test:\n    strategy:\n      matr"
  },
  {
    "path": ".gitignore",
    "chars": 584,
    "preview": "out\nnode_modules\ndist\n.vscode-test/\n*.vsix\n.DS_Store\n.idea\n.history\n__pycache__/\n*.pyc\n*.pyo\n*.pyd\n.claude\n\n# Build and "
  },
  {
    "path": ".gitpod.yml",
    "chars": 986,
    "preview": "# This configuration file was automatically generated by Gitpod.\n# Please adjust to your needs (see https://www.gitpod.i"
  },
  {
    "path": ".husky/pre-commit",
    "chars": 16,
    "preview": "npx lint-staged\n"
  },
  {
    "path": ".mcp.json",
    "chars": 161,
    "preview": "{\n  \"mcpServers\": {\n    \"playwright\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@playwright/mcp\"],\n      \"env\": { "
  },
  {
    "path": ".nycrc.json",
    "chars": 614,
    "preview": "{\n  \"extends\": \"@istanbuljs/nyc-config-typescript\",\n  \"all\": true,\n  \"check-coverage\": true,\n  \"reporter\": [\"text\", \"lco"
  },
  {
    "path": ".prettierignore",
    "chars": 13,
    "preview": "node_modules\n"
  },
  {
    "path": ".prettierrc",
    "chars": 53,
    "preview": "{\n  \"plugins\": [\"prettier-plugin-organize-imports\"]\n}"
  },
  {
    "path": ".vscodeignore",
    "chars": 577,
    "preview": ".vscode/**\n.vscode-test/**\nout/**\nsrc/**\n**/node_modules\n!dist/node_modules/**\n.gitignore\nvsc-extension-quickstart.md\n**"
  },
  {
    "path": "CLAUDE.md",
    "chars": 20739,
    "preview": "# Claude Code - dbt Power User VSCode Extension Architecture Guide\n\n## Project Overview\n\n**vscode-dbt-power-user** is a "
  },
  {
    "path": "CONTRIBUTING.md",
    "chars": 9957,
    "preview": "# Contributing Guidelines\n\nThank you for your interest in contributing to the dbt™ Power User extension! We greatly appr"
  },
  {
    "path": "LICENSE",
    "chars": 1067,
    "preview": "MIT License\n\nCopyright (c) 2020 innover.io\n\nPermission is hereby granted, free of charge, to any person obtaining a copy"
  },
  {
    "path": "README.md",
    "chars": 7517,
    "preview": "# vscode-dbt-power-user\n\n![Last updated](https://img.shields.io/visual-studio-marketplace/last-updated/innoverio.vscode-"
  },
  {
    "path": "altimate_notebook_kernel.py",
    "chars": 7757,
    "preview": "import json\nimport re\nfrom datetime import  datetime\nimport jupyter_client\nimport queue\n\nclass CustomDecoder(json.JSONDe"
  },
  {
    "path": "codecov.yml",
    "chars": 380,
    "preview": "coverage:\n  status:\n    project:\n      default:\n        target: 10%    # the required coverage value\n        threshold: "
  },
  {
    "path": "docker-setup/Dockerfile",
    "chars": 1630,
    "preview": "FROM codercom/code-server:latest\n\nUSER root\n\n# Install Node.js 20\nRUN curl -fsSL https://deb.nodesource.com/setup_20.x |"
  },
  {
    "path": "docker-setup/README.md",
    "chars": 9135,
    "preview": "# Docker Development Setup\n\nDevelop and test the dbt Power User extension in code-server (VS Code in browser) with volum"
  },
  {
    "path": "docker-setup/deploy.sh",
    "chars": 1698,
    "preview": "#!/bin/bash\nset -e\n\nSCRIPT_DIR=\"$(cd \"$(dirname \"${BASH_SOURCE[0]}\")\" && pwd)\"\nPROJECT_ROOT=\"$(dirname \"$SCRIPT_DIR\")\"\n\n"
  },
  {
    "path": "docker-setup/docker-compose.yml",
    "chars": 309,
    "preview": "services:\n  code-server:\n    build:\n      context: .\n      dockerfile: Dockerfile\n    ports:\n      - \"3001:3001\"\n    env"
  },
  {
    "path": "docker-setup/start-code-server.sh",
    "chars": 3020,
    "preview": "#!/bin/bash\n\n# Copy test projects from read-only extension-src mount to writable home dirs and install deps\nfor project "
  },
  {
    "path": "documentation/docs/arch/beta.md",
    "chars": 7704,
    "preview": "/// admonition | Only use the following steps for \"dbt Cloud\" environments. If you have a dbt Core environment, use the "
  },
  {
    "path": "documentation/docs/arch/faq.md",
    "chars": 11991,
    "preview": "The dbt Power User extension is developed and maintained by [Altimate AI](https://www.altimate.ai). We are a software co"
  },
  {
    "path": "documentation/docs/arch/llm-gateway.md",
    "chars": 4437,
    "preview": "---\nstatus: new\n---\n\n# Altimate LLM Gateway\n\nThe Altimate LLM Gateway is a managed LLM service that gives you access to "
  },
  {
    "path": "documentation/docs/arch/pricingfaq.md",
    "chars": 5805,
    "preview": "The Power User for dbt extension is developed and maintained by [Altimate AI](https://www.altimate.ai). We are a softwar"
  },
  {
    "path": "documentation/docs/develop/autocomplete.md",
    "chars": 894,
    "preview": "dbt-power user extension auto-completes model, macro, column names in the VSCode\n\n## Models\n\na) Autocomplete model\n\n![Au"
  },
  {
    "path": "documentation/docs/develop/clicktorun.md",
    "chars": 506,
    "preview": "There are two methods to do it. You can either do it from the top right corner toolbar or from the extension side pane\n\n"
  },
  {
    "path": "documentation/docs/develop/compiledCode.md",
    "chars": 201,
    "preview": "## Preview compiled code (SQL)\n\nThe toolbar action to preview compiled code is present on the top right corner of the VS"
  },
  {
    "path": "documentation/docs/develop/explanation.md",
    "chars": 2185,
    "preview": "Query explanation is invaluable to understanding a complex piece of dbt or SQL code (especially written by others!).\n\n##"
  },
  {
    "path": "documentation/docs/develop/genmodelSQL.md",
    "chars": 673,
    "preview": "You can convert existing SQL into dbt model as below. The extension automatically converts SQL to jinja-sql by populatin"
  },
  {
    "path": "documentation/docs/develop/genmodelSource.md",
    "chars": 597,
    "preview": "Generating model from sources defined in yaml file is very easy as below:\n\n![Generate model from source](images/generate"
  },
  {
    "path": "documentation/docs/develop/translateSQL.md",
    "chars": 2905,
    "preview": "You can translate SQL queries from one dialect to another using this functionality. For example, translate query in Post"
  },
  {
    "path": "documentation/docs/develop/updatemodel.md",
    "chars": 1331,
    "preview": "Updating or changing an existing dbt (or SQL) model using natural language is quite straightforward with this functional"
  },
  {
    "path": "documentation/docs/discover/setupui.md",
    "chars": 9838,
    "preview": "This page covers the setup steps necessary to view your dbt documentation and lineage in the SaaS UI.\nThe steps below sh"
  },
  {
    "path": "documentation/docs/discover/viewdocs.md",
    "chars": 1957,
    "preview": "This page highlights functionality for searching and viewing documentation for your DBT Projects. Please go to Code -> d"
  },
  {
    "path": "documentation/docs/discover/viewlineage.md",
    "chars": 3028,
    "preview": "In the DataPilot SaaS UI, you can see model level as well as column level lineage. You can also see the types of changes"
  },
  {
    "path": "documentation/docs/document/docblocks.md",
    "chars": 1683,
    "preview": "# Support for dbt Doc Blocks\n\ndbt Power User provides comprehensive support for dbt doc blocks, allowing you to create, "
  },
  {
    "path": "documentation/docs/document/generatedoc.md",
    "chars": 4365,
    "preview": "Instead of writing documentation manually, you can generate the documentation!\n\n### Bulk generate documentation\n\nBulk do"
  },
  {
    "path": "documentation/docs/document/write.md",
    "chars": 1274,
    "preview": "You can write descriptions for dbt models and columns in the Documentation Editor. The documentation editor also shows t"
  },
  {
    "path": "documentation/docs/govern/collaboration.md",
    "chars": 4595,
    "preview": "Collab functionality enables you to discuss code and documentation easily with the stakeholders via VSCode and UI. Many "
  },
  {
    "path": "documentation/docs/govern/governance.md",
    "chars": 4438,
    "preview": "Prevent issues from getting shipped to production! Project governance functionality lets you swiftly scan all dbt projec"
  },
  {
    "path": "documentation/docs/govern/multiproject.md",
    "chars": 1574,
    "preview": "# Multi Project Support with dbt-loom\n\nPower User extension now supports dbt-loom, where native features like query prev"
  },
  {
    "path": "documentation/docs/govern/notebooks.md",
    "chars": 5690,
    "preview": "**Why Notebooks?**\n\nNotebooks allow you to codify your usual ad-hoc data analysis, data preparation workflows, so they c"
  },
  {
    "path": "documentation/docs/govern/querybookmarks.md",
    "chars": 3011,
    "preview": "# Query History and Bookmarks\n\nNow, you can see the history of all the SQL queries or dbt models you ran. So, you can re"
  },
  {
    "path": "documentation/docs/index.md",
    "chars": 11053,
    "preview": "# Accelerate dbt and SQL Development by 3x\n\n\nWelcome to the docs for [dbt Power User VSCode Extension](https://marketpla"
  },
  {
    "path": "documentation/docs/javascripts/feedback,js",
    "chars": 307,
    "preview": "var feedback = document.forms.feedback\nfeedback.addEventListener(\"submit\", function(ev) {\n  ev.preventDefault()\n\n  /* Re"
  },
  {
    "path": "documentation/docs/overrides/.gitkeep",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "documentation/docs/overrides/main.html",
    "chars": 720,
    "preview": "{% extends \"base.html\" %}\n\n{% block announce %}\n<strong>New!</strong> Altimate Code &mdash; #1 on ADE-Bench. 100+ determ"
  },
  {
    "path": "documentation/docs/setup/configuration.md",
    "chars": 6554,
    "preview": "# Configuration Settings\n\nThis page provides a comprehensive overview of all available configuration settings in the dbt"
  },
  {
    "path": "documentation/docs/setup/cursor_installation_workaround.md",
    "chars": 4599,
    "preview": "# Cursor IDE: Installation Workaround\n\n/// admonition | Known Cursor Issue\n    type: warning\n\nSome Cursor IDE users expe"
  },
  {
    "path": "documentation/docs/setup/faq.md",
    "chars": 1896,
    "preview": "## Frequently Asked Questions\n\n- **Why am I receiving a \"Network Error\" message when trying to log into my Altimate AI a"
  },
  {
    "path": "documentation/docs/setup/installation.md",
    "chars": 2880,
    "preview": "/// admonition | We've released our [Datamates Extension](https://marketplace.visualstudio.com/items?itemName=altimateai"
  },
  {
    "path": "documentation/docs/setup/optConfig.md",
    "chars": 11557,
    "preview": "## Environment Variables Setup\n\nThere are multiple sources from where the extension reads the environment variables.\n\n- "
  },
  {
    "path": "documentation/docs/setup/reqdConfig.md",
    "chars": 7155,
    "preview": "/// admonition | Only use the following steps for \"dbt Core\" environments. If you have a dbt Cloud environment, use the "
  },
  {
    "path": "documentation/docs/setup/reqdConfigCloud.md",
    "chars": 7457,
    "preview": "/// admonition | Only use the following steps for \"dbt Cloud\" environments. If you have a dbt Core environment, use the "
  },
  {
    "path": "documentation/docs/setup/reqdConfigFusion.md",
    "chars": 9278,
    "preview": "/// admonition | Only use the following steps for \"dbt Fusion\" environments. If you have a dbt Core environment, use the"
  },
  {
    "path": "documentation/docs/setup/sso.md",
    "chars": 6298,
    "preview": "If you would like to use SSO for authentication, please follow the instructions below. <br>\n\nWe support OIDC (OpenID Con"
  },
  {
    "path": "documentation/docs/studio.md",
    "chars": 13616,
    "preview": "# Studio\n\n## What is Studio?\n\nStudio is a specialized agent designed for users to interact with their data stack using n"
  },
  {
    "path": "documentation/docs/stylesheets/extra.css",
    "chars": 1701,
    "preview": "/* Announcement banner — thin strip style */\n.md-banner {\n  background: linear-gradient(90deg, #1565c0 0%, #6a1b9a 50%, "
  },
  {
    "path": "documentation/docs/teammates/altimate-code.md",
    "chars": 4533,
    "preview": "---\nstatus: new\n---\n\n# Altimate Code in IDE\n\n## What is Altimate Code?\n\n[Altimate Code](https://docs.altimate.sh) is the"
  },
  {
    "path": "documentation/docs/teammates/coach.md",
    "chars": 1372,
    "preview": "You can coach and personalize your AI teammates by giving instructions in the natural language.\n\nFirst, enable AI teamma"
  },
  {
    "path": "documentation/docs/teammates/introduction.md",
    "chars": 1051,
    "preview": "## What are AI Teammates?\n\nAs AI is evolving, now we can create virtual AI teammates where some pieces of work can be do"
  },
  {
    "path": "documentation/docs/test/adhocquery.md",
    "chars": 470,
    "preview": "You can run ad hoc SQL queries or dbt Models in the \"Query Results\" tab\n\n## Click on the \"New Query\" Button\n\nThe \"New Qu"
  },
  {
    "path": "documentation/docs/test/bigquerycost.md",
    "chars": 538,
    "preview": "For dbt models running in Big Query, you can get the estimate of the data processed for that model right inside VSCode a"
  },
  {
    "path": "documentation/docs/test/defertoprod.md",
    "chars": 3799,
    "preview": "Defer functionality in dbt allows the user to run a subset of models or tests without having to first build their upstre"
  },
  {
    "path": "documentation/docs/test/lineage.md",
    "chars": 3546,
    "preview": "Lineage is available as model level lineage and column level lineage. You need to add an API key to view column level li"
  },
  {
    "path": "documentation/docs/test/queryResults.md",
    "chars": 3644,
    "preview": "You can preview the resulting data and SQL query from your code with the extension, export it as CSV and do further anal"
  },
  {
    "path": "documentation/docs/test/runctes.md",
    "chars": 1344,
    "preview": "# Preview CTEs (Common Table Expressions)\n\ndbt Power User allows you to preview individual CTEs (Common Table Expression"
  },
  {
    "path": "documentation/docs/test/runtests.md",
    "chars": 700,
    "preview": "There are two methods to run dbt model tests. You can either do it from the top right corner toolbar or from the extensi"
  },
  {
    "path": "documentation/docs/test/sqlvalidation.md",
    "chars": 1155,
    "preview": "Identify SQL issues like non-existent columns, keyword typos, extra parentheses easily\n\nFollowing SQL checks are availab"
  },
  {
    "path": "documentation/docs/test/sqlvisualizer.md",
    "chars": 2821,
    "preview": "# SQL Visualizer (Beta)\n\nThe new SQL visualizer translates complex SQL queries into intuitive graphical representations."
  },
  {
    "path": "documentation/docs/test/utilities.md",
    "chars": 73,
    "preview": "## dbt logs viewer (force tailing)\n\n![dbt-logviewer](images/dbt-log.gif)\n"
  },
  {
    "path": "documentation/docs/test/writetests.md",
    "chars": 2889,
    "preview": "You can generate, view, edit and delete dbt tests in VS Code under the Documentation Editor section.\n\n/// details | Foll"
  },
  {
    "path": "documentation/docs/troubleshooting.md",
    "chars": 4466,
    "preview": "## Troubleshooting Steps\n\nFollow these steps to effectively troubleshoot and resolve issues with the extension:\n\n### Set"
  },
  {
    "path": "documentation/mkdocs.yml",
    "chars": 6135,
    "preview": "site_name: dbt Power User\nsite_description: the best dbt extension for vscode\nsite_author: Altimate Inc\ntheme:\n  name: m"
  },
  {
    "path": "documentation/readme.md",
    "chars": 137,
    "preview": "### Local development\n\n- Install required dependencies: `pip install --requirement requirements.txt`\n- Run mkdocs server"
  },
  {
    "path": "documentation/requirements.txt",
    "chars": 86,
    "preview": "mkdocs>=1.6.1\nmkdocs-material>=9.5.43\nmkdocs-git-revision-date-localized-plugin>=1.3.0"
  },
  {
    "path": "jest.config.js",
    "chars": 1160,
    "preview": "module.exports = {\n  preset: \"ts-jest\",\n  testEnvironment: \"node\",\n  roots: [\"<rootDir>/src\"],\n  testMatch: [\"**/*.test."
  },
  {
    "path": "monitoring/README.md",
    "chars": 4345,
    "preview": "# dbt Power User — Error Analysis Dashboard\n\nA local Flask web app that queries the `dbt-power-user-telemetry-staging` A"
  },
  {
    "path": "monitoring/app.py",
    "chars": 14697,
    "preview": "\"\"\"\ndbt Power User — Error Analysis Dashboard\nFlask backend that queries Azure Application Insights telemetry.\nAuthentic"
  },
  {
    "path": "monitoring/github_issues/app.py",
    "chars": 19278,
    "preview": "\"\"\"\nGitHub Issues Dashboard\nFlask backend that fetches issues from the GitHub REST API with local file-based caching.\n\nA"
  },
  {
    "path": "monitoring/github_issues/requirements.txt",
    "chars": 30,
    "preview": "flask>=3.0.0\nrequests>=2.31.0\n"
  },
  {
    "path": "monitoring/github_issues/templates/index.html",
    "chars": 42828,
    "preview": "<!doctype html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"UTF-8\" />\n    <meta name=\"viewport\" content=\"width=device-w"
  },
  {
    "path": "monitoring/requirements.txt",
    "chars": 63,
    "preview": "flask>=3.0.0\nazure-identity>=1.15.0\nazure-monitor-query>=1.3.0\n"
  },
  {
    "path": "monitoring/templates/index.html",
    "chars": 37386,
    "preview": "<!doctype html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"UTF-8\" />\n    <meta name=\"viewport\" content=\"width=device-w"
  },
  {
    "path": "package.json",
    "chars": 44550,
    "preview": "{\n  \"name\": \"vscode-dbt-power-user\",\n  \"displayName\": \"Power User for dbt\",\n  \"description\": \"a.k.a. dbt power user make"
  },
  {
    "path": "package.nls.json",
    "chars": 5711,
    "preview": "{\n  \"walkthrough.<id>.title\": \"Walkthrough Title\",\n  \"walkthrough.<id>.description\": \"Walkthrough Description\",\n  \"walkt"
  },
  {
    "path": "postInstall.js",
    "chars": 8370,
    "preview": "// Copied from https://github.com/microsoft/vscode-jupyter/blob/main/build/ci/postInstall.js\nconst fs = require(\"fs\");\nc"
  },
  {
    "path": "prepareBuild.js",
    "chars": 7588,
    "preview": "const path = require(\"path\");\nconst fs = require(\"fs\");\n\nfunction getZeroMQPreBuildsFoldersToKeep() {\n  // Possible valu"
  },
  {
    "path": "rsbuild.config.ts",
    "chars": 8017,
    "preview": "import { defineConfig, RsbuildPlugin } from \"@rsbuild/core\";\nimport { cpSync, existsSync, readdirSync } from \"fs\";\nimpor"
  },
  {
    "path": "snippets/snippets_markdown.json",
    "chars": 173,
    "preview": "{\n  \"Docs\": {\n      \"prefix\": \"docs\",\n      \"body\": [\n          \"{% docs ${1:name} %}\",\n          \"$2\",\n          \"{% en"
  },
  {
    "path": "snippets/snippets_sql.json",
    "chars": 5530,
    "preview": "{\n  \"block\": {\n      \"prefix\": \"block\",\n      \"body\": [\n          \"{% block ${1:name} %}\",\n          \"  $2\",\n          \""
  },
  {
    "path": "snippets/snippets_yaml.json",
    "chars": 693,
    "preview": "{\n  \"Doc\": {\n      \"prefix\": \"doc\",\n      \"body\": [\n          \"{{ doc('${1:docs_name}') }}\"\n      ],\n      \"description\""
  },
  {
    "path": "src/altimate.ts",
    "chars": 18686,
    "preview": "import {\n  AltimateHttpClient,\n  ColumnMetaData,\n  DBTConfiguration,\n  DBTTerminal,\n  NodeMetaData,\n  SourceMetaData,\n} "
  },
  {
    "path": "src/autocompletion_provider/docAutocompletionProvider.ts",
    "chars": 2597,
    "preview": "import {\n  CancellationToken,\n  CompletionContext,\n  CompletionItem,\n  CompletionItemKind,\n  CompletionItemProvider,\n  C"
  },
  {
    "path": "src/autocompletion_provider/index.ts",
    "chars": 2089,
    "preview": "import { Disposable, languages } from \"vscode\";\nimport { DBTPowerUserExtension } from \"../dbtPowerUserExtension\";\nimport"
  },
  {
    "path": "src/autocompletion_provider/macroAutocompletionProvider.ts",
    "chars": 2491,
    "preview": "import {\n  CancellationToken,\n  CompletionContext,\n  CompletionItem,\n  CompletionItemKind,\n  CompletionItemProvider,\n  C"
  },
  {
    "path": "src/autocompletion_provider/modelAutocompletionProvider.ts",
    "chars": 6440,
    "preview": "import { RESOURCE_TYPE_ANALYSIS } from \"@altimateai/dbt-integration\";\nimport {\n  CancellationToken,\n  CompletionContext,"
  },
  {
    "path": "src/autocompletion_provider/sourceAutocompletionProvider.ts",
    "chars": 4169,
    "preview": "import {\n  CancellationToken,\n  CompletionContext,\n  CompletionItem,\n  CompletionItemKind,\n  CompletionItemProvider,\n  C"
  },
  {
    "path": "src/autocompletion_provider/usercompletion_provider.ts",
    "chars": 939,
    "preview": "import {\n  CompletionItem,\n  CompletionItemKind,\n  CompletionItemProvider,\n  CompletionList,\n  Disposable,\n  ProviderRes"
  },
  {
    "path": "src/code_lens_provider/cteCodeLensProvider.ts",
    "chars": 25496,
    "preview": "import { DBTTerminal } from \"@altimateai/dbt-integration\";\nimport { inject } from \"inversify\";\nimport {\n  CancellationTo"
  },
  {
    "path": "src/code_lens_provider/index.ts",
    "chars": 2213,
    "preview": "import { Disposable, languages } from \"vscode\";\nimport { DBTPowerUserExtension } from \"../dbtPowerUserExtension\";\nimport"
  },
  {
    "path": "src/code_lens_provider/sourceModelCreationCodeLensProvider.ts",
    "chars": 5998,
    "preview": "import {\n  CancellationToken,\n  CodeLens,\n  CodeLensProvider,\n  Event,\n  EventEmitter,\n  Range,\n  TextDocument,\n  Uri,\n}"
  },
  {
    "path": "src/code_lens_provider/sqlActionsCodeLensProvider.ts",
    "chars": 8197,
    "preview": "import * as path from \"path\";\nimport {\n  CancellationToken,\n  CodeLens,\n  CodeLensProvider,\n  commands,\n  Disposable,\n  "
  },
  {
    "path": "src/code_lens_provider/virtualSqlCodeLensProvider.ts",
    "chars": 2675,
    "preview": "import { NotebookService } from \"@lib\";\nimport {\n  CancellationToken,\n  CodeLens,\n  CodeLensProvider,\n  Command,\n  Dispo"
  },
  {
    "path": "src/commands/altimateScan.ts",
    "chars": 6011,
    "preview": "import { DBTTerminal } from \"@altimateai/dbt-integration\";\nimport { inject } from \"inversify\";\nimport { commands, Progre"
  },
  {
    "path": "src/commands/bigQueryCostEstimate.ts",
    "chars": 2455,
    "preview": "import { DBTTerminal } from \"@altimateai/dbt-integration\";\nimport { inject } from \"inversify\";\nimport { PythonException "
  },
  {
    "path": "src/commands/index.ts",
    "chars": 56672,
    "preview": "import { DBTTerminal, RunModelType } from \"@altimateai/dbt-integration\";\nimport { DatapilotNotebookController, OpenNoteb"
  },
  {
    "path": "src/commands/runModel.ts",
    "chars": 5823,
    "preview": "import path = require(\"path\");\nimport { RunModelType } from \"@altimateai/dbt-integration\";\nimport { Uri, window } from \""
  },
  {
    "path": "src/commands/runTest.ts",
    "chars": 2728,
    "preview": "import { Uri, window } from \"vscode\";\nimport { DBTProjectContainer } from \"../dbt_client/dbtProjectContainer\";\nimport { "
  },
  {
    "path": "src/commands/sqlToModel.ts",
    "chars": 5362,
    "preview": "import { DBTTerminal } from \"@altimateai/dbt-integration\";\nimport { inject } from \"inversify\";\nimport * as path from \"pa"
  },
  {
    "path": "src/commands/tests/initCatalog.ts",
    "chars": 1213,
    "preview": "import { Catalog } from \"@altimateai/dbt-integration\";\nimport { ScanContext } from \"./scanContext\";\nimport { AltimateSca"
  },
  {
    "path": "src/commands/tests/missingSchemaTest.ts",
    "chars": 1871,
    "preview": "import { RESOURCE_TYPE_MODEL } from \"@altimateai/dbt-integration\";\nimport { Diagnostic, DiagnosticSeverity, Range } from"
  },
  {
    "path": "src/commands/tests/scanContext.ts",
    "chars": 795,
    "preview": "import { Catalog } from \"@altimateai/dbt-integration\";\nimport { Diagnostic } from \"vscode\";\nimport { DBTProject } from \""
  },
  {
    "path": "src/commands/tests/staleModelColumnTest.ts",
    "chars": 4907,
    "preview": "import { createFullPathForNode } from \"@altimateai/dbt-integration\";\nimport { readFileSync } from \"fs\";\nimport { Diagnos"
  },
  {
    "path": "src/commands/tests/step.ts",
    "chars": 131,
    "preview": "import { ScanContext } from \"./scanContext\";\n\nexport interface AltimateScanStep {\n  run(scanContext: ScanContext): Promi"
  },
  {
    "path": "src/commands/tests/undocumentedModelColumnTest.ts",
    "chars": 2643,
    "preview": "import { Diagnostic, DiagnosticSeverity, Range } from \"vscode\";\nimport { getColumnNameByCase } from \"../../utils\";\nimpor"
  },
  {
    "path": "src/commands/tests/unmaterializedModelTest.ts",
    "chars": 1957,
    "preview": "import { Diagnostic, DiagnosticSeverity, Range } from \"vscode\";\nimport { ScanContext } from \"./scanContext\";\nimport { Al"
  },
  {
    "path": "src/commands/validateSql.ts",
    "chars": 8841,
    "preview": "import { DBTTerminal } from \"@altimateai/dbt-integration\";\nimport { inject } from \"inversify\";\nimport { basename } from "
  },
  {
    "path": "src/commands/walkthroughCommands.ts",
    "chars": 12239,
    "preview": "import {\n  CommandProcessExecutionFactory,\n  DBTTerminal,\n} from \"@altimateai/dbt-integration\";\nimport { inject } from \""
  },
  {
    "path": "src/comment_provider/conversationProvider.ts",
    "chars": 21778,
    "preview": "import {\n  DBTTerminal,\n  RESOURCE_TYPE_MACRO,\n  RESOURCE_TYPE_TEST,\n} from \"@altimateai/dbt-integration\";\nimport { inje"
  },
  {
    "path": "src/comment_provider/index.ts",
    "chars": 472,
    "preview": "import { Disposable } from \"vscode\";\nimport { ConversationProvider } from \"./conversationProvider\";\n\nexport class Commen"
  },
  {
    "path": "src/content_provider/index.ts",
    "chars": 628,
    "preview": "import { Disposable, workspace } from \"vscode\";\nimport { SqlPreviewContentProvider } from \"./sqlPreviewContentProvider\";"
  },
  {
    "path": "src/content_provider/sqlPreviewContentProvider.ts",
    "chars": 4835,
    "preview": "import { readFileSync } from \"fs\";\nimport {\n  Disposable,\n  Event,\n  EventEmitter,\n  ProgressLocation,\n  TextDocumentCha"
  },
  {
    "path": "src/cte_profiler/cteProfilerDecorationProvider.ts",
    "chars": 7117,
    "preview": "import { DBTTerminal } from \"@altimateai/dbt-integration\";\nimport { inject } from \"inversify\";\nimport {\n  DecorationOpti"
  },
  {
    "path": "src/cte_profiler/cteProfilerService.ts",
    "chars": 9794,
    "preview": "import { DBTTerminal } from \"@altimateai/dbt-integration\";\nimport { inject, injectable } from \"inversify\";\nimport {\n  Ca"
  },
  {
    "path": "src/cte_profiler/cteProfilerTypes.ts",
    "chars": 612,
    "preview": "export interface CteProfileEntry {\n  name: string;\n  line: number;\n  queryTimeMs: number;\n  marginalTimeMs: number;\n  ro"
  },
  {
    "path": "src/dbtPowerUserExtension.ts",
    "chars": 4529,
    "preview": "import { NotebookProviders } from \"@lib\";\nimport { commands, Disposable, ExtensionContext, workspace } from \"vscode\";\nim"
  },
  {
    "path": "src/dbt_client/datapilot.ts",
    "chars": 2259,
    "preview": "import {\n  CommandProcessExecutionFactory,\n  DBTConfiguration,\n  DBTTerminal,\n} from \"@altimateai/dbt-integration\";\nimpo"
  },
  {
    "path": "src/dbt_client/dbtProject.ts",
    "chars": 57295,
    "preview": "import { existsSync, writeFileSync } from \"fs\";\n\nimport {\n  Catalog,\n  CATALOG_FILE,\n  ColumnMetaData,\n  DataPilotHealtC"
  },
  {
    "path": "src/dbt_client/dbtProjectContainer.ts",
    "chars": 15481,
    "preview": "import type { RunResultsEventData } from \"@altimateai/dbt-integration\";\nimport {\n  DataPilotHealtCheckParams,\n  DBTTermi"
  },
  {
    "path": "src/dbt_client/dbtProjectLog.ts",
    "chars": 3257,
    "preview": "import { closeSync, existsSync, openSync, readSync } from \"fs\";\nimport * as path from \"path\";\nimport {\n  Disposable,\n  E"
  },
  {
    "path": "src/dbt_client/dbtVersionEvent.ts",
    "chars": 100,
    "preview": "export interface DBTInstallationVerificationEvent {\n  inProgress: boolean;\n  installed?: boolean;\n}\n"
  },
  {
    "path": "src/dbt_client/dbtWorkspaceFolder.ts",
    "chars": 10264,
    "preview": "import { existsSync, statSync } from \"fs\";\nimport { inject } from \"inversify\";\nimport * as path from \"path\";\nimport {\n  "
  },
  {
    "path": "src/dbt_client/event/manifestCacheChangedEvent.ts",
    "chars": 1079,
    "preview": "import {\n  DocMetaMap,\n  ExposureMetaMap,\n  FunctionMetaMap,\n  GraphMetaMap,\n  MacroMetaMap,\n  MetricMetaMap,\n  NodeMeta"
  },
  {
    "path": "src/dbt_client/event/projectConfigChangedEvent.ts",
    "chars": 132,
    "preview": "import { DBTProject } from \"../dbtProject\";\nexport class ProjectConfigChangedEvent {\n  constructor(public project: DBTPr"
  },
  {
    "path": "src/dbt_client/event/runResultsEvent.ts",
    "chars": 165,
    "preview": "import { DBTProject } from \"../dbtProject\";\n\nexport class RunResultsEvent {\n  constructor(\n    public project: DBTProjec"
  },
  {
    "path": "src/dbt_client/index.ts",
    "chars": 5898,
    "preview": "import { DBTDetection } from \"@altimateai/dbt-integration\";\nimport { existsSync } from \"fs\";\nimport { inject } from \"inv"
  },
  {
    "path": "src/dbt_client/pythonEnvironment.ts",
    "chars": 14423,
    "preview": "import { DBTTerminal, EnvironmentVariables } from \"@altimateai/dbt-integration\";\nimport { inject } from \"inversify\";\nimp"
  },
  {
    "path": "src/dbt_client/runtimePythonEnvironmentProvider.ts",
    "chars": 2578,
    "preview": "import {\n  EnvironmentVariables,\n  PythonEnvironmentProvider,\n  RuntimePythonEnvironment,\n} from \"@altimateai/dbt-integr"
  },
  {
    "path": "src/dbt_client/vscodeConfiguration.ts",
    "chars": 3597,
    "preview": "import {\n  DBTConfiguration,\n  DEFAULT_CONFIGURATION_VALUES,\n} from \"@altimateai/dbt-integration\";\nimport { injectable }"
  },
  {
    "path": "src/dbt_client/vscodeTerminal.ts",
    "chars": 3244,
    "preview": "import { DBTTerminal } from \"@altimateai/dbt-integration\";\nimport { injectable } from \"inversify\";\nimport { PythonExcept"
  },
  {
    "path": "src/definition_provider/docDefinitionProvider.ts",
    "chars": 3187,
    "preview": "import { DocMetaMap } from \"@altimateai/dbt-integration\";\nimport {\n  Definition,\n  DefinitionLink,\n  DefinitionProvider,"
  },
  {
    "path": "src/definition_provider/index.ts",
    "chars": 1515,
    "preview": "import { Disposable, languages } from \"vscode\";\nimport { DBTPowerUserExtension } from \"../dbtPowerUserExtension\";\nimport"
  },
  {
    "path": "src/definition_provider/macroDefinitionProvider.ts",
    "chars": 4437,
    "preview": "import { MacroMetaMap } from \"@altimateai/dbt-integration\";\nimport {\n  Definition,\n  DefinitionLink,\n  DefinitionProvide"
  },
  {
    "path": "src/definition_provider/modelDefinitionProvider.ts",
    "chars": 3970,
    "preview": "import { DBTTerminal, NodeMetaMap } from \"@altimateai/dbt-integration\";\nimport { inject } from \"inversify\";\nimport {\n  C"
  },
  {
    "path": "src/definition_provider/sourceDefinitionProvider.ts",
    "chars": 3928,
    "preview": "import { SourceMetaMap } from \"@altimateai/dbt-integration\";\nimport { readFileSync } from \"fs\";\nimport {\n  CancellationT"
  },
  {
    "path": "src/document_formatting_edit_provider/dbtDocumentFormattingEditProvider.ts",
    "chars": 9541,
    "preview": "import { CommandProcessExecutionFactory } from \"@altimateai/dbt-integration\";\nimport { exec } from \"child_process\";\nimpo"
  },
  {
    "path": "src/document_formatting_edit_provider/index.ts",
    "chars": 759,
    "preview": "import { Disposable, languages } from \"vscode\";\nimport { DBTPowerUserExtension } from \"../dbtPowerUserExtension\";\nimport"
  },
  {
    "path": "src/extension.ts",
    "chars": 453,
    "preview": "import \"reflect-metadata\";\nimport { ExtensionContext } from \"vscode\";\nimport { DBTPowerUserExtension } from \"./dbtPowerU"
  },
  {
    "path": "src/hover_provider/depthDecorationProvider.ts",
    "chars": 5341,
    "preview": "import {\n  DecorationOptions,\n  Disposable,\n  Hover,\n  HoverProvider,\n  MarkdownString,\n  Position,\n  Range,\n  TextDocum"
  },
  {
    "path": "src/hover_provider/index.ts",
    "chars": 1805,
    "preview": "import { Disposable, languages } from \"vscode\";\nimport { DBTPowerUserExtension } from \"../dbtPowerUserExtension\";\nimport"
  },
  {
    "path": "src/hover_provider/macroHoverProvider.ts",
    "chars": 2301,
    "preview": "import {\n  DBTTerminal,\n  MacroMetaData,\n  MacroMetaMap,\n  NodeMetaData,\n  NodeMetaMap,\n} from \"@altimateai/dbt-integrat"
  },
  {
    "path": "src/hover_provider/modelHoverProvider.ts",
    "chars": 4575,
    "preview": "import { DBTTerminal, NodeMetaMap } from \"@altimateai/dbt-integration\";\nimport { inject } from \"inversify\";\nimport {\n  C"
  },
  {
    "path": "src/hover_provider/sourceHoverProvider.ts",
    "chars": 3481,
    "preview": "import { SourceMetaMap } from \"@altimateai/dbt-integration\";\nimport {\n  CancellationToken,\n  Disposable,\n  Hover,\n  Hove"
  },
  {
    "path": "src/hover_provider/utils.ts",
    "chars": 3664,
    "preview": "import {\n  MacroMetaData,\n  NodeMetaData,\n  NodeMetaType,\n  SourceMetaType,\n} from \"@altimateai/dbt-integration\";\nimport"
  },
  {
    "path": "src/hover_provider/yamlModelHoverProvider.ts",
    "chars": 7861,
    "preview": "import { NodeMetaMap, SourceMetaMap } from \"@altimateai/dbt-integration\";\nimport {\n  CancellationToken,\n  Disposable,\n  "
  },
  {
    "path": "src/inversify.config.ts",
    "chars": 59300,
    "preview": "import {\n  AltimateHttpClient,\n  ChildrenParentParser,\n  CLIDBTCommandExecutionStrategy,\n  CommandProcessExecutionFactor"
  },
  {
    "path": "src/lib/index.d.ts",
    "chars": 11869,
    "preview": "import {\n  AltimateRequest,\n  CommandProcessExecutionFactory,\n  DBTCommandExecutionInfrastructure,\n  DBTProject,\n  DBTTe"
  },
  {
    "path": "src/lib/index.js",
    "chars": 100980,
    "preview": "\"use strict\";\nObject.defineProperty(exports, Symbol.toStringTag, { value: \"Module\" });\nconst u = require(\"vscode\"),\n  p "
  },
  {
    "path": "src/mcp/index.ts",
    "chars": 4371,
    "preview": "import { DBTTerminal } from \"@altimateai/dbt-integration\";\nimport { inject } from \"inversify\";\nimport { ConfigurationTar"
  },
  {
    "path": "src/mcp/server.ts",
    "chars": 26831,
    "preview": "import { CommandProcessResult } from \"@altimateai/dbt-integration\";\nimport { ToolSchema } from \"@modelcontextprotocol/sd"
  },
  {
    "path": "src/mcp/types.ts",
    "chars": 748,
    "preview": "import {\n  CallToolResultSchema,\n  ToolSchema,\n} from \"@modelcontextprotocol/sdk/types\";\nimport { z } from \"zod/v4\";\n\nex"
  },
  {
    "path": "src/mcp/utils.ts",
    "chars": 110,
    "preview": "import { env } from \"vscode\";\n\nexport const isCursor = (): boolean => {\n  return env.appName === \"Cursor\";\n};\n"
  },
  {
    "path": "src/modules.ts",
    "chars": 681,
    "preview": "export {\n  CommandProcessExecutionFactory,\n  DBTCommandExecutionInfrastructure,\n  DBTTerminal,\n  ExecuteSQLResult,\n} fro"
  },
  {
    "path": "src/quickpick/actionsQuickPick.ts",
    "chars": 4142,
    "preview": "import {\n  commands,\n  Disposable,\n  QuickPickItem,\n  QuickPickItemKind,\n  ThemeIcon,\n  Uri,\n  window,\n} from \"vscode\";\n"
  },
  {
    "path": "src/quickpick/index.ts",
    "chars": 2342,
    "preview": "import { commands, Disposable, window } from \"vscode\";\nimport { DBTProjectContainer } from \"../dbt_client/dbtProjectCont"
  },
  {
    "path": "src/quickpick/notebookQuickPick.ts",
    "chars": 1938,
    "preview": "import { commands, QuickPickItem, window } from \"vscode\";\n\nexport interface NotebookQuickPickItem extends QuickPickItem "
  },
  {
    "path": "src/quickpick/projectQuickPick.ts",
    "chars": 816,
    "preview": "import { QuickPickItem, Uri, window } from \"vscode\";\nimport { DBTProject } from \"../dbt_client/dbtProject\";\n\nexport inte"
  },
  {
    "path": "src/quickpick/sqlQuickPick.ts",
    "chars": 4320,
    "preview": "import * as path from \"path\";\nimport {\n  commands,\n  Disposable,\n  QuickPickItem,\n  ThemeIcon,\n  Uri,\n  window,\n} from \""
  },
  {
    "path": "src/services/altimateAuthService.ts",
    "chars": 2274,
    "preview": "import { DBTConfiguration } from \"@altimateai/dbt-integration\";\nimport { inject } from \"inversify\";\nimport { env, Uri, w"
  },
  {
    "path": "src/services/altimateCodeChatService.ts",
    "chars": 2762,
    "preview": "import * as path from \"path\";\nimport { Disposable, extensions, Range, Uri, window, workspace } from \"vscode\";\n\nexport cl"
  },
  {
    "path": "src/services/conversationService.ts",
    "chars": 9948,
    "preview": "import { DBTTerminal, hashProjectRoot } from \"@altimateai/dbt-integration\";\nimport { rmSync } from \"fs\";\nimport { inject"
  },
  {
    "path": "src/services/dbtLineageService.ts",
    "chars": 14977,
    "preview": "import {\n  computeColumnLineage,\n  GraphMetaMap,\n  NodeGraphMap,\n  RESOURCE_TYPE_ANALYSIS,\n  RESOURCE_TYPE_EXPOSURE,\n  R"
  },
  {
    "path": "src/services/dbtTestService.ts",
    "chars": 12816,
    "preview": "import {\n  DBTTerminal,\n  MacroMetaMap,\n  TestMetaData,\n  TestMetadataAcceptedValues,\n  TestMetadataRelationships,\n} fro"
  },
  {
    "path": "src/services/diagnosticsOutputChannel.ts",
    "chars": 1308,
    "preview": "import { OutputChannel, window } from \"vscode\";\nimport { stripANSI } from \"../utils\";\n\nexport class DiagnosticsOutputCha"
  },
  {
    "path": "src/services/docGenService.ts",
    "chars": 24194,
    "preview": "import path = require(\"path\");\nimport {\n  DBTTerminal,\n  NodeMetaData,\n  RateLimitException,\n  RESOURCE_TYPE_MODEL,\n} fr"
  },
  {
    "path": "src/services/fileService.ts",
    "chars": 741,
    "preview": "import { TextDocument, TextEditor, Uri, window, workspace } from \"vscode\";\n\n/**\n * service to promisify file related act"
  },
  {
    "path": "src/services/queryAnalysisService.ts",
    "chars": 7639,
    "preview": "import { DBTTerminal } from \"@altimateai/dbt-integration\";\nimport { inject } from \"inversify\";\nimport { Range, window } "
  },
  {
    "path": "src/services/queryManifestService.ts",
    "chars": 5771,
    "preview": "import { DBTTerminal } from \"@altimateai/dbt-integration\";\nimport { inject } from \"inversify\";\nimport { TextDocument, Ur"
  },
  {
    "path": "src/services/runHistoryService.ts",
    "chars": 1888,
    "preview": "import type { RunResultsEventData } from \"@altimateai/dbt-integration\";\nimport { injectable } from \"inversify\";\nimport {"
  },
  {
    "path": "src/services/sharedStateService.ts",
    "chars": 386,
    "preview": "import { EventEmitter } from \"vscode\";\nimport { SharedStateEventEmitterProps } from \"../webview_provider/altimateWebview"
  },
  {
    "path": "src/services/streamingService.ts",
    "chars": 789,
    "preview": "import { AltimateRequest } from \"../altimate\";\nimport { SharedStateService } from \"./sharedStateService\";\n\nexport class "
  },
  {
    "path": "src/services/usersService.ts",
    "chars": 3084,
    "preview": "import { DBTTerminal } from \"@altimateai/dbt-integration\";\nimport { inject } from \"inversify\";\nimport { Disposable } fro"
  },
  {
    "path": "src/statusbar/deferToProductionStatusBar.ts",
    "chars": 2789,
    "preview": "import { DBTTerminal } from \"@altimateai/dbt-integration\";\nimport { inject } from \"inversify\";\nimport {\n  Disposable,\n  "
  },
  {
    "path": "src/statusbar/index.ts",
    "chars": 920,
    "preview": "import { Disposable } from \"vscode\";\nimport { DeferToProductionStatusBar } from \"./deferToProductionStatusBar\";\nimport {"
  },
  {
    "path": "src/statusbar/targetStatusBar.ts",
    "chars": 2523,
    "preview": "import { DBTTerminal } from \"@altimateai/dbt-integration\";\nimport { inject } from \"inversify\";\nimport {\n  Disposable,\n  "
  },
  {
    "path": "src/statusbar/versionStatusBar.ts",
    "chars": 2808,
    "preview": "import {\n  Command,\n  Disposable,\n  StatusBarAlignment,\n  StatusBarItem,\n  window,\n  workspace,\n} from \"vscode\";\nimport "
  }
]

// ... and 454 more files (download for full content)

About this extraction

This page contains the full source code of the innoverio/vscode-dbt-power-user GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 654 files (6.3 MB), approximately 1.7M tokens, and a symbol index with 3650 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!