Skip to content

Interview Prep Application of Moss#391

Open
samanyugoyal2010 wants to merge 16 commits into
usemoss:mainfrom
samanyugoyal2010:interview-prep
Open

Interview Prep Application of Moss#391
samanyugoyal2010 wants to merge 16 commits into
usemoss:mainfrom
samanyugoyal2010:interview-prep

Conversation

@samanyugoyal2010

@samanyugoyal2010 samanyugoyal2010 commented Jul 14, 2026

Copy link
Copy Markdown
Contributor

Pull Request Checklist

Please ensure that your PR meets the following requirements:

  • I have read the CONTRIBUTING guide.
  • I have updated the documentation (if applicable).
  • My code follows the style guidelines of this project.
  • I have performed a self-review of my own code.
  • I have added tests that prove my fix is effective or that my feature works.
  • New and existing unit tests pass locally with my changes.

Description

Adds two Moss-powered developer apps:

  1. apps/moss-interview-coach/ — local-first voice interview coach (Pipecat SmallWebRTC + Whisper/Ollama/Piper) with Moss rubric retrieval, multi-track topic selection, Assist feedback panel, and subprocess-isolated grading.
  2. apps/moss-vscode/ — VS Code extension for local semantic code search over the active workspace (worker-backed Moss runtime, persisted indexes, optional cloud sync), plus packaging/CI and a Remotion promo.

Type of Change

  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to not work as expected)
  • This change requires a documentation update

samanyugoyal2010 and others added 8 commits July 8, 2026 22:42
Index the open workspace with a local Moss SessionIndex and expose a
sidebar for live semantic search with jump-to-file results.

Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Stop auto-indexing on activate; add a sidebar Create Index flow,
resume existing sessions, and harden indexing/search readiness.

Co-authored-by: Cursor <cursoragent@cursor.com>
Run the native Moss runtime in a forked Node worker so crashes cannot
take down VS Code, save/load indexes from disk across sessions, and
refresh sidebar branding with Moss wordmarks and avatar.

Co-authored-by: Cursor <cursoragent@cursor.com>
Add Moss Cloud push/restore, sidebar gear settings for credentials and
cloud sync, dependency exclusions, cross-platform VSIX packaging with bundled
native binaries, CI workflow, privacy policy, and improved Node worker discovery.

Co-authored-by: Cursor <cursoragent@cursor.com>
Add a self-contained Remotion promo under apps/moss-vscode/promo
and ignore local agent skill files in the repo root.

Co-authored-by: Cursor <cursoragent@cursor.com>
Local Pipecat + Ollama voice system-design coach with Moss-grounded rubrics and a Next.js assist UI.

Co-authored-by: Cursor <cursoragent@cursor.com>
samanyugoyal2010 and others added 3 commits July 14, 2026 16:31
Default to llama3.1 for tool support; grade via grade_candidate_answer and simplify the assist UI.

Co-authored-by: Cursor <cursoragent@cursor.com>
Defer grades until the coach finishes speaking, drop stale/interrupted results, and stop mid-turn question flicker.

Co-authored-by: Cursor <cursoragent@cursor.com>
Support System Design, Agent-Native, and ML Concepts tracks with isolated grading via a subprocess worker.

Co-authored-by: Cursor <cursoragent@cursor.com>

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

This PR adds two new developer-facing applications to the Moss repo: (1) a local-first, voice-based interview coach grounded by Moss retrieval, and (2) a VS Code extension that provides semantic code search over the active workspace (plus packaging/CI and a Remotion promo project).

Changes:

  • Introduces apps/moss-interview-coach/: FastAPI + Pipecat SmallWebRTC voice pipeline (Whisper/Ollama/Piper) with Moss-backed rubric retrieval and subprocess-based grading, plus a Next.js assist UI.
  • Introduces apps/moss-vscode/: a VS Code extension for local semantic code search with persisted indexes and optional cloud sync, including publishing docs and CI workflow.
  • Updates top-level docs and repo tooling files (README, .gitignore, VS Code launch/tasks) to support the new apps.

Reviewed changes

Copilot reviewed 92 out of 131 changed files in this pull request and generated 7 comments.

