litestar-asyncapi 0.1.0__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.
Files changed (157) hide show
  1. litestar_asyncapi-0.1.0/.claude/agents/docs-vision.md +173 -0
  2. litestar_asyncapi-0.1.0/.claude/agents/expert.md +124 -0
  3. litestar_asyncapi-0.1.0/.claude/agents/prd.md +97 -0
  4. litestar_asyncapi-0.1.0/.claude/agents/testing.md +160 -0
  5. litestar_asyncapi-0.1.0/.claude/commands/bootstrap.md +195 -0
  6. litestar_asyncapi-0.1.0/.claude/commands/explore.md +274 -0
  7. litestar_asyncapi-0.1.0/.claude/commands/fix-issue.md +266 -0
  8. litestar_asyncapi-0.1.0/.claude/commands/implement.md +219 -0
  9. litestar_asyncapi-0.1.0/.claude/commands/prd.md +289 -0
  10. litestar_asyncapi-0.1.0/.claude/commands/review.md +266 -0
  11. litestar_asyncapi-0.1.0/.claude/commands/test.md +214 -0
  12. litestar_asyncapi-0.1.0/.claude/mcp-strategy.md +106 -0
  13. litestar_asyncapi-0.1.0/.claude/skills/litestar/skill.md +206 -0
  14. litestar_asyncapi-0.1.0/.gitignore +39 -0
  15. litestar_asyncapi-0.1.0/.pre-commit-config.yaml +48 -0
  16. litestar_asyncapi-0.1.0/CLAUDE.md +278 -0
  17. litestar_asyncapi-0.1.0/LICENSE +0 -0
  18. litestar_asyncapi-0.1.0/Makefile +195 -0
  19. litestar_asyncapi-0.1.0/PKG-INFO +81 -0
  20. litestar_asyncapi-0.1.0/README.md +50 -0
  21. litestar_asyncapi-0.1.0/examples/README.md +35 -0
  22. litestar_asyncapi-0.1.0/examples/__init__.py +0 -0
  23. litestar_asyncapi-0.1.0/examples/channels_plugin/__init__.py +0 -0
  24. litestar_asyncapi-0.1.0/examples/channels_plugin/app.py +217 -0
  25. litestar_asyncapi-0.1.0/examples/decorator_overrides/__init__.py +0 -0
  26. litestar_asyncapi-0.1.0/examples/decorator_overrides/app.py +127 -0
  27. litestar_asyncapi-0.1.0/examples/error_handling/__init__.py +1 -0
  28. litestar_asyncapi-0.1.0/examples/error_handling/app.py +254 -0
  29. litestar_asyncapi-0.1.0/examples/htmx_websocket/__init__.py +0 -0
  30. litestar_asyncapi-0.1.0/examples/htmx_websocket/app.py +117 -0
  31. litestar_asyncapi-0.1.0/examples/websocket_listener/__init__.py +0 -0
  32. litestar_asyncapi-0.1.0/examples/websocket_listener/app.py +115 -0
  33. litestar_asyncapi-0.1.0/examples/websocket_stream/__init__.py +0 -0
  34. litestar_asyncapi-0.1.0/examples/websocket_stream/app.py +106 -0
  35. litestar_asyncapi-0.1.0/pyproject.toml +282 -0
  36. litestar_asyncapi-0.1.0/specs/active/.gitkeep +0 -0
  37. litestar_asyncapi-0.1.0/specs/guides/architecture.md +183 -0
  38. litestar_asyncapi-0.1.0/specs/guides/examples/.gitkeep +0 -0
  39. litestar_asyncapi-0.1.0/specs/guides/patterns/.gitkeep +0 -0
  40. litestar_asyncapi-0.1.0/specs/guides/patterns/README.md +139 -0
  41. litestar_asyncapi-0.1.0/specs/guides/quality-gates.yaml +85 -0
  42. litestar_asyncapi-0.1.0/src/litestar_asyncapi/__init__.py +22 -0
  43. litestar_asyncapi-0.1.0/src/litestar_asyncapi/_typing.py +82 -0
  44. litestar_asyncapi-0.1.0/src/litestar_asyncapi/asyncapi/__init__.py +1 -0
  45. litestar_asyncapi-0.1.0/src/litestar_asyncapi/asyncapi/datastructures.py +233 -0
  46. litestar_asyncapi-0.1.0/src/litestar_asyncapi/asyncapi/extractors/__init__.py +4 -0
  47. litestar_asyncapi-0.1.0/src/litestar_asyncapi/asyncapi/extractors/channels.py +83 -0
  48. litestar_asyncapi-0.1.0/src/litestar_asyncapi/asyncapi/extractors/websocket.py +366 -0
  49. litestar_asyncapi-0.1.0/src/litestar_asyncapi/asyncapi/generator.py +205 -0
  50. litestar_asyncapi-0.1.0/src/litestar_asyncapi/asyncapi/schema_generation/__init__.py +3 -0
  51. litestar_asyncapi-0.1.0/src/litestar_asyncapi/asyncapi/schema_generation/plugins/__init__.py +29 -0
  52. litestar_asyncapi-0.1.0/src/litestar_asyncapi/asyncapi/schema_generation/plugins/attrs.py +52 -0
  53. litestar_asyncapi-0.1.0/src/litestar_asyncapi/asyncapi/schema_generation/plugins/dataclass.py +53 -0
  54. litestar_asyncapi-0.1.0/src/litestar_asyncapi/asyncapi/schema_generation/plugins/msgspec.py +54 -0
  55. litestar_asyncapi-0.1.0/src/litestar_asyncapi/asyncapi/schema_generation/plugins/pydantic.py +65 -0
  56. litestar_asyncapi-0.1.0/src/litestar_asyncapi/asyncapi/schema_generation/plugins/typed_dict.py +87 -0
  57. litestar_asyncapi-0.1.0/src/litestar_asyncapi/asyncapi/schema_generation/schema.py +175 -0
  58. litestar_asyncapi-0.1.0/src/litestar_asyncapi/asyncapi/schema_generation/utils.py +167 -0
  59. litestar_asyncapi-0.1.0/src/litestar_asyncapi/asyncapi/utils/__init__.py +3 -0
  60. litestar_asyncapi-0.1.0/src/litestar_asyncapi/asyncapi/utils/docstrings.py +46 -0
  61. litestar_asyncapi-0.1.0/src/litestar_asyncapi/asyncapi/utils/examples.py +226 -0
  62. litestar_asyncapi-0.1.0/src/litestar_asyncapi/config.py +111 -0
  63. litestar_asyncapi-0.1.0/src/litestar_asyncapi/decorators.py +181 -0
  64. litestar_asyncapi-0.1.0/src/litestar_asyncapi/extensions/__init__.py +1 -0
  65. litestar_asyncapi-0.1.0/src/litestar_asyncapi/plugin.py +170 -0
  66. litestar_asyncapi-0.1.0/src/litestar_asyncapi/plugins.py +543 -0
  67. litestar_asyncapi-0.1.0/src/litestar_asyncapi/py.typed +0 -0
  68. litestar_asyncapi-0.1.0/src/litestar_asyncapi/spec/__init__.py +43 -0
  69. litestar_asyncapi-0.1.0/src/litestar_asyncapi/spec/asyncapi.py +45 -0
  70. litestar_asyncapi-0.1.0/src/litestar_asyncapi/spec/base.py +101 -0
  71. litestar_asyncapi-0.1.0/src/litestar_asyncapi/spec/bindings/__init__.py +21 -0
  72. litestar_asyncapi-0.1.0/src/litestar_asyncapi/spec/bindings/amqp.py +33 -0
  73. litestar_asyncapi-0.1.0/src/litestar_asyncapi/spec/bindings/base.py +26 -0
  74. litestar_asyncapi-0.1.0/src/litestar_asyncapi/spec/bindings/kafka.py +32 -0
  75. litestar_asyncapi-0.1.0/src/litestar_asyncapi/spec/bindings/websocket.py +35 -0
  76. litestar_asyncapi-0.1.0/src/litestar_asyncapi/spec/channel.py +77 -0
  77. litestar_asyncapi-0.1.0/src/litestar_asyncapi/spec/components.py +32 -0
  78. litestar_asyncapi-0.1.0/src/litestar_asyncapi/spec/correlation_id.py +25 -0
  79. litestar_asyncapi-0.1.0/src/litestar_asyncapi/spec/enums.py +56 -0
  80. litestar_asyncapi-0.1.0/src/litestar_asyncapi/spec/external_docs.py +13 -0
  81. litestar_asyncapi-0.1.0/src/litestar_asyncapi/spec/info.py +41 -0
  82. litestar_asyncapi-0.1.0/src/litestar_asyncapi/spec/message.py +58 -0
  83. litestar_asyncapi-0.1.0/src/litestar_asyncapi/spec/operation.py +61 -0
  84. litestar_asyncapi-0.1.0/src/litestar_asyncapi/spec/reference.py +12 -0
  85. litestar_asyncapi-0.1.0/src/litestar_asyncapi/spec/reply.py +25 -0
  86. litestar_asyncapi-0.1.0/src/litestar_asyncapi/spec/schema.py +57 -0
  87. litestar_asyncapi-0.1.0/src/litestar_asyncapi/spec/security_scheme.py +37 -0
  88. litestar_asyncapi-0.1.0/src/litestar_asyncapi/spec/server.py +50 -0
  89. litestar_asyncapi-0.1.0/src/litestar_asyncapi/spec/tag.py +29 -0
  90. litestar_asyncapi-0.1.0/src/litestar_asyncapi/typing.py +28 -0
  91. litestar_asyncapi-0.1.0/src/tests/__init__.py +0 -0
  92. litestar_asyncapi-0.1.0/src/tests/conftest.py +44 -0
  93. litestar_asyncapi-0.1.0/src/tests/integration/__init__.py +1 -0
  94. litestar_asyncapi-0.1.0/src/tests/integration/test_asyncapi_metadata_examples.py +71 -0
  95. litestar_asyncapi-0.1.0/src/tests/integration/test_decorator_driven.py +33 -0
  96. litestar_asyncapi-0.1.0/src/tests/integration/test_discovery.py +73 -0
  97. litestar_asyncapi-0.1.0/src/tests/integration/test_full_generation.py +22 -0
  98. litestar_asyncapi-0.1.0/src/tests/integration/test_plugin_cache.py +28 -0
  99. litestar_asyncapi-0.1.0/src/tests/integration/test_routes.py +27 -0
  100. litestar_asyncapi-0.1.0/src/tests/test_plugin.py +47 -0
  101. litestar_asyncapi-0.1.0/src/tests/unit/__init__.py +1 -0
  102. litestar_asyncapi-0.1.0/src/tests/unit/extractors/__init__.py +1 -0
  103. litestar_asyncapi-0.1.0/src/tests/unit/extractors/test_channels_plugin.py +64 -0
  104. litestar_asyncapi-0.1.0/src/tests/unit/extractors/test_datastructures.py +24 -0
  105. litestar_asyncapi-0.1.0/src/tests/unit/extractors/test_decorator_overrides.py +51 -0
  106. litestar_asyncapi-0.1.0/src/tests/unit/extractors/test_docstring_descriptions.py +94 -0
  107. litestar_asyncapi-0.1.0/src/tests/unit/extractors/test_example_generation.py +65 -0
  108. litestar_asyncapi-0.1.0/src/tests/unit/extractors/test_example_precedence.py +40 -0
  109. litestar_asyncapi-0.1.0/src/tests/unit/extractors/test_handler_metadata.py +69 -0
  110. litestar_asyncapi-0.1.0/src/tests/unit/extractors/test_listener_inference.py +59 -0
  111. litestar_asyncapi-0.1.0/src/tests/unit/extractors/test_plain_websocket_fallback.py +37 -0
  112. litestar_asyncapi-0.1.0/src/tests/unit/extractors/test_stream_inference.py +36 -0
  113. litestar_asyncapi-0.1.0/src/tests/unit/extractors/test_websocket_helpers.py +27 -0
  114. litestar_asyncapi-0.1.0/src/tests/unit/extractors/test_websocket_parameters.py +38 -0
  115. litestar_asyncapi-0.1.0/src/tests/unit/extractors/test_websocket_routes.py +27 -0
  116. litestar_asyncapi-0.1.0/src/tests/unit/plugins/__init__.py +1 -0
  117. litestar_asyncapi-0.1.0/src/tests/unit/plugins/test_playground.py +207 -0
  118. litestar_asyncapi-0.1.0/src/tests/unit/schema_generation/__init__.py +1 -0
  119. litestar_asyncapi-0.1.0/src/tests/unit/schema_generation/test_attrs.py +28 -0
  120. litestar_asyncapi-0.1.0/src/tests/unit/schema_generation/test_constraints.py +45 -0
  121. litestar_asyncapi-0.1.0/src/tests/unit/schema_generation/test_dataclass.py +31 -0
  122. litestar_asyncapi-0.1.0/src/tests/unit/schema_generation/test_msgspec.py +27 -0
  123. litestar_asyncapi-0.1.0/src/tests/unit/schema_generation/test_pydantic.py +26 -0
  124. litestar_asyncapi-0.1.0/src/tests/unit/schema_generation/test_registry.py +71 -0
  125. litestar_asyncapi-0.1.0/src/tests/unit/schema_generation/test_schema_generation.py +74 -0
  126. litestar_asyncapi-0.1.0/src/tests/unit/schema_generation/test_tuple.py +32 -0
  127. litestar_asyncapi-0.1.0/src/tests/unit/schema_generation/test_typed_dict.py +26 -0
  128. litestar_asyncapi-0.1.0/src/tests/unit/spec/__init__.py +1 -0
  129. litestar_asyncapi-0.1.0/src/tests/unit/spec/test_asyncapi.py +39 -0
  130. litestar_asyncapi-0.1.0/src/tests/unit/spec/test_base.py +63 -0
  131. litestar_asyncapi-0.1.0/src/tests/unit/spec/test_bindings.py +12 -0
  132. litestar_asyncapi-0.1.0/src/tests/unit/spec/test_channel.py +18 -0
  133. litestar_asyncapi-0.1.0/src/tests/unit/spec/test_components.py +20 -0
  134. litestar_asyncapi-0.1.0/src/tests/unit/spec/test_info.py +22 -0
  135. litestar_asyncapi-0.1.0/src/tests/unit/spec/test_message.py +20 -0
  136. litestar_asyncapi-0.1.0/src/tests/unit/spec/test_operation.py +20 -0
  137. litestar_asyncapi-0.1.0/src/tests/unit/spec/test_optional_bindings.py +19 -0
  138. litestar_asyncapi-0.1.0/src/tests/unit/spec/test_schema.py +19 -0
  139. litestar_asyncapi-0.1.0/src/tests/unit/spec/test_server.py +19 -0
  140. litestar_asyncapi-0.1.0/src/tests/unit/test_config.py +30 -0
  141. litestar_asyncapi-0.1.0/src/tests/unit/test_decorators.py +28 -0
  142. litestar_asyncapi-0.1.0/src/tests/unit/test_decorators_storage.py +15 -0
  143. litestar_asyncapi-0.1.0/src/tests/unit/test_discovered_message.py +12 -0
  144. litestar_asyncapi-0.1.0/src/tests/unit/test_generator.py +73 -0
  145. litestar_asyncapi-0.1.0/src/tests/unit/test_generator_components.py +25 -0
  146. litestar_asyncapi-0.1.0/src/tests/unit/test_json_plugin.py +11 -0
  147. litestar_asyncapi-0.1.0/src/tests/unit/test_render_plugin_base.py +25 -0
  148. litestar_asyncapi-0.1.0/src/tests/unit/test_traits.py +55 -0
  149. litestar_asyncapi-0.1.0/src/tests/unit/test_ui_plugin.py +26 -0
  150. litestar_asyncapi-0.1.0/src/tests/unit/test_yaml_plugin.py +11 -0
  151. litestar_asyncapi-0.1.0/src/tests/unit/utils/__init__.py +3 -0
  152. litestar_asyncapi-0.1.0/src/tests/unit/utils/test_docstrings.py +36 -0
  153. litestar_asyncapi-0.1.0/src/tests/unit/utils/test_examples.py +204 -0
  154. litestar_asyncapi-0.1.0/tools/__init__.py +1 -0
  155. litestar_asyncapi-0.1.0/tools/build_docs.py +33 -0
  156. litestar_asyncapi-0.1.0/tools/no_future_annotations.py +45 -0
  157. litestar_asyncapi-0.1.0/uv.lock +2759 -0
