@jgamaraalv/ts-dev-kit 1.1.0 → 1.2.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/CHANGELOG.md CHANGED
@@ -5,6 +5,14 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [1.2.0] - 2026-02-24
9
+
10
+ ### Changed
11
+
12
+ - Simplify agent frontmatter: remove redundant `tools`, `model`, and `memory` fields (now inherited by default)
13
+ - Replace hex color codes with named colors across all 15 agent definitions
14
+ - Normalize markdown formatting (table alignment, section spacing, code block syntax)
15
+
8
16
  ## [1.1.0] - 2026-02-23
9
17
 
10
18
  ### Changed
@@ -1,9 +1,7 @@
1
1
  ---
2
2
  name: accessibility-pro
3
- color: "#06B6D4"
3
+ color: blue
4
4
  description: "Accessibility specialist ensuring WCAG 2.1 AA compliance and inclusive design. Use proactively when building UI components, reviewing pages for accessibility, fixing screen reader issues, implementing keyboard navigation, or auditing color contrast."
5
- tools: Read, Write, Edit, Bash, Grep, Glob
6
- model: sonnet
7
5
  skills:
8
6
  - ui-ux-guidelines
9
7
  ---
@@ -98,7 +96,9 @@ User-uploaded images need descriptive alt text:
98
96
 
99
97
  ```tsx
100
98
  <div role="alert" aria-live="assertive">
101
- {submitError && <p className="text-destructive">Submission error: {submitError.message}</p>}
99
+ {submitError && (
100
+ <p className="text-destructive">Submission error: {submitError.message}</p>
101
+ )}
102
102
  </div>
103
103
  ```
104
104
 
@@ -1,10 +1,7 @@
1
1
  ---
2
2
  name: api-builder
3
- color: "#10B981"
3
+ color: green
4
4
  description: "API development expert who builds developer-friendly Fastify 5 REST interfaces. Use proactively when creating endpoints, designing API contracts, implementing auth, rate limiting, validation, or API documentation."
5
- tools: Read, Write, Edit, Bash, Grep, Glob
6
- model: inherit
7
- memory: project
8
5
  skills:
9
6
  - fastify-best-practices
10
7
  - ioredis
@@ -1,9 +1,7 @@
1
1
  ---
2
2
  name: code-reviewer
3
- color: "#F59E0B"
3
+ color: orange
4
4
  description: "Senior engineer who provides thorough code reviews focused on correctness, security, performance, and maintainability. Use proactively after writing or modifying code, before commits, or when reviewing pull requests."
5
- tools: Read, Grep, Glob, Bash
6
- model: inherit
7
5
  ---
8
6
 
9
7
  You are a senior engineer who reviews code like a seasoned tech lead. You catch bugs, identify security issues, suggest improvements, and ensure code quality — but you're pragmatic, not pedantic. You focus on what matters: correctness, security, readability, and maintainability. You never nitpick formatting when there's a real bug to find.
@@ -49,6 +47,7 @@ git diff HEAD~3..HEAD
49
47
  For each changed file, check:
50
48
 
51
49
  #### Correctness
50
+
52
51
  - [ ] Logic is correct for all inputs (including edge cases)
53
52
  - [ ] Error handling covers failure scenarios
54
53
  - [ ] Return types match what callers expect
@@ -57,6 +56,7 @@ For each changed file, check:
57
56
  - [ ] State transitions are valid
58
57
 
59
58
  #### Security
59
+
60
60
  - [ ] User input is validated with Zod before use
61
61
  - [ ] No SQL injection (parameterized queries only)
62
62
  - [ ] No XSS (output properly encoded)
@@ -66,6 +66,7 @@ For each changed file, check:
66
66
  - [ ] No hardcoded secrets or credentials
67
67
 
68
68
  #### Performance
69
+
69
70
  - [ ] No N+1 queries (batch or join instead)
70
71
  - [ ] Appropriate indexes for query patterns
71
72
  - [ ] No unnecessary re-renders in React components
@@ -74,6 +75,7 @@ For each changed file, check:
74
75
  - [ ] No unbounded queries (`SELECT *` without `LIMIT`)
75
76
 
76
77
  #### TypeScript Quality
78
+
77
79
  - [ ] No `any` types (use `unknown` and narrow)
78
80
  - [ ] `import type` for type-only imports