Show a summary per file
File Description
README.md Documents the new interview coach and updates the apps tree (needs to reflect VS Code extension too).
apps/moss-vscode/tsconfig.json TypeScript compiler settings for the VS Code extension.
apps/moss-vscode/src/extension.ts VS Code activation wiring, indexing workflow, persistence, and cloud sync commands.
apps/moss-vscode/src/ui/sidebar.ts Webview UI provider for search/settings and message bridge.
apps/moss-vscode/src/worker/mossWorker.ts Worker process that hosts Moss runtime operations off the extension host.
apps/moss-vscode/src/search/search.ts Query mapping + small helper utilities for semantic search results.
apps/moss-vscode/src/moss/persistence.ts Local disk cache + meta.json persistence helpers for indexes.
apps/moss-vscode/src/moss/config.ts Credential resolution (settings/secrets/env) + search/index settings helpers.
apps/moss-vscode/src/moss/client.ts Worker-backed session manager and Node binary resolution logic.
apps/moss-vscode/src/indexer/scanner.ts Workspace scanning and safe file loading for indexing.
apps/moss-vscode/src/indexer/indexer.ts Chunking + indexing orchestration and incremental update watchers.
apps/moss-vscode/src/indexer/excludes.ts Hard + configurable exclusion logic for indexing paths.
apps/moss-vscode/src/indexer/chunker.ts Line-based chunking and metadata for file navigation.
apps/moss-vscode/scripts/verify-package.mjs Verifies VSIX contains expected artifacts and moss-core bundle.
apps/moss-vscode/scripts/prepackage.mjs Installs cross-platform native moss-core binaries before packaging.
apps/moss-vscode/README.md Extension usage docs (setup, commands, settings, architecture).
apps/moss-vscode/PUBLISHING.md VS Code Marketplace publishing steps and CI notes.
apps/moss-vscode/PRIVACY.md Privacy policy for local indexing + optional cloud sync.
apps/moss-vscode/package.json VS Code extension manifest (commands, settings, engines, deps).
apps/moss-vscode/esbuild.mjs Esbuild bundling config for extension + worker.
apps/moss-vscode/media/sidebar.css Styling for the extension’s webview sidebar UI.
apps/moss-vscode/media/icon.svg Activity bar icon for the extension.
apps/moss-vscode/LICENSE License file for the extension package.
apps/moss-vscode/CHANGELOG.md Initial extension changelog entry.
apps/moss-vscode/.vscodeignore Packaging ignore rules for VSIX output.
apps/moss-vscode/.vscode/tasks.json Local dev tasks for building/watching the extension.
apps/moss-vscode/.vscode/launch.json Local debug configuration to run the extension host.
apps/moss-vscode/.gitignore App-local ignores for build artifacts and env files.
apps/moss-vscode/.env.example Example Moss credentials env file for the extension.
apps/moss-vscode/promo/package.json Remotion promo project dependencies and scripts.
apps/moss-vscode/promo/tsconfig.json TS config for promo rendering code.
apps/moss-vscode/promo/eslint.config.mjs ESLint config for the promo project.
apps/moss-vscode/promo/.prettierrc Prettier config for the promo project.
apps/moss-vscode/promo/.gitignore Promo-local ignores (node_modules, out/ render output, etc.).
apps/moss-vscode/promo/remotion.config.ts Remotion config (image format, Tailwind v4 integration).
apps/moss-vscode/promo/README.md Promo storyboard and render commands.
apps/moss-vscode/promo/src/index.ts Remotion root registration entrypoint.
apps/moss-vscode/promo/src/Root.tsx Declares the Remotion composition for the promo.
apps/moss-vscode/promo/src/index.css Tailwind import for Remotion UI styling.
apps/moss-vscode/promo/src/compositions/MossVscodePromo.tsx Main promo composition, scenes, and audio/SFX timeline.
apps/moss-vscode/promo/src/scenes/HeroScene.tsx Promo hero scene.
apps/moss-vscode/promo/src/scenes/GrepFailureScene.tsx Promo “grep noise” scene.
apps/moss-vscode/promo/src/scenes/HowItWorksScene.tsx Promo pipeline explanation scene.
apps/moss-vscode/promo/src/scenes/ProductDemoScene.tsx Promo product demo scene (indexing + semantic query + jump).
apps/moss-vscode/promo/src/scenes/EditorSuperpowersScene.tsx Promo features montage scene.
apps/moss-vscode/promo/src/scenes/OutroScene.tsx Promo outro scene.
apps/moss-vscode/promo/src/components/VfxLayer.tsx Vignette/grain/flash VFX overlay components.
apps/moss-vscode/promo/src/components/SceneBridge.tsx Scene enter/exit transitions (opacity/scale/blur).
apps/moss-vscode/promo/src/components/SequoiaBackdrop.tsx Backdrop image + scrim component.
apps/moss-vscode/promo/src/components/PipelineBeat.tsx Reusable beat + scan/chunk/embed/query visuals.
apps/moss-vscode/promo/src/components/DropText.tsx Headline animation component.
apps/moss-vscode/promo/src/components/SuperpowerCard.tsx Feature card component.
apps/moss-vscode/promo/src/components/MossSidebarPanel.tsx Promo mock Moss sidebar panel component.
apps/moss-vscode/promo/src/components/MossWordmark.tsx Wordmark/symbol/avatar image helpers.
apps/moss-vscode/promo/src/components/CrashTogetherLogos.tsx VS Code + Moss logo collision/morph animation.
apps/moss-vscode/promo/src/components/CrashToMossOutro.tsx Outro lockup animation composition.
apps/moss-vscode/promo/src/components/vscode/VSCodeWindow.tsx Promo mock VS Code window layout component.
apps/moss-vscode/promo/src/components/vscode/TitleBar.tsx Promo mock title bar.
apps/moss-vscode/promo/src/components/vscode/ActivityBar.tsx Promo mock activity bar.
apps/moss-vscode/promo/src/components/vscode/TabBar.tsx Promo mock tab bar.
apps/moss-vscode/promo/src/components/vscode/StatusBar.tsx Promo mock status bar.
apps/moss-vscode/promo/src/components/vscode/CodeEditorPane.tsx Promo mock editor pane with simple token coloring.
apps/moss-vscode/promo/src/components/vscode/FindInFilesPanel.tsx Promo mock “Find in Files” sidebar panel.
apps/moss-vscode/promo/src/lib/colors.ts Promo color tokens (VS Code + brand palette).
apps/moss-vscode/promo/src/lib/demo.ts Demo script data (queries, hits, code lines).
apps/moss-vscode/promo/src/lib/easing.ts Easing curves for animation.
apps/moss-vscode/promo/src/lib/music.ts Music bed section volume automation.
apps/moss-vscode/promo/src/lib/sfx.ts SFX timing constants and event frames.
apps/moss-vscode/promo/src/lib/timing.ts Scene timing constants and cut frames.
apps/moss-vscode/promo/src/lib/typing.ts Variable-speed “typing” frame simulation helper.
apps/moss-vscode/promo/src/lib/typography.ts Typography size tokens.
apps/moss-vscode/promo/public/branding/vscode/icon.svg Promo VS Code icon asset.
apps/moss-vscode/promo/public/branding/moss/icon.svg Promo Moss icon asset.
apps/moss-interview-coach/README.md End-to-end setup + architecture notes for interview coach.
apps/moss-interview-coach/.gitignore Ignores local model downloads and env/build outputs.
apps/moss-interview-coach/backend/requirements.txt Backend dependencies (FastAPI, Moss, Pipecat, etc.).
apps/moss-interview-coach/backend/.env.example Backend env template (Moss creds + local model settings).
apps/moss-interview-coach/backend/tracks.py Track definitions (prompts, index names, knowledge files).
apps/moss-interview-coach/backend/ingest_knowledge.py Ingest script to create/load/query per-track Moss indexes.
apps/moss-interview-coach/backend/server.py FastAPI server exposing SmallWebRTC offer/patch and running the Pipecat pipeline with Moss injection + grading.
apps/moss-interview-coach/backend/grader_worker.py Subprocess grader that calls Ollama and returns structured JSON grade.
apps/moss-interview-coach/backend/knowledge/system_design_rubrics.json System design rubric knowledge source.
apps/moss-interview-coach/backend/knowledge/agent_native_rubrics.json Agent-infra rubric knowledge source.
apps/moss-interview-coach/backend/knowledge/ml_concepts_rubrics.json ML concepts rubric knowledge source.
apps/moss-interview-coach/frontend/package.json Next.js frontend dependencies/scripts for assist UI.
apps/moss-interview-coach/frontend/tsconfig.json TypeScript config for Next.js frontend.
apps/moss-interview-coach/frontend/next.config.ts Next.js configuration.
apps/moss-interview-coach/frontend/next-env.d.ts Next.js TS environment declarations.
apps/moss-interview-coach/frontend/postcss.config.mjs Tailwind v4 PostCSS plugin configuration.
apps/moss-interview-coach/frontend/.env.example Frontend env template (backend URL).
apps/moss-interview-coach/frontend/app/layout.tsx Next.js app layout and metadata.
apps/moss-interview-coach/frontend/app/globals.css Tailwind + global styling for the interview coach UI.
.github/workflows/moss-vscode-ci.yml CI workflow to build/typecheck/package/verify the VS Code extension.
.gitignore Adds ignores for local agent skill artifacts.
.vscode/tasks.json Root tasks to build/watch the VS Code extension.
.vscode/launch.json Root launch config to run the VS Code extension host.
Files not reviewed (1)
  • apps/moss-interview-coach/frontend/package-lock.json: Generated file

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread apps/moss-vscode/src/search/search.ts Outdated
Comment thread apps/moss-vscode/src/indexer/indexer.ts Outdated
Comment thread apps/moss-vscode/scripts/prepackage.mjs Outdated
Comment thread apps/moss-vscode/src/moss/client.ts
Comment thread apps/moss-vscode/promo/src/components/vscode/FindInFilesPanel.tsx
Comment thread README.md
Comment thread README.md
samanyugoyal2010 and others added 3 commits July 16, 2026 13:40
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Raise index batch size, require moss-core from the lockfile for packaging,
check Unix execute bits when resolving Node, fix promo glob text, and document
the VS Code extension in the root README apps tree.

