opencode-starterkit 1.0.1

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 (656) hide show
  1. package/README.md +47 -0
  2. package/baseline/.env.example +196 -0
  3. package/baseline/.template-manifest.json +646 -0
  4. package/baseline/.version +1 -0
  5. package/baseline/AGENTS.md +410 -0
  6. package/baseline/AGENT_ALIGNMENT.md +564 -0
  7. package/baseline/README.md +79 -0
  8. package/baseline/agent/build.md +373 -0
  9. package/baseline/agent/explore.md +96 -0
  10. package/baseline/agent/general.md +186 -0
  11. package/baseline/agent/painter.md +74 -0
  12. package/baseline/agent/plan.md +435 -0
  13. package/baseline/agent/review.md +243 -0
  14. package/baseline/agent/runner.md +79 -0
  15. package/baseline/agent/scout.md +100 -0
  16. package/baseline/agent/vision.md +91 -0
  17. package/baseline/command/compound.md +143 -0
  18. package/baseline/command/create.md +213 -0
  19. package/baseline/command/design.md +112 -0
  20. package/baseline/command/handoff.md +147 -0
  21. package/baseline/command/init-context.md +273 -0
  22. package/baseline/command/init-user.md +105 -0
  23. package/baseline/command/init.md +117 -0
  24. package/baseline/command/lfg.md +170 -0
  25. package/baseline/command/plan.md +355 -0
  26. package/baseline/command/pr.md +161 -0
  27. package/baseline/command/research.md +125 -0
  28. package/baseline/command/resume.md +87 -0
  29. package/baseline/command/review-codebase.md +131 -0
  30. package/baseline/command/ship.md +342 -0
  31. package/baseline/command/start.md +158 -0
  32. package/baseline/command/status.md +117 -0
  33. package/baseline/command/ui-review.md +92 -0
  34. package/baseline/command/ui-slop-check.md +146 -0
  35. package/baseline/command/verify.md +160 -0
  36. package/baseline/context/README.md +29 -0
  37. package/baseline/dcp.jsonc +72 -0
  38. package/baseline/memory/README.md +89 -0
  39. package/baseline/memory/_templates/design.md +59 -0
  40. package/baseline/memory/_templates/prd.md +192 -0
  41. package/baseline/memory/_templates/project.md +58 -0
  42. package/baseline/memory/_templates/proposal.md +38 -0
  43. package/baseline/memory/_templates/roadmap.md +93 -0
  44. package/baseline/memory/_templates/state.md +89 -0
  45. package/baseline/memory/_templates/tasks.md +198 -0
  46. package/baseline/memory/_templates/tech-stack.md +85 -0
  47. package/baseline/memory/_templates/user.md +26 -0
  48. package/baseline/memory/project/gotchas.md +67 -0
  49. package/baseline/memory/project/project.md +92 -0
  50. package/baseline/memory/project/roadmap.md +142 -0
  51. package/baseline/memory/project/state.md +84 -0
  52. package/baseline/memory/project/tech-stack.md +53 -0
  53. package/baseline/memory/project/user.md +38 -0
  54. package/baseline/memory/research/benchmark-framework.md +162 -0
  55. package/baseline/memory/research/ccpm-analysis.md +334 -0
  56. package/baseline/memory/research/context-management-analysis.md +685 -0
  57. package/baseline/memory/research/effectiveness-audit.md +213 -0
  58. package/baseline/memory/research/opencode-mcp-bug-report.md +129 -0
  59. package/baseline/memory/research/openspec-analysis.md +226 -0
  60. package/baseline/memory/session-context.md +40 -0
  61. package/baseline/opencode.json +1431 -0
  62. package/baseline/opencode.json.tui-migration.bak +1380 -0
  63. package/baseline/package-lock.json +87 -0
  64. package/baseline/package.json +21 -0
  65. package/baseline/plans/1768385996691-silent-wizard.md +247 -0
  66. package/baseline/plans/1770006237537-mighty-otter.md +418 -0
  67. package/baseline/plans/1770006913647-glowing-forest.md +170 -0
  68. package/baseline/plans/1770013678126-witty-planet.md +278 -0
  69. package/baseline/plans/1770112267595-shiny-rocket.md +258 -0
  70. package/baseline/plans/swarm-protocol.md +123 -0
  71. package/baseline/plugin/README.md +70 -0
  72. package/baseline/plugin/copilot-auth.ts +607 -0
  73. package/baseline/plugin/lib/capture.ts +177 -0
  74. package/baseline/plugin/lib/context.ts +198 -0
  75. package/baseline/plugin/lib/curator.ts +234 -0
  76. package/baseline/plugin/lib/db/maintenance.ts +312 -0
  77. package/baseline/plugin/lib/db/observations.ts +299 -0
  78. package/baseline/plugin/lib/db/pipeline.ts +520 -0
  79. package/baseline/plugin/lib/db/schema.ts +356 -0
  80. package/baseline/plugin/lib/db/types.ts +211 -0
  81. package/baseline/plugin/lib/distill.ts +376 -0
  82. package/baseline/plugin/lib/inject.ts +126 -0
  83. package/baseline/plugin/lib/memory-admin-tools.ts +188 -0
  84. package/baseline/plugin/lib/memory-db.ts +58 -0
  85. package/baseline/plugin/lib/memory-helpers.ts +111 -0
  86. package/baseline/plugin/lib/memory-hooks.ts +195 -0
  87. package/baseline/plugin/lib/memory-tools.ts +341 -0
  88. package/baseline/plugin/lib/notify.ts +81 -0
  89. package/baseline/plugin/memory.ts +89 -0
  90. package/baseline/plugin/notification.ts.bak +64 -0
  91. package/baseline/plugin/package.json +7 -0
  92. package/baseline/plugin/sdk/copilot/chat/convert-to-openai-compatible-chat-messages.ts +178 -0
  93. package/baseline/plugin/sdk/copilot/chat/get-response-metadata.ts +15 -0
  94. package/baseline/plugin/sdk/copilot/chat/map-openai-compatible-finish-reason.ts +19 -0
  95. package/baseline/plugin/sdk/copilot/chat/openai-compatible-api-types.ts +72 -0
  96. package/baseline/plugin/sdk/copilot/chat/openai-compatible-chat-language-model.ts +833 -0
  97. package/baseline/plugin/sdk/copilot/chat/openai-compatible-chat-options.ts +30 -0
  98. package/baseline/plugin/sdk/copilot/chat/openai-compatible-metadata-extractor.ts +48 -0
  99. package/baseline/plugin/sdk/copilot/chat/openai-compatible-prepare-tools.ts +92 -0
  100. package/baseline/plugin/sdk/copilot/copilot-provider.ts +94 -0
  101. package/baseline/plugin/sdk/copilot/index.ts +5 -0
  102. package/baseline/plugin/sdk/copilot/openai-compatible-error.ts +30 -0
  103. package/baseline/plugin/sessions.ts +428 -0
  104. package/baseline/plugin/skill-mcp.ts +618 -0
  105. package/baseline/plugin/tsconfig.json +16 -0
  106. package/baseline/skill/accessibility-audit/SKILL.md +191 -0
  107. package/baseline/skill/agent-browser/SKILL.md +413 -0
  108. package/baseline/skill/agent-teams/SKILL.md +268 -0
  109. package/baseline/skill/augment-context-engine/SKILL.md +122 -0
  110. package/baseline/skill/augment-context-engine/mcp.json +6 -0
  111. package/baseline/skill/beads/SKILL.md +181 -0
  112. package/baseline/skill/beads/references/BEST_PRACTICES.md +27 -0
  113. package/baseline/skill/beads/references/BOUNDARIES.md +219 -0
  114. package/baseline/skill/beads/references/DEPENDENCIES.md +124 -0
  115. package/baseline/skill/beads/references/EXAMPLES.md +45 -0
  116. package/baseline/skill/beads/references/FILE_CLAIMING.md +101 -0
  117. package/baseline/skill/beads/references/GIT_SYNC.md +25 -0
  118. package/baseline/skill/beads/references/HIERARCHY.md +71 -0
  119. package/baseline/skill/beads/references/MULTI_AGENT.md +40 -0
  120. package/baseline/skill/beads/references/RESUMABILITY.md +177 -0
  121. package/baseline/skill/beads/references/SESSION_PROTOCOL.md +61 -0
  122. package/baseline/skill/beads/references/TASK_CREATION.md +38 -0
  123. package/baseline/skill/beads/references/TROUBLESHOOTING.md +38 -0
  124. package/baseline/skill/beads/references/WORKFLOWS.md +226 -0
  125. package/baseline/skill/beads-bridge/SKILL.md +321 -0
  126. package/baseline/skill/brainstorming/SKILL.md +114 -0
  127. package/baseline/skill/chrome-devtools/SKILL.md +76 -0
  128. package/baseline/skill/chrome-devtools/mcp.json +19 -0
  129. package/baseline/skill/cloudflare/SKILL.md +253 -0
  130. package/baseline/skill/cloudflare/references/agents-sdk/README.md +35 -0
  131. package/baseline/skill/cloudflare/references/agents-sdk/api.md +100 -0
  132. package/baseline/skill/cloudflare/references/agents-sdk/configuration.md +99 -0
  133. package/baseline/skill/cloudflare/references/agents-sdk/gotchas.md +59 -0
  134. package/baseline/skill/cloudflare/references/agents-sdk/patterns.md +89 -0
  135. package/baseline/skill/cloudflare/references/ai-gateway/README.md +695 -0
  136. package/baseline/skill/cloudflare/references/ai-search/README.md +14 -0
  137. package/baseline/skill/cloudflare/references/ai-search/api.md +38 -0
  138. package/baseline/skill/cloudflare/references/ai-search/configuration.md +52 -0
  139. package/baseline/skill/cloudflare/references/ai-search/gotchas.md +41 -0
  140. package/baseline/skill/cloudflare/references/ai-search/patterns.md +45 -0
  141. package/baseline/skill/cloudflare/references/analytics-engine/README.md +14 -0
  142. package/baseline/skill/cloudflare/references/analytics-engine/api.md +27 -0
  143. package/baseline/skill/cloudflare/references/analytics-engine/configuration.md +45 -0
  144. package/baseline/skill/cloudflare/references/analytics-engine/gotchas.md +3 -0
  145. package/baseline/skill/cloudflare/references/analytics-engine/patterns.md +36 -0
  146. package/baseline/skill/cloudflare/references/api/README.md +21 -0
  147. package/baseline/skill/cloudflare/references/api/api.md +31 -0
  148. package/baseline/skill/cloudflare/references/api/configuration.md +20 -0
  149. package/baseline/skill/cloudflare/references/api/gotchas.md +28 -0
  150. package/baseline/skill/cloudflare/references/api/patterns.md +47 -0
  151. package/baseline/skill/cloudflare/references/api-shield/README.md +20 -0
  152. package/baseline/skill/cloudflare/references/api-shield/api.md +78 -0
  153. package/baseline/skill/cloudflare/references/api-shield/configuration.md +128 -0
  154. package/baseline/skill/cloudflare/references/api-shield/gotchas.md +51 -0
  155. package/baseline/skill/cloudflare/references/api-shield/patterns.md +145 -0
  156. package/baseline/skill/cloudflare/references/argo-smart-routing/README.md +16 -0
  157. package/baseline/skill/cloudflare/references/argo-smart-routing/api.md +50 -0
  158. package/baseline/skill/cloudflare/references/argo-smart-routing/configuration.md +53 -0
  159. package/baseline/skill/cloudflare/references/argo-smart-routing/gotchas.md +16 -0
  160. package/baseline/skill/cloudflare/references/argo-smart-routing/patterns.md +45 -0
  161. package/baseline/skill/cloudflare/references/bindings/README.md +14 -0
  162. package/baseline/skill/cloudflare/references/bindings/api.md +3 -0
  163. package/baseline/skill/cloudflare/references/bindings/configuration.md +58 -0
  164. package/baseline/skill/cloudflare/references/bindings/gotchas.md +35 -0
  165. package/baseline/skill/cloudflare/references/bindings/patterns.md +37 -0
  166. package/baseline/skill/cloudflare/references/bot-management/README.md +71 -0
  167. package/baseline/skill/cloudflare/references/bot-management/api.md +168 -0
  168. package/baseline/skill/cloudflare/references/bot-management/configuration.md +114 -0
  169. package/baseline/skill/cloudflare/references/bot-management/gotchas.md +99 -0
  170. package/baseline/skill/cloudflare/references/bot-management/patterns.md +125 -0
  171. package/baseline/skill/cloudflare/references/browser-rendering/README.md +16 -0
  172. package/baseline/skill/cloudflare/references/browser-rendering/api.md +54 -0
  173. package/baseline/skill/cloudflare/references/browser-rendering/configuration.md +47 -0
  174. package/baseline/skill/cloudflare/references/browser-rendering/gotchas.md +29 -0
  175. package/baseline/skill/cloudflare/references/browser-rendering/patterns.md +29 -0
  176. package/baseline/skill/cloudflare/references/c3/README.md +264 -0
  177. package/baseline/skill/cloudflare/references/cache-reserve/README.md +93 -0
  178. package/baseline/skill/cloudflare/references/cache-reserve/api.md +176 -0
  179. package/baseline/skill/cloudflare/references/cache-reserve/configuration.md +164 -0
  180. package/baseline/skill/cloudflare/references/cache-reserve/gotchas.md +203 -0
  181. package/baseline/skill/cloudflare/references/cache-reserve/patterns.md +180 -0
  182. package/baseline/skill/cloudflare/references/containers/README.md +16 -0
  183. package/baseline/skill/cloudflare/references/containers/api.md +43 -0
  184. package/baseline/skill/cloudflare/references/containers/configuration.md +56 -0
  185. package/baseline/skill/cloudflare/references/containers/gotchas.md +21 -0
  186. package/baseline/skill/cloudflare/references/containers/patterns.md +40 -0
  187. package/baseline/skill/cloudflare/references/cron-triggers/README.md +85 -0
  188. package/baseline/skill/cloudflare/references/cron-triggers/api.md +198 -0
  189. package/baseline/skill/cloudflare/references/cron-triggers/configuration.md +151 -0
  190. package/baseline/skill/cloudflare/references/cron-triggers/gotchas.md +129 -0
  191. package/baseline/skill/cloudflare/references/cron-triggers/patterns.md +122 -0
  192. package/baseline/skill/cloudflare/references/d1/README.md +92 -0
  193. package/baseline/skill/cloudflare/references/d1/api.md +141 -0
  194. package/baseline/skill/cloudflare/references/d1/configuration.md +127 -0
  195. package/baseline/skill/cloudflare/references/d1/gotchas.md +70 -0
  196. package/baseline/skill/cloudflare/references/d1/patterns.md +144 -0
  197. package/baseline/skill/cloudflare/references/ddos/README.md +34 -0
  198. package/baseline/skill/cloudflare/references/ddos/api.md +136 -0
  199. package/baseline/skill/cloudflare/references/ddos/configuration.md +67 -0
  200. package/baseline/skill/cloudflare/references/ddos/gotchas.md +114 -0
  201. package/baseline/skill/cloudflare/references/ddos/patterns.md +158 -0
  202. package/baseline/skill/cloudflare/references/do-storage/README.md +62 -0
  203. package/baseline/skill/cloudflare/references/do-storage/api.md +89 -0
  204. package/baseline/skill/cloudflare/references/do-storage/configuration.md +116 -0
  205. package/baseline/skill/cloudflare/references/do-storage/gotchas.md +93 -0
  206. package/baseline/skill/cloudflare/references/do-storage/patterns.md +112 -0
  207. package/baseline/skill/cloudflare/references/durable-objects/README.md +125 -0
  208. package/baseline/skill/cloudflare/references/durable-objects/api.md +152 -0
  209. package/baseline/skill/cloudflare/references/durable-objects/configuration.md +148 -0
  210. package/baseline/skill/cloudflare/references/durable-objects/gotchas.md +158 -0
  211. package/baseline/skill/cloudflare/references/durable-objects/patterns.md +255 -0
  212. package/baseline/skill/cloudflare/references/email-routing/README.md +18 -0
  213. package/baseline/skill/cloudflare/references/email-routing/api.md +46 -0
  214. package/baseline/skill/cloudflare/references/email-routing/configuration.md +63 -0
  215. package/baseline/skill/cloudflare/references/email-routing/gotchas.md +16 -0
  216. package/baseline/skill/cloudflare/references/email-routing/patterns.md +46 -0
  217. package/baseline/skill/cloudflare/references/email-workers/README.md +598 -0
  218. package/baseline/skill/cloudflare/references/hyperdrive/README.md +62 -0
  219. package/baseline/skill/cloudflare/references/hyperdrive/api.md +137 -0
  220. package/baseline/skill/cloudflare/references/hyperdrive/configuration.md +133 -0
  221. package/baseline/skill/cloudflare/references/hyperdrive/gotchas.md +184 -0
  222. package/baseline/skill/cloudflare/references/hyperdrive/patterns.md +176 -0
  223. package/baseline/skill/cloudflare/references/images/README.md +14 -0
  224. package/baseline/skill/cloudflare/references/images/api.md +3 -0
  225. package/baseline/skill/cloudflare/references/images/configuration.md +45 -0
  226. package/baseline/skill/cloudflare/references/images/gotchas.md +23 -0
  227. package/baseline/skill/cloudflare/references/images/patterns.md +31 -0
  228. package/baseline/skill/cloudflare/references/kv/README.md +60 -0
  229. package/baseline/skill/cloudflare/references/kv/api.md +114 -0
  230. package/baseline/skill/cloudflare/references/kv/configuration.md +92 -0
  231. package/baseline/skill/cloudflare/references/kv/gotchas.md +117 -0
  232. package/baseline/skill/cloudflare/references/kv/patterns.md +139 -0
  233. package/baseline/skill/cloudflare/references/miniflare/README.md +64 -0
  234. package/baseline/skill/cloudflare/references/miniflare/api.md +144 -0
  235. package/baseline/skill/cloudflare/references/miniflare/configuration.md +203 -0
  236. package/baseline/skill/cloudflare/references/miniflare/gotchas.md +187 -0
  237. package/baseline/skill/cloudflare/references/miniflare/patterns.md +211 -0
  238. package/baseline/skill/cloudflare/references/network-interconnect/README.md +60 -0
  239. package/baseline/skill/cloudflare/references/network-interconnect/api.md +240 -0
  240. package/baseline/skill/cloudflare/references/network-interconnect/configuration.md +127 -0
  241. package/baseline/skill/cloudflare/references/network-interconnect/gotchas.md +171 -0
  242. package/baseline/skill/cloudflare/references/network-interconnect/patterns.md +171 -0
  243. package/baseline/skill/cloudflare/references/observability/README.md +18 -0
  244. package/baseline/skill/cloudflare/references/observability/api.md +51 -0
  245. package/baseline/skill/cloudflare/references/observability/configuration.md +60 -0
  246. package/baseline/skill/cloudflare/references/observability/gotchas.md +36 -0
  247. package/baseline/skill/cloudflare/references/observability/patterns.md +42 -0
  248. package/baseline/skill/cloudflare/references/pages/README.md +76 -0
  249. package/baseline/skill/cloudflare/references/pages/api.md +200 -0
  250. package/baseline/skill/cloudflare/references/pages/configuration.md +228 -0
  251. package/baseline/skill/cloudflare/references/pages/gotchas.md +161 -0
  252. package/baseline/skill/cloudflare/references/pages/patterns.md +145 -0
  253. package/baseline/skill/cloudflare/references/pages-functions/README.md +57 -0
  254. package/baseline/skill/cloudflare/references/pages-functions/api.md +201 -0
  255. package/baseline/skill/cloudflare/references/pages-functions/configuration.md +159 -0
  256. package/baseline/skill/cloudflare/references/pages-functions/gotchas.md +151 -0
  257. package/baseline/skill/cloudflare/references/pages-functions/patterns.md +190 -0
  258. package/baseline/skill/cloudflare/references/pipelines/README.md +664 -0
  259. package/baseline/skill/cloudflare/references/pulumi/README.md +107 -0
  260. package/baseline/skill/cloudflare/references/pulumi/api.md +194 -0
  261. package/baseline/skill/cloudflare/references/pulumi/configuration.md +216 -0
  262. package/baseline/skill/cloudflare/references/pulumi/gotchas.md +223 -0
  263. package/baseline/skill/cloudflare/references/pulumi/patterns.md +139 -0
  264. package/baseline/skill/cloudflare/references/queues/README.md +69 -0
  265. package/baseline/skill/cloudflare/references/queues/api.md +138 -0
  266. package/baseline/skill/cloudflare/references/queues/configuration.md +125 -0
  267. package/baseline/skill/cloudflare/references/queues/gotchas.md +112 -0
  268. package/baseline/skill/cloudflare/references/queues/patterns.md +155 -0
  269. package/baseline/skill/cloudflare/references/r2/README.md +61 -0
  270. package/baseline/skill/cloudflare/references/r2/api.md +127 -0
  271. package/baseline/skill/cloudflare/references/r2/configuration.md +76 -0
  272. package/baseline/skill/cloudflare/references/r2/gotchas.md +94 -0
  273. package/baseline/skill/cloudflare/references/r2/patterns.md +127 -0
  274. package/baseline/skill/cloudflare/references/r2-data-catalog/README.md +18 -0
  275. package/baseline/skill/cloudflare/references/r2-data-catalog/api.md +29 -0
  276. package/baseline/skill/cloudflare/references/r2-data-catalog/configuration.md +39 -0
  277. package/baseline/skill/cloudflare/references/r2-data-catalog/gotchas.md +20 -0
  278. package/baseline/skill/cloudflare/references/r2-data-catalog/patterns.md +46 -0
  279. package/baseline/skill/cloudflare/references/r2-sql/README.md +512 -0
  280. package/baseline/skill/cloudflare/references/realtime-sfu/README.md +21 -0
  281. package/baseline/skill/cloudflare/references/realtime-sfu/api.md +135 -0
  282. package/baseline/skill/cloudflare/references/realtime-sfu/configuration.md +63 -0
  283. package/baseline/skill/cloudflare/references/realtime-sfu/gotchas.md +75 -0
  284. package/baseline/skill/cloudflare/references/realtime-sfu/patterns.md +102 -0
  285. package/baseline/skill/cloudflare/references/realtimekit/README.md +81 -0
  286. package/baseline/skill/cloudflare/references/realtimekit/api.md +164 -0
  287. package/baseline/skill/cloudflare/references/realtimekit/configuration.md +147 -0
  288. package/baseline/skill/cloudflare/references/realtimekit/gotchas.md +172 -0
  289. package/baseline/skill/cloudflare/references/realtimekit/patterns.md +155 -0
  290. package/baseline/skill/cloudflare/references/sandbox/README.md +90 -0
  291. package/baseline/skill/cloudflare/references/sandbox/api.md +178 -0
  292. package/baseline/skill/cloudflare/references/sandbox/configuration.md +131 -0
  293. package/baseline/skill/cloudflare/references/sandbox/gotchas.md +156 -0
  294. package/baseline/skill/cloudflare/references/sandbox/patterns.md +203 -0
  295. package/baseline/skill/cloudflare/references/secrets-store/README.md +58 -0
  296. package/baseline/skill/cloudflare/references/secrets-store/api.md +182 -0
  297. package/baseline/skill/cloudflare/references/secrets-store/configuration.md +140 -0
  298. package/baseline/skill/cloudflare/references/secrets-store/gotchas.md +129 -0
  299. package/baseline/skill/cloudflare/references/secrets-store/patterns.md +218 -0
  300. package/baseline/skill/cloudflare/references/smart-placement/README.md +91 -0
  301. package/baseline/skill/cloudflare/references/smart-placement/api.md +139 -0
  302. package/baseline/skill/cloudflare/references/smart-placement/configuration.md +129 -0
  303. package/baseline/skill/cloudflare/references/smart-placement/gotchas.md +87 -0
  304. package/baseline/skill/cloudflare/references/smart-placement/patterns.md +135 -0
  305. package/baseline/skill/cloudflare/references/snippets/README.md +15 -0
  306. package/baseline/skill/cloudflare/references/snippets/api.md +47 -0
  307. package/baseline/skill/cloudflare/references/snippets/configuration.md +33 -0
  308. package/baseline/skill/cloudflare/references/snippets/gotchas.md +21 -0
  309. package/baseline/skill/cloudflare/references/snippets/patterns.md +34 -0
  310. package/baseline/skill/cloudflare/references/spectrum/README.md +16 -0
  311. package/baseline/skill/cloudflare/references/spectrum/api.md +24 -0
  312. package/baseline/skill/cloudflare/references/spectrum/configuration.md +43 -0
  313. package/baseline/skill/cloudflare/references/spectrum/gotchas.md +42 -0
  314. package/baseline/skill/cloudflare/references/spectrum/patterns.md +40 -0
  315. package/baseline/skill/cloudflare/references/static-assets/README.md +14 -0
  316. package/baseline/skill/cloudflare/references/static-assets/api.md +3 -0
  317. package/baseline/skill/cloudflare/references/static-assets/configuration.md +47 -0
  318. package/baseline/skill/cloudflare/references/static-assets/gotchas.md +44 -0
  319. package/baseline/skill/cloudflare/references/static-assets/patterns.md +42 -0
  320. package/baseline/skill/cloudflare/references/stream/README.md +103 -0
  321. package/baseline/skill/cloudflare/references/stream/api.md +204 -0
  322. package/baseline/skill/cloudflare/references/stream/configuration.md +127 -0
  323. package/baseline/skill/cloudflare/references/stream/gotchas.md +131 -0
  324. package/baseline/skill/cloudflare/references/stream/patterns.md +152 -0
  325. package/baseline/skill/cloudflare/references/tail-workers/README.md +640 -0
  326. package/baseline/skill/cloudflare/references/terraform/README.md +76 -0
  327. package/baseline/skill/cloudflare/references/terraform/api.md +159 -0
  328. package/baseline/skill/cloudflare/references/terraform/configuration.md +156 -0
  329. package/baseline/skill/cloudflare/references/terraform/gotchas.md +207 -0
  330. package/baseline/skill/cloudflare/references/terraform/patterns.md +135 -0
  331. package/baseline/skill/cloudflare/references/tunnel/README.md +82 -0
  332. package/baseline/skill/cloudflare/references/tunnel/api.md +105 -0
  333. package/baseline/skill/cloudflare/references/tunnel/configuration.md +113 -0
  334. package/baseline/skill/cloudflare/references/tunnel/gotchas.md +115 -0
  335. package/baseline/skill/cloudflare/references/tunnel/patterns.md +157 -0
  336. package/baseline/skill/cloudflare/references/turn/README.md +699 -0
  337. package/baseline/skill/cloudflare/references/turnstile/README.md +14 -0
  338. package/baseline/skill/cloudflare/references/turnstile/api.md +3 -0
  339. package/baseline/skill/cloudflare/references/turnstile/configuration.md +19 -0
  340. package/baseline/skill/cloudflare/references/turnstile/gotchas.md +27 -0
  341. package/baseline/skill/cloudflare/references/turnstile/patterns.md +41 -0
  342. package/baseline/skill/cloudflare/references/vectorize/README.md +682 -0
  343. package/baseline/skill/cloudflare/references/waf/README.md +14 -0
  344. package/baseline/skill/cloudflare/references/waf/api.md +3 -0
  345. package/baseline/skill/cloudflare/references/waf/configuration.md +44 -0
  346. package/baseline/skill/cloudflare/references/waf/gotchas.md +24 -0
  347. package/baseline/skill/cloudflare/references/waf/patterns.md +29 -0
  348. package/baseline/skill/cloudflare/references/web-analytics/README.md +19 -0
  349. package/baseline/skill/cloudflare/references/web-analytics/api.md +52 -0
  350. package/baseline/skill/cloudflare/references/web-analytics/configuration.md +31 -0
  351. package/baseline/skill/cloudflare/references/web-analytics/gotchas.md +28 -0
  352. package/baseline/skill/cloudflare/references/web-analytics/patterns.md +52 -0
  353. package/baseline/skill/cloudflare/references/workerd/README.md +47 -0
  354. package/baseline/skill/cloudflare/references/workerd/api.md +199 -0
  355. package/baseline/skill/cloudflare/references/workerd/configuration.md +185 -0
  356. package/baseline/skill/cloudflare/references/workerd/gotchas.md +203 -0
  357. package/baseline/skill/cloudflare/references/workerd/patterns.md +216 -0
  358. package/baseline/skill/cloudflare/references/workers/README.md +96 -0
  359. package/baseline/skill/cloudflare/references/workers/api.md +137 -0
  360. package/baseline/skill/cloudflare/references/workers/configuration.md +147 -0
  361. package/baseline/skill/cloudflare/references/workers/gotchas.md +99 -0
  362. package/baseline/skill/cloudflare/references/workers/patterns.md +149 -0
  363. package/baseline/skill/cloudflare/references/workers-ai/README.md +116 -0
  364. package/baseline/skill/cloudflare/references/workers-for-platforms/README.md +48 -0
  365. package/baseline/skill/cloudflare/references/workers-for-platforms/api.md +169 -0
  366. package/baseline/skill/cloudflare/references/workers-for-platforms/configuration.md +136 -0
  367. package/baseline/skill/cloudflare/references/workers-for-platforms/gotchas.md +130 -0
  368. package/baseline/skill/cloudflare/references/workers-for-platforms/patterns.md +170 -0
  369. package/baseline/skill/cloudflare/references/workers-playground/README.md +16 -0
  370. package/baseline/skill/cloudflare/references/workers-playground/api.md +20 -0
  371. package/baseline/skill/cloudflare/references/workers-playground/configuration.md +3 -0
  372. package/baseline/skill/cloudflare/references/workers-playground/gotchas.md +35 -0
  373. package/baseline/skill/cloudflare/references/workers-playground/patterns.md +42 -0
  374. package/baseline/skill/cloudflare/references/workers-vpc/README.md +579 -0
  375. package/baseline/skill/cloudflare/references/workflows/README.md +62 -0
  376. package/baseline/skill/cloudflare/references/workflows/api.md +125 -0
  377. package/baseline/skill/cloudflare/references/workflows/configuration.md +177 -0
  378. package/baseline/skill/cloudflare/references/workflows/gotchas.md +136 -0
  379. package/baseline/skill/cloudflare/references/workflows/patterns.md +132 -0
  380. package/baseline/skill/cloudflare/references/wrangler/README.md +90 -0
  381. package/baseline/skill/cloudflare/references/wrangler/api.md +140 -0
  382. package/baseline/skill/cloudflare/references/wrangler/configuration.md +128 -0
  383. package/baseline/skill/cloudflare/references/wrangler/gotchas.md +93 -0
  384. package/baseline/skill/cloudflare/references/wrangler/patterns.md +150 -0
  385. package/baseline/skill/cloudflare/references/zaraz/README.md +360 -0
  386. package/baseline/skill/code-navigation/SKILL.md +130 -0
  387. package/baseline/skill/compaction/SKILL.md +317 -0
  388. package/baseline/skill/condition-based-waiting/SKILL.md +123 -0
  389. package/baseline/skill/condition-based-waiting/example.ts +158 -0
  390. package/baseline/skill/context-engineering/SKILL.md +176 -0
  391. package/baseline/skill/context-initialization/SKILL.md +70 -0
  392. package/baseline/skill/context-management/SKILL.md +163 -0
  393. package/baseline/skill/core-data-expert/SKILL.md +93 -0
  394. package/baseline/skill/core-data-expert/references/batch-operations.md +543 -0
  395. package/baseline/skill/core-data-expert/references/cloudkit-integration.md +259 -0
  396. package/baseline/skill/core-data-expert/references/concurrency.md +522 -0
  397. package/baseline/skill/core-data-expert/references/fetch-requests.md +643 -0
  398. package/baseline/skill/core-data-expert/references/glossary.md +233 -0
  399. package/baseline/skill/core-data-expert/references/migration.md +393 -0
  400. package/baseline/skill/core-data-expert/references/model-configuration.md +597 -0
  401. package/baseline/skill/core-data-expert/references/performance.md +300 -0
  402. package/baseline/skill/core-data-expert/references/persistent-history.md +553 -0
  403. package/baseline/skill/core-data-expert/references/project-audit.md +60 -0
  404. package/baseline/skill/core-data-expert/references/saving.md +574 -0
  405. package/baseline/skill/core-data-expert/references/stack-setup.md +625 -0
  406. package/baseline/skill/core-data-expert/references/testing.md +300 -0
  407. package/baseline/skill/core-data-expert/references/threading.md +589 -0
  408. package/baseline/skill/deep-research/SKILL.md +384 -0
  409. package/baseline/skill/defense-in-depth/SKILL.md +166 -0
  410. package/baseline/skill/design-system-audit/SKILL.md +153 -0
  411. package/baseline/skill/development-lifecycle/SKILL.md +356 -0
  412. package/baseline/skill/dispatching-parallel-agents/SKILL.md +191 -0
  413. package/baseline/skill/executing-plans/SKILL.md +247 -0
  414. package/baseline/skill/figma/SKILL.md +224 -0
  415. package/baseline/skill/finishing-a-development-branch/SKILL.md +357 -0
  416. package/baseline/skill/frontend-design/SKILL.md +235 -0
  417. package/baseline/skill/frontend-design/references/animation/motion-advanced.md +224 -0
  418. package/baseline/skill/frontend-design/references/animation/motion-core.md +181 -0
  419. package/baseline/skill/frontend-design/references/canvas/execution.md +90 -0
  420. package/baseline/skill/frontend-design/references/canvas/philosophy.md +94 -0
  421. package/baseline/skill/frontend-design/references/design/color-system.md +111 -0
  422. package/baseline/skill/frontend-design/references/design/interaction.md +149 -0
  423. package/baseline/skill/frontend-design/references/design/typography-rules.md +106 -0
  424. package/baseline/skill/frontend-design/references/design/ux-writing.md +99 -0
  425. package/baseline/skill/frontend-design/references/shadcn/accessibility.md +132 -0
  426. package/baseline/skill/frontend-design/references/shadcn/core-components.md +153 -0
  427. package/baseline/skill/frontend-design/references/shadcn/form-components.md +158 -0
  428. package/baseline/skill/frontend-design/references/shadcn/setup.md +69 -0
  429. package/baseline/skill/frontend-design/references/shadcn/theming.md +152 -0
  430. package/baseline/skill/frontend-design/references/tailwind/responsive.md +112 -0
  431. package/baseline/skill/frontend-design/references/tailwind/utilities-layout.md +134 -0
  432. package/baseline/skill/frontend-design/references/tailwind/utilities-styling.md +165 -0
  433. package/baseline/skill/frontend-design/references/tailwind/v4-config.md +147 -0
  434. package/baseline/skill/frontend-design/references/tailwind/v4-features.md +128 -0
  435. package/baseline/skill/gemini-large-context/SKILL.md +216 -0
  436. package/baseline/skill/index-knowledge/SKILL.md +413 -0
  437. package/baseline/skill/jira/SKILL.md +283 -0
  438. package/baseline/skill/jira/mcp.json +6 -0
  439. package/baseline/skill/memory-system/SKILL.md +84 -0
  440. package/baseline/skill/mockup-to-code/SKILL.md +184 -0
  441. package/baseline/skill/mqdh/SKILL.md +171 -0
  442. package/baseline/skill/obsidian/SKILL.md +192 -0
  443. package/baseline/skill/obsidian/mcp.json +22 -0
  444. package/baseline/skill/opensrc/SKILL.md +127 -0
  445. package/baseline/skill/opensrc/references/architecture.md +176 -0
  446. package/baseline/skill/opensrc/references/cli-usage.md +176 -0
  447. package/baseline/skill/opensrc/references/registry-support.md +137 -0
  448. package/baseline/skill/pdf-extract/SKILL.md +438 -0
  449. package/baseline/skill/playwright/SKILL.md +320 -0
  450. package/baseline/skill/playwright/mcp.json +16 -0
  451. package/baseline/skill/playwriter/SKILL.md +158 -0
  452. package/baseline/skill/polar/SKILL.md +102 -0
  453. package/baseline/skill/prd/SKILL.md +146 -0
  454. package/baseline/skill/prd-task/SKILL.md +182 -0
  455. package/baseline/skill/prd-task/references/prd-schema.json +124 -0
  456. package/baseline/skill/ralph/SKILL.md +296 -0
  457. package/baseline/skill/react-best-practices/AGENTS.md +2410 -0
  458. package/baseline/skill/react-best-practices/README.md +123 -0
  459. package/baseline/skill/react-best-practices/SKILL.md +133 -0
  460. package/baseline/skill/react-best-practices/metadata.json +15 -0
  461. package/baseline/skill/react-best-practices/rules/_sections.md +46 -0
  462. package/baseline/skill/react-best-practices/rules/_template.md +28 -0
  463. package/baseline/skill/react-best-practices/rules/advanced-event-handler-refs.md +55 -0
  464. package/baseline/skill/react-best-practices/rules/advanced-use-latest.md +49 -0
  465. package/baseline/skill/react-best-practices/rules/async-api-routes.md +38 -0
  466. package/baseline/skill/react-best-practices/rules/async-defer-await.md +80 -0
  467. package/baseline/skill/react-best-practices/rules/async-dependencies.md +36 -0
  468. package/baseline/skill/react-best-practices/rules/async-parallel.md +28 -0
  469. package/baseline/skill/react-best-practices/rules/async-suspense-boundaries.md +99 -0
  470. package/baseline/skill/react-best-practices/rules/bundle-barrel-imports.md +59 -0
  471. package/baseline/skill/react-best-practices/rules/bundle-conditional.md +31 -0
  472. package/baseline/skill/react-best-practices/rules/bundle-defer-third-party.md +49 -0
  473. package/baseline/skill/react-best-practices/rules/bundle-dynamic-imports.md +35 -0
  474. package/baseline/skill/react-best-practices/rules/bundle-preload.md +50 -0
  475. package/baseline/skill/react-best-practices/rules/client-event-listeners.md +74 -0
  476. package/baseline/skill/react-best-practices/rules/client-localstorage-schema.md +71 -0
  477. package/baseline/skill/react-best-practices/rules/client-passive-event-listeners.md +48 -0
  478. package/baseline/skill/react-best-practices/rules/client-swr-dedup.md +56 -0
  479. package/baseline/skill/react-best-practices/rules/js-batch-dom-css.md +82 -0
  480. package/baseline/skill/react-best-practices/rules/js-cache-function-results.md +80 -0
  481. package/baseline/skill/react-best-practices/rules/js-cache-property-access.md +28 -0
  482. package/baseline/skill/react-best-practices/rules/js-cache-storage.md +70 -0
  483. package/baseline/skill/react-best-practices/rules/js-combine-iterations.md +32 -0
  484. package/baseline/skill/react-best-practices/rules/js-early-exit.md +50 -0
  485. package/baseline/skill/react-best-practices/rules/js-hoist-regexp.md +45 -0
  486. package/baseline/skill/react-best-practices/rules/js-index-maps.md +37 -0
  487. package/baseline/skill/react-best-practices/rules/js-length-check-first.md +49 -0
  488. package/baseline/skill/react-best-practices/rules/js-min-max-loop.md +82 -0
  489. package/baseline/skill/react-best-practices/rules/js-set-map-lookups.md +24 -0
  490. package/baseline/skill/react-best-practices/rules/js-tosorted-immutable.md +57 -0
  491. package/baseline/skill/react-best-practices/rules/rendering-activity.md +26 -0
  492. package/baseline/skill/react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
  493. package/baseline/skill/react-best-practices/rules/rendering-conditional-render.md +40 -0
  494. package/baseline/skill/react-best-practices/rules/rendering-content-visibility.md +38 -0
  495. package/baseline/skill/react-best-practices/rules/rendering-hoist-jsx.md +46 -0
  496. package/baseline/skill/react-best-practices/rules/rendering-hydration-no-flicker.md +82 -0
  497. package/baseline/skill/react-best-practices/rules/rendering-svg-precision.md +28 -0
  498. package/baseline/skill/react-best-practices/rules/rerender-defer-reads.md +39 -0
  499. package/baseline/skill/react-best-practices/rules/rerender-dependencies.md +45 -0
  500. package/baseline/skill/react-best-practices/rules/rerender-derived-state.md +29 -0
  501. package/baseline/skill/react-best-practices/rules/rerender-functional-setstate.md +74 -0
  502. package/baseline/skill/react-best-practices/rules/rerender-lazy-state-init.md +58 -0
  503. package/baseline/skill/react-best-practices/rules/rerender-memo.md +44 -0
  504. package/baseline/skill/react-best-practices/rules/rerender-transitions.md +40 -0
  505. package/baseline/skill/react-best-practices/rules/server-after-nonblocking.md +73 -0
  506. package/baseline/skill/react-best-practices/rules/server-cache-lru.md +41 -0
  507. package/baseline/skill/react-best-practices/rules/server-cache-react.md +76 -0
  508. package/baseline/skill/react-best-practices/rules/server-parallel-fetching.md +83 -0
  509. package/baseline/skill/react-best-practices/rules/server-serialization.md +38 -0
  510. package/baseline/skill/receiving-code-review/SKILL.md +252 -0
  511. package/baseline/skill/requesting-code-review/SKILL.md +397 -0
  512. package/baseline/skill/requesting-code-review/review.md +160 -0
  513. package/baseline/skill/resend/SKILL.md +177 -0
  514. package/baseline/skill/resend/references/react-email.md +287 -0
  515. package/baseline/skill/resend/references/receive-email.md +248 -0
  516. package/baseline/skill/resend/references/send-email.md +318 -0
  517. package/baseline/skill/root-cause-tracing/SKILL.md +192 -0
  518. package/baseline/skill/root-cause-tracing/find-polluter.sh +63 -0
  519. package/baseline/skill/session-management/SKILL.md +9 -0
  520. package/baseline/skill/sharing-skills/SKILL.md +214 -0
  521. package/baseline/skill/skill-creator/SKILL.md +156 -0
  522. package/baseline/skill/source-code-research/SKILL.md +293 -0
  523. package/baseline/skill/source-code-research/references/analysis-tips.md +43 -0
  524. package/baseline/skill/source-code-research/references/anti-patterns.md +36 -0
  525. package/baseline/skill/source-code-research/references/common-patterns.md +57 -0
  526. package/baseline/skill/source-code-research/references/example-workflow.md +60 -0
  527. package/baseline/skill/source-code-research/references/further-reading.md +5 -0
  528. package/baseline/skill/source-code-research/references/source-structure.md +45 -0
  529. package/baseline/skill/stitch/SKILL.md +147 -0
  530. package/baseline/skill/stitch/mcp.json +9 -0
  531. package/baseline/skill/structured-edit/SKILL.md +181 -0
  532. package/baseline/skill/subagent-driven-development/SKILL.md +237 -0
  533. package/baseline/skill/supabase/SKILL.md +130 -0
  534. package/baseline/skill/supabase/mcp.json +27 -0
  535. package/baseline/skill/supabase-postgres-best-practices/AGENTS.md +1490 -0
  536. package/baseline/skill/supabase-postgres-best-practices/SKILL.md +65 -0
  537. package/baseline/skill/supabase-postgres-best-practices/rules/advanced-full-text-search.md +55 -0
  538. package/baseline/skill/supabase-postgres-best-practices/rules/advanced-jsonb-indexing.md +49 -0
  539. package/baseline/skill/supabase-postgres-best-practices/rules/conn-idle-timeout.md +46 -0
  540. package/baseline/skill/supabase-postgres-best-practices/rules/conn-limits.md +44 -0
  541. package/baseline/skill/supabase-postgres-best-practices/rules/conn-pooling.md +41 -0
  542. package/baseline/skill/supabase-postgres-best-practices/rules/conn-prepared-statements.md +46 -0
  543. package/baseline/skill/supabase-postgres-best-practices/rules/data-batch-inserts.md +54 -0
  544. package/baseline/skill/supabase-postgres-best-practices/rules/data-n-plus-one.md +53 -0
  545. package/baseline/skill/supabase-postgres-best-practices/rules/data-pagination.md +50 -0
  546. package/baseline/skill/supabase-postgres-best-practices/rules/data-upsert.md +50 -0
  547. package/baseline/skill/supabase-postgres-best-practices/rules/lock-advisory.md +56 -0
  548. package/baseline/skill/supabase-postgres-best-practices/rules/lock-deadlock-prevention.md +68 -0
  549. package/baseline/skill/supabase-postgres-best-practices/rules/lock-short-transactions.md +50 -0
  550. package/baseline/skill/supabase-postgres-best-practices/rules/lock-skip-locked.md +54 -0
  551. package/baseline/skill/supabase-postgres-best-practices/rules/monitor-explain-analyze.md +45 -0
  552. package/baseline/skill/supabase-postgres-best-practices/rules/monitor-pg-stat-statements.md +55 -0
  553. package/baseline/skill/supabase-postgres-best-practices/rules/monitor-vacuum-analyze.md +55 -0
  554. package/baseline/skill/supabase-postgres-best-practices/rules/query-composite-indexes.md +44 -0
  555. package/baseline/skill/supabase-postgres-best-practices/rules/query-covering-indexes.md +40 -0
  556. package/baseline/skill/supabase-postgres-best-practices/rules/query-index-types.md +45 -0
  557. package/baseline/skill/supabase-postgres-best-practices/rules/query-missing-indexes.md +43 -0
  558. package/baseline/skill/supabase-postgres-best-practices/rules/query-partial-indexes.md +45 -0
  559. package/baseline/skill/supabase-postgres-best-practices/rules/schema-data-types.md +46 -0
  560. package/baseline/skill/supabase-postgres-best-practices/rules/schema-foreign-key-indexes.md +59 -0
  561. package/baseline/skill/supabase-postgres-best-practices/rules/schema-lowercase-identifiers.md +55 -0
  562. package/baseline/skill/supabase-postgres-best-practices/rules/schema-partitioning.md +55 -0
  563. package/baseline/skill/supabase-postgres-best-practices/rules/schema-primary-keys.md +61 -0
  564. package/baseline/skill/supabase-postgres-best-practices/rules/security-privileges.md +54 -0
  565. package/baseline/skill/supabase-postgres-best-practices/rules/security-rls-basics.md +50 -0
  566. package/baseline/skill/supabase-postgres-best-practices/rules/security-rls-performance.md +57 -0
  567. package/baseline/skill/swarm-coordination/SKILL.md +179 -0
  568. package/baseline/skill/swarm-coordination/references/architecture.md +39 -0
  569. package/baseline/skill/swarm-coordination/references/delegation-worker-protocol.md +145 -0
  570. package/baseline/skill/swarm-coordination/references/dependency-graph.md +50 -0
  571. package/baseline/skill/swarm-coordination/references/drift-check.md +90 -0
  572. package/baseline/skill/swarm-coordination/references/integration-beads.md +20 -0
  573. package/baseline/skill/swarm-coordination/references/launch-flow.md +186 -0
  574. package/baseline/skill/swarm-coordination/references/reconciler.md +172 -0
  575. package/baseline/skill/swarm-coordination/references/tier-enforcement.md +78 -0
  576. package/baseline/skill/swarm-coordination/references/tmux-integration.md +134 -0
  577. package/baseline/skill/swift-concurrency/SKILL.md +266 -0
  578. package/baseline/skill/swift-concurrency/references/actors.md +640 -0
  579. package/baseline/skill/swift-concurrency/references/async-algorithms.md +822 -0
  580. package/baseline/skill/swift-concurrency/references/async-await-basics.md +249 -0
  581. package/baseline/skill/swift-concurrency/references/async-sequences.md +670 -0
  582. package/baseline/skill/swift-concurrency/references/core-data.md +533 -0
  583. package/baseline/skill/swift-concurrency/references/glossary.md +128 -0
  584. package/baseline/skill/swift-concurrency/references/linting.md +142 -0
  585. package/baseline/skill/swift-concurrency/references/memory-management.md +542 -0
  586. package/baseline/skill/swift-concurrency/references/migration.md +1076 -0
  587. package/baseline/skill/swift-concurrency/references/performance.md +574 -0
  588. package/baseline/skill/swift-concurrency/references/sendable.md +578 -0
  589. package/baseline/skill/swift-concurrency/references/tasks.md +604 -0
  590. package/baseline/skill/swift-concurrency/references/testing.md +565 -0
  591. package/baseline/skill/swift-concurrency/references/threading.md +452 -0
  592. package/baseline/skill/swiftui-expert-skill/SKILL.md +329 -0
  593. package/baseline/skill/swiftui-expert-skill/references/animation-advanced.md +351 -0
  594. package/baseline/skill/swiftui-expert-skill/references/animation-basics.md +284 -0
  595. package/baseline/skill/swiftui-expert-skill/references/animation-transitions.md +326 -0
  596. package/baseline/skill/swiftui-expert-skill/references/image-optimization.md +286 -0
  597. package/baseline/skill/swiftui-expert-skill/references/layout-best-practices.md +312 -0
  598. package/baseline/skill/swiftui-expert-skill/references/liquid-glass.md +377 -0
  599. package/baseline/skill/swiftui-expert-skill/references/list-patterns.md +153 -0
  600. package/baseline/skill/swiftui-expert-skill/references/modern-apis.md +400 -0
  601. package/baseline/skill/swiftui-expert-skill/references/performance-patterns.md +377 -0
  602. package/baseline/skill/swiftui-expert-skill/references/scroll-patterns.md +305 -0
  603. package/baseline/skill/swiftui-expert-skill/references/sheet-navigation-patterns.md +292 -0
  604. package/baseline/skill/swiftui-expert-skill/references/state-management.md +447 -0
  605. package/baseline/skill/swiftui-expert-skill/references/text-formatting.md +285 -0
  606. package/baseline/skill/swiftui-expert-skill/references/view-structure.md +276 -0
  607. package/baseline/skill/systematic-debugging/SKILL.md +402 -0
  608. package/baseline/skill/test-driven-development/SKILL.md +388 -0
  609. package/baseline/skill/testing-anti-patterns/SKILL.md +333 -0
  610. package/baseline/skill/testing-skills-with-subagents/SKILL.md +405 -0
  611. package/baseline/skill/tilth-cli/SKILL.md +180 -0
  612. package/baseline/skill/tool-priority/SKILL.md +299 -0
  613. package/baseline/skill/ui-ux-research/SKILL.md +9 -0
  614. package/baseline/skill/using-git-worktrees/SKILL.md +259 -0
  615. package/baseline/skill/using-skills/SKILL.md +117 -0
  616. package/baseline/skill/v0/SKILL.md +158 -0
  617. package/baseline/skill/v1-run/SKILL.md +175 -0
  618. package/baseline/skill/v1-run/mcp.json +6 -0
  619. package/baseline/skill/vercel-deploy-claimable/SKILL.md +124 -0
  620. package/baseline/skill/vercel-deploy-claimable/scripts/deploy.sh +249 -0
  621. package/baseline/skill/verification-before-completion/SKILL.md +236 -0
  622. package/baseline/skill/verification-before-completion/references/VERIFICATION_PROTOCOL.md +171 -0
  623. package/baseline/skill/visual-analysis/SKILL.md +154 -0
  624. package/baseline/skill/web-design-guidelines/SKILL.md +46 -0
  625. package/baseline/skill/writing-plans/SKILL.md +320 -0
  626. package/baseline/skill/writing-skills/SKILL.md +287 -0
  627. package/baseline/skill/writing-skills/anthropic-best-practices.md +1173 -0
  628. package/baseline/skill/writing-skills/graphviz-conventions.dot +172 -0
  629. package/baseline/skill/writing-skills/persuasion-principles.md +220 -0
  630. package/baseline/skill/writing-skills/references/anti-patterns.md +25 -0
  631. package/baseline/skill/writing-skills/references/claude-search-optimization.md +140 -0
  632. package/baseline/skill/writing-skills/references/discovery-workflow.md +11 -0
  633. package/baseline/skill/writing-skills/references/file-organization.md +32 -0
  634. package/baseline/skill/writing-skills/references/flowcharts-and-examples.md +57 -0
  635. package/baseline/skill/writing-skills/references/rationalization-hardening.md +75 -0
  636. package/baseline/skill/writing-skills/references/testing-skill-types.md +52 -0
  637. package/baseline/tool/context7.ts +191 -0
  638. package/baseline/tool/grepsearch.ts +143 -0
  639. package/baseline/tsconfig.json +21 -0
  640. package/baseline/tui.json +15 -0
  641. package/bin/mrc-opc.mjs +25 -0
  642. package/bin/ocp.mjs +25 -0
  643. package/bin/opc.mjs +25 -0
  644. package/bin/opencode-starterkit.mjs +25 -0
  645. package/docs/reports/2026-03-18-memory-db-architecture-note.md +47 -0
  646. package/docs/reports/2026-03-18-vat-opencode-classification-matrix.md +180 -0
  647. package/package.json +25 -0
  648. package/src/cli.mjs +41 -0
  649. package/src/config-merge.mjs +61 -0
  650. package/src/constants.mjs +58 -0
  651. package/src/fs-utils.mjs +46 -0
  652. package/src/install-global.mjs +102 -0
  653. package/src/install-project.mjs +81 -0
  654. package/src/memory-bootstrap.mjs +29 -0
  655. package/src/prompt.mjs +31 -0
  656. package/src/templates.mjs +31 -0