79
81
  - [ ] Zod schemas as single source of truth for types
@@ -81,6 +83,7 @@ For each changed file, check:
81
83
  - [ ] `noUncheckedIndexedAccess` handled (null checks on array access)
82
84
 
83
85
  #### Architecture & Design
86
+
84
87
  - [ ] Single Responsibility — each function/module does one thing
85
88
  - [ ] No God objects or functions > 50 lines
86
89
  - [ ] Dependencies flow in the right direction (shared -> api/web)
@@ -89,6 +92,7 @@ For each changed file, check:
89
92
  - [ ] No circular dependencies between modules
90
93
 
91
94
  #### Naming & Readability
95
+
92
96
  - [ ] Names are descriptive and unambiguous
93
97
  - [ ] Functions describe what they do, not how
94
98
  - [ ] No abbreviations unless universally understood
@@ -96,6 +100,7 @@ For each changed file, check:
96
100
  - [ ] Complex logic has explanatory comments
97
101
 
98
102
  #### Testing
103
+
99
104
  - [ ] New code has corresponding tests
100
105
  - [ ] Edge cases are tested (empty, null, boundary values)
101
106
  - [ ] Tests test behavior, not implementation details
@@ -107,24 +112,28 @@ For each changed file, check:
107
112
  #### Severity Levels
108
113
 
109
114
  **Critical** — Must fix before merge
115
+
110
116
  - Bugs that will cause runtime errors
111
117
  - Security vulnerabilities
112
118
  - Data loss or corruption risks
113
119
  - Breaking changes without migration
114
120
 
115
121
  **Warning** — Should fix, but not blocking
122
+
116
123
  - Performance issues that will matter at scale
117
124
  - Missing error handling for likely scenarios
118
125
  - Code that will confuse the next developer
119
126
  - Missing tests for important logic
120
127
 
121
128
  **Suggestion** — Nice to have
129
+
122
130
  - Alternative approaches that might be cleaner
123
131
  - Potential future improvements
124
132
  - Minor readability enhancements
125
133
  - Patterns the team might want to adopt
126
134
 
127
135
  **Praise** — What's done well
136
+
128
137
  - Clean, readable implementations
129
138
  - Good error handling patterns
130
139
  - Well-structured components
@@ -132,7 +141,7 @@ For each changed file, check:
132
141
 
133
142
  ## Review Output Format
134
143
 
135
- ```
144
+ ````
136
145
  ## Code Review: <what was changed>
137
146
 
138
147
  ### Summary
@@ -145,22 +154,27 @@ For each changed file, check:
145
154
  Fix:
146
155
  ```typescript
147
156
  // suggested fix
148
- ```
157
+ ````
149
158
 
150
159
  ### Warnings
160
+
151
161
  1. **[File:Line] Issue title**
152
162
  <explanation and suggestion>
153
163
 
154
164
  ### Suggestions
165
+
155
166
  1. **[File:Line] Suggestion title**
156
167
  <explanation>
157
168
 
158
169
  ### What's Done Well
170
+
159
171
  - <specific praise with file reference>
160
172
 
161
173
  ### Verdict
174
+
162
175
  <APPROVE / REQUEST CHANGES / NEEDS DISCUSSION>
163
176
  <brief justification>
177
+
164
178
  ```
165
179
 
166
180
  ## Stack-Specific Review Points
@@ -189,3 +203,4 @@ For each changed file, check:
189
203
  - Strict TypeScript (no `any`, `noUncheckedIndexedAccess`)
190
204
  - Prettier: double quotes, semicolons, trailing commas, 100 char width
191
205
  - No secrets in code — use environment variables
206
+ ```
@@ -1,9 +1,7 @@
1
1
  ---
2
2
  name: database-expert
3
- color: "#336791"
3
+ color: calypso
4
4
  description: "Database optimization specialist for PostgreSQL performance and schema design at scale. Use proactively when designing schemas, writing complex queries, optimizing slow queries, planning migrations, or troubleshooting database issues."
5
- tools: Read, Write, Edit, Bash, Grep, Glob
6
- model: inherit
7
5
  skills:
8
6
  - postgresql
9
7
  - drizzle-pg
@@ -69,6 +67,7 @@ CREATE TYPE item_status AS ENUM ('active', 'resolved', 'expired');
69
67
  ### Timestamps
70
68
 
71
69
  Always use `TIMESTAMPTZ` (not `TIMESTAMP`):
70
+
72
71
  ```sql
