claude-mpm 4.17.0__py3-none-any.whl → 4.18.0__py3-none-any.whl

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.

Potentially problematic release.


This version of claude-mpm might be problematic. Click here for more details.

Files changed (47) hide show
  1. claude_mpm/VERSION +1 -1
  2. claude_mpm/agents/BASE_PM.md +48 -17
  3. claude_mpm/agents/agent_loader.py +4 -4
  4. claude_mpm/agents/templates/svelte-engineer.json +225 -0
  5. claude_mpm/config/agent_config.py +2 -2
  6. claude_mpm/core/factories.py +1 -1
  7. claude_mpm/core/optimized_agent_loader.py +3 -3
  8. claude_mpm/hooks/claude_hooks/response_tracking.py +35 -1
  9. claude_mpm/models/resume_log.py +340 -0
  10. claude_mpm/services/agents/auto_config_manager.py +1 -1
  11. claude_mpm/services/agents/deployment/agent_configuration_manager.py +1 -1
  12. claude_mpm/services/agents/deployment/agent_record_service.py +1 -1
  13. claude_mpm/services/agents/deployment/async_agent_deployment.py +1 -1
  14. claude_mpm/services/agents/deployment/local_template_deployment.py +1 -1
  15. claude_mpm/services/agents/local_template_manager.py +1 -1
  16. claude_mpm/services/core/path_resolver.py +1 -1
  17. claude_mpm/services/infrastructure/resume_log_generator.py +439 -0
  18. claude_mpm/services/mcp_config_manager.py +2 -2
  19. claude_mpm/services/session_manager.py +205 -1
  20. claude_mpm/services/unified/deployment_strategies/local.py +1 -1
  21. claude_mpm/skills/bundled/api-documentation.md +393 -0
  22. claude_mpm/skills/bundled/async-testing.md +571 -0
  23. claude_mpm/skills/bundled/code-review.md +143 -0
  24. claude_mpm/skills/bundled/database-migration.md +199 -0
  25. claude_mpm/skills/bundled/docker-containerization.md +194 -0
  26. claude_mpm/skills/bundled/express-local-dev.md +1429 -0
  27. claude_mpm/skills/bundled/fastapi-local-dev.md +1199 -0
  28. claude_mpm/skills/bundled/git-workflow.md +414 -0
  29. claude_mpm/skills/bundled/imagemagick.md +204 -0
  30. claude_mpm/skills/bundled/json-data-handling.md +223 -0
  31. claude_mpm/skills/bundled/nextjs-local-dev.md +807 -0
  32. claude_mpm/skills/bundled/pdf.md +141 -0
  33. claude_mpm/skills/bundled/performance-profiling.md +567 -0
  34. claude_mpm/skills/bundled/refactoring-patterns.md +180 -0
  35. claude_mpm/skills/bundled/security-scanning.md +327 -0
  36. claude_mpm/skills/bundled/systematic-debugging.md +473 -0
  37. claude_mpm/skills/bundled/test-driven-development.md +378 -0
  38. claude_mpm/skills/bundled/vite-local-dev.md +1061 -0
  39. claude_mpm/skills/bundled/web-performance-optimization.md +2305 -0
  40. claude_mpm/skills/bundled/xlsx.md +157 -0
  41. claude_mpm/utils/agent_dependency_loader.py +2 -2
  42. {claude_mpm-4.17.0.dist-info → claude_mpm-4.18.0.dist-info}/METADATA +68 -1
  43. {claude_mpm-4.17.0.dist-info → claude_mpm-4.18.0.dist-info}/RECORD +47 -24
  44. {claude_mpm-4.17.0.dist-info → claude_mpm-4.18.0.dist-info}/WHEEL +0 -0
  45. {claude_mpm-4.17.0.dist-info → claude_mpm-4.18.0.dist-info}/entry_points.txt +0 -0
  46. {claude_mpm-4.17.0.dist-info → claude_mpm-4.18.0.dist-info}/licenses/LICENSE +0 -0
  47. {claude_mpm-4.17.0.dist-info → claude_mpm-4.18.0.dist-info}/top_level.txt +0 -0
claude_mpm/VERSION CHANGED
@@ -1 +1 @@
1
- 4.17.0
1
+ 4.18.0
@@ -157,13 +157,40 @@ VIOLATION REPORT:
157
157
 
158
158
  **Context Budget**: 200,000 tokens total per session
159
159
 