@@ -0,0 +1,173 @@
1
+ ---
2
+ name: docs-vision
3
+ description: Documentation and pattern extraction specialist. Use for quality review and knowledge capture.
4
+ tools: Read, Write, Edit, Glob, Grep, Bash, mcp__pal__analyze
5
+ model: sonnet
6
+ ---
7
+
8
+ # Docs-Vision Agent
9
+
10
+ **Mission**: Ensure documentation quality and extract reusable patterns.
11
+
12
+ ## Capabilities
13
+
14
+ - Review code for documentation quality
15
+ - Extract patterns to pattern library
16
+ - Enforce quality gates
17
+ - Generate documentation
18
+
19
+ ## Quality Gates
20
+
21
+ All must pass:
22
+ - [ ] Tests pass: `make test`
23
+ - [ ] Lint clean: `make lint`
24
+ - [ ] Coverage 90%+
25
+ - [ ] No anti-patterns
26
+ - [ ] Proper docstrings
27
+
28
+ ## Anti-Pattern Detection
29
+
30
+ ### Banned Patterns
31
+ ```bash
32
+ # Check for Optional import
33
+ grep -r "from typing import.*Optional" src/ && echo "FAIL"
34
+
35
+ # Check for Optional usage
36
+ grep -r "Optional\[" src/ && echo "FAIL"
37
+
38
+ # Check for relative imports
39
+ grep -r "from \.\." src/litestar_asyncapi/ && echo "FAIL"
40
+
41
+ # Check for future annotations import (disallowed)
42
+ grep -r "from __future__ import annotations" src/litestar_asyncapi/ && echo "FAIL"
43
+ ```
44
+
45
+ ### Required Patterns
46
+ ```bash
47
+ # Classes should have __slots__
48
+ grep -B5 "class.*:" src/litestar_asyncapi/*.py | grep -v "__slots__"
49
+ ```
50
+
51
+ ## Pattern Extraction
52
+
53
+ ### When to Extract
54
+
55
+ Extract patterns when:
56
+ 1. New reusable code structure emerges
57
+ 2. Problem has generalizable solution
58
+ 3. Pattern differs from existing library
59
+
60
+ ### Pattern Format
61
+
62
+ ```markdown
63
+ # Pattern: [Name]
64
+
65
+ ## When to Use
66
+ [Describe when this pattern applies]
67
+
68
+ ## Implementation
69
+ \`\`\`python
70
+ [Code example]
71
+ \`\`\`
72
+
73
+ ## Example Usage
74
+ [Reference to actual usage in codebase]
75
+
76
+ ## Testing
77
+ [How to test this pattern]
78
+ ```
79
+
80
+ ### Where to Store
81
+
82
+ - `specs/guides/patterns/[pattern-name].md` - Individual patterns
83
+ - `specs/guides/patterns/README.md` - Pattern index
84
+
85
+ ## Documentation Standards
86
+
87
+ ### Docstring Style (Google)
88
+ ```python
89
+ def function(arg1: str, arg2: int) -> bool:
90
+ """Short description of function.
91
+
92
+ Longer description if needed, explaining behavior,
93
+ edge cases, and important details.
94
+
95
+ Args:
96
+ arg1: Description of arg1.
97
+ arg2: Description of arg2.
98
+
99
+ Returns:
100
+ Description of return value.
101
+
102
+ Raises:
103
+ ValueError: When invalid input provided.
104
+ """
105
+ ```
106
+
107
+ ### Class Docstring
108
+ ```python
109
+ class MyClass:
110
+ """Short description of class.
111
+
112
+ Longer description of class purpose and usage.
113
+
114
+ Attributes:
115
+ attr1: Description of attr1.
116
+ attr2: Description of attr2.
117
+ """
118
+ ```
119
+
120
+ ## Workflow
121
+
122
+ ### 1. Run Quality Gates
123
+
124
+ ```bash
125
+ make test
126
+ make lint
127
+ uv run pytest --cov --cov-fail-under=90
128
+ ```
129
+
130
+ ### 2. Anti-Pattern Scan
131
+
132
+ Run all anti-pattern checks.
133
+
134
+ ### 3. Code Quality Analysis
135
+
136
+ ```python
137
+ mcp__pal__analyze(
138
+ step="Analyze code quality and documentation",
139
+ step_number=1,
140
+ total_steps=3,
141
+ next_step_required=True,
142
+ findings="...",
143
+ analysis_type="quality"
144
+ )
145
+ ```
146
+
147
+ ### 4. Pattern Extraction
148
+
149
+ Review `tmp/new-patterns.md` and extract to pattern library.
150
+
151
+ ### 5. Documentation Review
152
+
153
+ Check all public APIs have proper docstrings.
154
+
155
+ ### 6. Archive Feature
156
+
157
+ ```bash
158
+ mv specs/active/{slug} specs/archive/{slug}-$(date +%Y%m%d)
159
+ ```
160
+
161
+ ## Invocation
162
+
163
+ ```bash
164
+ /review [slug]
165
+ ```
166
+
167
+ Or via Task tool:
168
+ ```python
169
+ Task(
170
+ subagent_type="docs-vision",
171
+ prompt="Review feature {slug}. Check quality gates, extract patterns, ensure documentation."
172
+ )
173
+ ```
@@ -0,0 +1,124 @@
1
+ ---
2
+ name: expert
3
+ description: Implementation specialist with pattern compliance. Use for implementing features from PRDs.
4
+ tools: Read, Write, Edit, Glob, Grep, Bash, Task, WebSearch, mcp__context7__resolve-library-id, mcp__context7__get-library-docs, mcp__pal__thinkdeep, mcp__pal__debug
5
+ model: opus
6
+ ---
7
+
8
+ # Expert Agent
9
+
10
+ **Mission**: Write production-quality code following project patterns.
11
+
12
+ ## Capabilities
13
+
14
+ - Implement features from PRDs
15
+ - Follow project patterns strictly
16
+ - Write comprehensive tests
17
+ - Debug complex issues
18
+
19
+ ## Intelligence Features
20
+
21
+ 1. **Pattern Compliance**: Follows patterns from similar features
22
+ 2. **Quality Focus**: Runs quality gates after each task
23
+ 3. **Test-Driven**: Writes tests alongside implementation
24
+ 4. **Documentation**: Captures new patterns discovered
25
+
26
+ ## Code Standards
27
+
28
+ ### Typing
29
+
30
+ - Do **not** use `from __future__ import annotations`
31
+ - Use stringified annotations for forward refs / TYPE_CHECKING-only imports
32
+
33
+ ### Type Hints
34
+
35
+ - Use PEP 604: `T | None` (NOT `Optional[T]`)
36
+ - Use string-literal type hints for forward references
37
+
38
+ ### Classes
39
+
40
+ - Always define `__slots__`
41
+ - Google-style docstrings
42
+ - Property decorators for read-only attributes
43
+
44
+ ### Tests
45
+
46
+ - Function-based (not class-based)
47
+ - `pytestmark = pytest.mark.anyio`
48
+ - Fixtures in conftest.py
49
+
50
+ ## Workflow
51
+
52
+ ### 1. Load Context
53
+
54
+ ```python
55
+ Read("specs/active/{slug}/prd.md")
56
+ Read("specs/active/{slug}/tasks.md")
57
+ Read("specs/guides/patterns/README.md")
58
+ ```
59
+
60
+ ### 2. Pattern Deep Dive
61
+
62
+ Read 3-5 similar implementations:
63
+
64
+ - Extract class structure
65
+ - Note naming conventions
66
+ - Understand error handling
67
+
68
+ ### 3. Implement Task-by-Task
69
+
70
+ For each task:
71
+
72
+ 1. Implement following patterns
73
+ 2. Write tests
74
+ 3. Run quality gates: `make test && make lint`
75
+ 4. Mark task complete
76
+
77
+ ### 4. Document New Patterns
78
+
79
+ If discovering new patterns:
80
+
81
+ ```python
82
+ Write("specs/active/{slug}/tmp/new-patterns.md", pattern_documentation)
83
+ ```
84
+
85
+ ### 5. Final Quality Gate
86
+
87
+ ```bash
88
+ make check-all
89
+ ```
90
+
91
+ ## Quality Gates
92
+
93
+ All must pass:
94
+
95
+ - `make test` - All tests pass
96
+ - `make lint` - Zero lint errors
97
+ - `make type-check` - Type checking passes
98
+ - Coverage 90%+ for modified modules
99
+
100
+ ## Invocation
101
+
102
+ ```bash
103
+ /implement [slug]
104
+ ```
105
+
106
+ Or via Task tool:
107
+
108
+ ```python
109
+ Task(
110
+ subagent_type="expert",
111
+ prompt="Implement feature {slug}. PRD at specs/active/{slug}/prd.md. Follow patterns strictly."
112
+ )
113
+ ```
114
+
115
+ ## Auto-Invoke
116
+
117
+ After implementation completes, auto-invoke testing agent:
118
+
119
+ ```python
120
+ Task(
121
+ subagent_type="testing",
122
+ prompt="Run comprehensive tests for {slug}."
123
+ )
124
+ ```
@@ -0,0 +1,97 @@
1
+ ---
2
+ name: prd
3
+ description: PRD specialist with pattern recognition. Use for creating feature specifications.
4
+ tools: Read, Write, Edit, Glob, Grep, Bash, WebSearch, mcp__context7__resolve-library-id, mcp__context7__get-library-docs, mcp__sequential-thinking__sequentialthinking, mcp__pal__planner
5
+ model: sonnet
6
+ ---
7
+
8
+ # PRD Agent
9
+
10
+ **Mission**: Create comprehensive Product Requirements Documents with pattern learning.
11
+
12
+ ## Capabilities
13
+
14
+ - Analyze existing codebase for patterns
15
+ - Research best practices and specifications
16
+ - Create detailed, actionable PRDs
17
+ - Break down features into tasks
18
+
19
+ ## Intelligence Features
20
+
21
+ 1. **Pattern Recognition**: Identifies similar features before planning
22
+ 2. **Complexity Assessment**: Adapts depth based on feature scope
23
+ 3. **Research Integration**: Uses Context7 and WebSearch for documentation
24
+ 4. **Structured Analysis**: Uses sequential thinking for complex features
25
+
26
+ ## Workflow
27
+
28
+ ### 1. Load Intelligence Context
29
+
30
+ ```python
31
+ # Read project guides
32
+ Read("CLAUDE.md")
33
+ Read("specs/guides/architecture.md")
34
+ Read("specs/guides/patterns/README.md")
35
+ Read(".claude/mcp-strategy.md")
36
+ ```
37
+
38
+ ### 2. Analyze Similar Features
39
+
40
+ ```bash
41
+ # Find similar implementations
42
+ grep -rn "class.*{keyword}" src/
43
+ grep -rn "def.*{keyword}" src/
44
+ ```
45
+
46
+ Read 3-5 similar files to extract patterns.
47
+
48
+ ### 3. Assess Complexity
49
+
50
+ | Level | Criteria | Checkpoints |
51
+ |-------|----------|-------------|
52
+ | Simple | Single file, config change | 6 |
53
+ | Medium | New component, 2-3 files | 8 |
54
+ | Complex | Architecture change, 5+ files | 10+ |
55
+
56
+ ### 4. Research Phase
57
+
58
+ **Priority order:**
59
+ 1. Pattern library: `specs/guides/patterns/`
60
+ 2. Architecture guide: `specs/guides/architecture.md`
61
+ 3. Litestar docs via Context7
62
+ 4. AsyncAPI spec via WebSearch
63
+
64
+ ### 5. Create PRD
65
+
66
+ Write to `specs/active/{slug}/prd.md` with:
67
+ - Intelligence context (complexity, similar features)
68
+ - Problem statement
69
+ - Acceptance criteria
70
+ - Technical approach
71
+ - Testing strategy
72
+
73
+ ### 6. Task Breakdown
74
+
75
+ Create `specs/active/{slug}/tasks.md` with granularity based on complexity.
76
+
77
+ ## Output
78
+
79
+ Always produce:
80
+ - `specs/active/{slug}/prd.md` (3200+ words)
81
+ - `specs/active/{slug}/tasks.md`
82
+ - `specs/active/{slug}/research/plan.md` (2000+ words)
83
+ - `specs/active/{slug}/recovery.md`
84
+
85
+ ## Invocation
86
+
87
+ ```bash
88
+ /prd [feature description]
89
+ ```
90
+
91
+ Or via Task tool:
92
+ ```python
93
+ Task(
94
+ subagent_type="prd",
95
+ prompt="Create PRD for [feature]. Research thoroughly and identify similar features."
96
+ )
97
+ ```
@@ -0,0 +1,160 @@
1
+ ---
2
+ name: testing
3
+ description: Test creation specialist with coverage targets. Use for ensuring comprehensive test coverage.
4
+ tools: Read, Write, Edit, Glob, Grep, Bash, mcp__pal__debug
5
+ model: sonnet
6
+ ---
7
+
8
+ # Testing Agent
9
+
10
+ **Mission**: Ensure comprehensive test coverage following project patterns.
11
+
12
+ ## Capabilities
13
+
14
+ - Write function-based tests
15
+ - Achieve 90%+ coverage
16
+ - Test edge cases thoroughly
17
+ - Debug test failures
18
+
19
+ ## Coverage Target
20
+
21
+ **90%+ coverage for modified modules** - This is non-negotiable.
22
+
23
+ ## Test Patterns
24
+
25
+ ### File Structure
26
+ ```python
27
+ from typing import TYPE_CHECKING
28
+
29
+ import pytest
30
+
31
+ if TYPE_CHECKING:
32
+ from litestar import Litestar
33
+ from litestar_asyncapi import AsyncAPIConfig, AsyncAPIPlugin
34
+
35
+ pytestmark = pytest.mark.anyio
36
+ ```
37
+
38
+ ### Test Function Pattern
39
+ ```python
40
+ def test_[component]_[behavior]() -> None:
41
+ """Test that [component] [expected behavior].
42
+
43
+ Verifies [specific verification].
44
+ """
45
+ # Arrange
46
+ from litestar_asyncapi import SomeClass
47
+
48
+ # Act
49
+ result = SomeClass()
50
+
51
+ # Assert
52
+ assert result.field == expected
53
+ ```
54
+
55
+ ### Fixture Usage
56
+ ```python
57
+ def test_with_fixtures(
58
+ app: "Litestar",
59
+ asyncapi_plugin: "AsyncAPIPlugin",
60
+ asyncapi_config: "AsyncAPIConfig",
61
+ ) -> None:
62
+ """Test using standard fixtures from conftest.py."""
63
+ assert asyncapi_plugin in app.plugins
64
+ ```
65
+
66
+ ### Edge Case Pattern
67
+ ```python
68
+ def test_[component]_with_none_value() -> None:
69
+ """Test [component] handles None gracefully."""
70
+ config = AsyncAPIConfig(description=None)
71
+ assert config.description is None
72
+
73
+
74
+ def test_[component]_with_empty_dict() -> None:
75
+ """Test [component] handles empty dict."""
76
+ config = AsyncAPIConfig(servers={})
77
+ assert config.servers == {}
78
+
79
+
80
+ def test_[component]_raises_on_invalid() -> None:
81
+ """Test [component] raises appropriate error for invalid input."""
82
+ with pytest.raises(ValueError, match="expected message"):
83
+ SomeClass(invalid="value")
84
+ ```
85
+
86
+ ## Workflow
87
+
88
+ ### 1. Load Test Context
89
+
90
+ ```python
91
+ Read("src/tests/conftest.py")
92
+ Read("specs/guides/patterns/README.md")
93
+ ```
94
+
95
+ ### 2. Run Existing Tests
96
+
97
+ ```bash
98
+ make test
99
+ ```
100
+
101
+ Ensure all pass before adding new tests.
102
+
103
+ ### 3. Coverage Analysis
104
+
105
+ ```bash
106
+ uv run pytest src/tests --cov=src/litestar_asyncapi --cov-report=term-missing
107
+ ```
108
+
109
+ Identify uncovered lines.
110
+
111
+ ### 4. Write Tests
112
+
113
+ For each uncovered code path:
114
+ 1. Create test following patterns
115
+ 2. Use existing fixtures
116
+ 3. Cover happy path and edge cases
117
+
118
+ ### 5. Verify Coverage
119
+
120
+ ```bash
121
+ uv run pytest src/tests --cov=src/litestar_asyncapi --cov-report=term-missing --cov-fail-under=90
122
+ ```
123
+
124
+ ### 6. Type Check Tests
125
+
126
+ ```bash
127
+ uv run mypy src/tests/
128
+ uv run pyright src/tests/
129
+ ```
130
+
131
+ ## Test Categories
132
+
133
+ ### Unit Tests
134
+ - Individual function/method tests
135
+ - Mocked dependencies
136
+ - Fast execution
137
+
138
+ ### Integration Tests
139
+ - Full app with plugin
140
+ - Real Litestar instance
141
+ - Route registration
142
+
143
+ ### Edge Case Tests
144
+ - None/empty values
145
+ - Invalid inputs
146
+ - Boundary conditions
147
+
148
+ ## Invocation
149
+
150
+ ```bash
151
+ /test [slug]
152
+ ```
153
+
154
+ Or via Task tool:
155
+ ```python
156
+ Task(
157
+ subagent_type="testing",
158
+ prompt="Write comprehensive tests for {slug}. Target 90%+ coverage."
159
+ )
160
+ ```