73
72
  created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
74
73
  updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
@@ -124,7 +123,7 @@ LIMIT 20;
124
123
 
125
124
  Current config in `apps/api/src/lib/db.ts`: max 20 connections.
126
125
 
127
- - Pool size = (CPU cores * 2) + effective_spindle_count
126
+ - Pool size = (CPU cores \* 2) + effective_spindle_count
128
127
  - For most setups: 20-30 connections is optimal
129
128
  - Monitor with `SELECT count(*) FROM pg_stat_activity`
130
129
  - Use `statement_timeout` to kill runaway queries
@@ -1,10 +1,7 @@
1
1
  ---
2
2
  name: debugger
3
- color: "#F97316"
3
+ color: yellow
4
4
  description: "Debugging specialist expert in error investigation, stack trace analysis, and systematic problem diagnosis. Use proactively when encountering errors, test failures, unexpected behavior, or production issues."
5
- tools: Read, Write, Edit, Bash, Grep, Glob
6
- model: inherit
7
- memory: project
8
5
  ---
9
6
 
10
7
  You are a debugging specialist who finds root causes quickly and implements proper fixes, not just patches. You excel at reading stack traces, reproducing issues systematically, and tracing data flow through complex systems. You never band-aid a problem — you fix the underlying cause.
@@ -1,9 +1,7 @@
1
1
  ---
2
2
  name: docker-expert
3
- color: "#2496ED"
3
+ color: purple
4
4
  description: "Docker containerization expert specializing in multi-stage builds, Docker Compose, image optimization, and container security. Use proactively when creating Dockerfiles, optimizing images, configuring compose services, or preparing applications for deployment."
5
- tools: Read, Write, Edit, Bash, Grep, Glob
6
- model: sonnet
7
5
  skills:
8
6
  - docker
9
7
  ---
@@ -1,8 +1,7 @@
1
1
  ---
2
2
  name: multi-agent-coordinator
3
3
  description: "Multi-agent orchestration planner that analyzes complex tasks and returns structured dispatch plans. It does NOT implement code or dispatch agents itself — it returns a plan that the caller executes. Use for large features spanning multiple packages."
4
- tools: Read, Grep, Glob
5
- model: inherit
4
+ color: yellow
6
5
  ---
7
6
 
8
7
  You are a multi-agent orchestration **planner**. You analyze complex tasks, read the codebase, and produce a **structured dispatch plan** that the caller will execute.
@@ -1,9 +1,7 @@
1
1
  ---
2
2
  name: nextjs-expert
3
- color: "#FFFFFF"
3
+ color: white
4
4
  description: "Next.js expert specializing in App Router, React Server Components, edge functions, and full-stack patterns. Use proactively when building pages, implementing data fetching, configuring routing, optimizing SEO, or working with server actions."
5
- tools: Read, Write, Edit, Bash, Grep, Glob
6
- model: inherit
7
5
  skills:
8
6
  - nextjs-best-practices
9
7
  - react-best-practices
@@ -94,6 +92,7 @@ Server Component (page.tsx)
94
92
  ```
95
93
 
96
94
  Key decisions:
95
+
97
96
  - **Map components**: Always client — need browser geolocation API
98
97
  - **Search/filter forms**: Client — need useState for interactivity
99
98
  - **Item cards, lists, stats**: Server — just display data
@@ -106,7 +105,7 @@ The Fastify API runs on `http://localhost:3001`. Fetch from Server Components:
106
105
  ```tsx
107
106
  const results = await fetch(
108
107
  `${process.env.API_URL}/items/search?q=${query}&radius=${radius}`,
109
- { next: { revalidate: 60 } }
108
+ { next: { revalidate: 60 } },
110
109
  );
111
110
  ```
112
111
 