@@ -0,0 +1,822 @@
1
+ # AsyncAlgorithms Package
2
+
3
+ Patterns for combining, transforming, and managing asynchronous sequences beyond standard library. Provides time-based operators, stream combination tools, and multi-consumer primitives for Swift Concurrency.
4
+
5
+ ---
6
+
7
+ ## Quick Start
8
+
9
+ Top 5 most common operators:
10
+
11
+ ```swift
12
+ import AsyncAlgorithms
13
+
14
+ // 1. Debounce rapid inputs
15
+ for await query in searchQueryStream.debounce(for: .milliseconds(500)) {
16
+ await performSearch(query)
17
+ }
18
+
19
+ // 2. Throttle repeated actions
20
+ for await _ in buttonClicks.throttle(for: .seconds(1)) {
21
+ await performAction()
22
+ }
23
+
24
+ // 3. Merge multiple independent streams
25
+ for await message in chat1Messages.merge(chat2Messages) {
26
+ display(message)
27
+ }
28
+
29
+ // 4. Combine dependent values
30
+ for await (username, email) in usernameStream.combineLatest(emailStream) {
31
+ validateForm(username: username, email: email)
32
+ }
33
+
34
+ // 5. Zip paired operations
35
+ for await (image, metadata) in imageStream.zip(metadataStream) {
36
+ await cache(image: image, metadata: metadata)
37
+ }
38
+ ```
39
+
40
+ > **See**: [AsyncAlgorithms on GitHub](https://github.com/apple/swift-async-algorithms)
41
+
42
+ ---
43
+
44
+ ## Overview & Installation
45
+
46
+ ### What is AsyncAlgorithms?
47
+
48
+ Extends Swift's AsyncSequence with time-based operators, stream combination tools, and multi-consumer primitives.
49
+
50
+ **Use for**:
51
+ - Time-based operations: debounce, throttle, timers
52
+ - Combining streams: merge, combineLatest, zip, chain
53
+ - Multi-consumer scenarios: AsyncChannel for backpressure
54
+ - Specific operators: removeDuplicates, chunks, adjacentPairs, compacted
55
+
56
+ **Use standard library for**:
57
+ - Bridging callbacks: AsyncStream
58
+ - Simple iteration: for await in sequence
59
+ - Single-value operations: async/await
60
+
61
+ ### Installation
62
+
63
+ ```swift
64
+ dependencies: [
65
+ .package(url: "https://github.com/apple/swift-async-algorithms", from: "1.0.0")
66
+ ]
67
+
68
+ targets: [
69
+ .target(
70
+ name: "MyTarget",
71
+ dependencies: [
72
+ .product(name: "AsyncAlgorithms", package: "swift-async-algorithms")
73
+ ]
74
+ )
75
+ ]
76
+ ```
77
+
78
+ Import:
79
+
80
+ ```swift
81
+ import AsyncAlgorithms
82
+ ```
83
+
84
+ ---
85
+
86
+ ## Time-Based Operators
87
+
88
+ ### debounce(for:tolerance:clock:)
89
+
90
+ Wait for inactivity before emitting. Use for rapid inputs like search fields.
91
+
92
+ #### Example: ArticleSearcher
93
+
94
+ ```swift
95
+ import AsyncAlgorithms
96
+
97
+ @Observable
98
+ final class ArticleSearcher {
99
+ @MainActor private(set) var results: [Article] = []
100
+ private var searchQueryContinuation: AsyncStream<String>.Continuation?
101
+
102
+ private lazy var searchQueryStream: AsyncStream<String> = {
103
+ AsyncStream { continuation in
104
+ searchQueryContinuation = continuation
105
+ }
106
+ }()
107
+
108
+ func search(_ query: String) {
109
+ searchQueryContinuation?.yield(query)
110
+ }
111
+
112
+ func startDebouncedSearch() {
113
+ Task { @MainActor in
114
+ for await query in searchQueryStream.debounce(for: .milliseconds(500)) {
115
+ self.results = []
116
+ self.results = await APIClient.searchArticles(query)
117
+ }
118
+ }
119
+ }
120
+ }
121
+ ```
122
+
123
+ **Benefits**: Automatic cancellation, backpressure, cleaner than manual Task.sleep.
124
+
125
+ #### ❌ Anti-Pattern
126
+
127
+ ```swift
128
+ // Bad: Every keystroke spawns new task
129
+ func search(_ query: String) {
130
+ Task {
131
+ try? await Task.sleep(for: .milliseconds(500))
132
+ await performSearch(query)
133
+ }
134
+ }
135
+ ```
136
+
137
+ **Problem**: Multiple tasks execute simultaneously, causing out-of-order results.
138
+
139
+ **Solution**: Use `debounce()` for automatic backpressure.
140
+
141
+ ---
142
+
143
+ ### throttle(for:clock:reducing:)
144
+
145
+ Emit at most one value per interval. Use for repeated actions like button taps.
146
+
147
+ #### Example: Like Button
148
+
149
+ ```swift
150
+ import AsyncAlgorithms
151
+
152
+ struct LikeButton: View {
153
+ @State private var tapStream = AsyncStream<Void> { continuation in
154
+ // Continuation stored externally
155
+ }
156
+ @State private var isLiked = false
157
+
158
+ var body: some View {
159
+ Button(action: {
160
+ tapStream.continuation?.yield()
161
+ }) {
162
+ Image(systemName: isLiked ? "heart.fill" : "heart")
163
+ }
164
+ .task {
165
+ await handleThrottledTaps()
166
+ }
167
+ }
168
+
169
+ private func handleThrottledTaps() async {
170
+ for await _ in tapStream.throttle(for: .seconds(1)) {
171
+ await toggleLike()
172
+ }
173
+ }
174
+
175
+ private func toggleLike() async {
176
+ isLiked.toggle()
177
+ await APIClient.updateLikeStatus(isLiked: isLiked)
178
+ }
179
+ }
180
+ ```
181
+
182
+ #### Understanding reducing Parameter
183
+
184
+ ```swift
185
+ // .latest (default): Keep most recent value
186
+ for await value in events.throttle(for: .seconds(1)) {
187
+ process(value)
188
+ }
189
+
190
+ // .oldest: Keep first value
191
+ for await value in events.throttle(for: .seconds(1), reducing: .oldest) {
192
+ process(value)
193
+ }
194
+
195
+ // Custom: Sum all values
196
+ for await value in events.throttle(for: .seconds(1)) { $0 + $1 } {
197
+ process(value)
198
+ }
199
+ ```
200
+
201
+ ---
202
+
203
+ ### AsyncTimerSequence
204
+
205
+ Emit values at regular intervals. Use for periodic refresh or countdown timers.
206
+
207
+ #### Example: Feed Refresh
208
+
209
+ ```swift
210
+ import AsyncAlgorithms
211
+
212
+ @MainActor @Observable
213
+ final class FeedViewModel {
214
+ private(set) var articles: [Article] = []
215
+ private var refreshTask: Task<Void, Never>?
216
+
217
+ func startAutoRefresh() {
218
+ refreshTask = Task {
219
+ for await _ in AsyncTimerSequence(interval: .seconds(30)) {
220
+ await refreshFeed()
221
+ }
222
+ }
223
+ }
224
+
225
+ private func refreshFeed() async {
226
+ articles = await APIClient.fetchLatestArticles()
227
+ }
228
+ }
229
+ ```
230
+
231
+ #### ❌ Anti-Pattern
232
+
233
+ ```swift
234
+ // Bad: Manual timer implementation
235
+ func startTimer() {
236
+ Task {
237
+ while !Task.isCancelled {
238
+ performAction()
239
+ try? await Task.sleep(for: .seconds(1))
240
+ }
241
+ }
242
+ }
243
+ ```
244
+
245
+ **Solution**: Use `AsyncTimerSequence`.
246
+
247
+ ---
248
+
249
+ ## Combining Operators
250
+
251
+ ### merge(_:...)
252
+
253
+ Combine sequences into one, emitting as they arrive. **Stable operator ✅**
254
+
255
+ Use for independent data sources that don't depend on each other.
256
+
257
+ #### Example: Multi-Room Chat
258
+
259
+ ```swift
260
+ import AsyncAlgorithms
261
+
262
+ actor ChatManager {
263
+ private var messageContinuations: [String: AsyncStream<ChatMessage>.Continuation] = [:]
264
+
265
+ func getMessagesStream(roomID: String) -> AsyncStream<ChatMessage> {
266
+ AsyncStream { continuation in
267
+ messageContinuations[roomID] = continuation
268
+ }
269
+ }
270
+
271
+ func receiveMessage(_ message: ChatMessage) {
272
+ messageContinuations[message.roomID]?.yield(message)
273
+ }
274
+
275
+ func startMonitoring(rooms: [String]) -> AsyncStream<ChatMessage> {
276
+ let streams = rooms.map { getMessagesStream(roomID: $0) }
277
+ return streams.merge()
278
+ }
279
+ }
280
+
281
+ // Usage
282
+ let manager = ChatManager()
283
+ let mergedMessages = await manager.startMonitoring(rooms: ["general", "random"])
284
+
285
+ for await message in mergedMessages {
286
+ print("[\(message.roomID)] \(message.text)")
287
+ }
288
+ ```
289
+
290
+ **Behavior**: Values emit as they arrive from any source. Order interleaved by timing. Cancellation propagates to all sources.
291
+
292
+ ---
293
+
294
+ ### combineLatest(_:...)
295
+
296
+ Combine sequences, emitting tuple when any source emits. Always uses latest values. **Stable operator ✅**
297
+
298
+ Use for dependent values that need synchronization.
299
+
300
+ #### Example: Form Validation
301
+
302
+ ```swift
303
+ import AsyncAlgorithms
304
+
305
+ struct SignupForm: View {
306
+ @State private var usernameStream = AsyncStream<String> { /* ... */ }
307
+ @State private var emailStream = AsyncStream<String> { /* ... */ }
308
+ @State private var passwordStream = AsyncStream<String> { /* ... */ }
309
+ @State private var formState = FormState.incomplete
310
+
311
+ var body: some View {
312
+ Form {
313
+ TextField("Username", text: $username)
314
+ TextField("Email", text: $email)
315
+ SecureField("Password", text: $password)
316
+ }
317
+ .task {
318
+ await validateForm()
319
+ }
320
+ }
321
+
322
+ private func validateForm() async {
323
+ for await (username, email, password) in
324
+ usernameStream.combineLatest(emailStream, passwordStream)
325
+ {
326
+ formState = await validate(
327
+ username: username,
328
+ email: email,
329
+ password: password
330
+ )
331
+ }
332
+ }
333
+ }
334
+ ```
335
+
336
+ #### ❌ Anti-Pattern
337
+
338
+ ```swift
339
+ // Bad: Manual value combining
340
+ actor FormValidator {
341
+ private var currentUsername: String = ""
342
+ private var currentEmail: String = ""
343
+
344
+ func updateUsername(_ username: String) {
345
+ currentUsername = username
346
+ checkForm()
347
+ }
348
+ }
349
+ ```
350
+
351
+ **Solution**: Use `combineLatest()`.
352
+
353
+ ---
354
+
355
+ ### zip(_:...)
356
+
357
+ Combine sequences by pairing elements in order. **Stable operator ✅**
358
+
359
+ #### Example: Image + Metadata
360
+
361
+ ```swift
362
+ import AsyncAlgorithms
363
+
364
+ struct ImageLoader {
365
+ func loadImagesWithMetadata(urls: [URL]) async throws -> [LoadedImage] {
366
+ let imageStream = AsyncThrowingStream<UIImage, Error> { continuation in
367
+ Task {
368
+ for url in urls {
369
+ let image = try await downloadImage(from: url)
370
+ continuation.yield(image)
371
+ }
372
+ continuation.finish()
373
+ }
374
+ }
375
+
376
+ let metadataStream = AsyncThrowingStream<ImageMetadata, Error> { continuation in
377
+ Task {
378
+ for url in urls {
379
+ let metadata = try await fetchMetadata(for: url)
380
+ continuation.yield(metadata)
381
+ }
382
+ continuation.finish()
383
+ }
384
+ }
385
+
386
+ var results: [LoadedImage] = []
387
+ for try await (image, metadata) in imageStream.zip(metadataStream) {
388
+ results.append(LoadedImage(image: image, metadata: metadata))
389
+ }
390
+ return results
391
+ }
392
+ }
393
+ ```
394
+
395
+ **Behavior**: Emits tuple when all sequences emit. Maintains order. Finishes when shortest sequence finishes.
396
+
397
+ ---
398
+
399
+ ### chain(_:...)
400
+
401
+ Concatenate sequences sequentially. **Stable operator ✅**
402
+
403
+ #### Example: Paginated Loading
404
+
405
+ ```swift
406
+ import AsyncAlgorithms
407
+
408
+ struct ArticlePaginator {
409
+ func loadAllArticles() -> AsyncStream<[Article]> {
410
+ AsyncStream { continuation in
411
+ Task {
412
+ var page = 1
413
+ var hasMore = true
414
+ while hasMore {
415
+ let articles = try await fetchPage(page: page)
416
+ continuation.yield(articles)
417
+ hasMore = articles.count == 20
418
+ page += 1
419
+ }
420
+ continuation.finish()
421
+ }
422
+ }
423
+ }
424
+ }
425
+
426
+ // Usage: Chain cache + network
427
+ for await articles in loadFromCacheStream().chain(loadFromNetworkStream()) {
428
+ display(articles)
429
+ }
430
+ ```
431
+
432
+ **Behavior**: Emits all values from first sequence before starting second.
433
+
434
+ ---
435
+
436
+ ## Utility Operators
437
+
438
+ ### removeDuplicates()
439
+
440
+ Remove adjacent duplicates. **Stable operator ✅**
441
+
442
+ ```swift
443
+ import AsyncAlgorithms
444
+
445
+ actor ChatHistory {
446
+ private var messageStream = AsyncStream<ChatMessage> { /* ... */ }
447
+
448
+ func getUniqueMessages() -> AsyncStream<ChatMessage> {
449
+ messageStream.removeDuplicates()
450
+ }
451
+ }
452
+ ```
453
+
454
+ ---
455
+
456
+ ### chunks() and chunked()
457
+
458
+ Collect values into batches. **Stable operator ✅**
459
+
460
+ ```swift
461
+ import AsyncAlgorithms
462
+
463
+ struct BatchProcessor {
464
+ func processLargeDataset(dataStream: AsyncStream<DataItem>) async {
465
+ for await batch in dataStream.chunks(count: 100) {
466
+ await processBatch(batch)
467
+ }
468
+ }
469
+
470
+ func chunkedByTime(dataStream: AsyncStream<DataItem>) async {
471
+ for await batch in dataStream.chunked(by: .seconds(5)) {
472
+ await processBatch(batch)
473
+ }
474
+ }
475
+ }
476
+ ```
477
+
478
+ ---
479
+
480
+ ### compacted() and adjacentPairs()
481
+
482
+ ```swift
483
+ import AsyncAlgorithms
484
+
485
+ // Remove nil values
486
+ for await value in optionalValuesStream.compacted() {
487
+ process(value)
488
+ }
489
+
490
+ // Pair adjacent elements
491
+ for await (previous, current) in valuesStream.adjacentPairs() {
492
+ let difference = current - previous
493
+ }
494
+ ```
495
+
496
+ ---
497
+
498
+ ## Multi-Consumer Scenarios
499
+
500
+ ### AsyncChannel
501
+
502
+ AsyncSequence with backpressure. **Stable operator ✅**
503
+
504
+ Use for producer-consumer patterns with flow control.
505
+
506
+ #### Example: Message Queue
507
+
508
+ ```swift
509
+ import AsyncAlgorithms
510
+
511
+ actor MessageQueue {
512
+ private let channel = AsyncChannel<Message>()
513
+
514
+ func getMessages() -> AsyncStream<Message> {
515
+ channel
516
+ }
517
+
518
+ func enqueue(_ message: Message) async {
519
+ await channel.send(message)
520
+ }
521
+
522
+ func startProcessing() {
523
+ Task {
524
+ for await message in channel {
525
+ await process(message)
526
+ }
527
+ }
528
+ }
529
+ }
530
+
531
+ // Multiple producers
532
+ let queue = MessageQueue()
533
+ Task { await queue.enqueue(Message(type: .userAction, content: "tap")) }
534
+ Task { await queue.enqueue(Message(type: .network, content: "data")) }
535
+ queue.startProcessing()
536
+ ```
537
+
538
+ #### ❌ Anti-Pattern
539
+
540
+ ```swift
541
+ // Bad: Values split unpredictably
542
+ let stream = AsyncStream<Int> { continuation in
543
+ for i in 1...10 {
544
+ continuation.yield(i)
545
+ }
546
+ continuation.finish()
547
+ }
548
+
549
+ Task { for await value in stream { print("Consumer 1: \(value)") } }
550
+ Task { for await value in stream { print("Consumer 2: \(value)") } }
551
+ ```
552
+
553
+ **Problem**: Each value goes to only one consumer.
554
+
555
+ **Solution**: Use `AsyncChannel` for multi-consumer scenarios.
556
+
557
+ ---
558
+
559
+ ### AsyncThrowingChannel
560
+
561
+ Like AsyncChannel but can emit errors. **Stable operator ✅**
562
+
563
+ #### Example: WebSocket
564
+
565
+ ```swift
566
+ import AsyncAlgorithms
567
+
568
+ actor WebSocketConnection {
569
+ private let channel = AsyncThrowingChannel<WebSocketMessage, Error>()
570
+
571
+ func getMessages() -> AsyncThrowingStream<WebSocketMessage, Error> {
572
+ channel
573
+ }
574
+
575
+ func receiveMessage(_ message: WebSocketMessage) async {
576
+ await channel.send(message)
577
+ }
578
+
579
+ func reportError(_ error: Error) async {
580
+ await channel.finish(throwing: error)
581
+ }
582
+ }
583
+
584
+ // Usage
585
+ do {
586
+ for await message in connection.getMessages() {
587
+ handle(message)
588
+ }
589
+ } catch {
590
+ print("WebSocket error: \(error)")
591
+ }
592
+ ```
593
+
594
+ ---
595
+
596
+ ## Combine Migration Guide
597
+
598
+ ### Operator Mapping Table
599
+
600
+ | Combine | AsyncAlgorithms | Status | Alternative |
601
+ |---------|-----------------|---------|-------------|
602
+ | `.debounce()` | `debounce()` | ✅ Stable | - |
603
+ | `.throttle()` | `throttle()` | ✅ Stable | - |
604
+ | `.merge()` | `merge()` | ✅ Stable | - |
605
+ | `.combineLatest()` | `combineLatest()` | ✅ Stable | - |
606
+ | `.zip()` | `zip()` | ✅ Stable | - |
607
+ | `.concat()` | `chain()` | ✅ Stable | - |
608
+ | `.removeDuplicates()` | `removeDuplicates()` | ✅ Stable | - |
609
+ | `.timer()` | `AsyncTimerSequence` | ✅ Stable | - |
610
+ | `.share()` | - | - | `AsyncChannel` |
611
+ | `.flatMap()` | - | - | `TaskGroup` |
612
+ | `.receive(on:)` | - | - | `Task` / `@MainActor` |
613
+ | `.eraseToAnyPublisher()` | - | - | `any AsyncSequence` |
614
+
615
+ ---
616
+
617
+ ### Migration Examples
618
+
619
+ #### Example 1: ArticleSearcher
620
+
621
+ **Before: Combine**
622
+
623
+ ```swift
624
+ import Combine
625
+
626
+ final class ArticleSearcher: ObservableObject {
627
+ @Published private(set) var results: [Article] = []
628
+ @Published var searchQuery = ""
629
+
630
+ init() {
631
+ $searchQuery
632
+ .debounce(for: .milliseconds(500), scheduler: DispatchQueue.main)
633
+ .removeDuplicates()
634
+ .flatMap { query in
635
+ APIClient.searchArticles(query)
636
+ .catch { _ in Just([]) }
637
+ }
638
+ .receive(on: DispatchQueue.main)
639
+ .assign(to: &$results)
640
+ }
641
+ }
642
+ ```
643
+
644
+ **After: AsyncAlgorithms**
645
+
646
+ ```swift
647
+ import AsyncAlgorithms
648
+
649
+ @Observable
650
+ final class ArticleSearcher {
651
+ @MainActor private(set) var results: [Article] = []
652
+ private var searchQueryContinuation: AsyncStream<String>.Continuation?
653
+
654
+ private lazy var searchQueryStream: AsyncStream<String> = {
655
+ AsyncStream { continuation in
656
+ searchQueryContinuation = continuation
657
+ }
658
+ }()
659
+
660
+ func search(_ query: String) {
661
+ searchQueryContinuation?.yield(query)
662
+ }
663
+
664
+ func startDebouncedSearch() {
665
+ Task { @MainActor in
666
+ for await query in searchQueryStream
667
+ .debounce(for: .milliseconds(500))
668
+ .removeDuplicates()
669
+ {
670
+ do {
671
+ self.results = try await APIClient.searchArticles(query)
672
+ } catch {
673
+ self.results = []
674
+ }
675
+ }
676
+ }
677
+ }
678
+ }
679
+ ```
680
+
681
+ **Benefits**: Simpler error handling, no cancellables, automatic cancellation.
682
+
683
+ ---
684
+
685
+ #### Example 2: Multi-Source Loading
686
+
687
+ **Before: Combine Merge**
688
+
689
+ ```swift
690
+ import Combine
691
+
692
+ final class ArticleLoader: ObservableObject {
693
+ @Published private(set) var items: [Item] = []
694
+
695
+ func loadAllSources() {
696
+ let source1 = APIClient.fetchItems(from: .source1)
697
+ let source2 = APIClient.fetchItems(from: .source2)
698
+
699
+ Publishers.Merge(source1, source2)
700
+ .scan([]) { accumulated, new in
701
+ accumulated + new
702
+ }
703
+ .receive(on: DispatchQueue.main)
704
+ .assign(to: &$items)
705
+ }
706
+ }
707
+ ```
708
+
709
+ **After: TaskGroup**
710
+
711
+ ```swift
712
+ import AsyncAlgorithms
713
+
714
+ @Observable
715
+ final class ArticleLoader {
716
+ @MainActor private(set) var items: [Item] = []
717
+
718
+ func loadAllSourcesParallel() async {
719
+ await withTaskGroup(of: [Item].self) { group in
720
+ group.addTask {
721
+ await APIClient.fetchItems(from: .source1)
722
+ }
723
+ group.addTask {
724
+ await APIClient.fetchItems(from: .source2)
725
+ }
726
+
727
+ for await newItems in group {
728
+ items.append(contentsOf: newItems)
729
+ }
730
+ }
731
+ }
732
+ }
733
+ ```
734
+
735
+ **Key difference**: For parallel execution, use `TaskGroup` instead of `flatMap`.
736
+
737
+ ---
738
+
739
+ #### Example 3: Form Validation
740
+
741
+ **Before: Combine**
742
+
743
+ ```swift
744
+ import Combine
745
+
746
+ final class FormValidator: ObservableObject {
747
+ @Published var username = ""
748
+ @Published var email = ""
749
+
750
+ @Published private(set) var formState: FormState = .incomplete
751
+
752
+ init() {
753
+ Publishers.CombineLatest2($username, $email)
754
+ .map { username, email in
755
+ validate(username: username, email: email)
756
+ }
757
+ .assign(to: &$formState)
758
+ }
759
+ }
760
+ ```
761
+
762
+ **After: AsyncAlgorithms or async let**
763
+
764
+ ```swift
765
+ import AsyncAlgorithms
766
+
767
+ @Observable
768
+ final class FormValidator {
769
+ var username = ""
770
+ var email = ""
771
+
772
+ @MainActor private(set) var formState: FormState = .incomplete
773
+
774
+ // Option 1: combineLatest for stream-based validation
775
+ func startStreamValidation() {
776
+ Task { @MainActor in
777
+ for await (username, email) in
778
+ usernameStream.combineLatest(emailStream)
779
+ {
780
+ self.formState = validate(
781
+ username: username,
782
+ email: email
783
+ )
784
+ }
785
+ }
786
+ }
787
+
788
+ // Option 2: async let for simple validation
789
+ func validateForm() async {
790
+ let (username, email) = await (username, email)
791
+ formState = validate(
792
+ username: username,
793
+ email: email
794
+ )
795
+ }
796
+ }
797
+ ```
798
+
799
+ **Choose**:
800
+ - `combineLatest()`: Continuous validation as fields change
801
+ - `async let`: One-time validation when all values available
802
+
803
+ ---
804
+
805
+ ## Best Practices
806
+
807
+ 1. **Use time-based operators** for rapid inputs: debounce() for search, throttle() for buttons
808
+ 2. **Combine streams** with merge/combineLatest instead of manual state management
809
+ 3. **Use AsyncChannel** for multi-consumer scenarios with backpressure
810
+ 4. **Ensure Sendable conformance** when using operators across isolation boundaries
811
+ 5. **Leverage cancellation** - Task cancellation propagates through all operators
812
+ 6. **Choose right tool**: AsyncAlgorithms for complex streams, AsyncStream for bridging callbacks
813
+ 7. **Avoid manual sleep loops** - use AsyncTimerSequence instead
814
+
815
+ ---
816
+
817
+ ## Further Learning
818
+
819
+ - [AsyncAlgorithms Documentation](https://github.com/apple/swift-async-algorithms)
820
+ - [Combine Migration Guide](migration.md)
821
+ - [Async Sequences](async-sequences.md)
822
+ - [Tasks](tasks.md) - Task groups and structured concurrency