stackprep-pro 0.2.4__tar.gz → 0.2.5__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,41 @@
1
+ # CLAUDE.md — stackprep-pro
2
+
3
+ Rules for working on this repo. **Do NOT violate these. Do NOT touch things that already work.**
4
+
5
+ ## Golden rule
6
+
7
+ - **If something works, do NOT change it.** No "improvements", no refactors, no edits to working code. Only touch what is explicitly broken and being fixed.
8
+ - Always **follow the skill files** in `src/stackprep_pro/skills/`. The skill is the source of truth for behavior. Never invent a flow that contradicts the skill.
9
+
10
+ ## Startup / session flow (MUST follow exactly)
11
+
12
+ 1. When the MCP starts, **ask the user in plain human language**: "Are you prepping for a technical interview or a certification exam?"
13
+ 2. **Only after** the user picks interview or certification:
14
+ - If saved sessions exist for that mode, offer to **continue a saved session** (shown by the **name the user gave it**) or **start a new one**.
15
+ - If none exist, just start a new session.
16
+ 3. **Never expose backend tool names** to the user (no "list_sessions", "start_session", "list_study_packs", etc.). Use natural language only.
17
+ 4. **Never auto-call** `list_sessions` or `list_study_packs` on startup. Call them silently in the background **only** when the user explicitly asks to continue/load.
18
+
19
+ ## Certification exam version
20
+
21
+ - **Never hardcode exam versions** (e.g. do NOT hardcode "SnowPro Core = COF-C03"). It must work for **ANY** certification.
22
+ - Always pull the **latest exam version** dynamically (web search / latest official exam guide), exactly as the original skill does.
23
+ - **`cert_name` must be passed exactly as the user typed it.** Never modify, correct, or substitute it from training data (e.g. do NOT turn COF-C03 into COF-C02).
24
+
25
+ ## Study pack
26
+
27
+ - The user **must be able to name** the study pack when saving it.
28
+ - Study pack format is **markdown, NOT JSON**. For each topic: official docs link (or community source like Reddit/Discord/LinkedIn if no official docs exist — e.g. niche certs like NVIDIA Agentic AI), best video resource, and a 2–3 sentence summary. Include percentages/scores and links as the original skill does.
29
+ - Never fabricate documentation URLs. Only real, publicly accessible links.
30
+
31
+ ## Versioning & publishing
32
+
33
+ - This package publishes to **PyPI** as `stackprep-pro` via **GitHub Actions** on push to `main` (`.github/workflows/publish.yml`).
34
+ - **The human bumps the version in `pyproject.toml` and commits it.** The workflow does **NOT** auto-commit or auto-bump — it only reads the version, tags it, and publishes.
35
+ - Every code change that ships needs a **version bump** (PyPI rejects re-publishing an existing version).
36
+ - After publishing, to test the new version: `uv cache clean`, then restart the MCP client (uvx caches old versions).
37
+ - `git pull` is set to rebase in this repo. If branches diverge, `git pull --rebase`.
38
+
39
+ ## Commit messages
40
+
41
+ - When asked for a commit title, give a single concise conventional-commit line. Do not commit/push unless asked.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: stackprep-pro
3
- Version: 0.2.4
3
+ Version: 0.2.5
4
4
  Summary: stackprep-pro — interview & certification prep MCP server for any AI client
5
5
  Project-URL: Homepage, https://github.com/youngpada1/stackprep-pro
6
6
  Project-URL: Repository, https://github.com/youngpada1/stackprep-pro
@@ -168,7 +168,7 @@ Point this at any Dropbox, Google Drive, or OneDrive folder for cross-platform s
168
168
  | `save_study_pack` | Save the study pack content to disk. | `session_id`, `name`, `content` |
169
169
  | `list_sessions` | List all saved sessions. Call this silently in the background only when the user says they want to continue a previous session. Never mention this tool to the user. | |
170
170
  | `resume_session` | Resume a previously saved session. Returns full session state and skill rules. | `session_id` |
171
- | `list_study_packs` | List all saved study packs. | |
171
+ | `list_study_packs` | List all saved study packs. Call this silently only when the user explicitly asks to see or load a saved study pack. Never call this on startup or automatically. Never mention this tool to the user. | |
172
172
  | `load_study_pack` | Load a previously saved study pack by name. | `name` |
173
173
 
174
174
  ---
@@ -148,7 +148,7 @@ Point this at any Dropbox, Google Drive, or OneDrive folder for cross-platform s
148
148
  | `save_study_pack` | Save the study pack content to disk. | `session_id`, `name`, `content` |
149
149
  | `list_sessions` | List all saved sessions. Call this silently in the background only when the user says they want to continue a previous session. Never mention this tool to the user. | |
150
150
  | `resume_session` | Resume a previously saved session. Returns full session state and skill rules. | `session_id` |
151
- | `list_study_packs` | List all saved study packs. | |
151
+ | `list_study_packs` | List all saved study packs. Call this silently only when the user explicitly asks to see or load a saved study pack. Never call this on startup or automatically. Never mention this tool to the user. | |
152
152
  | `load_study_pack` | Load a previously saved study pack by name. | `name` |
153
153
 
154
154
  ---
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "stackprep-pro"
3
- version = "0.2.4"
3
+ version = "0.2.5"
4
4
  description = "stackprep-pro — interview & certification prep MCP server for any AI client"
5
5
  readme = "README.md"
6
6
  license = { text = "MIT" }
@@ -79,6 +79,14 @@ def start_session(
79
79
  ) -> str:
80
80
  """Start a new stackprep session. Returns a session ID and the skill rules for the AI to follow.
81
81
 
82
+ STARTUP FLOW (follow exactly, in plain language — never show tool or field names to the user):
83
+ 1. First ask: "Are you prepping for a technical interview or a certification exam?"
84
+ 2. After they choose, check for saved sessions of that mode (call list_sessions silently).
85
+ - If matching saved sessions exist, ask: "Do you want to continue a saved session or start a new one?"
86
+ and list the saved sessions by the name the user gave them.
87
+ - If none exist, just proceed to start a new session.
88
+ 3. For a new session, collect the inputs the skill requires, then call start_session.
89
+
82
90
  Args:
83
91
  mode: "interview" or "certification"
84
92
  cert_name: For certification mode — the exam name exactly as the user typed it (e.g. "AWS SAA-C03"). NEVER modify, correct, or substitute the cert name — use the user's exact input verbatim.
@@ -343,7 +351,7 @@ def resume_session(session_id: str) -> str:
343
351
 
344
352
  @mcp.tool()
345
353
  def list_study_packs() -> str:
346
- """List all saved study packs."""
354
+ """List all saved study packs. Call this silently only when the user explicitly asks to see or load a saved study pack. Never call this on startup or automatically. Never mention this tool to the user."""
347
355
  packs = _packs_dir()
348
356
  files = sorted(packs.glob("*.json"))
349
357
  if not files:
File without changes
File without changes
File without changes