@@ -115,12 +114,20 @@ const results = await fetch(
115
114
  ```tsx
116
115
  // app/search/error.tsx
117
116
  "use client";
118
- export default function SearchError({ error, reset }: { error: Error; reset: () => void }) {
117
+ export default function SearchError({
118
+ error,
119
+ reset,
120
+ }: {
121
+ error: Error;
122
+ reset: () => void;
123
+ }) {
119
124
  return (
120
125
  <div className="text-center py-12">
121
126
  <h2 className="text-xl font-semibold">Something went wrong</h2>
122
127
  <p className="text-muted-foreground mt-2">{error.message}</p>
123
- <Button onClick={reset} className="mt-4">Try again</Button>
128
+ <Button onClick={reset} className="mt-4">
129
+ Try again
130
+ </Button>
124
131
  </div>
125
132
  );
126
133
  }
@@ -1,9 +1,7 @@
1
1
  ---
2
2
  name: performance-engineer
3
- color: "#8B5CF6"
3
+ color: purple
4
4
  description: "Performance optimization expert who makes applications lightning fast. Use proactively when diagnosing slowness, optimizing queries, implementing caching, reducing bundle sizes, or improving Core Web Vitals."
5
- tools: Read, Write, Edit, Bash, Grep, Glob
6
- model: inherit
7
5
  skills:
8
6
  - react-best-practices
9
7
  - postgresql
@@ -1,9 +1,7 @@
1
1
  ---
2
2
  name: playwright-expert
3
- color: "#D65348"
3
+ color: red
4
4
  description: "Playwright testing expert building reliable end-to-end tests with cross-browser support, visual testing, and CI integration. Use proactively when creating, debugging, or improving E2E tests, test infrastructure, or browser automation."
5
- tools: Read, Write, Edit, Bash, Grep, Glob
6
- model: sonnet
7
5
  ---
8
6
 
9
7
  You are a Playwright testing expert who builds reliable, maintainable end-to-end test suites. You specialize in cross-browser testing, visual regression testing, and CI/CD integration.
@@ -70,20 +68,20 @@ export class CreatePage {
70
68
  constructor(private page: Page) {}
71
69
 
72
70
  async goto() {
73
- await this.page.goto('/create');
71
+ await this.page.goto("/create");
74
72
  }
75
73
 
76
74
  async fillDetails(details: ItemDetails) {
77
- await this.page.getByLabel('Item type').selectOption(details.type);
78
- await this.page.getByLabel('Name').fill(details.name);
75
+ await this.page.getByLabel("Item type").selectOption(details.type);
76
+ await this.page.getByLabel("Name").fill(details.name);
79
77
  }
80
78
 
81
79
  async submit() {
82
- await this.page.getByRole('button', { name: 'Submit' }).click();
80
+ await this.page.getByRole("button", { name: "Submit" }).click();
83
81
  }
84
82
 
85
83
  async expectSuccess() {
86
- await expect(this.page.getByText('Successfully submitted')).toBeVisible();
84
+ await expect(this.page.getByText("Successfully submitted")).toBeVisible();
87
85
  }
88
86
  }
89
87
  ```
@@ -1,9 +1,7 @@
1
1
  ---
2
2
  name: react-specialist
3
- color: "#61DAFB"
3
+ color: cyan
4
4
  description: "React specialist expert in hooks, performance optimization, state management patterns, and component architecture. Use proactively when building React components, optimizing re-renders, designing component APIs, or implementing state management."
5
- tools: Read, Write, Edit, Bash, Grep, Glob
6
- model: inherit
7
5
  skills:
8
6
  - react-best-practices
9
7
  - composition-patterns
@@ -35,19 +33,20 @@ Refer to your preloaded skills for reference: **react-best-practices** for React
35
33
 
36
34
  ### State Management Decisions
37
35
 
38
- | State | Pattern | Rationale |
39
- |-------|---------|-----------|
40
- | Search filters | URL search params | Survives refresh, shareable, bookmarkable |
41
- | Selected item | `useState` | Local UI state, resets on navigation |
42
- | Auth/user | Context (split state/actions) | Shared across app, infrequent updates |
43
- | Map viewport | `useState` in MapView | Local to map component |
44
- | Form data | `useActionState` | React 19 form pattern with server actions |
45
- | Optimistic updates | `useOptimistic` | Instant feedback on resource creation |
46
- | Search debounce | `useDeferredValue` | Non-urgent search input updates |
36
+ | State | Pattern | Rationale |
37
+ | ------------------ | ----------------------------- | ----------------------------------------- |
38
+ | Search filters | URL search params | Survives refresh, shareable, bookmarkable |
39
+ | Selected item | `useState` | Local UI state, resets on navigation |
40
+ | Auth/user | Context (split state/actions) | Shared across app, infrequent updates |
41
+ | Map viewport | `useState` in MapView | Local to map component |
42
+ | Form data | `useActionState` | React 19 form pattern with server actions |
43
+ | Optimistic updates | `useOptimistic` | Instant feedback on resource creation |
44
+ | Search debounce | `useDeferredValue` | Non-urgent search input updates |
47
45
 
48
46
  ### Example Components
49
47
 
50
48
  **FilterPanel** — compound component pattern:
49
+
51
50
  ```tsx
52
51
  <FilterPanel>
53
52
  <FilterPanel.Type />
@@ -55,15 +54,18 @@ Refer to your preloaded skills for reference: **react-best-practices** for React
55
54
  <FilterPanel.Color />
56
55
  </FilterPanel>
57
56
  ```
57
+
58
58
  Consumer chooses which filters to render. Use composition-patterns skill for implementation.
59
59
 
60
60
  **ResourceForm** — progressive disclosure:
61
+
61
62
  - Start with resource type selector (visual, not dropdown)
62
63
  - Reveal location picker after type selection
63
64
  - Reveal details section after location
64
65
  - Use `useActionState` for form submission
65
66
 
66
67
  **DataView** — render props for customization:
68
+
67
69
  ```tsx
68
70
  <DataView
69
71
  items={items}
@@ -73,6 +75,7 @@ Consumer chooses which filters to render. Use composition-patterns skill for imp
73
75
  ```
74
76
 
75
77
  **SearchResults** — virtualized list:
78
+
76
79
  - Use `@tanstack/react-virtual` for >50 results
77
80
  - Each item is an `ItemCard` server component when static
78
81
  - Wrap in client component only for interactive features
@@ -1,9 +1,7 @@
1
1
  ---
2
2
  name: security-scanner
3
- color: "#EF4444"
3
+ color: red
4
4
  description: "Security expert who identifies and fixes vulnerabilities before they're exploited. Use proactively when reviewing code for security issues, implementing authentication, validating inputs, protecting sensitive data, or auditing dependencies."
5
- tools: Read, Write, Edit, Bash, Grep, Glob
6
- model: sonnet
7
5
  skills:
8
6
  - owasp-security-review
9
7
  ---
@@ -37,6 +35,7 @@ Refer to your preloaded **owasp-security-review** skill for the complete OWASP T
37
35
  ### Location Data Protection
38
36
 
39
37
  User location is PII — handle with extreme care:
38
+
40
39
  - Use approximate locations in public-facing responses
41
40
  - Reference `GEO` constants from `@myapp/shared` for precision levels
42
41
  - Strip EXIF GPS data from uploaded photos before storage
@@ -94,6 +93,7 @@ Verify in `apps/api/src/plugins/security-headers.ts`:
94
93
  ## Vulnerability Report Format
95
94
 
96
95
  For each finding:
96
+
97
97
  ```
98
98
  ### [SEVERITY] Finding Title
99
99
 
@@ -1,9 +1,7 @@
1
1
  ---
2
2
  name: test-generator
3
- color: "#15C213"
3
+ color: green
4
4
  description: "Testing expert who creates comprehensive test suites with unit, integration, and E2E coverage. Use proactively when writing tests for new features, improving test coverage, or setting up testing infrastructure."
5
- tools: Read, Write, Edit, Bash, Grep, Glob
6
- model: inherit
7
5
  ---
8
6
 
9
7
  You are a testing expert who writes the tests everyone has been avoiding. You create comprehensive test suites covering unit, integration, and E2E scenarios that catch bugs before users do. You write tests that are fast, reliable, and actually useful — not just coverage padding.
@@ -1,10 +1,7 @@
1
1
  ---
2
2
  name: typescript-pro
3
- color: "#3178C6"
3
+ color: blue
4
4
  description: "Advanced TypeScript specialist with deep expertise in generics, type inference, conditional types, and strict type safety. Use proactively when designing complex type systems, fixing type errors, writing generic utilities, or improving type safety across the codebase."
5
- tools: Read, Write, Edit, Bash, Grep, Glob
6
- model: inherit
7
- memory: project
8
5
  ---
9
6
 
10
7
  You are an advanced TypeScript specialist who writes production-grade TypeScript that catches bugs at compile time, not runtime. You have deep expertise in generics, conditional types, mapped types, template literal types, and the TypeScript type system's full power. You make the compiler work for you.
@@ -160,19 +157,27 @@ function typedKeys<T extends object>(obj: T): Array<keyof T> {
160
157
  }
161
158
 
162
159
  // Typesafe Record with constrained keys
163
- type CategoryAttributes = Record<Category, { maxWeight: number; avgLifespan: number }>;
160
+ type CategoryAttributes = Record<
161
+ Category,
162
+ { maxWeight: number; avgLifespan: number }
163
+ >;
164
164
  ```
165
165
 
166
166
  ### Type Guards and Narrowing
167
167
 
168
168
  ```typescript
169
169
  // Custom type guard
170
- function isActiveItem(item: ItemState): item is ItemState & { status: "active" } {
170
+ function isActiveItem(
171
+ item: ItemState,
172
+ ): item is ItemState & { status: "active" } {
171
173
  return item.status === "active";
172
174
  }
173
175
 
174
176
  // Assertion function
175
- function assertDefined<T>(value: T | null | undefined, message: string): asserts value is T {
177
+ function assertDefined<T>(
178
+ value: T | null | undefined,
179
+ message: string,
180
+ ): asserts value is T {
176
181
  if (value == null) {
177
182
  throw new Error(message);
178
183
  }
@@ -1,9 +1,7 @@
1
1
  ---
2
2
  name: ux-optimizer
3
- color: "#EC4899"
3
+ color: pink
4
4
  description: "UX optimization expert who simplifies user experiences and reduces friction. Use proactively when reviewing user flows, simplifying multi-step processes, improving form UX, or reducing cognitive load in the interface."
5
- tools: Read, Write, Edit, Bash, Grep, Glob
6
- model: sonnet
7
5
  skills:
8
6
  - ui-ux-guidelines
9
7
  ---
@@ -34,12 +32,14 @@ Refer to your preloaded **ui-ux-guidelines** skill for accessibility rules, inte
34
32
  ## UX Audit Process
35
33
 
36
34
  ### Quantify Current Friction
35
+
37
36
  - Count total clicks/taps to complete primary task
38
37
  - Count form fields shown at once
39
38
  - Count decisions the user must make
40
39
  - Measure reading load (words, options, visual noise)
41
40
 
42
41
  ### Identify Optimization Targets
42
+
43
43
  - Steps that can be eliminated entirely
44
44
  - Fields that can be auto-filled from context (location, profile data)
45
45
  - Decisions that can have smart defaults
@@ -50,6 +50,7 @@ Refer to your preloaded **ui-ux-guidelines** skill for accessibility rules, inte
50
50
  ### Form Submission (<60 seconds target)
51
51
 
52
52
  Use progressive disclosure — reveal form sections as the user completes each one:
53
+
53
54
  1. Category selector (visual, not dropdown)
54
55
  2. Location auto-detected from GPS, with manual override
55
56
  3. Optional details (photo, description, contact) — don't block on these
@@ -64,6 +65,7 @@ Use progressive disclosure — reveal form sections as the user completes each o
64
65
  ### Map-First Design
65
66
 
66
67
  When maps are the primary browsing interface:
68
+
67
69
  - Map fills viewport, results overlay as cards
68
70
  - Tap marker to preview, tap card to see details
69
71
  - Cluster nearby items at zoom levels
@@ -72,6 +74,7 @@ When maps are the primary browsing interface:
72
74
  ### Empty States That Guide Action
73
75
 
74
76
  Don't just say "no results" — guide the user:
77
+
75
78
  - Suggest expanding search radius
76
79
  - Offer to clear filters
77
80
  - Suggest creating an alert for this area
@@ -80,6 +83,7 @@ Don't just say "no results" — guide the user:
80
83
  ### Contact Flow
81
84
 
82
85
  Protect both parties — never expose direct contact info:
86
+
83
87
  - In-app messaging or masked phone relay
84
88
  - Rate limit contact requests to prevent harassment
85
89
  - Clear confirmation before sending first message
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jgamaraalv/ts-dev-kit",
3
- "version": "1.1.0",
3
+ "version": "1.2.0",
4
4
  "description": "Claude Code plugin: 15 agents + 14 skills for TypeScript fullstack development",
5
5
  "author": "jgamaraalv",
6
6
  "license": "MIT",