oh-my-customcode 0.1.2 → 0.1.4
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.
- package/README.md +45 -32
- package/dist/cli/index.js +12 -20
- package/dist/index.js +3 -3
- package/package.json +2 -2
- package/templates/.claude/rules/MUST-orchestrator-coordination.md +68 -0
- package/templates/.claude/rules/MUST-parallel-execution.md +66 -9
- package/templates/.claude/rules/MUST-tool-identification.md +79 -17
- package/templates/.claude/rules/SHOULD-hud-statusline.md +8 -1
- package/templates/agents/index.yaml +6 -0
- package/templates/agents/infra-engineer/aws-expert/refs/aws/common-patterns.md +169 -0
- package/templates/agents/infra-engineer/aws-expert/refs/aws/index.yaml +26 -0
- package/templates/agents/infra-engineer/aws-expert/refs/aws/well-architected.md +143 -0
- package/templates/agents/infra-engineer/aws-expert/refs/aws-best-practices/SKILL.md +279 -0
- package/templates/agents/infra-engineer/aws-expert/refs/aws-best-practices/index.yaml +27 -0
- package/templates/agents/infra-engineer/docker-expert/refs/docker/compose-best-practices.md +284 -0
- package/templates/agents/infra-engineer/docker-expert/refs/docker/dockerfile-best-practices.md +262 -0
- package/templates/agents/infra-engineer/docker-expert/refs/docker/index.yaml +26 -0
- package/templates/agents/infra-engineer/docker-expert/refs/docker-best-practices/SKILL.md +274 -0
- package/templates/agents/infra-engineer/docker-expert/refs/docker-best-practices/index.yaml +26 -0
- package/templates/agents/manager/creator/refs/rules/MAY-optimization.md +93 -0
- package/templates/agents/manager/creator/refs/rules/MUST-agent-design.md +107 -0
- package/templates/agents/manager/creator/refs/rules/MUST-agent-identification.md +108 -0
- package/templates/agents/manager/creator/refs/rules/MUST-continuous-improvement.md +132 -0
- package/templates/agents/manager/creator/refs/rules/MUST-intent-transparency.md +199 -0
- package/templates/agents/manager/creator/refs/rules/MUST-language-policy.md +62 -0
- package/templates/agents/manager/creator/refs/rules/MUST-orchestrator-coordination.md +334 -0
- package/templates/agents/manager/creator/refs/rules/MUST-parallel-execution.md +398 -0
- package/templates/agents/manager/creator/refs/rules/MUST-permissions.md +84 -0
- package/templates/agents/manager/creator/refs/rules/MUST-safety.md +69 -0
- package/templates/agents/manager/creator/refs/rules/MUST-sync-verification.md +219 -0
- package/templates/agents/manager/creator/refs/rules/MUST-tool-identification.md +174 -0
- package/templates/agents/manager/creator/refs/rules/SHOULD-ecomode.md +145 -0
- package/templates/agents/manager/creator/refs/rules/SHOULD-error-handling.md +102 -0
- package/templates/agents/manager/creator/refs/rules/SHOULD-hud-statusline.md +96 -0
- package/templates/agents/manager/creator/refs/rules/SHOULD-interaction.md +103 -0
- package/templates/agents/manager/creator/refs/rules/SHOULD-memory-integration.md +114 -0
- package/templates/agents/manager/creator/refs/rules/SHOULD-pipeline-mode.md +165 -0
- package/templates/agents/manager/creator/refs/rules/index.yaml +125 -0
- package/templates/agents/manager/supplier/refs/guides/aws/common-patterns.md +169 -0
- package/templates/agents/manager/supplier/refs/guides/aws/index.yaml +26 -0
- package/templates/agents/manager/supplier/refs/guides/aws/well-architected.md +143 -0
- package/templates/agents/manager/supplier/refs/guides/claude-code/01-overview.md +42 -0
- package/templates/agents/manager/supplier/refs/guides/claude-code/03-tools.md +107 -0
- package/templates/agents/manager/supplier/refs/guides/claude-code/04-agent-skills.md +90 -0
- package/templates/agents/manager/supplier/refs/guides/claude-code/05-agent-sdk.md +129 -0
- package/templates/agents/manager/supplier/refs/guides/claude-code/06-mcp.md +165 -0
- package/templates/agents/manager/supplier/refs/guides/claude-code/07-prompt-engineering.md +100 -0
- package/templates/agents/manager/supplier/refs/guides/claude-code/08-testing.md +58 -0
- package/templates/agents/manager/supplier/refs/guides/claude-code/09-guardrails.md +80 -0
- package/templates/agents/manager/supplier/refs/guides/claude-code/10-monitoring.md +89 -0
- package/templates/agents/manager/supplier/refs/guides/claude-code/11-sub-agents.md +159 -0
- package/templates/agents/manager/supplier/refs/guides/claude-code/index.yaml +51 -0
- package/templates/agents/manager/supplier/refs/guides/docker/compose-best-practices.md +284 -0
- package/templates/agents/manager/supplier/refs/guides/docker/dockerfile-best-practices.md +262 -0
- package/templates/agents/manager/supplier/refs/guides/docker/index.yaml +26 -0
- package/templates/agents/manager/supplier/refs/guides/fastapi/best-practices.md +232 -0
- package/templates/agents/manager/supplier/refs/guides/fastapi/index.yaml +21 -0
- package/templates/agents/manager/supplier/refs/guides/go-backend/index.yaml +26 -0
- package/templates/agents/manager/supplier/refs/guides/go-backend/project-layout.md +243 -0
- package/templates/agents/manager/supplier/refs/guides/go-backend/uber-style.md +212 -0
- package/templates/agents/manager/supplier/refs/guides/golang/concurrency.md +282 -0
- package/templates/agents/manager/supplier/refs/guides/golang/effective-go.md +309 -0
- package/templates/agents/manager/supplier/refs/guides/golang/error-handling.md +250 -0
- package/templates/agents/manager/supplier/refs/guides/golang/index.yaml +27 -0
- package/templates/agents/manager/supplier/refs/guides/index.yaml +101 -0
- package/templates/agents/manager/supplier/refs/guides/kotlin/coding-conventions.md +247 -0
- package/templates/agents/manager/supplier/refs/guides/kotlin/idioms.md +234 -0
- package/templates/agents/manager/supplier/refs/guides/kotlin/index.yaml +26 -0
- package/templates/agents/manager/supplier/refs/guides/python/index.yaml +26 -0
- package/templates/agents/manager/supplier/refs/guides/python/pep8-style-guide.md +202 -0
- package/templates/agents/manager/supplier/refs/guides/python/zen-of-python.md +79 -0
- package/templates/agents/manager/supplier/refs/guides/rust/error-handling.md +262 -0
- package/templates/agents/manager/supplier/refs/guides/rust/index.yaml +26 -0
- package/templates/agents/manager/supplier/refs/guides/rust/ownership.md +180 -0
- package/templates/agents/manager/supplier/refs/guides/springboot/best-practices.md +361 -0
- package/templates/agents/manager/supplier/refs/guides/springboot/index.yaml +22 -0
- package/templates/agents/manager/supplier/refs/guides/typescript/advanced-types.md +225 -0
- package/templates/agents/manager/supplier/refs/guides/typescript/index.yaml +26 -0
- package/templates/agents/manager/supplier/refs/guides/typescript/type-system.md +219 -0
- package/templates/agents/manager/supplier/refs/guides/web-design/accessibility.md +66 -0
- package/templates/agents/manager/supplier/refs/guides/web-design/index.yaml +20 -0
- package/templates/agents/manager/supplier/refs/guides/web-design/performance.md +102 -0
- package/templates/agents/manager/supplier/refs/rules/MAY-optimization.md +93 -0
- package/templates/agents/manager/supplier/refs/rules/MUST-agent-design.md +107 -0
- package/templates/agents/manager/supplier/refs/rules/MUST-agent-identification.md +108 -0
- package/templates/agents/manager/supplier/refs/rules/MUST-continuous-improvement.md +132 -0
- package/templates/agents/manager/supplier/refs/rules/MUST-intent-transparency.md +199 -0
- package/templates/agents/manager/supplier/refs/rules/MUST-language-policy.md +62 -0
- package/templates/agents/manager/supplier/refs/rules/MUST-orchestrator-coordination.md +334 -0
- package/templates/agents/manager/supplier/refs/rules/MUST-parallel-execution.md +398 -0
- package/templates/agents/manager/supplier/refs/rules/MUST-permissions.md +84 -0
- package/templates/agents/manager/supplier/refs/rules/MUST-safety.md +69 -0
- package/templates/agents/manager/supplier/refs/rules/MUST-sync-verification.md +219 -0
- package/templates/agents/manager/supplier/refs/rules/MUST-tool-identification.md +174 -0
- package/templates/agents/manager/supplier/refs/rules/SHOULD-ecomode.md +145 -0
- package/templates/agents/manager/supplier/refs/rules/SHOULD-error-handling.md +102 -0
- package/templates/agents/manager/supplier/refs/rules/SHOULD-hud-statusline.md +96 -0
- package/templates/agents/manager/supplier/refs/rules/SHOULD-interaction.md +103 -0
- package/templates/agents/manager/supplier/refs/rules/SHOULD-memory-integration.md +114 -0
- package/templates/agents/manager/supplier/refs/rules/SHOULD-pipeline-mode.md +165 -0
- package/templates/agents/manager/supplier/refs/rules/index.yaml +125 -0
- package/templates/agents/manager/supplier/refs/skills/backend/fastapi-best-practices/SKILL.md +269 -0
- package/templates/agents/manager/supplier/refs/skills/backend/fastapi-best-practices/index.yaml +25 -0
- package/templates/agents/manager/supplier/refs/skills/backend/go-backend-best-practices/SKILL.md +337 -0
- package/templates/agents/manager/supplier/refs/skills/backend/go-backend-best-practices/index.yaml +26 -0
- package/templates/agents/manager/supplier/refs/skills/backend/springboot-best-practices/SKILL.md +356 -0
- package/templates/agents/manager/supplier/refs/skills/backend/springboot-best-practices/index.yaml +27 -0
- package/templates/agents/manager/supplier/refs/skills/development/go-best-practices/SKILL.md +202 -0
- package/templates/agents/manager/supplier/refs/skills/development/go-best-practices/index.yaml +25 -0
- package/templates/agents/manager/supplier/refs/skills/development/kotlin-best-practices/SKILL.md +255 -0
- package/templates/agents/manager/supplier/refs/skills/development/kotlin-best-practices/index.yaml +27 -0
- package/templates/agents/manager/supplier/refs/skills/development/python-best-practices/SKILL.md +221 -0
- package/templates/agents/manager/supplier/refs/skills/development/python-best-practices/index.yaml +25 -0
- package/templates/agents/manager/supplier/refs/skills/development/react-best-practices/SKILL.md +100 -0
- package/templates/agents/manager/supplier/refs/skills/development/react-best-practices/index.yaml +39 -0
- package/templates/agents/manager/supplier/refs/skills/development/rust-best-practices/SKILL.md +266 -0
- package/templates/agents/manager/supplier/refs/skills/development/rust-best-practices/index.yaml +26 -0
- package/templates/agents/manager/supplier/refs/skills/development/typescript-best-practices/SKILL.md +320 -0
- package/templates/agents/manager/supplier/refs/skills/development/typescript-best-practices/index.yaml +28 -0
- package/templates/agents/manager/supplier/refs/skills/development/vercel-deploy/SKILL.md +73 -0
- package/templates/agents/manager/supplier/refs/skills/development/vercel-deploy/index.yaml +30 -0
- package/templates/agents/manager/supplier/refs/skills/development/web-design-guidelines/SKILL.md +117 -0
- package/templates/agents/manager/supplier/refs/skills/development/web-design-guidelines/index.yaml +34 -0
- package/templates/agents/manager/supplier/refs/skills/index.yaml +129 -0
- package/templates/agents/manager/supplier/refs/skills/infrastructure/aws-best-practices/SKILL.md +279 -0
- package/templates/agents/manager/supplier/refs/skills/infrastructure/aws-best-practices/index.yaml +27 -0
- package/templates/agents/manager/supplier/refs/skills/infrastructure/docker-best-practices/SKILL.md +274 -0
- package/templates/agents/manager/supplier/refs/skills/infrastructure/docker-best-practices/index.yaml +26 -0
- package/templates/agents/manager/supplier/refs/skills/orchestration/intent-detection/SKILL.md +214 -0
- package/templates/agents/manager/supplier/refs/skills/orchestration/intent-detection/index.yaml +30 -0
- package/templates/agents/manager/supplier/refs/skills/orchestration/intent-detection/patterns/agent-triggers.yaml +342 -0
- package/templates/agents/manager/supplier/refs/skills/orchestration/pipeline-execution/SKILL.md +188 -0
- package/templates/agents/manager/supplier/refs/skills/orchestration/pipeline-execution/index.yaml +27 -0
- package/templates/agents/manager/supplier/refs/skills/system/memory-management/SKILL.md +194 -0
- package/templates/agents/manager/supplier/refs/skills/system/memory-management/index.yaml +30 -0
- package/templates/agents/manager/supplier/refs/skills/system/result-aggregation/SKILL.md +163 -0
- package/templates/agents/manager/supplier/refs/skills/system/result-aggregation/index.yaml +36 -0
- package/templates/agents/manager/updater/refs/rules/MAY-optimization.md +93 -0
- package/templates/agents/manager/updater/refs/rules/MUST-agent-design.md +107 -0
- package/templates/agents/manager/updater/refs/rules/MUST-agent-identification.md +108 -0
- package/templates/agents/manager/updater/refs/rules/MUST-continuous-improvement.md +132 -0
- package/templates/agents/manager/updater/refs/rules/MUST-intent-transparency.md +199 -0
- package/templates/agents/manager/updater/refs/rules/MUST-language-policy.md +62 -0
- package/templates/agents/manager/updater/refs/rules/MUST-orchestrator-coordination.md +334 -0
- package/templates/agents/manager/updater/refs/rules/MUST-parallel-execution.md +398 -0
- package/templates/agents/manager/updater/refs/rules/MUST-permissions.md +84 -0
- package/templates/agents/manager/updater/refs/rules/MUST-safety.md +69 -0
- package/templates/agents/manager/updater/refs/rules/MUST-sync-verification.md +219 -0
- package/templates/agents/manager/updater/refs/rules/MUST-tool-identification.md +174 -0
- package/templates/agents/manager/updater/refs/rules/SHOULD-ecomode.md +145 -0
- package/templates/agents/manager/updater/refs/rules/SHOULD-error-handling.md +102 -0
- package/templates/agents/manager/updater/refs/rules/SHOULD-hud-statusline.md +96 -0
- package/templates/agents/manager/updater/refs/rules/SHOULD-interaction.md +103 -0
- package/templates/agents/manager/updater/refs/rules/SHOULD-memory-integration.md +114 -0
- package/templates/agents/manager/updater/refs/rules/SHOULD-pipeline-mode.md +165 -0
- package/templates/agents/manager/updater/refs/rules/index.yaml +125 -0
- package/templates/agents/orchestrator/dev-lead/AGENT.md +47 -0
- package/templates/agents/orchestrator/secretary/AGENT.md +49 -0
- package/templates/agents/orchestrator/secretary/refs/rules/MAY-optimization.md +93 -0
- package/templates/agents/orchestrator/secretary/refs/rules/MUST-agent-design.md +107 -0
- package/templates/agents/orchestrator/secretary/refs/rules/MUST-agent-identification.md +108 -0
- package/templates/agents/orchestrator/secretary/refs/rules/MUST-continuous-improvement.md +132 -0
- package/templates/agents/orchestrator/secretary/refs/rules/MUST-intent-transparency.md +199 -0
- package/templates/agents/orchestrator/secretary/refs/rules/MUST-language-policy.md +62 -0
- package/templates/agents/orchestrator/secretary/refs/rules/MUST-orchestrator-coordination.md +334 -0
- package/templates/agents/orchestrator/secretary/refs/rules/MUST-parallel-execution.md +398 -0
- package/templates/agents/orchestrator/secretary/refs/rules/MUST-permissions.md +84 -0
- package/templates/agents/orchestrator/secretary/refs/rules/MUST-safety.md +69 -0
- package/templates/agents/orchestrator/secretary/refs/rules/MUST-sync-verification.md +219 -0
- package/templates/agents/orchestrator/secretary/refs/rules/MUST-tool-identification.md +174 -0
- package/templates/agents/orchestrator/secretary/refs/rules/SHOULD-ecomode.md +145 -0
- package/templates/agents/orchestrator/secretary/refs/rules/SHOULD-error-handling.md +102 -0
- package/templates/agents/orchestrator/secretary/refs/rules/SHOULD-hud-statusline.md +96 -0
- package/templates/agents/orchestrator/secretary/refs/rules/SHOULD-interaction.md +103 -0
- package/templates/agents/orchestrator/secretary/refs/rules/SHOULD-memory-integration.md +114 -0
- package/templates/agents/orchestrator/secretary/refs/rules/SHOULD-pipeline-mode.md +165 -0
- package/templates/agents/orchestrator/secretary/refs/rules/index.yaml +125 -0
- package/templates/agents/sw-engineer/backend/fastapi-expert/refs/fastapi/best-practices.md +232 -0
- package/templates/agents/sw-engineer/backend/fastapi-expert/refs/fastapi/index.yaml +21 -0
- package/templates/agents/sw-engineer/backend/fastapi-expert/refs/fastapi-best-practices/SKILL.md +269 -0
- package/templates/agents/sw-engineer/backend/fastapi-expert/refs/fastapi-best-practices/index.yaml +25 -0
- package/templates/agents/sw-engineer/backend/go-backend-expert/refs/go-backend/index.yaml +26 -0
- package/templates/agents/sw-engineer/backend/go-backend-expert/refs/go-backend/project-layout.md +243 -0
- package/templates/agents/sw-engineer/backend/go-backend-expert/refs/go-backend/uber-style.md +212 -0
- package/templates/agents/sw-engineer/backend/go-backend-expert/refs/go-backend-best-practices/SKILL.md +337 -0
- package/templates/agents/sw-engineer/backend/go-backend-expert/refs/go-backend-best-practices/index.yaml +26 -0
- package/templates/agents/sw-engineer/backend/springboot-expert/refs/springboot/best-practices.md +361 -0
- package/templates/agents/sw-engineer/backend/springboot-expert/refs/springboot/index.yaml +22 -0
- package/templates/agents/sw-engineer/backend/springboot-expert/refs/springboot-best-practices/SKILL.md +356 -0
- package/templates/agents/sw-engineer/backend/springboot-expert/refs/springboot-best-practices/index.yaml +27 -0
- package/templates/agents/sw-engineer/frontend/vercel-agent/refs/react-best-practices/SKILL.md +100 -0
- package/templates/agents/sw-engineer/frontend/vercel-agent/refs/react-best-practices/index.yaml +39 -0
- package/templates/agents/sw-engineer/frontend/vercel-agent/refs/vercel-deploy/SKILL.md +73 -0
- package/templates/agents/sw-engineer/frontend/vercel-agent/refs/vercel-deploy/index.yaml +30 -0
- package/templates/agents/sw-engineer/frontend/vercel-agent/refs/web-design/accessibility.md +66 -0
- package/templates/agents/sw-engineer/frontend/vercel-agent/refs/web-design/index.yaml +20 -0
- package/templates/agents/sw-engineer/frontend/vercel-agent/refs/web-design/performance.md +102 -0
- package/templates/agents/sw-engineer/frontend/vercel-agent/refs/web-design-guidelines/SKILL.md +117 -0
- package/templates/agents/sw-engineer/frontend/vercel-agent/refs/web-design-guidelines/index.yaml +34 -0
- package/templates/agents/sw-engineer/language/golang-expert/refs/go-best-practices/SKILL.md +202 -0
- package/templates/agents/sw-engineer/language/golang-expert/refs/go-best-practices/index.yaml +25 -0
- package/templates/agents/sw-engineer/language/golang-expert/refs/golang/concurrency.md +282 -0
- package/templates/agents/sw-engineer/language/golang-expert/refs/golang/effective-go.md +309 -0
- package/templates/agents/sw-engineer/language/golang-expert/refs/golang/error-handling.md +250 -0
- package/templates/agents/sw-engineer/language/golang-expert/refs/golang/index.yaml +27 -0
- package/templates/agents/sw-engineer/language/kotlin-expert/refs/kotlin/coding-conventions.md +247 -0
- package/templates/agents/sw-engineer/language/kotlin-expert/refs/kotlin/idioms.md +234 -0
- package/templates/agents/sw-engineer/language/kotlin-expert/refs/kotlin/index.yaml +26 -0
- package/templates/agents/sw-engineer/language/kotlin-expert/refs/kotlin-best-practices/SKILL.md +255 -0
- package/templates/agents/sw-engineer/language/kotlin-expert/refs/kotlin-best-practices/index.yaml +27 -0
- package/templates/agents/sw-engineer/language/python-expert/refs/python/index.yaml +26 -0
- package/templates/agents/sw-engineer/language/python-expert/refs/python/pep8-style-guide.md +202 -0
- package/templates/agents/sw-engineer/language/python-expert/refs/python/zen-of-python.md +79 -0
- package/templates/agents/sw-engineer/language/python-expert/refs/python-best-practices/SKILL.md +221 -0
- package/templates/agents/sw-engineer/language/python-expert/refs/python-best-practices/index.yaml +25 -0
- package/templates/agents/sw-engineer/language/rust-expert/refs/rust/error-handling.md +262 -0
- package/templates/agents/sw-engineer/language/rust-expert/refs/rust/index.yaml +26 -0
- package/templates/agents/sw-engineer/language/rust-expert/refs/rust/ownership.md +180 -0
- package/templates/agents/sw-engineer/language/rust-expert/refs/rust-best-practices/SKILL.md +266 -0
- package/templates/agents/sw-engineer/language/rust-expert/refs/rust-best-practices/index.yaml +26 -0
- package/templates/agents/sw-engineer/language/typescript-expert/refs/typescript/advanced-types.md +225 -0
- package/templates/agents/sw-engineer/language/typescript-expert/refs/typescript/index.yaml +26 -0
- package/templates/agents/sw-engineer/language/typescript-expert/refs/typescript/type-system.md +219 -0
- package/templates/agents/sw-engineer/language/typescript-expert/refs/typescript-best-practices/SKILL.md +320 -0
- package/templates/agents/sw-engineer/language/typescript-expert/refs/typescript-best-practices/index.yaml +28 -0
- package/templates/agents/tutor/go-tutor/AGENT.md +130 -0
- package/templates/agents/tutor/go-tutor/index.yaml +48 -0
- package/templates/examples/code-review.yaml +66 -0
- package/templates/guides/claude-code/11-sub-agents.md +159 -0
- package/templates/index.yaml +18 -0
- package/templates/manifest.json +55 -0
- package/templates/skills/orchestration/intent-detection/patterns/agent-triggers.yaml +9 -0
- package/templates/templates/pipeline-template.yaml +50 -0
|
@@ -0,0 +1,234 @@
|
|
|
1
|
+
# Kotlin Idioms
|
|
2
|
+
|
|
3
|
+
> Source: https://kotlinlang.org/docs/idioms.html
|
|
4
|
+
|
|
5
|
+
## Data Classes
|
|
6
|
+
|
|
7
|
+
```kotlin
|
|
8
|
+
data class Customer(val name: String, val email: String)
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
Provides:
|
|
12
|
+
- `equals()` / `hashCode()`
|
|
13
|
+
- `toString()`: `"Customer(name=John, email=john@example.com)"`
|
|
14
|
+
- `copy()` function
|
|
15
|
+
- `componentN()` functions
|
|
16
|
+
|
|
17
|
+
## Default Parameter Values
|
|
18
|
+
|
|
19
|
+
```kotlin
|
|
20
|
+
fun foo(a: Int = 0, b: String = "") { }
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Filtering Collections
|
|
24
|
+
|
|
25
|
+
```kotlin
|
|
26
|
+
val positives = list.filter { it > 0 }
|
|
27
|
+
|
|
28
|
+
// or with explicit type
|
|
29
|
+
val positives = list.filter { x -> x > 0 }
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## Checking Element Presence
|
|
33
|
+
|
|
34
|
+
```kotlin
|
|
35
|
+
if ("john@example.com" in emailsList) { }
|
|
36
|
+
if ("jane@example.com" !in emailsList) { }
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## String Interpolation
|
|
40
|
+
|
|
41
|
+
```kotlin
|
|
42
|
+
println("Name: $name")
|
|
43
|
+
println("Age: ${person.age}")
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
## Instance Checks
|
|
47
|
+
|
|
48
|
+
```kotlin
|
|
49
|
+
when (x) {
|
|
50
|
+
is Foo -> ...
|
|
51
|
+
is Bar -> ...
|
|
52
|
+
else -> ...
|
|
53
|
+
}
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
## Read-only Collections
|
|
57
|
+
|
|
58
|
+
```kotlin
|
|
59
|
+
val list = listOf("a", "b", "c")
|
|
60
|
+
val map = mapOf("a" to 1, "b" to 2, "c" to 3)
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
## Accessing Maps
|
|
64
|
+
|
|
65
|
+
```kotlin
|
|
66
|
+
val map = mapOf("a" to 1)
|
|
67
|
+
println(map["a"]) // prints 1
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
## Traversing Maps
|
|
71
|
+
|
|
72
|
+
```kotlin
|
|
73
|
+
for ((k, v) in map) {
|
|
74
|
+
println("$k -> $v")
|
|
75
|
+
}
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
## Ranges
|
|
79
|
+
|
|
80
|
+
```kotlin
|
|
81
|
+
for (i in 1..100) { } // closed range: 1 to 100
|
|
82
|
+
for (i in 1..<100) { } // half-open: 1 to 99
|
|
83
|
+
for (i in 2..10 step 2) { }
|
|
84
|
+
for (i in 10 downTo 1) { }
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
## Lazy Property
|
|
88
|
+
|
|
89
|
+
```kotlin
|
|
90
|
+
val p: String by lazy {
|
|
91
|
+
// compute the string
|
|
92
|
+
}
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
## Extension Functions
|
|
96
|
+
|
|
97
|
+
```kotlin
|
|
98
|
+
fun String.spaceToCamelCase() { }
|
|
99
|
+
"Convert this to camelcase".spaceToCamelCase()
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
## Singleton
|
|
103
|
+
|
|
104
|
+
```kotlin
|
|
105
|
+
object Resource {
|
|
106
|
+
val name = "Name"
|
|
107
|
+
}
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
## Instantiate Abstract Class
|
|
111
|
+
|
|
112
|
+
```kotlin
|
|
113
|
+
abstract class MyAbstractClass {
|
|
114
|
+
abstract fun doSomething()
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
val myObject = object : MyAbstractClass() {
|
|
118
|
+
override fun doSomething() { }
|
|
119
|
+
}
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
## if-not-null Shorthand
|
|
123
|
+
|
|
124
|
+
```kotlin
|
|
125
|
+
// Simple
|
|
126
|
+
val length = files?.size
|
|
127
|
+
|
|
128
|
+
// With else
|
|
129
|
+
val length = files?.size ?: 0
|
|
130
|
+
|
|
131
|
+
// With let
|
|
132
|
+
files?.let {
|
|
133
|
+
println(it.size)
|
|
134
|
+
}
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
## Return on when
|
|
138
|
+
|
|
139
|
+
```kotlin
|
|
140
|
+
fun transform(color: String): Int {
|
|
141
|
+
return when (color) {
|
|
142
|
+
"Red" -> 0
|
|
143
|
+
"Green" -> 1
|
|
144
|
+
"Blue" -> 2
|
|
145
|
+
else -> throw IllegalArgumentException("Invalid color")
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
## try-catch Expression
|
|
151
|
+
|
|
152
|
+
```kotlin
|
|
153
|
+
val result = try {
|
|
154
|
+
count()
|
|
155
|
+
} catch (e: ArithmeticException) {
|
|
156
|
+
throw IllegalStateException(e)
|
|
157
|
+
}
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
## if Expression
|
|
161
|
+
|
|
162
|
+
```kotlin
|
|
163
|
+
val y = if (x == 1) {
|
|
164
|
+
"one"
|
|
165
|
+
} else if (x == 2) {
|
|
166
|
+
"two"
|
|
167
|
+
} else {
|
|
168
|
+
"other"
|
|
169
|
+
}
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
## Builder-style Usage
|
|
173
|
+
|
|
174
|
+
```kotlin
|
|
175
|
+
fun arrayOfMinusOnes(size: Int): IntArray {
|
|
176
|
+
return IntArray(size).apply { fill(-1) }
|
|
177
|
+
}
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
## Single-expression Functions
|
|
181
|
+
|
|
182
|
+
```kotlin
|
|
183
|
+
fun theAnswer() = 42
|
|
184
|
+
|
|
185
|
+
// equivalent to
|
|
186
|
+
fun theAnswer(): Int {
|
|
187
|
+
return 42
|
|
188
|
+
}
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
## Call Multiple Methods (with)
|
|
192
|
+
|
|
193
|
+
```kotlin
|
|
194
|
+
class Turtle {
|
|
195
|
+
fun penDown()
|
|
196
|
+
fun penUp()
|
|
197
|
+
fun turn(degrees: Double)
|
|
198
|
+
fun forward(pixels: Double)
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
val myTurtle = Turtle()
|
|
202
|
+
with(myTurtle) {
|
|
203
|
+
penDown()
|
|
204
|
+
for (i in 1..4) {
|
|
205
|
+
forward(100.0)
|
|
206
|
+
turn(90.0)
|
|
207
|
+
}
|
|
208
|
+
penUp()
|
|
209
|
+
}
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
## Configure Object (apply)
|
|
213
|
+
|
|
214
|
+
```kotlin
|
|
215
|
+
val myRectangle = Rectangle().apply {
|
|
216
|
+
length = 4
|
|
217
|
+
breadth = 5
|
|
218
|
+
color = 0xFAFAFA
|
|
219
|
+
}
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
## Swap Variables
|
|
223
|
+
|
|
224
|
+
```kotlin
|
|
225
|
+
var a = 1
|
|
226
|
+
var b = 2
|
|
227
|
+
a = b.also { b = a }
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
## TODO: Marking Incomplete
|
|
231
|
+
|
|
232
|
+
```kotlin
|
|
233
|
+
fun calcTaxes(): BigDecimal = TODO("Waiting for feedback from accounting")
|
|
234
|
+
```
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# Kotlin Guide
|
|
2
|
+
|
|
3
|
+
metadata:
|
|
4
|
+
name: kotlin
|
|
5
|
+
description: Kotlin language reference documentation
|
|
6
|
+
|
|
7
|
+
source:
|
|
8
|
+
type: external
|
|
9
|
+
origin: kotlinlang.org
|
|
10
|
+
urls:
|
|
11
|
+
- https://kotlinlang.org/docs/coding-conventions.html
|
|
12
|
+
- https://kotlinlang.org/docs/idioms.html
|
|
13
|
+
- https://developer.android.com/kotlin/style-guide
|
|
14
|
+
last_fetched: "2026-01-22"
|
|
15
|
+
|
|
16
|
+
documents:
|
|
17
|
+
- name: coding-conventions
|
|
18
|
+
path: ./coding-conventions.md
|
|
19
|
+
description: Official Kotlin coding conventions
|
|
20
|
+
|
|
21
|
+
- name: idioms
|
|
22
|
+
path: ./idioms.md
|
|
23
|
+
description: Idiomatic Kotlin patterns
|
|
24
|
+
|
|
25
|
+
used_by:
|
|
26
|
+
- kotlin-expert
|
package/templates/agents/sw-engineer/language/kotlin-expert/refs/kotlin-best-practices/SKILL.md
ADDED
|
@@ -0,0 +1,255 @@
|
|
|
1
|
+
# Kotlin Best Practices Skill
|
|
2
|
+
|
|
3
|
+
> **Category**: Development
|
|
4
|
+
> **Source**: Internal (based on Kotlin Coding Conventions)
|
|
5
|
+
|
|
6
|
+
## Purpose
|
|
7
|
+
|
|
8
|
+
Apply idiomatic Kotlin patterns and best practices from official JetBrains documentation.
|
|
9
|
+
|
|
10
|
+
## Core Principles
|
|
11
|
+
|
|
12
|
+
```
|
|
13
|
+
Concise yet readable
|
|
14
|
+
Null safety by design
|
|
15
|
+
Interoperability with Java
|
|
16
|
+
Functional when appropriate
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Rules
|
|
20
|
+
|
|
21
|
+
### 1. Naming Conventions
|
|
22
|
+
|
|
23
|
+
```yaml
|
|
24
|
+
packages:
|
|
25
|
+
style: lowercase, no underscores
|
|
26
|
+
example: org.example.project
|
|
27
|
+
|
|
28
|
+
classes_objects:
|
|
29
|
+
style: UpperCamelCase
|
|
30
|
+
example: DeclarationProcessor
|
|
31
|
+
|
|
32
|
+
functions_variables:
|
|
33
|
+
style: lowerCamelCase
|
|
34
|
+
example: processDeclarations, declarationCount
|
|
35
|
+
|
|
36
|
+
constants:
|
|
37
|
+
style: SCREAMING_SNAKE_CASE
|
|
38
|
+
example: const val MAX_COUNT = 8
|
|
39
|
+
|
|
40
|
+
backing_properties:
|
|
41
|
+
style: underscore prefix
|
|
42
|
+
example: private val _elementList
|
|
43
|
+
|
|
44
|
+
acronyms:
|
|
45
|
+
two_letters: both uppercase (IOStream)
|
|
46
|
+
three_plus: capitalize first only (XmlFormatter)
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
### 2. Source File Organization
|
|
50
|
+
|
|
51
|
+
```yaml
|
|
52
|
+
file_naming:
|
|
53
|
+
single_class: name after the class (MyClass.kt)
|
|
54
|
+
multiple_classes: descriptive UpperCamelCase (ProcessDeclarations.kt)
|
|
55
|
+
platform_specific: add suffix (Platform.jvm.kt)
|
|
56
|
+
|
|
57
|
+
class_layout:
|
|
58
|
+
1: Property declarations and initializer blocks
|
|
59
|
+
2: Secondary constructors
|
|
60
|
+
3: Method declarations
|
|
61
|
+
4: Companion object
|
|
62
|
+
|
|
63
|
+
directory_structure:
|
|
64
|
+
- Follow package structure with common root omitted
|
|
65
|
+
- Example: org.example.kotlin.network → network/
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
### 3. Formatting
|
|
69
|
+
|
|
70
|
+
```yaml
|
|
71
|
+
indentation:
|
|
72
|
+
- 4 spaces (no tabs)
|
|
73
|
+
- Opening brace at end of line
|
|
74
|
+
- Closing brace on separate line
|
|
75
|
+
|
|
76
|
+
horizontal_whitespace:
|
|
77
|
+
around_binary_operators: "a + b"
|
|
78
|
+
no_around_range: "0..i"
|
|
79
|
+
no_around_unary: "a++"
|
|
80
|
+
after_control_keywords: "if (condition)"
|
|
81
|
+
no_before_parentheses: "method()"
|
|
82
|
+
never_around_dot: "foo.bar()"
|
|
83
|
+
|
|
84
|
+
colons:
|
|
85
|
+
type_supertype: "class Foo : Bar"
|
|
86
|
+
declaration_type: "val x: Int"
|
|
87
|
+
always_space_after: true
|
|
88
|
+
|
|
89
|
+
trailing_commas:
|
|
90
|
+
recommended: true
|
|
91
|
+
reason: cleaner diffs, easier reordering
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
### 4. Functions
|
|
95
|
+
|
|
96
|
+
```yaml
|
|
97
|
+
expression_bodies:
|
|
98
|
+
prefer: "fun foo() = 1"
|
|
99
|
+
over: |
|
|
100
|
+
fun foo(): Int {
|
|
101
|
+
return 1
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
default_parameters:
|
|
105
|
+
prefer: "fun foo(a: String = \"a\")"
|
|
106
|
+
over: overloaded functions
|
|
107
|
+
|
|
108
|
+
single_line_signatures:
|
|
109
|
+
if_fits: "fun foo(a: Int): String = ..."
|
|
110
|
+
otherwise: |
|
|
111
|
+
fun longMethodName(
|
|
112
|
+
argument: ArgumentType = defaultValue,
|
|
113
|
+
argument2: AnotherArgumentType,
|
|
114
|
+
): ReturnType { }
|
|
115
|
+
|
|
116
|
+
unit_return:
|
|
117
|
+
avoid: "fun foo(): Unit { }"
|
|
118
|
+
prefer: "fun foo() { }"
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
### 5. Null Safety
|
|
122
|
+
|
|
123
|
+
```yaml
|
|
124
|
+
principles:
|
|
125
|
+
- Prefer non-null types by default
|
|
126
|
+
- Use ? only when nullability is meaningful
|
|
127
|
+
- Leverage safe calls (?.) and elvis (?:)
|
|
128
|
+
|
|
129
|
+
patterns: |
|
|
130
|
+
// Safe call
|
|
131
|
+
val length = text?.length
|
|
132
|
+
|
|
133
|
+
// Elvis operator
|
|
134
|
+
val name = user?.name ?: "Anonymous"
|
|
135
|
+
|
|
136
|
+
// Let for null checks
|
|
137
|
+
user?.let {
|
|
138
|
+
println(it.name)
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
// Not-null assertion (use sparingly)
|
|
142
|
+
val name = user!!.name
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
### 6. Idiomatic Patterns
|
|
146
|
+
|
|
147
|
+
```yaml
|
|
148
|
+
immutability:
|
|
149
|
+
prefer: "val over var"
|
|
150
|
+
collections: "listOf() over arrayListOf()"
|
|
151
|
+
|
|
152
|
+
conditionals:
|
|
153
|
+
binary: use if
|
|
154
|
+
multiple: use when
|
|
155
|
+
|
|
156
|
+
patterns: |
|
|
157
|
+
// if expression
|
|
158
|
+
return if (x) foo() else bar()
|
|
159
|
+
|
|
160
|
+
// when expression
|
|
161
|
+
return when(x) {
|
|
162
|
+
0 -> "zero"
|
|
163
|
+
else -> "nonzero"
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
functional:
|
|
167
|
+
prefer: "list.filter { it > 10 }.map { it * 2 }"
|
|
168
|
+
over: manual loops (except forEach)
|
|
169
|
+
|
|
170
|
+
ranges:
|
|
171
|
+
prefer: "for (i in 0..<n)"
|
|
172
|
+
avoid: "for (i in 0..n - 1)"
|
|
173
|
+
|
|
174
|
+
type_aliases:
|
|
175
|
+
use_for: |
|
|
176
|
+
typealias MouseClickHandler = (Any, MouseEvent) -> Unit
|
|
177
|
+
typealias PersonIndex = Map<String, Person>
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
### 7. Lambdas
|
|
181
|
+
|
|
182
|
+
```yaml
|
|
183
|
+
formatting:
|
|
184
|
+
- Spaces around curly braces: "list.filter { it > 10 }"
|
|
185
|
+
- Single lambda outside parentheses
|
|
186
|
+
- it for single parameter
|
|
187
|
+
|
|
188
|
+
patterns: |
|
|
189
|
+
// Outside parentheses
|
|
190
|
+
list.filter { it > 10 }
|
|
191
|
+
|
|
192
|
+
// Multiple parameters
|
|
193
|
+
list.fold(0) { acc, item -> acc + item }
|
|
194
|
+
|
|
195
|
+
// Destructuring
|
|
196
|
+
map.forEach { (key, value) -> println("$key = $value") }
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
### 8. Coroutines
|
|
200
|
+
|
|
201
|
+
```yaml
|
|
202
|
+
principles:
|
|
203
|
+
- Use suspend functions for async operations
|
|
204
|
+
- Structured concurrency with scopes
|
|
205
|
+
- Proper exception handling
|
|
206
|
+
|
|
207
|
+
patterns: |
|
|
208
|
+
// Suspend function
|
|
209
|
+
suspend fun fetchData(): Data {
|
|
210
|
+
return withContext(Dispatchers.IO) {
|
|
211
|
+
api.getData()
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
// Coroutine scope
|
|
216
|
+
lifecycleScope.launch {
|
|
217
|
+
val data = fetchData()
|
|
218
|
+
updateUI(data)
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
// Exception handling
|
|
222
|
+
try {
|
|
223
|
+
val result = async { fetchData() }.await()
|
|
224
|
+
} catch (e: Exception) {
|
|
225
|
+
handleError(e)
|
|
226
|
+
}
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
### 9. Documentation
|
|
230
|
+
|
|
231
|
+
```yaml
|
|
232
|
+
format: |
|
|
233
|
+
/**
|
|
234
|
+
* Returns the absolute value of the given [number].
|
|
235
|
+
*/
|
|
236
|
+
fun abs(number: Int): Int { ... }
|
|
237
|
+
|
|
238
|
+
best_practices:
|
|
239
|
+
- Incorporate parameters into description
|
|
240
|
+
- Use brackets for parameter references
|
|
241
|
+
- Use @param/@return only for lengthy descriptions
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
## Application
|
|
245
|
+
|
|
246
|
+
When writing or reviewing Kotlin code:
|
|
247
|
+
|
|
248
|
+
1. **Always** prefer val over var
|
|
249
|
+
2. **Always** use null-safe types appropriately
|
|
250
|
+
3. **Prefer** expression bodies for simple functions
|
|
251
|
+
4. **Prefer** functional operations over loops
|
|
252
|
+
5. **Use** default parameters over overloads
|
|
253
|
+
6. **Use** when for multiple conditions
|
|
254
|
+
7. **Leverage** extension functions
|
|
255
|
+
8. **Document** public APIs
|
package/templates/agents/sw-engineer/language/kotlin-expert/refs/kotlin-best-practices/index.yaml
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# Kotlin Best Practices Skill
|
|
2
|
+
|
|
3
|
+
metadata:
|
|
4
|
+
name: kotlin-best-practices
|
|
5
|
+
category: development
|
|
6
|
+
description: Idiomatic Kotlin patterns from JetBrains conventions
|
|
7
|
+
|
|
8
|
+
source:
|
|
9
|
+
type: internal
|
|
10
|
+
reference:
|
|
11
|
+
- https://kotlinlang.org/docs/coding-conventions.html
|
|
12
|
+
- https://kotlinlang.org/docs/idioms.html
|
|
13
|
+
- https://developer.android.com/kotlin/style-guide
|
|
14
|
+
|
|
15
|
+
provides:
|
|
16
|
+
- Kotlin naming conventions
|
|
17
|
+
- Source file organization
|
|
18
|
+
- Formatting standards
|
|
19
|
+
- Function design patterns
|
|
20
|
+
- Null safety patterns
|
|
21
|
+
- Idiomatic expressions
|
|
22
|
+
- Lambda best practices
|
|
23
|
+
- Coroutine patterns
|
|
24
|
+
- Documentation guidelines
|
|
25
|
+
|
|
26
|
+
used_by:
|
|
27
|
+
- kotlin-expert
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# Python Guide
|
|
2
|
+
|
|
3
|
+
metadata:
|
|
4
|
+
name: python
|
|
5
|
+
description: Python language reference documentation
|
|
6
|
+
|
|
7
|
+
source:
|
|
8
|
+
type: external
|
|
9
|
+
origin: python.org
|
|
10
|
+
urls:
|
|
11
|
+
- https://peps.python.org/pep-0008/
|
|
12
|
+
- https://peps.python.org/pep-0020/
|
|
13
|
+
- https://google.github.io/styleguide/pyguide.html
|
|
14
|
+
last_fetched: "2026-01-22"
|
|
15
|
+
|
|
16
|
+
documents:
|
|
17
|
+
- name: pep8-style-guide
|
|
18
|
+
path: ./pep8-style-guide.md
|
|
19
|
+
description: PEP 8 - Official Python Style Guide
|
|
20
|
+
|
|
21
|
+
- name: zen-of-python
|
|
22
|
+
path: ./zen-of-python.md
|
|
23
|
+
description: PEP 20 - The Zen of Python
|
|
24
|
+
|
|
25
|
+
used_by:
|
|
26
|
+
- python-expert
|