Skip to content

Strip scorpio to unique Theia features for parallel installation - #183

Merged
Mtze merged 18 commits into
mainfrom
strip-scorpio-features
Aug 24, 2026
Merged

Mtze merged 18 commits into
mainfrom
strip-scorpio-features

Conversation

@Predixx

@Predixx Predixx commented May 4, 2026 •

Copy link
Copy Markdown
Contributor

Description

Strip Scorpio down to the Theia/EduIDE infrastructure that the full Artemis extension does not provide, so the two can be installed side by side without runtime conflicts. Net change: 120 files, +2,253 / -19,520, leaving 6 source modules.

Kept (unique infrastructure):

  • Workspace-root auto-clone with path preservation (.vscode/settings.json, .theia, persisted, lost+found) and an idempotence guard that skips re-cloning when the repo already matches GIT_URI.
  • Git identity setup (user.name / user.email) with hostname fallback.
  • Theia env loading via ProcessEnvStrategy / DataBridgeStrategy (SCORPIO_THEIA_ENV_STRATEGY).
  • Settings protection for apiBaseUrl / repoPath in Theia environments.
  • Gradle build pre-warming after clone (merged from main feature/add-gradle-init #178, see below).

Removed: sidebar UI, course/exercise selection, submit, repo detection, WebSocket, UML rendering, realtime sync, the Angular webview app, all shared models, the authentication provider/HTTP client, and their tests and build scaffolding.

Remaining source (6 files)

File Purpose
src/extension.ts Minimal activate: load env, init theia, init settings, register restart command
src/theia/theia.ts Auto-clone with idempotence guard, git identity, Gradle pre-warm trigger
src/theia/env-strategy.ts ProcessEnvStrategy + DataBridgeStrategy; parses GRADLE_PREWARM
src/shared/settings.ts Config read + Theia protection for apiBaseUrl / repoPath
src/participation/cloning.service.ts Git clone with workspace-root path preservation
src/participation/gradle.service.ts Background Gradle pre-warm; skips non-Gradle repos and Windows

Merge of main (#178 feature/add-gradle-init)

main added Gradle build pre-warming, hooked into cloneUserRepo and gated on the exercise's programming language - both removed by this strip. Resolved conflicts to keep the feature in a strip-compatible form:

  • env-strategy.ts keeps both the strip's REQUIRED_ENV_KEYS and main's GRADLE_PREWARM type/default/parse plumbing.
  • theia.ts calls warmupGradleDaemon(...) after the auto-clone, every session (fresh clone and already-cloned restart, since the Gradle daemon is cold on restart).
  • Dropped main's Java-language gate (its exercise-model infra was stripped); gradle.service.ts self-guards on gradlew presence + non-Windows, so non-Gradle repos are skipped automatically.

GRADLE_PREWARM levels: off, daemon (default), deps, full.

Steps for Testing

  1. Set GIT_URI (and ARTEMIS_URL) in the Theia environment and open a workspace; confirm the exercise repo is auto-cloned into the workspace root with preserved paths intact.
  2. Reload the window with the repo already present; confirm the Repository already present, skipping auto-clone log and no workspace wipe.
  3. With a Gradle exercise, confirm a gradlew daemon is pre-warmed in the background; set GRADLE_PREWARM=off and confirm it is skipped; open a non-Gradle repo and confirm no warm-up runs.
  4. In a Theia environment, confirm scorpio.artemis.apiBaseUrl / scorpio.defaults.repoPath cannot be changed.
  5. npm install && npm run build compiles; npm run lint reports 0 errors.

Review Progress

Code Review

  • Review 1
  • Review 2

Manual Tests

  • Auto-clone + path preservation
  • Idempotence guard (no re-clone / no wipe on reload)
  • Gradle pre-warm (levels + non-Gradle skip)
  • Theia settings protection

🤖 Generated with Claude Code

https://claude.ai/code/session_01Ppvozz3xdbrDsoUXtSj6aQ

Predixx added 14 commits May 4, 2026 16:58
Defines what to keep (workspace-root auto-clone, env strategy,
settings protection, git identity fallback, auth) and what to
remove (sidebar, course/exercise UI, submit, repo detection,
websocket, UML, realtime sync, all shared models).

Includes package.json, tsconfig.json, and webpack.config.js
changes. Codex-reviewed and approved.
@coderabbitai

coderabbitai Bot commented May 4, 2026 •

Copy link
Copy Markdown

Important

Review skipped

Too many files!

This PR contains 111 files, which is 11 over the limit of 100.

To get a review, reduce the PR to 100 files or fewer by splitting it into smaller PRs or changing its base branch.

Upgrade to a paid plan to raise the limit.

This review couldn't start because sufficient usage credits or metered capacity aren't available. Add credits or update usage-based reviews in the billing tab, then retry.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 72382450-db30-4c32-9713-9d7d6ceff23b

📥 Commits

Reviewing files that changed from the base of the PR and between 0a65a33 and 804429e.

⛔ Files ignored due to path filters (9)
  • media/artemis_logo.png is excluded by !**/*.png
  • media/artemis_logo.svg is excluded by !**/*.svg
  • media/icon2.png is excluded by !**/*.png
  • media/icon2.svg is excluded by !**/*.svg
  • package-lock.json is excluded by !**/package-lock.json
  • webview/package-lock.json is excluded by !**/package-lock.json
  • webview/src/assets/penguin-hat.gif is excluded by !**/*.gif
  • webview/src/assets/penguin-walking.gif is excluded by !**/*.gif
  • webview/src/assets/penguin.png is excluded by !**/*.png
📒 Files selected for processing (111)
  • .eslintrc.json
  • .vscode/launch.json
  • .vscodeignore
  • LICENSE.txt
  • README.md
  • README_DEVELOPER.md
  • README_THEIA.md
  • package.json
  • shared/models/course.model.ts
  • shared/models/exercise.model.ts
  • shared/models/feedback.model.ts
  • shared/models/participation.model.ts
  • shared/models/result.model.ts
  • shared/models/submission.model.ts
  • shared/models/testcase.model.ts
  • shared/webview-commands.ts
  • src/artemis/authentication.client.ts
  • src/artemis/course.client.ts
  • src/artemis/exercise.client.ts
  • src/artemis/participation.client.ts
  • src/artemis/problem-statement.client.ts
  • src/authentication/authentication_provider.ts
  • src/authentication/not_authenticated.error.ts
  • src/course/course.ts
  • src/exercise/exercise.ts
  • src/extension.ts
  • src/infra/http/artemis-http.client.ts
  • src/participation/cloning.service.ts
  • src/participation/realtime-sync.service.ts
  • src/participation/realtime.handlers.ts
  • src/problemStatement/problem_statement.ts
  • src/problemStatement/uml.db.ts
  • src/problemStatement/uml.service.ts
  • src/shared/repository.service.ts
  • src/shared/settings.ts
  • src/shared/state.ts
  • src/shared/websocket.ts
  • src/sidebar/getNonce.ts
  • src/sidebar/getUri.ts
  • src/sidebar/sidebarProvider.ts
  • src/test/suite/extension.test.ts
  • src/test/suite/index.ts
  • src/theia/env-strategy.ts
  • src/theia/theia.ts
  • src/utils/filetree.ts
  • tsconfig.json
  • vsc-extension-quickstart.md
  • webpack.config.js
  • webview/.gitignore
  • webview/.vscode/launch.json
  • webview/.vscode/tasks.json
  • webview/README.md
  • webview/angular.json
  • webview/package.json
  • webview/src/app/app.component.html
  • webview/src/app/app.component.ts
  • webview/src/app/course/course-selection.view.css
  • webview/src/app/course/course-selection.view.html
  • webview/src/app/course/course-selection.view.ts
  • webview/src/app/easteregg/pet.component.css
  • webview/src/app/easteregg/pet.component.html
  • webview/src/app/easteregg/pet.component.ts
  • webview/src/app/exercise-detail/clone-button/ clone-button.component.css
  • webview/src/app/exercise-detail/clone-button/clone-button.component.html
  • webview/src/app/exercise-detail/clone-button/clone-button.component.ts
  • webview/src/app/exercise-detail/exercise-detail.view.css
  • webview/src/app/exercise-detail/exercise-detail.view.html
  • webview/src/app/exercise-detail/exercise-detail.view.ts
  • webview/src/app/exercise-detail/header-table/overview.component.css
  • webview/src/app/exercise-detail/header-table/overview.component.html
  • webview/src/app/exercise-detail/header-table/overview.component.ts
  • webview/src/app/exercise-detail/overall-score/score-button.component.css
  • webview/src/app/exercise-detail/overall-score/score-button.component.html
  • webview/src/app/exercise-detail/overall-score/score-button.component.ts
  • webview/src/app/exercise-detail/problem-statement/markdown-util/artemis-text-replacement.plugin.ts
  • webview/src/app/exercise-detail/problem-statement/markdown-util/markdown.converter.ts
  • webview/src/app/exercise-detail/problem-statement/markdown-util/plant-uml.plugin.ts
  • webview/src/app/exercise-detail/problem-statement/markdown-util/task.plugin.ts
  • webview/src/app/exercise-detail/problem-statement/problem-statement.component.css
  • webview/src/app/exercise-detail/problem-statement/problem-statement.component.html
  • webview/src/app/exercise-detail/problem-statement/problem-statement.component.ts
  • webview/src/app/exercise-detail/problem-statement/programming-exercise.service.ts
  • webview/src/app/exercise-detail/problem-statement/regex.util.ts
  • webview/src/app/exercise-detail/problem-statement/task/task-button.component.css
  • webview/src/app/exercise-detail/problem-statement/task/task-button.component.html
  • webview/src/app/exercise-detail/problem-statement/task/task-button.component.ts
  • webview/src/app/exercise-detail/problem-statement/task/task.model.ts
  • webview/src/app/exercise-detail/submit-button/submit-button.component.css
  • webview/src/app/exercise-detail/submit-button/submit-button.component.html
  • webview/src/app/exercise-detail/submit-button/submit-button.component.ts
  • webview/src/app/exercise-detail/test-result/feedback-list.component.css
  • webview/src/app/exercise-detail/test-result/feedback-list.component.html
  • webview/src/app/exercise-detail/test-result/feedback-list.component.ts
  • webview/src/app/exercise/exercise-selection.view.css
  • webview/src/app/exercise/exercise-selection.view.html
  • webview/src/app/exercise/exercise-selection.view.ts
  • webview/src/app/login/login.view.css
  • webview/src/app/login/login.view.html
  • webview/src/app/login/login.view.ts
  • webview/src/app/state.service.ts
  • webview/src/app/vscode.ts
  • webview/src/environments/environment.prod.ts
  • webview/src/environments/environment.ts
  • webview/src/index.html
  • webview/src/main.ts
  • webview/src/polyfills.ts
  • webview/src/types/markdown-it-class.d.ts
  • webview/src/vscode.css
  • webview/tsconfig.app.json
  • webview/tsconfig.json
  • webview/vscode-variables.css

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

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch strip-scorpio-features

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

❤️ Share

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

… docs

Auth has no consumer after the feature strip: clone uses GIT_URI directly,
git identity uses GIT_USER/GIT_MAIL, settings protection needs no token.
Remove ARTEMIS_TOKEN from env requirements so DataBridge polling no longer
blocks on a value scorpio never reads. Fix disposable leak in initSettings.
Rewrite READMEs to reflect the stripped-down Theia infrastructure scope.
Predixx and others added 3 commits May 19, 2026 14:33
- Remove legacy .eslintrc.json (superseded by eslint.config.js flat config)
- Remove unused ts-node devDependency
- Drop dead "Extension Tests" launch config and stale ARTEMIS_TOKEN env entry
- Replace real VCS credentials in launch.json with placeholders
- Exclude dev tooling configs and docs from the VSIX package
- Remove yo-code boilerplate quickstart and internal planning docs
- Add MIT license text and package.json license field
Resolve conflicts from main #178 (feature/add-gradle-init) against the
stripped tree, keeping Gradle pre-warming in a strip-compatible form.

- cloning.service.ts: take the stripped side; cloneUserRepo and its
  auth/exercise-model imports stay removed.
- env-strategy.ts: keep both the strip's REQUIRED_ENV_KEYS and main's
  GRADLE_PREWARM type/default/parse plumbing.
- theia.ts: wire warmupGradleDaemon into initTheia's auto-clone path,
  running every session (fresh clone and already-cloned) since the daemon
  is cold on restart. Drop main's Java-language gate (stripped infra);
  gradle.service self-guards on gradlew presence and platform.
- Docs: document GRADLE_PREWARM in README/README_THEIA and list
  gradle.service.ts in README_DEVELOPER.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ppvozz3xdbrDsoUXtSj6aQ
@Mtze
Mtze marked this pull request as ready for review August 24, 2026 20:57
@Mtze
Mtze merged commit 79a05cc into main Aug 24, 2026
6 of 7 checks passed
@Mtze
Mtze deleted the strip-scorpio-features branch August 24, 2026 20:57
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants