Skip to content

feat(web): add step-by-step tour shell#38785

Draft
Jingyi-Dify wants to merge 47 commits into
mainfrom
feat/step-by-step-tour-shell
Draft

feat(web): add step-by-step tour shell#38785
Jingyi-Dify wants to merge 47 commits into
mainfrom
feat/step-by-step-tour-shell

Conversation

@Jingyi-Dify

Copy link
Copy Markdown
Contributor

Summary

  • Adds the Dify Cloud step-by-step tour shell across Home, Studio, Knowledge, and Integrations surfaces.
  • Wires tour state to the generated onboarding contract, including workspace enable/disable behavior and Help menu recovery.
  • Preserves tour targets, coachmarks, analytics, and permission-aware walkthrough branches after merging the latest origin/main.

From Codex

Screenshots

Before After
N/A N/A

Checklist

  • This change requires a documentation update, included: Dify Document
  • I understand that this PR may be closed in case there was no previous discussion or issues. (This doesn't apply to typos!)
  • I've added a test for each change that was introduced, and I tried as much as possible to make a single atomic change.
  • I've updated the documentation accordingly.
  • I ran make lint && make type-check (backend) and cd web && pnpm exec vp staged (frontend) to appease the lint gods

Validation:

  • CI=true pnpm -C web test app/components/step-by-step-tour/__tests__/mount.spec.tsx app/components/apps/__tests__/list.spec.tsx app/components/apps/__tests__/empty.spec.tsx app/components/datasets/list/__tests__/index.spec.tsx app/components/datasets/list/__tests__/datasets.spec.tsx app/components/integrations/__tests__/page.spec.tsx
  • pnpm -C web lint:tss
  • git diff --check

Jingyi-Dify and others added 30 commits June 25, 2026 14:28
# Conflicts:
#	packages/iconify-collections/custom-public/icons.json
#	packages/iconify-collections/custom-vender/icons.json
#	packages/iconify-collections/custom-vender/info.json
#	web/app/components/apps/__tests__/list.spec.tsx
#	web/app/components/main-nav/index.tsx
…r-shell

# Conflicts:
#	packages/contracts/generated/api/console/orpc.gen.ts
#	web/app/components/apps/__tests__/list.spec.tsx
#	web/app/components/datasets/list/first-empty-state/__tests__/index.spec.tsx
#	web/app/components/header/account-setting/model-provider-page/install-from-marketplace.tsx
#	web/app/components/header/account-setting/model-provider-page/model-provider-page-body.tsx
#	web/app/components/main-nav/index.tsx
…r-shell

# Conflicts:
#	web/app/components/apps/__tests__/list.spec.tsx
#	web/app/components/plugins/plugin-page/empty/index.tsx
#	web/contract/router.ts
…r-shell

# Conflicts:
#	web/app/components/header/account-setting/model-provider-page/__tests__/index.spec.tsx
#	web/app/components/header/account-setting/model-provider-page/model-provider-page-body.tsx
Jingyi-Dify and others added 12 commits July 7, 2026 14:50
…r-shell

# Conflicts:
#	web/app/components/apps/app-card.tsx
#	web/app/components/apps/list.tsx
#	web/app/components/datasets/list/__tests__/index.spec.tsx
#	web/app/components/datasets/list/dataset-card/components/operations-dropdown.tsx
#	web/app/components/datasets/list/index.tsx
#	web/app/components/explore/app-list/__tests__/index.spec.tsx
#	web/app/components/explore/app-list/index.tsx
#	web/app/components/header/account-setting/api-based-extension-page/index.tsx
#	web/app/components/main-nav/__tests__/index.spec.tsx
#	web/app/components/main-nav/components/help-menu.tsx
#	web/app/components/main-nav/index.tsx
#	web/hooks/use-import-dsl.ts
…r-shell

# Conflicts:
#	packages/contracts/generated/api/console/orpc.gen.ts
#	packages/contracts/generated/api/console/router.gen.ts
#	packages/iconify-collections/custom-public/icons.json
#	web/app/components/apps/app-card.tsx
#	web/app/components/apps/empty.tsx
#	web/app/components/apps/first-empty-state/index.tsx
#	web/app/components/apps/list.tsx
#	web/app/components/datasets/list/dataset-card/components/operations-dropdown.tsx
#	web/app/components/datasets/list/datasets.tsx
#	web/app/components/datasets/list/first-empty-state/index.tsx
#	web/app/components/datasets/list/index.tsx
#	web/app/components/explore/app-list/index.tsx
#	web/app/components/explore/try-app/app-info/index.tsx
#	web/app/components/header/account-setting/api-based-extension-page/index.tsx
#	web/app/components/header/account-setting/model-provider-page/install-from-marketplace.tsx
#	web/app/components/main-nav/components/help-menu.tsx
#	web/app/components/main-nav/index.tsx
@github-actions github-actions Bot added the web This relates to changes on the web. label Jul 10, 2026
@github-actions

github-actions Bot commented Jul 10, 2026

Copy link
Copy Markdown
Contributor

Pyrefly Diff

base → PR
--- /tmp/pyrefly_base.txt	2026-07-10 22:14:22.882382526 +0000
+++ /tmp/pyrefly_pr.txt	2026-07-10 22:14:06.878320355 +0000
@@ -8058,6 +8058,26 @@
    --> tests/unit_tests/services/test_snippet_service.py:678:48
 ERROR Argument `SimpleNamespace` is not assignable to parameter `snippet` with type `CustomizedSnippet` in function `services.snippet_service.SnippetService.increment_use_count` [bad-argument-type]
    --> tests/unit_tests/services/test_snippet_service.py:678:65
+ERROR Class member `_RaceInsertSession.flush` overrides a member in a parent class but is missing an `@override` decorator [missing-override-decorator]
+  --> tests/unit_tests/services/test_step_by_step_tour_service.py:57:9
+ERROR Class member `_RaceInsertSession.rollback` overrides a member in a parent class but is missing an `@override` decorator [missing-override-decorator]
+  --> tests/unit_tests/services/test_step_by_step_tour_service.py:61:9
+ERROR Argument `_FakeSession` is not assignable to parameter `session` with type `Session | scoped_session[Unknown]` in function `services.step_by_step_tour_service.StepByStepTourService.get_state` [bad-argument-type]
+  --> tests/unit_tests/services/test_step_by_step_tour_service.py:94:17
+ERROR Argument `_FakeSession` is not assignable to parameter `session` with type `Session | scoped_session[Unknown]` in function `services.step_by_step_tour_service.StepByStepTourService.get_state` [bad-argument-type]
+   --> tests/unit_tests/services/test_step_by_step_tour_service.py:123:17
+ERROR Argument `_FakeSession` is not assignable to parameter `session` with type `Session | scoped_session[Unknown]` in function `services.step_by_step_tour_service.StepByStepTourService.patch_state` [bad-argument-type]
+   --> tests/unit_tests/services/test_step_by_step_tour_service.py:146:17
+ERROR Argument `_FakeSession` is not assignable to parameter `session` with type `Session | scoped_session[Unknown]` in function `services.step_by_step_tour_service.StepByStepTourService.patch_state` [bad-argument-type]
+   --> tests/unit_tests/services/test_step_by_step_tour_service.py:168:17
+ERROR Argument `_FakeSession` is not assignable to parameter `session` with type `Session | scoped_session[Unknown]` in function `services.step_by_step_tour_service.StepByStepTourService.patch_state` [bad-argument-type]
+   --> tests/unit_tests/services/test_step_by_step_tour_service.py:190:17
+ERROR Argument `_FakeSession` is not assignable to parameter `session` with type `Session | scoped_session[Unknown]` in function `services.step_by_step_tour_service.StepByStepTourService.patch_state` [bad-argument-type]
+   --> tests/unit_tests/services/test_step_by_step_tour_service.py:208:17
+ERROR Argument `_FakeSession` is not assignable to parameter `session` with type `Session | scoped_session[Unknown]` in function `services.step_by_step_tour_service.StepByStepTourService.patch_state` [bad-argument-type]
+   --> tests/unit_tests/services/test_step_by_step_tour_service.py:214:17
+ERROR Argument `_RaceInsertSession` is not assignable to parameter `session` with type `Session | scoped_session[Unknown]` in function `services.step_by_step_tour_service.StepByStepTourService.patch_state` [bad-argument-type]
+   --> tests/unit_tests/services/test_step_by_step_tour_service.py:232:17
 ERROR Missing required key `enable` for TypedDict `SummaryIndexSettingDict` [bad-typed-dict-key]
    --> tests/unit_tests/services/test_summary_index_service.py:101:93
 ERROR Key `a` is not defined in TypedDict `SummaryIndexSettingDict` [bad-typed-dict-key]

@github-actions

Copy link
Copy Markdown
Contributor

Pyrefly Type Coverage

Metric Base PR Delta
Type coverage 52.85% 52.88% +0.04%
Strict coverage 52.36% 52.40% +0.04%
Typed symbols 32,803 32,862 +59
Untyped symbols 29,539 29,549 +10
Modules 2988 2993 +5

@codecov

codecov Bot commented Jul 10, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 93.48659% with 102 lines in your changes missing coverage. Please review.
✅ Project coverage is 85.51%. Comparing base (6e5ba18) to head (a36b465).

Files with missing lines Patch % Lines
web/app/components/step-by-step-tour/mount.tsx 94.10% 23 Missing ⚠️
api/services/step_by_step_tour_service.py 81.66% 10 Missing and 12 partials ⚠️
web/app/components/step-by-step-tour/coachmark.tsx 90.72% 9 Missing ⚠️
web/app/components/explore/banner/banner-item.tsx 73.07% 7 Missing ⚠️
...onents/step-by-step-tour/use-coachmark-position.ts 87.27% 7 Missing ⚠️
web/app/components/tools/tool-provider-grid.tsx 70.00% 6 Missing ⚠️
web/app/components/explore/app-list/index.tsx 95.95% 4 Missing ⚠️
web/app/components/step-by-step-tour/storage.ts 94.20% 4 Missing ⚠️
...pp/components/step-by-step-tour/use-target-rect.ts 97.01% 4 Missing ⚠️
api/controllers/console/onboarding.py 96.72% 1 Missing and 1 partial ⚠️
... and 11 more
Additional details and impacted files
@@            Coverage Diff             @@
##             main   #38785      +/-   ##
==========================================
+ Coverage   85.47%   85.51%   +0.04%     
==========================================
  Files        5025     5042      +17     
  Lines      273457   274947    +1490     
  Branches    51259    51742     +483     
==========================================
+ Hits       233729   235113    +1384     
- Misses      35238    35331      +93     
- Partials     4490     4503      +13     
Flag Coverage Δ
api 85.65% <88.29%> (+<0.01%) ⬆️
dify-ui 94.61% <ø> (ø)
web 85.24% <94.26%> (+0.09%) ⬆️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

web This relates to changes on the web.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants