oh-my-customcode 0.1.0
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/LICENSE +21 -0
- package/README.md +287 -0
- package/dist/cli/index.js +13299 -0
- package/dist/index.js +927 -0
- package/package.json +74 -0
- package/templates/.claude/contexts/dev.md +20 -0
- package/templates/.claude/contexts/ecomode.md +63 -0
- package/templates/.claude/contexts/index.yaml +41 -0
- package/templates/.claude/contexts/research.md +28 -0
- package/templates/.claude/contexts/review.md +23 -0
- package/templates/.claude/hooks/hooks.json +185 -0
- package/templates/.claude/hooks/hud/index.yaml +27 -0
- package/templates/.claude/hooks/hud/update-status.sh +32 -0
- package/templates/.claude/hooks/index.yaml +46 -0
- package/templates/.claude/hooks/memory-persistence/pre-compact.sh +37 -0
- package/templates/.claude/hooks/memory-persistence/session-end.sh +64 -0
- package/templates/.claude/hooks/memory-persistence/session-start.sh +41 -0
- package/templates/.claude/hooks/strategic-compact/suggest-compact.sh +50 -0
- package/templates/.claude/install-hooks.sh +100 -0
- package/templates/.claude/rules/MAY-optimization.md +93 -0
- package/templates/.claude/rules/MUST-agent-design.md +107 -0
- package/templates/.claude/rules/MUST-agent-identification.md +108 -0
- package/templates/.claude/rules/MUST-continuous-improvement.md +132 -0
- package/templates/.claude/rules/MUST-intent-transparency.md +199 -0
- package/templates/.claude/rules/MUST-language-policy.md +62 -0
- package/templates/.claude/rules/MUST-orchestrator-coordination.md +266 -0
- package/templates/.claude/rules/MUST-parallel-execution.md +341 -0
- package/templates/.claude/rules/MUST-permissions.md +84 -0
- package/templates/.claude/rules/MUST-safety.md +69 -0
- package/templates/.claude/rules/MUST-sync-verification.md +219 -0
- package/templates/.claude/rules/MUST-tool-identification.md +112 -0
- package/templates/.claude/rules/SHOULD-ecomode.md +145 -0
- package/templates/.claude/rules/SHOULD-error-handling.md +102 -0
- package/templates/.claude/rules/SHOULD-hud-statusline.md +89 -0
- package/templates/.claude/rules/SHOULD-interaction.md +103 -0
- package/templates/.claude/rules/SHOULD-memory-integration.md +114 -0
- package/templates/.claude/rules/SHOULD-pipeline-mode.md +165 -0
- package/templates/.claude/rules/index.yaml +125 -0
- package/templates/.claude/uninstall-hooks.sh +52 -0
- package/templates/CLAUDE.md.en +259 -0
- package/templates/CLAUDE.md.ko +259 -0
- package/templates/agents/index.yaml +237 -0
- package/templates/agents/infra-engineer/aws-expert/AGENT.md +47 -0
- package/templates/agents/infra-engineer/aws-expert/index.yaml +27 -0
- package/templates/agents/infra-engineer/docker-expert/AGENT.md +47 -0
- package/templates/agents/infra-engineer/docker-expert/index.yaml +27 -0
- package/templates/agents/manager/creator/AGENT.md +274 -0
- package/templates/agents/manager/creator/index.yaml +66 -0
- package/templates/agents/manager/gitnerd/AGENT.md +91 -0
- package/templates/agents/manager/gitnerd/index.yaml +55 -0
- package/templates/agents/manager/sauron/AGENT.md +153 -0
- package/templates/agents/manager/sauron/index.yaml +52 -0
- package/templates/agents/manager/supplier/AGENT.md +142 -0
- package/templates/agents/manager/supplier/index.yaml +31 -0
- package/templates/agents/manager/sync-checker/AGENT.md +34 -0
- package/templates/agents/manager/sync-checker/index.yaml +32 -0
- package/templates/agents/manager/updater/AGENT.md +125 -0
- package/templates/agents/manager/updater/index.yaml +31 -0
- package/templates/agents/orchestrator/dev-lead/AGENT.md +116 -0
- package/templates/agents/orchestrator/dev-lead/index.yaml +73 -0
- package/templates/agents/orchestrator/planner/AGENT.md +102 -0
- package/templates/agents/orchestrator/planner/index.yaml +38 -0
- package/templates/agents/orchestrator/qa-lead/AGENT.md +92 -0
- package/templates/agents/orchestrator/qa-lead/index.yaml +40 -0
- package/templates/agents/orchestrator/secretary/AGENT.md +132 -0
- package/templates/agents/orchestrator/secretary/index.yaml +55 -0
- package/templates/agents/qa-team/qa-engineer/AGENT.md +98 -0
- package/templates/agents/qa-team/qa-engineer/index.yaml +59 -0
- package/templates/agents/qa-team/qa-planner/AGENT.md +75 -0
- package/templates/agents/qa-team/qa-planner/index.yaml +47 -0
- package/templates/agents/qa-team/qa-writer/AGENT.md +98 -0
- package/templates/agents/qa-team/qa-writer/index.yaml +44 -0
- package/templates/agents/sw-architect/documenter/AGENT.md +120 -0
- package/templates/agents/sw-architect/documenter/index.yaml +39 -0
- package/templates/agents/sw-architect/speckit-agent/AGENT.md +127 -0
- package/templates/agents/sw-architect/speckit-agent/index.yaml +78 -0
- package/templates/agents/sw-engineer/backend/express-expert/AGENT.md +132 -0
- package/templates/agents/sw-engineer/backend/express-expert/index.yaml +36 -0
- package/templates/agents/sw-engineer/backend/fastapi-expert/AGENT.md +47 -0
- package/templates/agents/sw-engineer/backend/fastapi-expert/index.yaml +27 -0
- package/templates/agents/sw-engineer/backend/go-backend-expert/AGENT.md +47 -0
- package/templates/agents/sw-engineer/backend/go-backend-expert/index.yaml +27 -0
- package/templates/agents/sw-engineer/backend/nestjs-expert/AGENT.md +107 -0
- package/templates/agents/sw-engineer/backend/nestjs-expert/index.yaml +43 -0
- package/templates/agents/sw-engineer/backend/springboot-expert/AGENT.md +103 -0
- package/templates/agents/sw-engineer/backend/springboot-expert/index.yaml +69 -0
- package/templates/agents/sw-engineer/frontend/svelte-agent/AGENT.md +71 -0
- package/templates/agents/sw-engineer/frontend/svelte-agent/index.yaml +41 -0
- package/templates/agents/sw-engineer/frontend/vercel-agent/AGENT.md +67 -0
- package/templates/agents/sw-engineer/frontend/vercel-agent/index.yaml +43 -0
- package/templates/agents/sw-engineer/frontend/vuejs-agent/AGENT.md +71 -0
- package/templates/agents/sw-engineer/frontend/vuejs-agent/index.yaml +48 -0
- package/templates/agents/sw-engineer/language/golang-expert/AGENT.md +47 -0
- package/templates/agents/sw-engineer/language/golang-expert/index.yaml +27 -0
- package/templates/agents/sw-engineer/language/java21-expert/AGENT.md +122 -0
- package/templates/agents/sw-engineer/language/java21-expert/index.yaml +51 -0
- package/templates/agents/sw-engineer/language/kotlin-expert/AGENT.md +47 -0
- package/templates/agents/sw-engineer/language/kotlin-expert/index.yaml +27 -0
- package/templates/agents/sw-engineer/language/python-expert/AGENT.md +47 -0
- package/templates/agents/sw-engineer/language/python-expert/index.yaml +27 -0
- package/templates/agents/sw-engineer/language/rust-expert/AGENT.md +47 -0
- package/templates/agents/sw-engineer/language/rust-expert/index.yaml +27 -0
- package/templates/agents/sw-engineer/language/typescript-expert/AGENT.md +47 -0
- package/templates/agents/sw-engineer/language/typescript-expert/index.yaml +27 -0
- package/templates/agents/sw-engineer/tooling/bun-expert/AGENT.md +73 -0
- package/templates/agents/sw-engineer/tooling/bun-expert/index.yaml +46 -0
- package/templates/agents/sw-engineer/tooling/npm-expert/AGENT.md +160 -0
- package/templates/agents/sw-engineer/tooling/npm-expert/index.yaml +45 -0
- package/templates/agents/sw-engineer/tooling/optimizer/AGENT.md +170 -0
- package/templates/agents/sw-engineer/tooling/optimizer/index.yaml +45 -0
- package/templates/agents/system/memory-keeper/AGENT.md +126 -0
- package/templates/agents/system/memory-keeper/index.yaml +45 -0
- package/templates/agents/system/naggy/AGENT.md +72 -0
- package/templates/agents/system/naggy/index.yaml +35 -0
- package/templates/commands/COMMANDS.md +136 -0
- package/templates/commands/creator/agent.md +121 -0
- package/templates/commands/dev/refactor.md +126 -0
- package/templates/commands/dev/review.md +82 -0
- package/templates/commands/git/branch.yaml +8 -0
- package/templates/commands/git/commit.yaml +4 -0
- package/templates/commands/git/pr.yaml +4 -0
- package/templates/commands/git/status.yaml +4 -0
- package/templates/commands/git/sync.yaml +4 -0
- package/templates/commands/index.yaml +225 -0
- package/templates/commands/intent/explain.md +144 -0
- package/templates/commands/memory/recall.md +164 -0
- package/templates/commands/memory/save.md +128 -0
- package/templates/commands/naggy/add.yaml +8 -0
- package/templates/commands/naggy/done.yaml +8 -0
- package/templates/commands/naggy/list.yaml +4 -0
- package/templates/commands/naggy/priority.yaml +11 -0
- package/templates/commands/naggy/remind.yaml +4 -0
- package/templates/commands/npm/audit.yaml +62 -0
- package/templates/commands/npm/publish.yaml +52 -0
- package/templates/commands/npm/version.yaml +62 -0
- package/templates/commands/optimize/analyze.yaml +34 -0
- package/templates/commands/optimize/bundle.yaml +50 -0
- package/templates/commands/optimize/report.yaml +56 -0
- package/templates/commands/pipeline/list.md +81 -0
- package/templates/commands/pipeline/run.md +127 -0
- package/templates/commands/sauron/quick.yaml +4 -0
- package/templates/commands/sauron/report.yaml +4 -0
- package/templates/commands/sauron/watch.yaml +4 -0
- package/templates/commands/supplier/audit.md +133 -0
- package/templates/commands/supplier/fix.md +121 -0
- package/templates/commands/sync/agents.yaml +4 -0
- package/templates/commands/sync/check.yaml +4 -0
- package/templates/commands/sync/commands.yaml +4 -0
- package/templates/commands/sync/docs.yaml +4 -0
- package/templates/commands/sync/fix.yaml +4 -0
- package/templates/commands/system/help.md +137 -0
- package/templates/commands/system/lists.md +86 -0
- package/templates/commands/system/status.md +163 -0
- package/templates/commands/updater/docs.md +165 -0
- package/templates/commands/updater/external.md +214 -0
- package/templates/guides/aws/common-patterns.md +169 -0
- package/templates/guides/aws/index.yaml +26 -0
- package/templates/guides/aws/well-architected.md +143 -0
- package/templates/guides/claude-code/01-overview.md +42 -0
- package/templates/guides/claude-code/03-tools.md +107 -0
- package/templates/guides/claude-code/04-agent-skills.md +90 -0
- package/templates/guides/claude-code/05-agent-sdk.md +129 -0
- package/templates/guides/claude-code/06-mcp.md +165 -0
- package/templates/guides/claude-code/07-prompt-engineering.md +100 -0
- package/templates/guides/claude-code/08-testing.md +58 -0
- package/templates/guides/claude-code/09-guardrails.md +80 -0
- package/templates/guides/claude-code/10-monitoring.md +89 -0
- package/templates/guides/claude-code/index.yaml +51 -0
- package/templates/guides/docker/compose-best-practices.md +284 -0
- package/templates/guides/docker/dockerfile-best-practices.md +262 -0
- package/templates/guides/docker/index.yaml +26 -0
- package/templates/guides/fastapi/best-practices.md +232 -0
- package/templates/guides/fastapi/index.yaml +21 -0
- package/templates/guides/go-backend/index.yaml +26 -0
- package/templates/guides/go-backend/project-layout.md +243 -0
- package/templates/guides/go-backend/uber-style.md +212 -0
- package/templates/guides/golang/concurrency.md +282 -0
- package/templates/guides/golang/effective-go.md +309 -0
- package/templates/guides/golang/error-handling.md +250 -0
- package/templates/guides/golang/index.yaml +27 -0
- package/templates/guides/index.yaml +101 -0
- package/templates/guides/kotlin/coding-conventions.md +247 -0
- package/templates/guides/kotlin/idioms.md +234 -0
- package/templates/guides/kotlin/index.yaml +26 -0
- package/templates/guides/python/index.yaml +26 -0
- package/templates/guides/python/pep8-style-guide.md +202 -0
- package/templates/guides/python/zen-of-python.md +79 -0
- package/templates/guides/rust/error-handling.md +262 -0
- package/templates/guides/rust/index.yaml +26 -0
- package/templates/guides/rust/ownership.md +180 -0
- package/templates/guides/springboot/best-practices.md +361 -0
- package/templates/guides/springboot/index.yaml +22 -0
- package/templates/guides/typescript/advanced-types.md +225 -0
- package/templates/guides/typescript/index.yaml +26 -0
- package/templates/guides/typescript/type-system.md +219 -0
- package/templates/guides/web-design/accessibility.md +66 -0
- package/templates/guides/web-design/index.yaml +20 -0
- package/templates/guides/web-design/performance.md +102 -0
- package/templates/pipelines/examples/code-review.yaml +66 -0
- package/templates/pipelines/index.yaml +18 -0
- package/templates/pipelines/templates/pipeline-template.yaml +50 -0
- package/templates/skills/backend/fastapi-best-practices/SKILL.md +269 -0
- package/templates/skills/backend/fastapi-best-practices/index.yaml +25 -0
- package/templates/skills/backend/go-backend-best-practices/SKILL.md +337 -0
- package/templates/skills/backend/go-backend-best-practices/index.yaml +26 -0
- package/templates/skills/backend/springboot-best-practices/SKILL.md +356 -0
- package/templates/skills/backend/springboot-best-practices/index.yaml +27 -0
- package/templates/skills/development/go-best-practices/SKILL.md +202 -0
- package/templates/skills/development/go-best-practices/index.yaml +25 -0
- package/templates/skills/development/kotlin-best-practices/SKILL.md +255 -0
- package/templates/skills/development/kotlin-best-practices/index.yaml +27 -0
- package/templates/skills/development/python-best-practices/SKILL.md +221 -0
- package/templates/skills/development/python-best-practices/index.yaml +25 -0
- package/templates/skills/development/react-best-practices/SKILL.md +100 -0
- package/templates/skills/development/react-best-practices/index.yaml +39 -0
- package/templates/skills/development/rust-best-practices/SKILL.md +266 -0
- package/templates/skills/development/rust-best-practices/index.yaml +26 -0
- package/templates/skills/development/typescript-best-practices/SKILL.md +320 -0
- package/templates/skills/development/typescript-best-practices/index.yaml +28 -0
- package/templates/skills/development/vercel-deploy/SKILL.md +73 -0
- package/templates/skills/development/vercel-deploy/index.yaml +30 -0
- package/templates/skills/development/web-design-guidelines/SKILL.md +117 -0
- package/templates/skills/development/web-design-guidelines/index.yaml +34 -0
- package/templates/skills/index.yaml +129 -0
- package/templates/skills/infrastructure/aws-best-practices/SKILL.md +279 -0
- package/templates/skills/infrastructure/aws-best-practices/index.yaml +27 -0
- package/templates/skills/infrastructure/docker-best-practices/SKILL.md +274 -0
- package/templates/skills/infrastructure/docker-best-practices/index.yaml +26 -0
- package/templates/skills/orchestration/intent-detection/SKILL.md +214 -0
- package/templates/skills/orchestration/intent-detection/index.yaml +30 -0
- package/templates/skills/orchestration/intent-detection/patterns/agent-triggers.yaml +333 -0
- package/templates/skills/orchestration/pipeline-execution/SKILL.md +188 -0
- package/templates/skills/orchestration/pipeline-execution/index.yaml +27 -0
- package/templates/skills/system/memory-management/SKILL.md +194 -0
- package/templates/skills/system/memory-management/index.yaml +30 -0
- package/templates/skills/system/result-aggregation/SKILL.md +163 -0
- package/templates/skills/system/result-aggregation/index.yaml +36 -0
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
# TypeScript Type System
|
|
2
|
+
|
|
3
|
+
> Reference for TypeScript type fundamentals
|
|
4
|
+
|
|
5
|
+
## Basic Types
|
|
6
|
+
|
|
7
|
+
```typescript
|
|
8
|
+
// Primitives
|
|
9
|
+
const name: string = 'TypeScript';
|
|
10
|
+
const version: number = 5.0;
|
|
11
|
+
const isActive: boolean = true;
|
|
12
|
+
|
|
13
|
+
// Arrays
|
|
14
|
+
const numbers: number[] = [1, 2, 3];
|
|
15
|
+
const items: Array<string> = ['a', 'b', 'c'];
|
|
16
|
+
|
|
17
|
+
// Tuples
|
|
18
|
+
const pair: [string, number] = ['key', 42];
|
|
19
|
+
|
|
20
|
+
// Enums
|
|
21
|
+
enum Status {
|
|
22
|
+
Pending = 'pending',
|
|
23
|
+
Active = 'active',
|
|
24
|
+
Completed = 'completed',
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
// Any and Unknown
|
|
28
|
+
const flexible: any = 'anything';
|
|
29
|
+
const safe: unknown = 'must narrow';
|
|
30
|
+
|
|
31
|
+
// Void and Never
|
|
32
|
+
function log(message: string): void {
|
|
33
|
+
console.log(message);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
function fail(message: string): never {
|
|
37
|
+
throw new Error(message);
|
|
38
|
+
}
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## Interfaces
|
|
42
|
+
|
|
43
|
+
```typescript
|
|
44
|
+
interface User {
|
|
45
|
+
readonly id: string;
|
|
46
|
+
name: string;
|
|
47
|
+
email: string;
|
|
48
|
+
age?: number; // optional
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
// Extending interfaces
|
|
52
|
+
interface Admin extends User {
|
|
53
|
+
permissions: string[];
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
// Implementing interfaces
|
|
57
|
+
class UserImpl implements User {
|
|
58
|
+
readonly id: string;
|
|
59
|
+
name: string;
|
|
60
|
+
email: string;
|
|
61
|
+
|
|
62
|
+
constructor(id: string, name: string, email: string) {
|
|
63
|
+
this.id = id;
|
|
64
|
+
this.name = name;
|
|
65
|
+
this.email = email;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
## Type Aliases
|
|
71
|
+
|
|
72
|
+
```typescript
|
|
73
|
+
// Union types
|
|
74
|
+
type Status = 'pending' | 'active' | 'completed';
|
|
75
|
+
|
|
76
|
+
// Intersection types
|
|
77
|
+
type Employee = User & { department: string };
|
|
78
|
+
|
|
79
|
+
// Function types
|
|
80
|
+
type Handler = (event: Event) => void;
|
|
81
|
+
|
|
82
|
+
// Object types
|
|
83
|
+
type Point = {
|
|
84
|
+
x: number;
|
|
85
|
+
y: number;
|
|
86
|
+
};
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
## Generics
|
|
90
|
+
|
|
91
|
+
```typescript
|
|
92
|
+
// Generic function
|
|
93
|
+
function identity<T>(arg: T): T {
|
|
94
|
+
return arg;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
// Generic interface
|
|
98
|
+
interface Container<T> {
|
|
99
|
+
value: T;
|
|
100
|
+
getValue(): T;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
// Generic class
|
|
104
|
+
class Box<T> {
|
|
105
|
+
private content: T;
|
|
106
|
+
|
|
107
|
+
constructor(content: T) {
|
|
108
|
+
this.content = content;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
getContent(): T {
|
|
112
|
+
return this.content;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
// Generic constraints
|
|
117
|
+
function getLength<T extends { length: number }>(item: T): number {
|
|
118
|
+
return item.length;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
// Default type parameters
|
|
122
|
+
function createArray<T = string>(length: number, value: T): T[] {
|
|
123
|
+
return Array(length).fill(value);
|
|
124
|
+
}
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
## Type Guards
|
|
128
|
+
|
|
129
|
+
```typescript
|
|
130
|
+
// typeof guard
|
|
131
|
+
function processValue(value: string | number) {
|
|
132
|
+
if (typeof value === 'string') {
|
|
133
|
+
console.log(value.toUpperCase());
|
|
134
|
+
} else {
|
|
135
|
+
console.log(value.toFixed(2));
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
// instanceof guard
|
|
140
|
+
function handleError(error: unknown) {
|
|
141
|
+
if (error instanceof Error) {
|
|
142
|
+
console.log(error.message);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
// Custom type guard
|
|
147
|
+
function isUser(obj: unknown): obj is User {
|
|
148
|
+
return (
|
|
149
|
+
typeof obj === 'object' &&
|
|
150
|
+
obj !== null &&
|
|
151
|
+
'id' in obj &&
|
|
152
|
+
'name' in obj
|
|
153
|
+
);
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
// in operator
|
|
157
|
+
function processShape(shape: Circle | Square) {
|
|
158
|
+
if ('radius' in shape) {
|
|
159
|
+
console.log('Circle with radius:', shape.radius);
|
|
160
|
+
} else {
|
|
161
|
+
console.log('Square with side:', shape.side);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
## Literal Types
|
|
167
|
+
|
|
168
|
+
```typescript
|
|
169
|
+
// String literals
|
|
170
|
+
type Direction = 'north' | 'south' | 'east' | 'west';
|
|
171
|
+
|
|
172
|
+
// Numeric literals
|
|
173
|
+
type DiceRoll = 1 | 2 | 3 | 4 | 5 | 6;
|
|
174
|
+
|
|
175
|
+
// Boolean literal
|
|
176
|
+
type Success = true;
|
|
177
|
+
|
|
178
|
+
// Template literal types
|
|
179
|
+
type EventName = `on${Capitalize<string>}`;
|
|
180
|
+
type OnClick = `on${'Click' | 'Hover'}`;
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
## Type Assertions
|
|
184
|
+
|
|
185
|
+
```typescript
|
|
186
|
+
// as syntax (preferred)
|
|
187
|
+
const input = document.getElementById('input') as HTMLInputElement;
|
|
188
|
+
|
|
189
|
+
// Angle bracket syntax
|
|
190
|
+
const input2 = <HTMLInputElement>document.getElementById('input');
|
|
191
|
+
|
|
192
|
+
// Non-null assertion
|
|
193
|
+
const element = document.getElementById('root')!;
|
|
194
|
+
|
|
195
|
+
// const assertion
|
|
196
|
+
const config = {
|
|
197
|
+
endpoint: '/api',
|
|
198
|
+
timeout: 5000,
|
|
199
|
+
} as const;
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
## Nullability
|
|
203
|
+
|
|
204
|
+
```typescript
|
|
205
|
+
// Optional property
|
|
206
|
+
interface User {
|
|
207
|
+
name: string;
|
|
208
|
+
email?: string;
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
// Optional chaining
|
|
212
|
+
const email = user?.email?.toLowerCase();
|
|
213
|
+
|
|
214
|
+
// Nullish coalescing
|
|
215
|
+
const displayName = user.nickname ?? user.name;
|
|
216
|
+
|
|
217
|
+
// Non-null assertion
|
|
218
|
+
const element = document.getElementById('root')!;
|
|
219
|
+
```
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# Accessibility Best Practices
|
|
2
|
+
|
|
3
|
+
> Reference guide for web-design-guidelines skill
|
|
4
|
+
|
|
5
|
+
## Core Principles
|
|
6
|
+
|
|
7
|
+
### WCAG 2.1 Compliance
|
|
8
|
+
```
|
|
9
|
+
Level A: Minimum accessibility
|
|
10
|
+
Level AA: Standard compliance (recommended)
|
|
11
|
+
Level AAA: Enhanced accessibility
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
### POUR Principles
|
|
15
|
+
```
|
|
16
|
+
Perceivable: Content available to senses
|
|
17
|
+
Operable: Interface navigable
|
|
18
|
+
Understandable: Clear and predictable
|
|
19
|
+
Robust: Works across technologies
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
## Quick Reference
|
|
23
|
+
|
|
24
|
+
### Color Contrast
|
|
25
|
+
```
|
|
26
|
+
Normal text: 4.5:1 minimum
|
|
27
|
+
Large text: 3:1 minimum
|
|
28
|
+
UI components: 3:1 minimum
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
### Keyboard Navigation
|
|
32
|
+
```
|
|
33
|
+
Tab: Move forward
|
|
34
|
+
Shift+Tab: Move backward
|
|
35
|
+
Enter/Space: Activate
|
|
36
|
+
Escape: Close/Cancel
|
|
37
|
+
Arrow keys: Navigate within component
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
### ARIA Landmarks
|
|
41
|
+
```html
|
|
42
|
+
<header role="banner">
|
|
43
|
+
<nav role="navigation">
|
|
44
|
+
<main role="main">
|
|
45
|
+
<aside role="complementary">
|
|
46
|
+
<footer role="contentinfo">
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
### Common ARIA Attributes
|
|
50
|
+
```html
|
|
51
|
+
aria-label="Description"
|
|
52
|
+
aria-labelledby="element-id"
|
|
53
|
+
aria-describedby="description-id"
|
|
54
|
+
aria-hidden="true|false"
|
|
55
|
+
aria-expanded="true|false"
|
|
56
|
+
aria-selected="true|false"
|
|
57
|
+
aria-live="polite|assertive"
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
## Testing Tools
|
|
61
|
+
|
|
62
|
+
- axe DevTools
|
|
63
|
+
- WAVE
|
|
64
|
+
- Lighthouse
|
|
65
|
+
- VoiceOver (macOS)
|
|
66
|
+
- NVDA (Windows)
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# Web Design Guide
|
|
2
|
+
|
|
3
|
+
metadata:
|
|
4
|
+
name: web-design
|
|
5
|
+
description: Web design best practices and accessibility reference
|
|
6
|
+
|
|
7
|
+
source:
|
|
8
|
+
type: external
|
|
9
|
+
origin: github
|
|
10
|
+
url: https://github.com/vercel-labs/agent-skills
|
|
11
|
+
related_skill: web-design-guidelines
|
|
12
|
+
|
|
13
|
+
documents:
|
|
14
|
+
- name: accessibility
|
|
15
|
+
title: Accessibility Best Practices
|
|
16
|
+
path: ./accessibility.md
|
|
17
|
+
|
|
18
|
+
- name: performance
|
|
19
|
+
title: Performance Guidelines
|
|
20
|
+
path: ./performance.md
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
# Performance Guidelines
|
|
2
|
+
|
|
3
|
+
> Reference guide for react-best-practices skill
|
|
4
|
+
|
|
5
|
+
## Core Web Vitals
|
|
6
|
+
|
|
7
|
+
### LCP (Largest Contentful Paint)
|
|
8
|
+
```
|
|
9
|
+
Good: < 2.5s
|
|
10
|
+
Needs improvement: 2.5s - 4s
|
|
11
|
+
Poor: > 4s
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
### FID (First Input Delay)
|
|
15
|
+
```
|
|
16
|
+
Good: < 100ms
|
|
17
|
+
Needs improvement: 100ms - 300ms
|
|
18
|
+
Poor: > 300ms
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
### CLS (Cumulative Layout Shift)
|
|
22
|
+
```
|
|
23
|
+
Good: < 0.1
|
|
24
|
+
Needs improvement: 0.1 - 0.25
|
|
25
|
+
Poor: > 0.25
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## Optimization Strategies
|
|
29
|
+
|
|
30
|
+
### JavaScript
|
|
31
|
+
```
|
|
32
|
+
- Code splitting
|
|
33
|
+
- Tree shaking
|
|
34
|
+
- Lazy loading
|
|
35
|
+
- Minimize main thread work
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
### Images
|
|
39
|
+
```
|
|
40
|
+
- Modern formats (WebP, AVIF)
|
|
41
|
+
- Responsive images
|
|
42
|
+
- Lazy loading
|
|
43
|
+
- Proper sizing
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
### CSS
|
|
47
|
+
```
|
|
48
|
+
- Critical CSS inline
|
|
49
|
+
- Defer non-critical
|
|
50
|
+
- Remove unused
|
|
51
|
+
- Minimize specificity
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
### Fonts
|
|
55
|
+
```
|
|
56
|
+
- font-display: swap
|
|
57
|
+
- Preload critical fonts
|
|
58
|
+
- Subset fonts
|
|
59
|
+
- System font fallback
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
## Next.js Specific
|
|
63
|
+
|
|
64
|
+
### Server Components
|
|
65
|
+
```tsx
|
|
66
|
+
// Default: Server Component (no directive)
|
|
67
|
+
export default function Page() {
|
|
68
|
+
return <div>Server rendered</div>
|
|
69
|
+
}
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
### Client Components
|
|
73
|
+
```tsx
|
|
74
|
+
'use client'
|
|
75
|
+
// Only when needed for interactivity
|
|
76
|
+
export default function Button() {
|
|
77
|
+
return <button onClick={...}>Click</button>
|
|
78
|
+
}
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
### Data Fetching
|
|
82
|
+
```tsx
|
|
83
|
+
// Server: fetch in component
|
|
84
|
+
async function Page() {
|
|
85
|
+
const data = await fetch(...)
|
|
86
|
+
return <div>{data}</div>
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
// Client: use SWR/React Query
|
|
90
|
+
'use client'
|
|
91
|
+
function Component() {
|
|
92
|
+
const { data } = useSWR('/api/data', fetcher)
|
|
93
|
+
return <div>{data}</div>
|
|
94
|
+
}
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
## Measurement Tools
|
|
98
|
+
|
|
99
|
+
- Lighthouse
|
|
100
|
+
- WebPageTest
|
|
101
|
+
- Chrome DevTools Performance
|
|
102
|
+
- Next.js Analytics
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# Code Review Pipeline
|
|
2
|
+
# Full code review workflow with language detection
|
|
3
|
+
|
|
4
|
+
name: code-review
|
|
5
|
+
description: Full code review workflow with automatic language detection
|
|
6
|
+
|
|
7
|
+
inputs:
|
|
8
|
+
- name: file_path
|
|
9
|
+
required: true
|
|
10
|
+
description: Path to the file to review
|
|
11
|
+
|
|
12
|
+
- name: focus
|
|
13
|
+
required: false
|
|
14
|
+
description: Focus area (style, security, performance, all)
|
|
15
|
+
default: all
|
|
16
|
+
|
|
17
|
+
steps:
|
|
18
|
+
# Step 1: Detect programming language
|
|
19
|
+
- id: detect_language
|
|
20
|
+
agent: secretary
|
|
21
|
+
action: detect_language
|
|
22
|
+
input:
|
|
23
|
+
file: "${file_path}"
|
|
24
|
+
output: language
|
|
25
|
+
description: Detect the programming language of the file
|
|
26
|
+
|
|
27
|
+
# Step 2: Code analysis by language expert
|
|
28
|
+
- id: analyze
|
|
29
|
+
agent: "${language}-expert"
|
|
30
|
+
action: analyze_code
|
|
31
|
+
input:
|
|
32
|
+
file: "${file_path}"
|
|
33
|
+
focus: "${focus}"
|
|
34
|
+
output: analysis
|
|
35
|
+
description: Analyze code using language-specific best practices
|
|
36
|
+
|
|
37
|
+
# Step 3: Security review
|
|
38
|
+
- id: security_check
|
|
39
|
+
agent: qa-lead
|
|
40
|
+
action: security_review
|
|
41
|
+
input:
|
|
42
|
+
file: "${file_path}"
|
|
43
|
+
findings: "${analysis}"
|
|
44
|
+
output: security
|
|
45
|
+
description: Check for security vulnerabilities
|
|
46
|
+
on_error: continue
|
|
47
|
+
|
|
48
|
+
# Step 4: Generate final report
|
|
49
|
+
- id: report
|
|
50
|
+
agent: documenter
|
|
51
|
+
action: generate_report
|
|
52
|
+
input:
|
|
53
|
+
file: "${file_path}"
|
|
54
|
+
language: "${language}"
|
|
55
|
+
analysis: "${analysis}"
|
|
56
|
+
security: "${security}"
|
|
57
|
+
output: report
|
|
58
|
+
description: Generate comprehensive review report
|
|
59
|
+
|
|
60
|
+
error_handling:
|
|
61
|
+
default: stop
|
|
62
|
+
|
|
63
|
+
metadata:
|
|
64
|
+
author: baekgom-agents
|
|
65
|
+
version: 1.0.0
|
|
66
|
+
tags: [code-review, quality, security]
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# Baekgom Agents - Pipeline Registry
|
|
2
|
+
|
|
3
|
+
description: Registry of available pipelines for sequential workflows
|
|
4
|
+
|
|
5
|
+
pipelines:
|
|
6
|
+
- name: code-review
|
|
7
|
+
path: ./examples/code-review.yaml
|
|
8
|
+
description: Full code review workflow with language detection
|
|
9
|
+
|
|
10
|
+
templates:
|
|
11
|
+
- name: pipeline-template
|
|
12
|
+
path: ./templates/pipeline-template.yaml
|
|
13
|
+
description: Base template for creating new pipelines
|
|
14
|
+
|
|
15
|
+
usage:
|
|
16
|
+
run: "pipeline:run <name> --input key=value"
|
|
17
|
+
list: "pipeline:list"
|
|
18
|
+
create: "Use templates/pipeline-template.yaml as base"
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# Pipeline Template
|
|
2
|
+
# Copy this file and customize for your workflow
|
|
3
|
+
|
|
4
|
+
name: my-pipeline
|
|
5
|
+
description: Describe what this pipeline does
|
|
6
|
+
|
|
7
|
+
# Define inputs that the pipeline accepts
|
|
8
|
+
inputs:
|
|
9
|
+
- name: input_name
|
|
10
|
+
required: true
|
|
11
|
+
description: What this input is for
|
|
12
|
+
default: null # Optional default value
|
|
13
|
+
|
|
14
|
+
# Define the sequential steps
|
|
15
|
+
steps:
|
|
16
|
+
# Step 1: First operation
|
|
17
|
+
- id: step_1
|
|
18
|
+
agent: agent-name # Which agent executes this step
|
|
19
|
+
action: action_name # What action to perform
|
|
20
|
+
input: # Input for this step
|
|
21
|
+
key: "${input_name}" # Reference to pipeline input
|
|
22
|
+
output: step_1_result # Variable name for this step's output
|
|
23
|
+
|
|
24
|
+
# Step 2: Uses output from step 1
|
|
25
|
+
- id: step_2
|
|
26
|
+
agent: another-agent
|
|
27
|
+
action: process
|
|
28
|
+
input:
|
|
29
|
+
data: "${step_1_result}" # Reference to step 1 output
|
|
30
|
+
output: step_2_result
|
|
31
|
+
on_error: continue # Optional: stop | continue | retry
|
|
32
|
+
|
|
33
|
+
# Step 3: Final aggregation
|
|
34
|
+
- id: final
|
|
35
|
+
agent: aggregator
|
|
36
|
+
action: summarize
|
|
37
|
+
input:
|
|
38
|
+
result_1: "${step_1_result}"
|
|
39
|
+
result_2: "${step_2_result}"
|
|
40
|
+
output: final_result
|
|
41
|
+
|
|
42
|
+
# Optional: Error handling configuration
|
|
43
|
+
error_handling:
|
|
44
|
+
default: stop
|
|
45
|
+
|
|
46
|
+
# Optional: Metadata
|
|
47
|
+
metadata:
|
|
48
|
+
author: your-name
|
|
49
|
+
version: 1.0.0
|
|
50
|
+
tags: [template, example]
|