Co-authored-by: Cursor <cursoragent@cursor.com>
@HarshaNalluru

Copy link
Copy Markdown
Contributor

@cubic-dev-ai review this pull request

@cubic-dev-ai

cubic-dev-ai Bot commented Jul 17, 2026

Copy link
Copy Markdown
Contributor

@cubic-dev-ai review this pull request

@HarshaNalluru I have started the AI code review. It will take a few minutes to complete.

@cubic-dev-ai cubic-dev-ai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

4 issues found across 27 files

Prompt for AI agents (unresolved issues)

Check if these issues are valid — if so, understand the root cause of each and fix them. If appropriate, use sub-agents to investigate and fix each issue separately.


<file name="apps/moss-interview-coach/frontend/app/globals.css">

<violation number="1" location="apps/moss-interview-coach/frontend/app/globals.css:1">
P2: DM Sans and Instrument Serif can fail to load in the compiled app because Tailwind v4 inlines its import ahead of this remote `@import`. Place the Google Fonts import before `@import "tailwindcss"`.</violation>

<violation number="2" location="apps/moss-interview-coach/frontend/app/globals.css:2">
P2: Google Fonts (DM Sans and Instrument Serif) are loaded via CSS `@import url(...)` in `globals.css` instead of using Next.js's built-in `next/font` system. The CSS `@import` approach triggers a render-blocking external stylesheet fetch that cannot be optimized by Next.js — it prevents font preloading, disables automatic font subsetting, and blocks the initial paint. In a Next.js app, the recommended pattern is to load Google Fonts through `next/font`, which generates optimized, self-hosted font files with automatic preload links and eliminates the external blocking request.</violation>
</file>