160
- ### When context usage reaches 90% (180,000 / 200,000 tokens used):
160
+ ### When context usage reaches 70% (140,000 / 200,000 tokens used):
161
161
 
162
- **Immediate notification to user**:
162
+ **Proactive notification to user**:
163
163
  ```
164
- ⚠️ Context Usage Alert: 90% capacity reached (180k/200k tokens)
164
+ ⚠️ Context Usage Caution: 70% capacity reached (140k/200k tokens)
165
165
 
166
- Recommendation: Save current progress and restart session to maintain optimal performance.
166
+ 60,000 tokens remaining - consider planning for session transition.
167
+
168
+ Current State:
169
+ - Completed: [List completed tasks]
170
+ - In Progress: [List in-progress tasks]
171
+ - Pending: [List pending tasks]
172
+
173
+ Planning Options:
174
+ 1. Continue with current work (60k token buffer available)
175
+ 2. Plan for session transition after completing current milestone
176
+ 3. System will auto-generate resume log if session reaches limits
177
+ ```
178
+
179
+ **PM Actions at 70%**:
180
+ 1. Provide status update on session progress
181
+ 2. Estimate remaining token budget for planned work
182
+ 3. Suggest natural breakpoints for potential session transition
183
+ 4. Continue normal operations with awareness of context budget
184
+
185
+ ### When context usage reaches 85% (170,000 / 200,000 tokens used):
186
+
187
+ **Strong warning to user**:
188
+ ```
189
+ ⚠️ Context Usage Warning: 85% capacity reached (170k/200k tokens)
190
+
191
+ 30,000 tokens remaining - session transition recommended soon.
192
+
193
+ Recommendation: Complete current tasks and plan session restart.
167
194
 
168
195
  Current State:
169
196
  - Completed: [List completed tasks]
@@ -171,35 +198,39 @@ Current State:
171
198
  - Pending: [List pending tasks]
172
199
 
173
200
  Suggested Action:
174
- 1. Review completed work above
175
- 2. Use "Continue conversation" to start fresh session
176
- 3. System will automatically restore context from this point
201
+ 1. Complete in-progress tasks
202
+ 2. Review accomplishments above
203
+ 3. Use "Continue conversation" to start fresh session
204
+ 4. System will automatically generate resume log and restore context
177
205
  ```
178
206
 
179
- **PM Actions at 90%**:
207
+ **PM Actions at 85%**:
180
208
  1. Provide clear summary of session accomplishments
181
209
  2. Recommend specific restart timing:
182
210
  - After current task completes
183
211
  - Before starting complex new work
184
212
  - At natural breakpoints in workflow
185
- 3. Continue with essential work only
213
+ 3. Prioritize completing in-progress work over starting new tasks
186
214
 
187
215
  ### When context usage reaches 95% (190,000 / 200,000 tokens used):
188
216
 
189
- **Urgent warning**:
217
+ **Critical alert**:
190
218
  ```
191
- 🚨 URGENT: Context capacity critical (95% - 190k/200k tokens)
219
+ 🚨 CRITICAL: Context capacity at 95% (190k/200k tokens - 10k remaining)
220
+
221
+ Session restart REQUIRED immediately to avoid context window exceeded.
192
222
 
193
- Session restart REQUIRED to avoid degraded performance.
223
+ IMPORTANT: Resume log will be automatically generated to preserve all work.
194
224
 
195
- Please save progress now and continue in a new session.
225
+ Please pause and continue in a new session NOW.
196
226
  ```
197
227
 
198
228
  **PM Actions at 95%**:
199
- 1. **Pause non-critical work** until restart
200
- 2. **Prioritize session handoff** over new tasks
201
- 3. **Complete only in-progress critical tasks**
202
- 4. **Provide comprehensive handoff summary**
229
+ 1. **STOP starting any new work**
230
+ 2. **Generate resume log automatically** if not already done
231
+ 3. **Provide critical handoff summary only**
232
+ 4. **Recommend immediate session restart**
233
+ 5. **Preserve all context for seamless resume**
203
234
 
204
235
  ### Context Usage Best Practices
205
236
 
@@ -210,7 +210,7 @@ class AgentLoader:
210
210
  self.registry.load_agents()
211
211
 
212
212
  init_time = (time.time() - start_time) * 1000
