@vpxa/aikit 0.1.74 → 0.1.75

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (134) hide show
  1. package/package.json +6 -1
  2. package/packages/cli/dist/index.js +2 -2
  3. package/packages/cli/dist/{init-DQkar6Es.js → init-CuRXmyD9.js} +1 -1
  4. package/packages/cli/dist/scaffold-WMQ2uQ48.js +2 -0
  5. package/packages/cli/dist/{user-CopNWxHP.js → user-vbJwa7x2.js} +1 -1
  6. package/scaffold/dist/adapters/claude-code.mjs +4 -0
  7. package/scaffold/dist/adapters/copilot.mjs +75 -0
  8. package/scaffold/dist/adapters/flows.mjs +1 -0
  9. package/scaffold/dist/adapters/skills.mjs +1 -0
  10. package/scaffold/{compiled → dist/compiled}/flows-data.mjs +304 -446
  11. package/scaffold/{compiled → dist/compiled}/skills-data.mjs +554 -2281
  12. package/scaffold/dist/definitions/agents.mjs +9 -0
  13. package/scaffold/{definitions → dist/definitions}/bodies.mjs +6 -229
  14. package/scaffold/dist/definitions/exclusions.mjs +1 -0
  15. package/scaffold/dist/definitions/hooks.mjs +1 -0
  16. package/scaffold/dist/definitions/models.mjs +1 -0
  17. package/scaffold/dist/definitions/plugins.mjs +1 -0
  18. package/scaffold/{definitions → dist/definitions}/prompts.mjs +9 -149
  19. package/scaffold/{definitions → dist/definitions}/protocols.mjs +9 -37
  20. package/scaffold/dist/definitions/tools.mjs +1 -0
  21. package/packages/cli/dist/scaffold-ukCDW3wQ.js +0 -2
  22. package/scaffold/_preview/agents/Architect-Reviewer-Alpha.agent.md +0 -132
  23. package/scaffold/_preview/agents/Architect-Reviewer-Beta.agent.md +0 -132
  24. package/scaffold/_preview/agents/Code-Reviewer-Alpha.agent.md +0 -112
  25. package/scaffold/_preview/agents/Code-Reviewer-Beta.agent.md +0 -112
  26. package/scaffold/_preview/agents/Debugger.agent.md +0 -412
  27. package/scaffold/_preview/agents/Documenter.agent.md +0 -468
  28. package/scaffold/_preview/agents/Explorer.agent.md +0 -76
  29. package/scaffold/_preview/agents/Frontend.agent.md +0 -440
  30. package/scaffold/_preview/agents/Implementer.agent.md +0 -425
  31. package/scaffold/_preview/agents/Orchestrator.agent.md +0 -452
  32. package/scaffold/_preview/agents/Planner.agent.md +0 -481
  33. package/scaffold/_preview/agents/README.md +0 -57
  34. package/scaffold/_preview/agents/Refactor.agent.md +0 -435
  35. package/scaffold/_preview/agents/Researcher-Alpha.agent.md +0 -151
  36. package/scaffold/_preview/agents/Researcher-Beta.agent.md +0 -152
  37. package/scaffold/_preview/agents/Researcher-Delta.agent.md +0 -153
  38. package/scaffold/_preview/agents/Researcher-Gamma.agent.md +0 -152
  39. package/scaffold/_preview/agents/Security.agent.md +0 -433
  40. package/scaffold/_preview/agents/_shared/architect-reviewer-base.md +0 -104
  41. package/scaffold/_preview/agents/_shared/code-agent-base.md +0 -366
  42. package/scaffold/_preview/agents/_shared/code-reviewer-base.md +0 -87
  43. package/scaffold/_preview/agents/_shared/decision-protocol.md +0 -27
  44. package/scaffold/_preview/agents/_shared/forge-protocol.md +0 -90
  45. package/scaffold/_preview/agents/_shared/researcher-base.md +0 -114
  46. package/scaffold/_preview/agents/templates/adr-template.md +0 -28
  47. package/scaffold/_preview/agents/templates/execution-state.md +0 -26
  48. package/scaffold/_preview/flows/_epilogue/steps/docs-sync/README.md +0 -120
  49. package/scaffold/_preview/flows/aikit-advanced/README.md +0 -70
  50. package/scaffold/_preview/flows/aikit-advanced/steps/design/README.md +0 -178
  51. package/scaffold/_preview/flows/aikit-advanced/steps/execute/README.md +0 -145
  52. package/scaffold/_preview/flows/aikit-advanced/steps/plan/README.md +0 -122
  53. package/scaffold/_preview/flows/aikit-advanced/steps/spec/README.md +0 -121
  54. package/scaffold/_preview/flows/aikit-advanced/steps/task/README.md +0 -119
  55. package/scaffold/_preview/flows/aikit-advanced/steps/verify/README.md +0 -145
  56. package/scaffold/_preview/flows/aikit-basic/README.md +0 -51
  57. package/scaffold/_preview/flows/aikit-basic/steps/assess/README.md +0 -109
  58. package/scaffold/_preview/flows/aikit-basic/steps/design/README.md +0 -116
  59. package/scaffold/_preview/flows/aikit-basic/steps/implement/README.md +0 -131
  60. package/scaffold/_preview/flows/aikit-basic/steps/verify/README.md +0 -123
  61. package/scaffold/_preview/prompts/aikit-ask.prompt.md +0 -13
  62. package/scaffold/_preview/prompts/aikit-debug.prompt.md +0 -15
  63. package/scaffold/_preview/prompts/aikit-design.prompt.md +0 -15
  64. package/scaffold/_preview/prompts/aikit-flow-add.prompt.md +0 -84
  65. package/scaffold/_preview/prompts/aikit-flow-create.prompt.md +0 -80
  66. package/scaffold/_preview/prompts/aikit-flow-manage.prompt.md +0 -24
  67. package/scaffold/_preview/prompts/aikit-implement.prompt.md +0 -17
  68. package/scaffold/_preview/prompts/aikit-plan.prompt.md +0 -15
  69. package/scaffold/_preview/prompts/aikit-review.prompt.md +0 -24
  70. package/scaffold/_preview/skills/adr-skill/SKILL.md +0 -335
  71. package/scaffold/_preview/skills/adr-skill/assets/templates/adr-madr.md +0 -89
  72. package/scaffold/_preview/skills/adr-skill/assets/templates/adr-readme.md +0 -20
  73. package/scaffold/_preview/skills/adr-skill/assets/templates/adr-simple.md +0 -46
  74. package/scaffold/_preview/skills/adr-skill/references/adr-conventions.md +0 -95
  75. package/scaffold/_preview/skills/adr-skill/references/examples.md +0 -193
  76. package/scaffold/_preview/skills/adr-skill/references/review-checklist.md +0 -77
  77. package/scaffold/_preview/skills/adr-skill/references/template-variants.md +0 -52
  78. package/scaffold/_preview/skills/adr-skill/scripts/bootstrap_adr.js +0 -259
  79. package/scaffold/_preview/skills/adr-skill/scripts/new_adr.js +0 -391
  80. package/scaffold/_preview/skills/adr-skill/scripts/set_adr_status.js +0 -169
  81. package/scaffold/_preview/skills/aikit/SKILL.md +0 -754
  82. package/scaffold/_preview/skills/brainstorming/SKILL.md +0 -265
  83. package/scaffold/_preview/skills/brainstorming/spec-document-reviewer-prompt.md +0 -49
  84. package/scaffold/_preview/skills/c4-architecture/SKILL.md +0 -389
  85. package/scaffold/_preview/skills/c4-architecture/references/advanced-patterns.md +0 -552
  86. package/scaffold/_preview/skills/c4-architecture/references/c4-syntax.md +0 -510
  87. package/scaffold/_preview/skills/c4-architecture/references/common-mistakes.md +0 -437
  88. package/scaffold/_preview/skills/c4-architecture/references/html-design-system.md +0 -337
  89. package/scaffold/_preview/skills/c4-architecture/references/html-template.html +0 -627
  90. package/scaffold/_preview/skills/docs/SKILL.md +0 -553
  91. package/scaffold/_preview/skills/docs/references/diataxis-anti-patterns.md +0 -147
  92. package/scaffold/_preview/skills/docs/references/diataxis-compass.md +0 -123
  93. package/scaffold/_preview/skills/docs/references/diataxis-quadrants.md +0 -192
  94. package/scaffold/_preview/skills/docs/references/diataxis-quality.md +0 -76
  95. package/scaffold/_preview/skills/docs/references/diataxis-templates.md +0 -120
  96. package/scaffold/_preview/skills/docs/references/flow-artifacts-guide.md +0 -70
  97. package/scaffold/_preview/skills/docs/references/project-knowledge-gotchas.md +0 -32
  98. package/scaffold/_preview/skills/docs/references/project-knowledge-templates.md +0 -281
  99. package/scaffold/_preview/skills/docs/references/project-knowledge-workflow.md +0 -80
  100. package/scaffold/_preview/skills/frontend-design/SKILL.md +0 -237
  101. package/scaffold/_preview/skills/lesson-learned/SKILL.md +0 -113
  102. package/scaffold/_preview/skills/lesson-learned/references/anti-patterns.md +0 -55
  103. package/scaffold/_preview/skills/lesson-learned/references/se-principles.md +0 -109
  104. package/scaffold/_preview/skills/multi-agents-development/SKILL.md +0 -448
  105. package/scaffold/_preview/skills/multi-agents-development/architecture-review-prompt.md +0 -81
  106. package/scaffold/_preview/skills/multi-agents-development/code-quality-review-prompt.md +0 -91
  107. package/scaffold/_preview/skills/multi-agents-development/implementer-prompt.md +0 -93
  108. package/scaffold/_preview/skills/multi-agents-development/parallel-dispatch-example.md +0 -167
  109. package/scaffold/_preview/skills/multi-agents-development/spec-review-prompt.md +0 -81
  110. package/scaffold/_preview/skills/present/SKILL.md +0 -616
  111. package/scaffold/_preview/skills/react/SKILL.md +0 -309
  112. package/scaffold/_preview/skills/repo-access/SKILL.md +0 -178
  113. package/scaffold/_preview/skills/repo-access/references/error-patterns.md +0 -116
  114. package/scaffold/_preview/skills/repo-access/references/platform-matrix.md +0 -142
  115. package/scaffold/_preview/skills/requirements-clarity/SKILL.md +0 -333
  116. package/scaffold/_preview/skills/session-handoff/SKILL.md +0 -199
  117. package/scaffold/_preview/skills/session-handoff/references/handoff-template.md +0 -139
  118. package/scaffold/_preview/skills/session-handoff/references/resume-checklist.md +0 -80
  119. package/scaffold/_preview/skills/session-handoff/scripts/check_staleness.js +0 -269
  120. package/scaffold/_preview/skills/session-handoff/scripts/create_handoff.js +0 -299
  121. package/scaffold/_preview/skills/session-handoff/scripts/list_handoffs.js +0 -113
  122. package/scaffold/_preview/skills/session-handoff/scripts/validate_handoff.js +0 -241
  123. package/scaffold/_preview/skills/typescript/SKILL.md +0 -405
  124. package/scaffold/adapters/claude-code.mjs +0 -73
  125. package/scaffold/adapters/copilot.mjs +0 -292
  126. package/scaffold/adapters/flows.mjs +0 -27
  127. package/scaffold/adapters/skills.mjs +0 -25
  128. package/scaffold/definitions/agents.mjs +0 -266
  129. package/scaffold/definitions/exclusions.mjs +0 -58
  130. package/scaffold/definitions/hooks.mjs +0 -43
  131. package/scaffold/definitions/models.mjs +0 -84
  132. package/scaffold/definitions/plugins.mjs +0 -147
  133. package/scaffold/definitions/tools.mjs +0 -250
  134. package/scaffold/generate.mjs +0 -92