<file name="apps/moss-interview-coach/backend/tracks.py">

<violation number="1" location="apps/moss-interview-coach/backend/tracks.py:13">
P3: Track IDs and labels now have a second source of truth in `frontend/app/page.tsx`, so future backend track changes can leave the UI stale or send an ID that normalizes to the default. Consider populating the selector from `/api/tracks` or generating both definitions from shared data.</violation>
</file>

<file name="apps/moss-interview-coach/README.md">

<violation number="1" location="apps/moss-interview-coach/README.md:73">
P3: After following the copy-`.env.example` setup, the grade model does not track `OLLAMA_MODEL`; it remains explicitly pinned to `llama3.1`. The table should describe that effective default, or the example variable should be left unset so the documented fallback applies.</violation>
</file>

Tip: instead of fixing issues one by one fix them all with cubic
Tip: cubic can generate docs of your entire codebase and keep them up to date. Try it here.

Re-trigger cubic

Comment thread apps/moss-interview-coach/frontend/app/page.tsx Outdated
Comment thread apps/moss-interview-coach/frontend/app/page.tsx Outdated
Comment thread apps/moss-interview-coach/frontend/app/page.tsx Outdated
Comment thread apps/moss-interview-coach/backend/server.py
Comment thread apps/moss-interview-coach/backend/server.py Outdated
Comment thread apps/moss-interview-coach/backend/grader_worker.py Outdated
Comment thread apps/moss-interview-coach/backend/ingest_knowledge.py Outdated
Comment thread apps/moss-interview-coach/backend/ingest_knowledge.py Outdated
Comment thread apps/moss-interview-coach/backend/ingest_knowledge.py Outdated
Comment thread apps/moss-interview-coach/frontend/app/page.tsx
Validate tracks strictly on offer, recover from Moss failures, isolate grader parsing, tighten ingest/rubric wording, and fix frontend session races, fonts, lint, and reduced-motion.

Co-authored-by: Cursor <cursoragent@cursor.com>

@cubic-dev-ai cubic-dev-ai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