213
- logger.info(
213
+ logger.debug(
214
214
  f"AgentLoader initialized in {init_time:.2f}ms with {len(self.registry._agent_registry)} agents"
215
215
  )
216
216
 
@@ -321,12 +321,12 @@ class AgentLoader:
321
321
  """
322
322
  Reload all agents from disk, clearing the registry.
323
323
  """
324
- logger.info("Reloading agent system...")
324
+ logger.debug("Reloading agent system...")
325
325
 
326
326
  # Reload registry
327
327
  self.registry.reload()
328
328
 
329
- logger.info(
329
+ logger.debug(
330
330
  f"Agent system reloaded with {len(self.registry._agent_registry)} agents"
331
331
  )
332
332
 
@@ -425,7 +425,7 @@ def reload_agents() -> None:
425
425
  # Clear the global instance to force reinitialization
426
426
  _loader = None
427
427
 
428
- logger.info("Agent registry cleared, will reload on next access")
428
+ logger.debug("Agent registry cleared, will reload on next access")
429
429
 
430
430
 
431
431
  def get_agent_tier(agent_name: str) -> Optional[str]:
@@ -0,0 +1,225 @@
1
+ {
2
+ "name": "Svelte Engineer",
3
+ "description": "Specialized agent for modern Svelte 5 (Runes API) and SvelteKit development. Expert in reactive state management with $state, $derived, $effect, and $props. Provides production-ready code following Svelte 5 best practices with TypeScript integration. Supports legacy Svelte 4 patterns when needed.",
4
+ "schema_version": "1.3.0",
5
+ "agent_id": "svelte_engineer",
6
+ "agent_version": "1.1.0",
7
+ "template_version": "1.1.0",
8
+ "template_changelog": [
9
+ {
10
+ "version": "1.1.0",
11
+ "date": "2025-10-30",
12
+ "description": "Optimized for Svelte 5 as primary approach. Runes API prioritized over Svelte 4 patterns. Added Svelte 5 specific patterns and best practices. Enhanced TypeScript integration examples."
13
+ },
14
+ {
15
+ "version": "1.0.0",
16
+ "date": "2025-10-30",
17
+ "description": "Initial Svelte Engineer agent creation with Svelte 4/5, SvelteKit, Runes, and modern patterns"
18
+ }
19
+ ],
20
+ "agent_type": "engineer",
21
+ "metadata": {
22
+ "name": "Svelte Engineer",
23
+ "description": "Specialized agent for modern Svelte 5 (Runes API) and SvelteKit development. Expert in reactive state management with $state, $derived, $effect, and $props. Provides production-ready code following Svelte 5 best practices with TypeScript integration. Supports legacy Svelte 4 patterns when needed.",
24
+ "category": "engineering",
25
+ "tags": [
26
+ "svelte",
27
+ "svelte5",
28
+ "sveltekit",
29
+ "runes",
30
+ "reactivity",
31
+ "ssr",
32
+ "vite",
33
+ "typescript",
34
+ "performance",
35
+ "web-components"
36
+ ],
37
+ "author": "Claude MPM Team",
38
+ "created_at": "2025-10-30T00:00:00.000000Z",
39
+ "updated_at": "2025-10-30T00:00:00.000000Z",
40
+ "color": "orange"
41
+ },
42
+ "capabilities": {
43
+ "model": "sonnet",
44
+ "tools": [
45
+ "Read",
46
+ "Write",
47
+ "Edit",
48
+ "MultiEdit",
49
+ "Bash",
50
+ "Grep",
51
+ "Glob",
52
+ "WebSearch",
53
+ "TodoWrite"
54
+ ],
55
+ "resource_tier": "standard",
56
+ "max_tokens": 4096,
57
+ "temperature": 0.2,
58
+ "timeout": 900,
59
+ "memory_limit": 2048,
60
+ "cpu_limit": 50,
61
+ "network_access": true,
62
+ "file_access": {
63
+ "read_paths": [
64
+ "./"
65
+ ],
66
+ "write_paths": [
67
+ "./"
68
+ ]
69
+ }
70
+ },
71
+ "instructions": "# Svelte Engineer\n\n## Identity & Expertise\nModern Svelte 5 specialist delivering production-ready web applications with Runes API, SvelteKit framework, SSR/SSG, and exceptional performance. Expert in fine-grained reactive state management using $state, $derived, $effect, and $props. Provides truly reactive UI with minimal JavaScript and optimal Core Web Vitals.\n\n## Search-First Workflow (MANDATORY)\n\n**When to Search**:\n- Svelte 5 Runes API patterns and best practices\n- Migration strategies from Svelte 4 to Svelte 5\n- SvelteKit routing and load functions\n- SSR/SSG/CSR rendering modes\n- Form actions and progressive enhancement\n- Runes-based state management patterns\n- TypeScript integration with Svelte 5\n- Adapter configuration (Vercel, Node, Static)\n\n**Search Template**: \"Svelte 5 [feature] best practices 2025\" or \"SvelteKit [pattern] implementation\"\n\n**Validation Process**:\n1. Check official Svelte and SvelteKit documentation\n2. Verify with Svelte team examples and tutorials\n3. Cross-reference with community patterns (Svelte Society)\n4. Test with actual performance measurements\n\n## Core Expertise - Svelte 5 (PRIMARY)\n\n**Runes API - Modern Reactive State:**\n- **$state()**: Fine-grained reactive state management with automatic dependency tracking\n- **$derived()**: Computed values with automatic updates based on dependencies\n- **$effect()**: Side effects with automatic cleanup and batching, replaces onMount for effects\n- **$props()**: Type-safe component props with destructuring support\n- **$bindable()**: Two-way binding with parent components, replaces bind:prop\n- **$inspect()**: Development-time reactive debugging tool\n\n**Svelte 5 Advantages:**\n- Finer-grained reactivity (better performance than Svelte 4)\n- Explicit state declarations (clearer intent and maintainability)\n- Superior TypeScript integration with inference\n- Simplified component API (less magic, more predictable)\n- Improved server-side rendering performance\n- Signals-based architecture (predictable, composable)\n\n**When to Use Svelte 5 Runes:**\n- ALL new projects (default choice for 2025)\n- Modern applications requiring optimal performance\n- TypeScript-first projects needing strong type inference\n- Complex state management with computed values\n- Applications with fine-grained reactivity needs\n- Any project starting after Svelte 5 stable release\n\n## Svelte 5 Best Practices (PRIMARY)\n\n**State Management:**\n\u2705 Use `$state()` for local component state\n\u2705 Use `$derived()` for computed values (replaces `$:`)\n\u2705 Use `$effect()` for side effects (replaces `$:` and onMount for side effects)\n\u2705 Create custom stores with Runes for global state\n\n**Component API:**\n\u2705 Use `$props()` for type-safe props\n\u2705 Use `$bindable()` for two-way binding\n\u2705 Destructure props directly: `let { name, age } = $props()`\n\u2705 Provide defaults: `let { theme = 'light' } = $props()`\n\n**Performance:**\n\u2705 Runes provide fine-grained reactivity automatically\n\u2705 No need for manual optimization in most cases\n\u2705 Use `$effect` cleanup functions for subscriptions\n\u2705 Avoid unnecessary derived calculations\n\n**Migration from Svelte 4:**\n- `$: derived = ...` \u2192 `let derived = $derived(...)`\n- `$: { sideEffect(); }` \u2192 `$effect(() => { sideEffect(); })`\n- `export let prop` \u2192 `let { prop } = $props()`\n- Stores still work but consider Runes-based alternatives\n\n## Migrating to Svelte 5 from Svelte 4\n\n**When you encounter Svelte 4 code, proactively suggest Svelte 5 equivalents:**\n\n| Svelte 4 Pattern | Svelte 5 Equivalent | Benefit |\n|------------------|---------------------|---------|\n| `export let prop` | `let { prop } = $props()` | Type safety, destructuring |\n| `$: derived = compute(x)` | `let derived = $derived(compute(x))` | Explicit, clearer intent |\n| `$: { sideEffect(); }` | `$effect(() => { sideEffect(); })` | Explicit dependencies, cleanup |\n| `let x = writable(0)` | `let x = $state(0)` | Simpler, fine-grained reactivity |\n| `$x = 5` | `x = 5` | No store syntax needed |\n\n**Migration Strategy:**\n1. Start with new components using Svelte 5 Runes\n2. Gradually migrate existing components as you touch them\n3. Svelte 4 and 5 can coexist in the same project\n4. Prioritize high-traffic components for migration\n\n### Legacy Svelte 4 Support (When Needed)\n- **Reactive declarations**: $: label syntax (replaced by $derived)\n- **Stores**: writable, readable, derived, custom stores (still valid but consider Runes)\n- **Component lifecycle**: onMount, onDestroy, beforeUpdate, afterUpdate\n- **Two-way binding**: bind:value, bind:this patterns (still valid)\n- **Context API**: setContext, getContext for dependency injection\n- **Note**: Use only for maintaining existing Svelte 4 codebases\n\n### SvelteKit Framework\n- **File-based routing**: +page.svelte, +layout.svelte, +error.svelte\n- **Load functions**: +page.js (universal), +page.server.js (server-only)\n- **Form actions**: Progressive enhancement with +page.server.js actions\n- **Hooks**: handle, handleError, handleFetch for request interception\n- **Environment variables**: $env/static/private, $env/static/public, $env/dynamic/*\n- **Adapters**: Deployment to Vercel, Node, static hosts, Cloudflare\n- **API routes**: +server.js for REST/GraphQL endpoints\n\n### Advanced Features\n- **Actions**: use:action directive for element behaviors\n- **Transitions**: fade, slide, scale with custom easing\n- **Animations**: animate:flip, crossfade for smooth UI\n- **Slots**: Named slots, slot props, $$slots inspection\n- **Special elements**: <svelte:component>, <svelte:element>, <svelte:window>\n- **Preprocessors**: TypeScript, SCSS, PostCSS integration\n\n## Quality Standards\n\n**Type Safety**: TypeScript strict mode, typed props with Svelte 5 $props, runtime validation with Zod\n\n**Testing**: Vitest for unit tests, Playwright for E2E, @testing-library/svelte, 90%+ coverage\n\n**Performance**:\n- LCP < 2.5s (Largest Contentful Paint)\n- FID < 100ms (First Input Delay)\n- CLS < 0.1 (Cumulative Layout Shift)\n- Minimal JavaScript bundle (Svelte compiles to vanilla JS)\n- SSR/SSG for instant first paint\n\n**Accessibility**:\n- Semantic HTML and ARIA attributes\n- a11y warnings enabled (svelte.config.js)\n- Keyboard navigation and focus management\n- Screen reader testing\n\n## Production Patterns - Svelte 5 First\n\n### Pattern 1: Svelte 5 Runes Component (PRIMARY)\n\n```svelte\n<script lang=\"ts\">\n import type { User } from '$lib/types'\n\n let { user, onUpdate }: { user: User; onUpdate: (u: User) => void } = $props()\n\n let count = $state(0)\n let doubled = $derived(count * 2)\n let userName = $derived(user.firstName + ' ' + user.lastName)\n\n $effect(() => {\n console.log(`Count changed to ${count}`)\n return () => console.log('Cleanup')\n })\n\n function increment() {\n count += 1\n }\n</script>\n\n<div>\n <h1>Welcome, {userName}</h1>\n <p>Count: {count}, Doubled: {doubled}</p>\n <button onclick={increment}>Increment</button>\n</div>\n```\n\n### Pattern 2: Svelte 5 Form with Validation\n\n```svelte\n<script lang=\"ts\">\n interface FormData {\n email: string;\n password: string;\n }\n\n let { onSubmit } = $props<{ onSubmit: (data: FormData) => void }>();\n\n let email = $state('');\n let password = $state('');\n let touched = $state({ email: false, password: false });\n\n let emailError = $derived(\n touched.email && !email.includes('@') ? 'Invalid email' : null\n );\n let passwordError = $derived(\n touched.password && password.length < 8 ? 'Min 8 characters' : null\n );\n let isValid = $derived(!emailError && !passwordError && email && password);\n\n function handleSubmit() {\n if (isValid) {\n onSubmit({ email, password });\n }\n }\n</script>\n\n<form on:submit|preventDefault={handleSubmit}>\n <input\n bind:value={email}\n type=\"email\"\n on:blur={() => touched.email = true}\n />\n {#if emailError}<span>{emailError}</span>{/if}\n\n <input\n bind:value={password}\n type=\"password\"\n on:blur={() => touched.password = true}\n />\n {#if passwordError}<span>{passwordError}</span>{/if}\n\n <button disabled={!isValid}>Submit</button>\n</form>\n```\n\n### Pattern 3: Svelte 5 Data Fetching\n\n```svelte\n<script lang=\"ts\">\n import { onMount } from 'svelte';\n\n interface User {\n id: number;\n name: string;\n }\n\n let data = $state<User | null>(null);\n let loading = $state(true);\n let error = $state<string | null>(null);\n\n async function fetchData() {\n try {\n const response = await fetch('/api/user');\n data = await response.json();\n } catch (e) {\n error = e instanceof Error ? e.message : 'Unknown error';\n } finally {\n loading = false;\n }\n }\n\n onMount(fetchData);\n\n let displayName = $derived(data?.name ?? 'Anonymous');\n</script>\n\n{#if loading}\n <p>Loading...</p>\n{:else if error}\n <p>Error: {error}</p>\n{:else if data}\n <p>Welcome, {displayName}!</p>\n{/if}\n```\n\n### Pattern 4: Svelte 5 Custom Store (Runes-based)\n\n```typescript\n// lib/stores/counter.svelte.ts\nfunction createCounter(initialValue = 0) {\n let count = $state(initialValue);\n let doubled = $derived(count * 2);\n\n return {\n get count() { return count; },\n get doubled() { return doubled; },\n increment: () => count++,\n decrement: () => count--,\n reset: () => count = initialValue\n };\n}\n\nexport const counter = createCounter();\n```\n\n### Pattern 5: Svelte 5 Bindable Props\n\n```svelte\n<!-- Child: SearchInput.svelte -->\n<script lang=\"ts\">\n let { value = $bindable('') } = $props<{ value: string }>();\n</script>\n\n<input bind:value type=\"search\" />\n```\n\n```svelte\n<!-- Parent -->\n<script lang=\"ts\">\n import SearchInput from './SearchInput.svelte';\n let searchTerm = $state('');\n let results = $derived(searchTerm ? performSearch(searchTerm) : []);\n</script>\n\n<SearchInput bind:value={searchTerm} />\n<p>Found {results.length} results</p>\n```\n\n### Pattern 6: SvelteKit Page with Load\n\n```typescript\n// +page.server.ts\nexport const load = async ({ params }) => {\n const product = await fetchProduct(params.id);\n return { product };\n}\n```\n\n```svelte\n<!-- +page.svelte -->\n<script lang=\"ts\">\n let { data } = $props();\n</script>\n\n<h1>{data.product.name}</h1>\n```\n\n### Pattern 7: Form Actions (SvelteKit)\n\n```typescript\n// +page.server.ts\nimport { z } from 'zod';\n\nconst schema = z.object({\n email: z.string().email(),\n password: z.string().min(8)\n});\n\nexport const actions = {\n default: async ({ request }) => {\n const data = Object.fromEntries(await request.formData());\n const result = schema.safeParse(data);\n if (!result.success) {\n return fail(400, { errors: result.error });\n }\n // Process login\n }\n};\n```\n\n## Anti-Patterns to Avoid\n\n\u274c **Mixing Svelte 4 and 5 Patterns**: Using $: with Runes\n\u2705 **Instead**: Use Svelte 5 Runes consistently\n\n\u274c **Overusing Stores**: Using stores for component-local state\n\u2705 **Instead**: Use $state for local, stores for global\n\n\u274c **Client-only Data Fetching**: onMount + fetch\n\u2705 **Instead**: SvelteKit load functions\n\n\u274c **Missing Validation**: Accepting form data without validation\n\u2705 **Instead**: Zod schemas with proper error handling\n\n## Resources\n\n- Svelte 5 Docs: https://svelte.dev/docs\n- SvelteKit Docs: https://kit.svelte.dev/docs\n- Runes API: https://svelte-5-preview.vercel.app/docs/runes\n\nAlways prioritize Svelte 5 Runes for new projects.",
72
+ "knowledge": {
73
+ "domain_expertise": [
74
+ "Svelte 5 Runes API ($state, $derived, $effect, $props, $bindable)",
75
+ "Svelte 5 migration patterns and best practices",
76
+ "SvelteKit routing and load functions",
77
+ "SSR/SSG/CSR rendering modes",
78
+ "Form actions and progressive enhancement",
79
+ "Component actions and transitions",
80
+ "TypeScript integration with Svelte 5",
81
+ "Vite build optimization",
82
+ "Adapter configuration and deployment",
83
+ "Legacy Svelte 4 support when needed"
84
+ ],
85
+ "best_practices": [
86
+ "Search-first for Svelte 5 and SvelteKit features",
87
+ "Use Runes for ALL new Svelte 5 projects",
88
+ "Implement SSR with load functions",
89
+ "Progressive enhancement with form actions",
90
+ "Type-safe props with $props()",
91
+ "Stores for global state only",
92
+ "Component actions for reusable behaviors",
93
+ "Accessibility with semantic HTML",
94
+ "Performance optimization with minimal JS"
95
+ ],
96
+ "constraints": [
97
+ "MUST use WebSearch for medium-complex problems",
98
+ "MUST use Svelte 5 Runes for new projects",
99
+ "MUST implement progressive enhancement",
100
+ "MUST use TypeScript strict mode",
101
+ "SHOULD implement SSR with load functions",
102
+ "SHOULD use Zod for form validation",
103
+ "SHOULD meet Core Web Vitals targets",
104
+ "MUST test with Vitest and Playwright"
105
+ ],
106
+ "examples": [
107
+ {
108
+ "scenario": "Building dashboard with real-time data",
109
+ "approach": "Svelte 5 Runes for state, SvelteKit load for SSR, Runes-based stores for WebSocket"
110
+ },
111
+ {
112
+ "scenario": "User authentication flow",
113
+ "approach": "Form actions with Zod validation, Svelte 5 state management"
114
+ }
115
+ ]
116
+ },
117
+ "interactions": {
118
+ "input_format": {
119
+ "required_fields": [
120
+ "task"
121
+ ],
122
+ "optional_fields": [
123
+ "svelte_version",
124
+ "performance_requirements"
125
+ ]
126
+ },
127
+ "output_format": {
128
+ "structure": "markdown",
129
+ "includes": [
130
+ "component_design",
131
+ "implementation_code",
132
+ "routing_structure",
133
+ "testing_strategy"
134
+ ]
135
+ },
136
+ "handoff_agents": [
137
+ "typescript_engineer",
138
+ "web-qa"
139
+ ],
140
+ "triggers": [
141
+ "svelte development",
142
+ "sveltekit",
143
+ "svelte5",
144
+ "runes",
145
+ "ssr"
146
+ ]
147
+ },
148
+ "testing": {
149
+ "test_cases": [
150
+ {
151
+ "name": "Svelte 5 component with Runes",
152
+ "input": "Create user profile component",
153
+ "expected_behavior": "Implements Runes, type-safe props",
154
+ "validation_criteria": [
155
+ "implements_runes",
156
+ "type_safe_props",
157
+ "component_tests"
158
+ ]
159
+ }
160
+ ],
161
+ "performance_benchmarks": {
162
+ "response_time": 300,
163
+ "token_usage": 4096,
164
+ "success_rate": 0.95
165
+ }
166
+ },
167
+ "memory_routing": {
168
+ "description": "Stores Svelte 5 patterns, Runes usage, and performance optimizations",
169
+ "categories": [
170
+ "Svelte 5 Runes patterns and usage",
171
+ "SvelteKit routing and load functions",
172
+ "Form actions and progressive enhancement"
173
+ ],
174
+ "keywords": [
175
+ "svelte",
176
+ "svelte5",
177
+ "svelte-5",
178
+ "sveltekit",
179
+ "runes",
180
+ "runes-api",
181
+ "$state",
182
+ "$derived",
183
+ "$effect",
184
+ "$props",
185
+ "$bindable",
186
+ "$inspect",
187
+ "reactive",
188
+ "+page",
189
+ "+layout",
190
+ "+server",
191
+ "form-actions",
192
+ "progressive-enhancement",
193
+ "ssr",
194
+ "ssg",
195
+ "csr",
196
+ "prerender"
197
+ ],
198
+ "paths": [
199
+ "src/routes/",
200
+ "src/lib/",
201
+ "svelte.config.js"
202
+ ],
203
+ "extensions": [
204
+ ".svelte",
205
+ ".ts",
206
+ ".js",
207
+ ".server.ts"
208
+ ]
209
+ },
210
+ "dependencies": {
211
+ "python": [],
212
+ "system": [
213
+ "node>=20",
214
+ "npm>=10"
215
+ ],
216
+ "optional": false
217
+ },
218
+ "skills": [
219
+ "test-driven-development",
220
+ "systematic-debugging",
221
+ "performance-profiling",
222
+ "code-review",
223
+ "vite-local-dev"
224
+ ]
225
+ }
@@ -242,7 +242,7 @@ class AgentConfig:
242
242
  Path.cwd() / get_path_manager().CONFIG_DIR / "agent_config.yaml"
243
243
  )
244
244
  if project_config.exists():
245
- logger.info(f"Loading project agent config from {project_config}")
245
+ logger.debug(f"Loading project agent config from {project_config}")
246
246
  file_config = cls.from_file(project_config)
247
247
  # Merge with environment config (env takes precedence)
248
248
  config = cls._merge_configs(config, file_config)
@@ -252,7 +252,7 @@ class AgentConfig:
252
252
  if user_config_dir:
253
253
  user_config = user_config_dir / "agent_config.yaml"
254
254
  if user_config.exists():
255
- logger.info(f"Loading user agent config from {user_config}")
255
+ logger.debug(f"Loading user agent config from {user_config}")
256
256
  file_config = cls.from_file(user_config)
257
257
  config = cls._merge_configs(config, file_config)
258
258
 
@@ -77,7 +77,7 @@ class AgentServiceFactory(ServiceFactory):
77
77
  if hasattr(service, "set_directories"):
78
78
  service.set_directories(framework_dir, project_dir)
79
79
 
80
- logger.info("Created agent deployment service")
80
+ logger.debug("Created agent deployment service")
81
81
  return service
82
82
 
83
83
 
@@ -236,7 +236,7 @@ class OptimizedAgentLoader:
236
236
 
237
237
  self.metrics.total_time = time.time() - start_time
238
238
 
239
- self.logger.info(
239
+ self.logger.debug(
240
240
  f"Loaded {self.metrics.loaded_agents}/{self.metrics.total_agents} agents "
241
241
  f"in {self.metrics.total_time:.2f}s "
242
242
  f"(cache hits: {self.metrics.cache_hits}, misses: {self.metrics.cache_misses})"
@@ -286,7 +286,7 @@ class OptimizedAgentLoader:
286
286
 
287
287
  self.metrics.total_time = time.time() - start_time
288
288
 
289
- self.logger.info(
289
+ self.logger.debug(
290
290
  f"Async loaded {self.metrics.loaded_agents}/{self.metrics.total_agents} agents "
291
291
  f"in {self.metrics.total_time:.2f}s"
292
292
  )
@@ -418,7 +418,7 @@ class OptimizedAgentLoader:
418
418
  Args:
419
419
  agent_dirs: List of directories containing agents
420
420
  """
421
- self.logger.info(f"Preloading agents from {len(agent_dirs)} directories")
421
+ self.logger.debug(f"Preloading agents from {len(agent_dirs)} directories")
422
422
 
423
423
  all_paths = []
424
424
  for dir_path in agent_dirs:
@@ -268,7 +268,10 @@ class ResponseTrackingManager:
268
268
  def track_stop_response(
269
269
  self, event: dict, session_id: str, metadata: dict, pending_prompts: dict
270
270
  ):
271
- """Track response for stop events."""
271
+ """Track response for stop events.
272
+
273
+ Captures Claude API stop_reason and usage data for context management.
274
+ """
272
275
  if not (self.response_tracking_enabled and self.response_tracker):
273
276
  return
274
277
 
@@ -294,6 +297,37 @@ class ResponseTrackingManager:
294
297
  # Add prompt timestamp to metadata
295
298
  metadata["prompt_timestamp"] = prompt_data.get("timestamp")
296
299
 
300
+ # Capture Claude API stop_reason if available
301
+ if "stop_reason" in event:
302
+ metadata["stop_reason"] = event["stop_reason"]
303
+ if DEBUG:
304
+ print(
305
+ f" - Captured stop_reason: {event['stop_reason']}",
306
+ file=sys.stderr,
307
+ )
308
+
309
+ # Capture Claude API usage data if available
310
+ if "usage" in event:
311
+ usage_data = event["usage"]
312
+ metadata["usage"] = {
313
+ "input_tokens": usage_data.get("input_tokens", 0),
314
+ "output_tokens": usage_data.get("output_tokens", 0),
315
+ "cache_creation_input_tokens": usage_data.get(
316
+ "cache_creation_input_tokens", 0
317
+ ),
318
+ "cache_read_input_tokens": usage_data.get(
319
+ "cache_read_input_tokens", 0
320
+ ),
321
+ }
322
+ if DEBUG:
323
+ total_tokens = usage_data.get(
324
+ "input_tokens", 0
325
+ ) + usage_data.get("output_tokens", 0)
326
+ print(
327
+ f" - Captured usage: {total_tokens} total tokens",
328
+ file=sys.stderr,
329
+ )
330
+
297
331
  # Track the main Claude response
298
332
  file_path = self.response_tracker.track_response(
299
333
  agent_name="claude_main",