@@ -1,405 +0,0 @@
1
- ---
2
- name: typescript
3
- description: "Comprehensive TypeScript development patterns — type system performance, compiler configuration, advanced types, type safety, async patterns, module organization, and runtime optimization."
4
- metadata:
5
- category: domain
6
- domain: typescript
7
- applicability: on-demand
8
- inputs: [codebase, requirements]
9
- outputs: [type-patterns, code]
10
- relatedSkills: [react]
11
- ---
12
-
13
- # TypeScript
14
-
15
- > Comprehensive TypeScript development patterns — type system performance, compiler configuration, advanced types, type safety, async patterns, module organization, and runtime optimization. Synthesized from pproenca TypeScript rules, TypeScript 6.0 features, wshobson advanced types and modern JS patterns, and Jeffallan typescript-pro patterns.
16
-
17
- ## When to Use
18
-
19
- **MANDATORY** for the Implementer agent on every TypeScript task. Also use when:
20
- - Writing or reviewing TypeScript code
21
- - Configuring `tsconfig.json` or compiler options
22
- - Designing type-safe APIs, libraries, or utilities
23
- - Optimizing type-check performance or build times
24
-
25
- ## Type System Performance
26
-
27
- These rules prevent slow type-checking and IDE lag:
28
-
29
- ### Prefer Flat Unions Over Deep Conditionals
30
- ```tsx
31
- // BAD — O(n²) type checking with deep conditionals
32
- type DeepResolve<T> = T extends Promise<infer U> ? DeepResolve<U> : T extends Array<infer V> ? DeepResolve<V>[] : T;
33
-
34
- // GOOD — flat unions check in O(n)
35
- type Status = "idle" | "loading" | "success" | "error";
36
- type Result = SuccessResult | ErrorResult | PendingResult;
37
- ```
38
-
39
- ### Interface Extends Over Intersection
40
- ```tsx
41
- // BAD — intersection types are expensive to compute
42
- type Extended = BaseType & { extra: string } & { more: number };
43
-
44
- // GOOD — interface extends is cached by the compiler
45
- interface Extended extends BaseType {
46
- extra: string;
47
- more: number;
48
- }
49
- ```
50
-
51
- ### Rules
52
- - **Avoid recursive conditional types** deeper than 3 levels — use iterative mapped types instead
53
- - **Minimize computed types** in hot paths (function parameters, return types used in many places)
54
- - **Use `interface` for object shapes**, `type` for unions, intersections, and mapped types
55
- - **Annotate complex return types** explicitly — don't force the compiler to infer through 5 layers
56
- - **Avoid generic defaults that trigger deep inference** — provide explicit type arguments at call sites
57
- - **Break circular type references** — extract shared shapes into separate interfaces
58
-
59
- ## Compiler Configuration
60
-
61
- ### Strict Mode (all projects)
62
- ```jsonc
63
- {
64
- "compilerOptions": {
65
- "strict": true, // Enables ALL strict checks
66
- "noUncheckedIndexedAccess": true, // arr[0] is T | undefined
67
- "exactOptionalProperties": true, // undefined ≠ missing
68
- "noFallthroughCasesInSwitch": true,
69
- "forceConsistentCasingInFileNames": true,
70
- "isolatedModules": true, // Required for most bundlers
71
- "verbatimModuleSyntax": true // Explicit import/export type
72
- }
73
- }
74
- ```
75
-
76
- ### Build Performance
77
- ```jsonc
78
- {
79
- "compilerOptions": {
80
- "incremental": true, // Cache type-check results
81
- "tsBuildInfoFile": ".tsbuildinfo",
82
- "skipLibCheck": true // Skip .d.ts checking (safe for apps)
83
- }
84
- }
85
- ```
86
-
87
- ### Project References (monorepos)
88
- ```jsonc
89
- // tsconfig.json (root)
90
- {
91
- "references": [
92
- { "path": "packages/core" },
93
- { "path": "packages/server" },
94
- { "path": "packages/cli" }
95
- ]
96
- }
97
-
98
- // packages/core/tsconfig.json
99
- {
100
- "compilerOptions": {
101
- "composite": true,
102
- "declaration": true,
103
- "declarationMap": true
104
- }
105
- }
106
- ```
107
-
108
- ### TypeScript 6.0+ Features
109
- - **`#/` subpath imports**: `import { utils } from "#/lib/utils"` — no more `../../../` relative paths. Configure in `package.json` `"imports"` field.
110
- - **`es2025` target**: Set, Iterator, Promise.withResolvers, RegExp v flag
111
- - **`--noCheck`**: Skip type-checking in CI (when pre-checked) for faster builds
112
- - **`--stableTypeOrdering`**: Deterministic declaration output for reproducible builds
113
- - **`isolatedDeclarations`**: Generate `.d.ts` without type-checking — enables parallel builds
114
-
115
- ## Advanced Types
116
-
117
- ### Constrained Generics
118
- ```tsx
119
- // Constrain to ensure property exists
120
- function getProperty<T, K extends keyof T>(obj: T, key: K): T[K] {
121
- return obj[key];
122
- }
123
-
124
- // Constrain with interface
125
- function merge<T extends Record<string, unknown>>(target: T, source: Partial<T>): T {
126
- return { ...target, ...source };
127
- }
128
- ```
129
-
130
- ### Conditional Types
131
- ```tsx
132
- // Extract return type from async function
133
- type UnwrapPromise<T> = T extends Promise<infer U> ? U : T;
134
-
135
- // Distributive conditional
136
- type NonNullableDeep<T> = T extends null | undefined ? never : T extends object ? { [K in keyof T]: NonNullableDeep<T[K]> } : T;
137
-
138
- // Infer from function
139
- type Parameters<T> = T extends (...args: infer P) => unknown ? P : never;
140
- ```
141
-
142
- ### Mapped Types
143
- ```tsx
144
- // Make all properties optional recursively
145
- type DeepPartial<T> = { [P in keyof T]?: T[P] extends object ? DeepPartial<T[P]> : T[P] };
146
-
147
- // Remove readonly
148
- type Mutable<T> = { -readonly [P in keyof T]: T[P] };
149
-
150
- // Key remapping
151
- type Getters<T> = { [K in keyof T as `get${Capitalize<string & K>}`]: () => T[K] };
152
- ```
153
-
154
- ### Template Literal Types
155
- ```tsx
156
- // Event name typing
157
- type EventName<T extends string> = `on${Capitalize<T>}`;
158
- type Events = EventName<"click" | "focus" | "blur">; // "onClick" | "onFocus" | "onBlur"
159
-
160
- // Route parameter extraction
161
- type ExtractParams<T extends string> =
162
- T extends `${string}:${infer Param}/${infer Rest}`
163
- ? Param | ExtractParams<Rest>
164
- : T extends `${string}:${infer Param}`
165
- ? Param
166
- : never;
167
- type Params = ExtractParams<"/users/:id/posts/:postId">; // "id" | "postId"
168
- ```
169
-
170
- ### Utility Type Patterns
171
- ```tsx
172
- // Deep readonly
173
- type DeepReadonly<T> = { readonly [P in keyof T]: T[P] extends object ? DeepReadonly<T[P]> : T[P] };
174
-
175
- // Make specific keys required
176
- type RequireKeys<T, K extends keyof T> = T & Required<Pick<T, K>>;
177
-
178
- // Object paths as union
179
- type Paths<T, D extends number = 3> = [D] extends [never]
180
- ? never
181
- : T extends object
182
- ? { [K in keyof T]-?: K extends string ? `${K}` | `${K}.${Paths<T[K]>}` : never }[keyof T]
183
- : never;
184
- ```
185
-
186
- ## Type Safety Patterns
187
-
188
- ### Branded Types
189
- ```tsx
190
- // Prevent mixing IDs of different entities
191
- type UserId = string & { readonly __brand: "UserId" };
192
- type OrderId = string & { readonly __brand: "OrderId" };
193
-
194
- function createUserId(id: string): UserId { return id as UserId; }
195
- function createOrderId(id: string): OrderId { return id as OrderId; }
196
-
197
- function getUser(id: UserId) { /* ... */ }
198
- getUser(createOrderId("123")); // TS Error! OrderId is not UserId
199
- ```
200
-
201
- ### Discriminated Unions with Exhaustive Matching
202
- ```tsx
203
- type Shape =
204
- | { kind: "circle"; radius: number }
205
- | { kind: "rect"; width: number; height: number }
206
- | { kind: "triangle"; base: number; height: number };
207
-
208
- function area(shape: Shape): number {
209
- switch (shape.kind) {
210
- case "circle": return Math.PI * shape.radius ** 2;
211
- case "rect": return shape.width * shape.height;
212
- case "triangle": return 0.5 * shape.base * shape.height;
213
- default: {
214
- const _exhaustive: never = shape; // Compile error if case missed
215
- return _exhaustive;
216
- }
217
- }
218
- }
219
- ```
220
-
221
- ### Result Pattern
222
- ```tsx
223
- type Result<T, E = Error> = { ok: true; value: T } | { ok: false; error: E };
224
-
225
- function ok<T>(value: T): Result<T, never> { return { ok: true, value }; }
226
- function err<E>(error: E): Result<never, E> { return { ok: false, error }; }
227
-
228
- async function parseConfig(path: string): Promise<Result<Config, ParseError>> {
229
- try {
230
- const raw = await readFile(path, "utf-8");
231
- return ok(JSON.parse(raw));
232
- } catch (e) {
233
- return err(new ParseError(`Failed to parse ${path}`, { cause: e }));
234
- }
235
- }
236
-
237
- // Usage — forces error handling
238
- const result = await parseConfig("config.json");
239
- if (!result.ok) {
240
- console.error(result.error.message);
241
- process.exit(1);
242
- }
243
- const config = result.value; // Type-narrowed to Config
244
- ```
245
-
246
- ## Async Patterns
247
-
248
- ### Parallel Execution
249
- ```tsx
250
- // Promise.all — fail-fast on first rejection
251
- const [users, posts] = await Promise.all([getUsers(), getPosts()]);
252
-
253
- // Promise.allSettled — get all results regardless of failures
254
- const results = await Promise.allSettled([getUsers(), getPosts(), getComments()]);
255
- for (const r of results) {
256
- if (r.status === "fulfilled") process(r.value);
257
- else logError(r.reason);
258
- }
259
- ```
260
-
261
- ### AbortController
262
- ```tsx
263
- async function fetchWithTimeout(url: string, timeoutMs: number): Promise<Response> {
264
- const controller = new AbortController();
265
- const timeout = setTimeout(() => controller.abort(), timeoutMs);
266
- try {
267
- return await fetch(url, { signal: controller.signal });
268
- } finally {
269
- clearTimeout(timeout);
270
- }
271
- }
272
- ```
273
-
274
- ### Async Iterators
275
- ```tsx
276
- async function* paginate<T>(fetcher: (page: number) => Promise<T[]>): AsyncGenerator<T> {
277
- let page = 0;
278
- while (true) {
279
- const items = await fetcher(page++);
280
- if (items.length === 0) break;
281
- yield* items;
282
- }
283
- }
284
-
285
- // Usage
286
- for await (const user of paginate(fetchUsersPage)) {
287
- processUser(user);
288
- }
289
- ```
290
-
291
- ## Module Organization
292
-
293
- ### Barrel File Performance
294
- ```tsx
295
- // BAD — barrel files cause entire module tree to load
296
- // index.ts
297
- export * from "./userService";
298
- export * from "./orderService";
299
- export * from "./paymentService";
300
-
301
- // GOOD — direct imports skip barrel overhead
302
- import { UserService } from "./services/userService";
303
- ```
304
-
305
- ### Type-Only Imports
306
- ```tsx
307
- // Always use type-only imports for types
308
- import type { User, CreateUserDto } from "./types";
309
- import { UserService } from "./userService";
310
- // With verbatimModuleSyntax, this is enforced
311
- ```
312
-
313
- ### Re-export Patterns
314
- ```tsx
315
- // Public API surface — explicit re-exports
316
- export { UserService } from "./userService";
317
- export type { User, CreateUserDto } from "./types";
318
- // Don't export internal implementation details
319
- ```
320
-
321
- ## Memory & Runtime
322
-
323
- ### WeakRef for Caches
324
- ```tsx
325
- class WeakCache<K extends object, V> {
326
- private cache = new Map<K, WeakRef<V & object>>();
327
- private registry = new FinalizationRegistry<K>(key => this.cache.delete(key));
328
-
329
- set(key: K, value: V & object): void {
330
- this.cache.set(key, new WeakRef(value));
331
- this.registry.register(value, key);
332
- }
333
-
334
- get(key: K): V | undefined {
335
- return this.cache.get(key)?.deref();
336
- }
337
- }
338
- ```
339
-
340
- ### Efficient Data Structures
341
- ```tsx
342
- // Use Map/Set for frequent lookups
343
- const userIndex = new Map<string, User>(); // O(1) lookup
344
- const activeIds = new Set<string>(); // O(1) has/add/delete
345
-
346
- // NOT plain objects for dynamic keys
347
- const userIndex: Record<string, User> = {}; // Slower for frequent mutations
348
- ```
349
-
350
- ### Runtime Rules
351
- - Minimize `Reflect.metadata` and decorator reflection — adds runtime overhead
352
- - Prefer `structuredClone()` over `JSON.parse(JSON.stringify())` for deep cloning
353
- - Use `Object.freeze()` for truly immutable constants
354
- - Avoid `eval()`, `new Function()`, and dynamic `require()` — security + performance issues
355
-
356
- ## Modern JavaScript Patterns
357
-
358
- ### Nullish Handling
359
- ```tsx
360
- const port = config.port ?? 3000; // Only for null/undefined
361
- const name = user?.profile?.displayName; // Optional chaining
362
- const normalized = (input ??= defaultValue); // Nullish assignment
363
- ```
364
-
365
- ### Immutable Updates
366
- ```tsx
367
- // Object spread for shallow updates
368
- const updated = { ...user, name: "New Name" };
369
-
370
- // structuredClone for deep copy
371
- const deep = structuredClone(complexObject);
372
-
373
- // Array immutable operations
374
- const added = [...items, newItem];
375
- const removed = items.filter(i => i.id !== targetId);
376
- const updated = items.map(i => i.id === targetId ? { ...i, ...changes } : i);
377
- ```
378
-
379
- ### Pipe Pattern
380
- ```tsx
381
- function pipe<T>(value: T, ...fns: Array<(v: unknown) => unknown>): unknown {
382
- return fns.reduce((acc, fn) => fn(acc), value as unknown);
383
- }
384
-
385
- // Usage
386
- const result = pipe(
387
- rawData,
388
- validate,
389
- normalize,
390
- transform,
391
- serialize
392
- );
393
- ```
394
-
395
- ## Decision Flow
396
-
397
- When writing TypeScript:
398
-
399
- 1. **Interface or Type?** → Object shape = interface. Union/intersection/mapped = type.
400
- 2. **Generic needed?** → If the function works with multiple types and you need to preserve the type → yes. Otherwise keep it simple.
401
- 3. **Strict enough?** → Enable all strict flags. Use branded types for domain IDs. Use discriminated unions for variants.
402
- 4. **Performance?** → Check: Are there deep conditional types? Circular references? Massive unions? Simplify if so.
403
- 5. **Import style?** → `import type` for types. Direct imports, not barrel files. Named exports, not default.
404
- 6. **Error handling?** → Result pattern for expected errors. throw for unexpected/programmer errors.
405
- 7. **Async?** → Promise.all for parallel. AbortController for timeouts. AsyncGenerator for streams.
@@ -1,73 +0,0 @@
1
- /**
2
- * Claude Code adapter — generates Claude Code config from definitions.
3
- *
4
- * Output format:
5
- * CLAUDE.md — Main instructions (agents + protocols inline)
6
- * .claude/settings.json — Hooks config
7
- * .mcp.json — MCP server config
8
- * .claude/commands/{name}.md — Slash commands (from prompts)
9
- *
10
- * Status: STUB — not yet implemented.
11
- */
12
-
13
- // biome-ignore lint/correctness/noUnusedImports: reserved for implementation
14
- import { AGENTS } from '../definitions/agents.mjs';
15
- // biome-ignore lint/correctness/noUnusedImports: reserved for implementation
16
- import { AGENT_BODIES } from '../definitions/bodies.mjs';
17
- // biome-ignore lint/correctness/noUnusedImports: reserved for implementation
18
- import { CLAUDE_MODELS, VARIANT_GROUPS } from '../definitions/models.mjs';
19
- import { PROMPTS } from '../definitions/prompts.mjs';
20
- // biome-ignore lint/correctness/noUnusedImports: reserved for implementation
21
- import { IDE_CAPABILITIES } from '../definitions/tools.mjs';
22
-
23
- export const CLAUDE_FLOWS_SECTION = [
24
- '## Flows',
25
- '',
26
- "This project uses aikit's pluggable flow system. Check flow status with the `flow_status` MCP tool.",
27
- "If a flow is active, follow the current step's skill instructions. Advance with `flow_step({ action: 'next' })`.",
28
- 'Use `flow_list` to see available flows and `flow_start` to begin one.',
29
- ].join('\n');
30
-
31
- export const CLAUDE_ORCHESTRATOR_FLOW_ROUTING_SECTION = [
32
- '## Flows',
33
- '',
34
- "This project uses aikit's pluggable flow system. Check flow status with the `flow_status` MCP tool.",
35
- "If a flow is active, follow the current step's skill instructions. Advance with `flow_step({ action: 'next' })`.",
36
- 'Use `flow_list` to see available flows and `flow_start` to begin one.',
37
- ].join('\n');
38
-
39
- // ── Command generator ──────────────────────────────────────────────
40
- /**
41
- * Generate a Claude Code slash command (.md) from a prompt definition.
42
- * Claude Code commands are plain markdown — no YAML frontmatter needed.
43
- * Invoked as /project:aikit-{name} in Claude Code.
44
- */
45
- function generateCommand(name, def) {
46
- const lines = [];
47
- lines.push(`# aikit ${name}`);
48
- lines.push('');
49
- if (def.description) {
50
- lines.push(`> ${def.description}`);
51
- lines.push('');
52
- }
53
- lines.push(def.content.trim());
54
- lines.push('');
55
- return lines.join('\n');
56
- }
57
-
58
- export function generateClaudeCode() {
59
- const files = [];
60
-
61
- // ── Slash commands from PROMPTS definitions ──────────────────────
62
- for (const [name, def] of Object.entries(PROMPTS)) {
63
- files.push({
64
- path: `commands/aikit-${name}.md`,
65
- content: generateCommand(name, def),
66
- });
67
- }
68
-
69
- // TODO: Inline agent instructions into CLAUDE.md sections
70
- // TODO: Generate .mcp.json (server name, env vars)
71
-
72
- return files;
73
- }