All reported issues were addressed across 17 files (changes from recent commits).

Reply with feedback, questions, or to request a fix.

Fix all with cubic | Re-trigger cubic

Comment thread apps/moss-interview-coach/backend/ingest_knowledge.py Outdated
Co-authored-by: cubic-dev-ai[bot] <191113872+cubic-dev-ai[bot]@users.noreply.github.com>
Comment thread apps/moss-vscode/promo/src/components/vscode/FindInFilesPanel.tsx
HarshaNalluru added a commit that referenced this pull request Jul 23, 2026
## What

Makes the Codex PR reviewer run on **all pull requests, including
forks/contributors** — today fork PRs are silently skipped.

## Why forks were skipped

A fork's `pull_request` run gets a read-only token and **no secrets**
(GitHub's fork-safety default), so the reviewer can't get
`OPENAI_API_KEY`. The old workflow acknowledged this by gating itself to
same-repo branches (`sameRepo` check), so every contributor PR got
`Skipping Codex review: … is from a fork`.

You can't fix this by dropping the gate — the secret still isn't there
on fork runs. You need a trigger that *has* secrets, without ever
running fork code next to them.

## How — two-stage split

| Stage | File | Trigger | Secrets? | Touches PR code? |
|---|---|---|---|---|
| 1. Collect diff | `codex-review.yml` | `pull_request` (all PRs) | ❌
none | checkout + `git diff` only (no build/install) |
| 2. Review + post | `codex-review-post.yml` | `workflow_run` (base
context) | ✅ | ❌ — reads the diff artifact only |

Stage 1 runs on every PR with no secrets, computes the diff, and uploads
it as an artifact. Stage 2 is triggered by Stage 1's completion, runs in
the **base-repo** context (so it has secrets even for forks), downloads
the diff, runs Codex over the **diff text only**, and posts the inline
review.

**Fork code never executes in a job that holds the key** — that's the
structural guarantee that makes reviewing fork PRs safe, and it's more
robust than `pull_request_target` (which would put fork code on disk
beside the secret and rely on "no one ever adds a build step").

## Security notes

- **Anti-spoofing:** the artifact carries the PR number; Stage 2
requires `pr.head.sha === workflow_run.head_sha` (a value GitHub sets,
not the fork) before posting, so a tampered artifact can't redirect the
review onto another PR. PR number is validated as digits-only.
- **Least privilege:** Stage 1 is `contents: read`. Stage 2 is
`contents: read`, `actions: read` (to fetch the artifact),
`pull-requests/issues: write` (to post).
- **Residual risk — please use a scoped key.** Codex still reads the
untrusted diff as *data*, and per the action's docs the API key "flows
through the proxy, so Codex could read it if it can reach process
memory." A prompt-injection payload in a diff could in principle try to
coax the key into a review comment. The two-stage split does **not**
remove this (it removes code *execution*), so use a low-limit /
restricted `OPENAI_API_KEY` for this workflow.

## Behavior changes

- Auto-reviews **all non-draft, non-bot PRs** (previously same-repo
only).
- **Drops** the `@codex review` comment trigger and the
trusted-commenter gate (no longer needed to keep forks out). Easy to
re-add as an opt-in gate if you'd prefer maintainer-triggered reviews on
forks to control cost.

## Activation caveat

`workflow_run` only fires for the copy of these workflows **on the
default branch**, so Codex review activates once this is merged to
`main` — **this PR will not review itself.** After merge, opening any
fork PR (or re-syncing an existing one like #391/#393) will exercise it
end-to-end.

## Not tested in CI here

The `openai/codex-action` step reviews a pre-computed `pr.diff` in an
empty `git init`'d working dir (rather than a full checkout). YAML +
embedded JS are validated locally; the first live run after merge is the
real end-to-end test.


<!-- This is an auto-generated description by cubic. -->
<a href="https://cubic.dev/pr/usemoss/moss/pull/437?utm_source=github"
target="_blank" rel="noopener noreferrer"
data-no-image-dialog="true"><picture><source
media="(prefers-color-scheme: dark)"
srcset="https://www.cubic.dev/buttons/review-in-cubic-dark.svg"><source
media="(prefers-color-scheme: light)"
srcset="https://www.cubic.dev/buttons/review-in-cubic-light.svg"><img
alt="Review in cubic"
src="https://www.cubic.dev/buttons/review-in-cubic-dark.svg"></picture></a>
<!-- End of auto-generated description by cubic. -->
@HarshaNalluru HarshaNalluru reopened this Jul 25, 2026
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.

3 participants