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,70 @@
1
+ # OpenCode Plugins
2
+
3
+ Plugins in this directory extend OpenCode with project-specific behavior and tools.
4
+
5
+ ## Current Plugin Files
6
+
7
+ ```text
8
+ plugin/
9
+ ├── memory.ts # 4-tier automated memory system (capture → distill → curate → inject)
10
+ ├── sessions.ts # Session search tools (find/read)
11
+ ├── copilot-auth.ts # GitHub Copilot provider/auth integration
12
+ ├── skill-mcp.ts # Skill-scoped MCP bridge (skill_mcp tools)
13
+ └── lib/
14
+ ├── memory-tools.ts # 6 core memory tools (observation, search, get, read, update, timeline)
15
+ ├── memory-admin-tools.ts # Admin tool (memory-admin: 9 operations)
16
+ ├── memory-hooks.ts # All hooks (event, idle, transforms, compaction)
17
+ ├── memory-helpers.ts # Constants, compaction utilities, formatting
18
+ ├── memory-db.ts # Barrel re-export for db/ modules
19
+ ├── capture.ts # message.part.updated → temporal_messages
20
+ ├── distill.ts # TF-IDF extraction, key sentence selection
21
+ ├── curator.ts # Pattern-based knowledge extraction
22
+ ├── context.ts # Token budget enforcement via messages.transform
23
+ ├── inject.ts # Relevance-scored LTM injection via system.transform
24
+ ├── notify.ts # Cross-platform notification helpers
25
+ └── db/
26
+ ├── types.ts # All types + MEMORY_CONFIG
27
+ ├── schema.ts # SQL schema, migrations, DB singleton
28
+ ├── observations.ts # Observation CRUD + FTS5 search
29
+ ├── pipeline.ts # Temporal messages + distillations + relevance scoring
30
+ └── maintenance.ts # Memory files, FTS5, archiving, vacuum
31
+ ```
32
+
33
+ ## Plugin Responsibilities
34
+
35
+ - `memory.ts`
36
+ - 4-tier automated knowledge system: temporal_messages → distillations → observations → memory_files
37
+ - Captures messages automatically via `message.part.updated` events
38
+ - Distills sessions on idle (TF-IDF, key sentence extraction)
39
+ - Curates observations from distillations via pattern matching
40
+ - Injects relevant knowledge into system prompt (BM25 _ recency _ confidence scoring)
41
+ - Manages context window via messages.transform (token budget enforcement)
42
+ - Merges compaction logic (beads, handoffs, project memory, knowledge)
43
+ - Provides 7 tools: observation, memory-search, memory-get, memory-read, memory-update, memory-timeline, memory-admin
44
+
45
+ - `sessions.ts`
46
+ - Provides tools: `find_sessions`, `read_session`
47
+ - Direct SQLite access to OpenCode's session DB
48
+ - Multi-word AND search with relevance ranking
49
+ - 180-day time-bounded search
50
+ - Agentic `nextStep` guidance in results
51
+
52
+ - `skill-mcp.ts`
53
+ - Loads MCP configs from skills
54
+ - Exposes `skill_mcp`, `skill_mcp_status`, `skill_mcp_disconnect`
55
+ - Supports tool filtering with `includeTools`
56
+
57
+ - `copilot-auth.ts`
58
+ - Handles GitHub Copilot OAuth/device flow
59
+ - Adds model/provider request shaping for compatible reasoning behavior
60
+
61
+ ## Notes
62
+
63
+ - OpenCode auto-discovers every `.ts` file in `plugin/` as a plugin — keep helper modules in `lib/`
64
+ - Keep plugin documentation aligned with actual files in this directory
65
+ - Prefer shared helpers in `lib/` over duplicated utilities across plugins
66
+
67
+ ## References
68
+
69
+ - OpenCode plugin docs: https://opencode.ai/docs/plugins/
70
+ - OpenCode custom tools docs: https://opencode.ai/docs/custom-tools/
@@ -0,0 +1,607 @@
1
+ /**
2
+ * GitHub Copilot Auth Plugin
3
+ * Simplified auth provider without token expiration checks
4
+ *
5
+ * Claude Reasoning Support:
6
+ * This plugin adds `thinking_budget` to the request body for Claude models.
7
+ * The Copilot API accepts this parameter and returns reasoning in the response.
8
+ *
9
+ * NOTE: Response parsing for reasoning_text/reasoning_opaque is handled by
10
+ * the custom SDK at .opencode/plugin/sdk/copilot/ which properly converts
11
+ * these fields to AI SDK's reasoning content parts.
12
+ */
13
+
14
+ import type { Plugin } from "@opencode-ai/plugin";
15
+
16
+ const CLIENT_ID = "Ov23li8tweQw6odWQebz";
17
+
18
+ // Logger function that will be set by the plugin
19
+ let log: (
20
+ level: "debug" | "info" | "warn" | "error",
21
+ message: string,
22
+ extra?: Record<string, any>,
23
+ ) => void = () => {};
24
+
25
+ /**
26
+ * Set the logger function from the plugin context
27
+ */
28
+ function setLogger(client: any) {
29
+ log = (level, message, extra) => {
30
+ client.app
31
+ .log({
32
+ service: "copilot-auth",
33
+ level,
34
+ message,
35
+ extra,
36
+ })
37
+ .catch(() => {}); // Fire and forget, don't block on logging
38
+ };
39
+ }
40
+
41
+ // Add a small safety buffer when polling to avoid hitting the server
42
+ // slightly too early due to clock skew / timer drift.
43
+ const OAUTH_POLLING_SAFETY_MARGIN_MS = 3000; // 3 seconds
44
+
45
+ const HEADERS = {
46
+ "User-Agent": "GitHubCopilotChat/0.35.0",
47
+ "Editor-Version": "vscode/1.107.0",
48
+ "Editor-Plugin-Version": "copilot-chat/0.35.0",
49
+ "Copilot-Integration-Id": "vscode-chat",
50
+ };
51
+
52
+ const RESPONSES_API_ALTERNATE_INPUT_TYPES = [
53
+ "file_search_call",
54
+ "computer_call",
55
+ "computer_call_output",
56
+ "web_search_call",
57
+ "function_call",
58
+ "function_call_output",
59
+ "image_generation_call",
60
+ "code_interpreter_call",
61
+ "local_shell_call",
62
+ "local_shell_call_output",
63
+ "mcp_list_tools",
64
+ "mcp_approval_request",
65
+ "mcp_approval_response",
66
+ "mcp_call",
67
+ "reasoning",
68
+ ];
69
+
70
+ function normalizeDomain(url: string): string {
71
+ return url.replace(/^https?:\/\//, "").replace(/\/$/, "");
72
+ }
73
+
74
+ function getUrls(domain: string) {
75
+ return {
76
+ DEVICE_CODE_URL: `https://${domain}/login/device/code`,
77
+ ACCESS_TOKEN_URL: `https://${domain}/login/oauth/access_token`,
78
+ };
79
+ }
80
+
81
+ const sleep = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms));
82
+
83
+ // Rate limit handling configuration
84
+ const RATE_LIMIT_CONFIG = {
85
+ maxRetries: 3,
86
+ baseDelayMs: 2000, // Start with 2 seconds
87
+ maxDelayMs: 30000, // Cap at 30 seconds
88
+ };
89
+
90
+ /**
91
+ * Calculate delay with exponential backoff and jitter
92
+ * Retries: 2s, 4s, 8s (with jitter)
93
+ */
94
+ function calculateRetryDelay(attempt: number): number {
95
+ const exponentialDelay = RATE_LIMIT_CONFIG.baseDelayMs * Math.pow(2, attempt);
96
+ const jitter = Math.random() * 1000; // Add 0-1s random jitter
97
+ const delay = Math.min(
98
+ exponentialDelay + jitter,
99
+ RATE_LIMIT_CONFIG.maxDelayMs,
100
+ );
101
+ return Math.round(delay);
102
+ }
103
+
104
+ export const CopilotAuthPlugin: Plugin = async ({ client: sdk }) => {
105
+ // Initialize logger with the SDK client
106
+ setLogger(sdk);
107
+
108
+ return {
109
+ auth: {
110
+ provider: "github-copilot",
111
+ loader: async (getAuth, provider) => {
112
+ const info = await getAuth();
113
+ if (!info || info.type !== "oauth") return {};
114
+
115
+ // Enterprise URL support for baseURL
116
+ const enterpriseUrl = (info as any).enterpriseUrl;
117
+ const baseURL = enterpriseUrl
118
+ ? `https://copilot-api.${normalizeDomain(enterpriseUrl)}`
119
+ : undefined;
120
+
121
+ if (provider && provider.models) {
122
+ for (const [_modelId, model] of Object.entries(provider.models)) {
123
+ model.cost = {
124
+ input: 0,
125
+ output: 0,
126
+ cache: {
127
+ read: 0,
128
+ write: 0,
129
+ },
130
+ };
131
+
132
+ // All models use the standard github-copilot SDK
133
+ // Reasoning support for Claude models is handled via:
134
+ // 1. The fetch wrapper adds thinking_budget to request body
135
+ // 2. The fetch wrapper strips invalid thinking blocks from messages
136
+ model.api.npm = "@ai-sdk/github-copilot";
137
+ }
138
+ }
139
+
140
+ return {
141
+ baseURL,
142
+ apiKey: "",
143
+ async fetch(input, init) {
144
+ const info = await getAuth();
145
+ if (info.type !== "oauth") return fetch(input, init);
146
+
147
+ let isAgentCall = false;
148
+ let isVisionRequest = false;
149
+ let modifiedBody: any = undefined;
150
+ let isClaudeModel = false;
151
+
152
+ try {
153
+ const body =
154
+ typeof init?.body === "string"
155
+ ? JSON.parse(init.body)
156
+ : init?.body;
157
+
158
+ const url = input.toString();
159
+
160
+ // Check if this is a Claude model request
161
+ const modelId = body?.model || "";
162
+ isClaudeModel = modelId.toLowerCase().includes("claude");
163
+
164
+ // Completions API
165
+ if (body?.messages && url.includes("completions")) {
166
+ // Keep local logic: detect if any message is assistant/tool
167
+ isAgentCall = body.messages.some((msg: any) =>
168
+ ["tool", "assistant"].includes(msg.role),
169
+ );
170
+ isVisionRequest = body.messages.some(
171
+ (msg: any) =>
172
+ Array.isArray(msg.content) &&
173
+ msg.content.some((part: any) => part.type === "image_url"),
174
+ );
175
+
176
+ // For Claude models, add thinking_budget to enable reasoning
177
+ // The Copilot API accepts this parameter and returns reasoning_text/reasoning_opaque
178
+ if (isClaudeModel) {
179
+ // Use configured thinking_budget from model options, or default to 10000
180
+ const thinkingBudget = body.thinking_budget || 10000;
181
+
182
+ // Fix for "Invalid signature in thinking block" error:
183
+ // The Copilot API uses reasoning_text/reasoning_opaque format for thinking
184
+ // When these are passed back without proper signature, it causes errors
185
+ // Solution: Ensure reasoning_opaque is present when reasoning_text exists,
186
+ // or remove reasoning content entirely if signature is invalid/missing
187
+ const cleanedMessages = body.messages.map(
188
+ (msg: any, idx: number) => {
189
+ if (msg.role !== "assistant") return msg;
190
+
191
+ // Log message structure for debugging
192
+ log("debug", `Processing assistant message ${idx}`, {
193
+ has_reasoning_text: !!msg.reasoning_text,
194
+ has_reasoning_opaque: !!msg.reasoning_opaque,
195
+ content_type: typeof msg.content,
196
+ content_is_array: Array.isArray(msg.content),
197
+ });
198
+
199
+ // If message has reasoning_text but no/invalid reasoning_opaque, remove reasoning
200
+ if (msg.reasoning_text && !msg.reasoning_opaque) {
201
+ log(
202
+ "warn",
203
+ `Removing reasoning_text without reasoning_opaque from message ${idx}`,
204
+ );
205
+ const { reasoning_text: _unused, ...cleanedMsg } = msg;
206
+ return cleanedMsg;
207
+ }
208
+
209
+ // If content is an array, check for thinking blocks
210
+ if (Array.isArray(msg.content)) {
211
+ const hasThinkingBlock = msg.content.some(
212
+ (part: any) => part.type === "thinking",
213
+ );
214
+ if (hasThinkingBlock) {
215
+ log(
216
+ "debug",
217
+ `Message ${idx} has thinking blocks in content array`,
218
+ );
219
+ // Filter out thinking blocks without signatures
220
+ const cleanedContent = msg.content.filter(
221
+ (part: any) => {
222
+ if (part.type === "thinking") {
223
+ if (!part.signature) {
224
+ log(
225
+ "warn",
226
+ `Removing thinking block without signature`,
227
+ );
228
+ return false;
229
+ }
230
+ }
231
+ return true;
232
+ },
233
+ );
234
+ return {
235
+ ...msg,
236
+ content:
237
+ cleanedContent.length > 0 ? cleanedContent : null,
238
+ };
239
+ }
240
+ }
241
+
242
+ return msg;
243
+ },
244
+ );
245
+
246
+ modifiedBody = {
247
+ ...body,
248
+ messages: cleanedMessages,
249
+ thinking_budget: thinkingBudget,
250
+ };
251
+ log("info", `Adding thinking_budget for Claude model`, {
252
+ model: modelId,
253
+ thinking_budget: thinkingBudget,
254
+ });
255
+ }
256
+
257
+ // For GPT models (o1, gpt-5, etc.), add reasoning parameter
258
+ const isGptModel =
259
+ modelId.toLowerCase().includes("gpt") ||
260
+ modelId.toLowerCase().includes("o1") ||
261
+ modelId.toLowerCase().includes("o3") ||
262
+ modelId.toLowerCase().includes("o4");
263
+
264
+ if (isGptModel && !isClaudeModel) {
265
+ // Get reasoning effort from body options or default to "medium"
266
+ const reasoningEffort =
267
+ body.reasoning?.effort ||
268
+ body.reasoningEffort ||
269
+ body.reasoning_effort ||
270
+ "medium";
271
+
272
+ modifiedBody = {
273
+ ...(modifiedBody || body),
274
+ reasoning: {
275
+ effort: reasoningEffort,
276
+ },
277
+ };
278
+
279
+ // Also pass through other reasoning options if present
280
+ if (body.reasoningSummary || body.reasoning?.summary) {
281
+ modifiedBody.reasoning.summary =
282
+ body.reasoningSummary || body.reasoning?.summary;
283
+ }
284
+
285
+ log("info", `Adding reasoning for GPT model`, {
286
+ model: modelId,
287
+ reasoning_effort: reasoningEffort,
288
+ });
289
+ }
290
+ }
291
+
292
+ // Responses API
293
+ if (body?.input) {
294
+ isAgentCall = body.input.some(
295
+ (item: any) =>
296
+ item?.role === "assistant" ||
297
+ (item?.type &&
298
+ RESPONSES_API_ALTERNATE_INPUT_TYPES.includes(item.type)),
299
+ );
300
+
301
+ isVisionRequest = body.input.some(
302
+ (item: any) =>
303
+ Array.isArray(item?.content) &&
304
+ item.content.some(
305
+ (part: any) => part.type === "input_image",
306
+ ),
307
+ );
308
+ }
309
+
310
+ // Messages API (Anthropic style)
311
+ if (body?.messages && !url.includes("completions")) {
312
+ isAgentCall = body.messages.some((msg: any) =>
313
+ ["tool", "assistant"].includes(msg.role),
314
+ );
315
+ isVisionRequest = body.messages.some(
316
+ (item: any) =>
317
+ Array.isArray(item?.content) &&
318
+ item.content.some(
319
+ (part: any) =>
320
+ part?.type === "image" ||
321
+ (part?.type === "tool_result" &&
322
+ Array.isArray(part?.content) &&
323
+ part.content.some(
324
+ (nested: any) => nested?.type === "image",
325
+ )),
326
+ ),
327
+ );
328
+ }
329
+ } catch {}
330
+
331
+ const headers: Record<string, string> = {
332
+ "x-initiator": isAgentCall ? "agent" : "user",
333
+ ...(init?.headers as Record<string, string>),
334
+ ...HEADERS,
335
+ Authorization: `Bearer ${info.refresh}`,
336
+ "Openai-Intent": "conversation-edits",
337
+ };
338
+
339
+ if (isVisionRequest) {
340
+ headers["Copilot-Vision-Request"] = "true";
341
+ }
342
+
343
+ // Official only deletes lowercase "authorization"
344
+ delete headers["x-api-key"];
345
+ delete headers["authorization"];
346
+
347
+ // Prepare the final init object with potentially modified body
348
+ const finalInit = {
349
+ ...init,
350
+ headers,
351
+ ...(modifiedBody ? { body: JSON.stringify(modifiedBody) } : {}),
352
+ };
353
+
354
+ // Retry logic with exponential backoff for rate limiting
355
+ let lastError: Error | undefined;
356
+ for (
357
+ let attempt = 0;
358
+ attempt <= RATE_LIMIT_CONFIG.maxRetries;
359
+ attempt++
360
+ ) {
361
+ try {
362
+ const response = await fetch(input, finalInit);
363
+
364
+ // If we get a 429, retry with backoff
365
+ if (
366
+ response.status === 429 &&
367
+ attempt < RATE_LIMIT_CONFIG.maxRetries
368
+ ) {
369
+ const delay = calculateRetryDelay(attempt);
370
+ log("warn", `Rate limited (429), retrying`, {
371
+ delay_ms: delay,
372
+ attempt: attempt + 1,
373
+ max_retries: RATE_LIMIT_CONFIG.maxRetries,
374
+ });
375
+ await sleep(delay);
376
+ continue;
377
+ }
378
+
379
+ // Response transformation is now handled by the custom SDK at
380
+ // .opencode/plugin/sdk/copilot/ which properly parses reasoning_text/reasoning_opaque
381
+ // and converts them to AI SDK's reasoning content parts
382
+ return response;
383
+ } catch (error) {
384
+ lastError = error as Error;
385
+
386
+ // Network errors might be transient, retry
387
+ if (attempt < RATE_LIMIT_CONFIG.maxRetries) {
388
+ const delay = calculateRetryDelay(attempt);
389
+ log("warn", `Request failed, retrying`, {
390
+ delay_ms: delay,
391
+ attempt: attempt + 1,
392
+ max_retries: RATE_LIMIT_CONFIG.maxRetries,
393
+ error: lastError.message,
394
+ });
395
+ await sleep(delay);
396
+ continue;
397
+ }
398
+ throw error;
399
+ }
400
+ }
401
+
402
+ // If we've exhausted all retries, throw the last error
403
+ if (lastError) {
404
+ throw new Error(
405
+ `[Copilot] Max retries (${RATE_LIMIT_CONFIG.maxRetries}) exceeded. Last error: ${lastError.message}`,
406
+ );
407
+ }
408
+
409
+ // This should not be reached, but just in case
410
+ throw new Error(
411
+ `[Copilot] Max retries (${RATE_LIMIT_CONFIG.maxRetries}) exceeded`,
412
+ );
413
+ },
414
+ };
415
+ },
416
+ methods: [
417
+ {
418
+ type: "oauth",
419
+ label: "Login with GitHub Copilot",
420
+ prompts: [
421
+ {
422
+ type: "select",
423
+ key: "deploymentType",
424
+ message: "Select GitHub deployment type",
425
+ options: [
426
+ {
427
+ label: "GitHub.com",
428
+ value: "github.com",
429
+ hint: "Public",
430
+ },
431
+ {
432
+ label: "GitHub Enterprise",
433
+ value: "enterprise",
434
+ hint: "Data residency or self-hosted",
435
+ },
436
+ ],
437
+ },
438
+ {
439
+ type: "text",
440
+ key: "enterpriseUrl",
441
+ message: "Enter your GitHub Enterprise URL or domain",
442
+ placeholder: "company.ghe.com or https://company.ghe.com",
443
+ condition: (inputs: any) =>
444
+ inputs.deploymentType === "enterprise",
445
+ validate: (value: string) => {
446
+ if (!value) return "URL or domain is required";
447
+ try {
448
+ const url = value.includes("://")
449
+ ? new URL(value)
450
+ : new URL(`https://${value}`);
451
+ if (!url.hostname)
452
+ return "Please enter a valid URL or domain";
453
+ return undefined;
454
+ } catch {
455
+ return "Please enter a valid URL (e.g., company.ghe.com or https://company.ghe.com)";
456
+ }
457
+ },
458
+ },
459
+ ],
460
+ async authorize(inputs: any = {}) {
461
+ const deploymentType = inputs.deploymentType || "github.com";
462
+
463
+ let domain = "github.com";
464
+ let actualProvider = "github-copilot";
465
+
466
+ if (deploymentType === "enterprise") {
467
+ const enterpriseUrl = inputs.enterpriseUrl;
468
+ domain = normalizeDomain(enterpriseUrl);
469
+ actualProvider = "github-copilot-enterprise";
470
+ }
471
+
472
+ const urls = getUrls(domain);
473
+
474
+ const deviceResponse = await fetch(urls.DEVICE_CODE_URL, {
475
+ method: "POST",
476
+ headers: {
477
+ Accept: "application/json",
478
+ "Content-Type": "application/json",
479
+ "User-Agent": "GitHubCopilotChat/0.35.0",
480
+ },
481
+ body: JSON.stringify({
482
+ client_id: CLIENT_ID,
483
+ scope: "read:user",
484
+ }),
485
+ });
486
+
487
+ if (!deviceResponse.ok) {
488
+ throw new Error("Failed to initiate device authorization");
489
+ }
490
+
491
+ const deviceData = await deviceResponse.json();
492
+
493
+ return {
494
+ url: deviceData.verification_uri,
495
+ instructions: `Enter code: ${deviceData.user_code}`,
496
+ method: "auto",
497
+ callback: async () => {
498
+ while (true) {
499
+ const response = await fetch(urls.ACCESS_TOKEN_URL, {
500
+ method: "POST",
501
+ headers: {
502
+ Accept: "application/json",
503
+ "Content-Type": "application/json",
504
+ "User-Agent": "GitHubCopilotChat/0.35.0",
505
+ },
506
+ body: JSON.stringify({
507
+ client_id: CLIENT_ID,
508
+ device_code: deviceData.device_code,
509
+ grant_type:
510
+ "urn:ietf:params:oauth:grant-type:device_code",
511
+ }),
512
+ });
513
+
514
+ if (!response.ok) return { type: "failed" };
515
+
516
+ const data = await response.json();
517
+
518
+ if (data.access_token) {
519
+ const result: {
520
+ type: "success";
521
+ refresh: string;
522
+ access: string;
523
+ expires: number;
524
+ provider?: string;
525
+ enterpriseUrl?: string;
526
+ } = {
527
+ type: "success",
528
+ refresh: data.access_token,
529
+ access: data.access_token,
530
+ expires: 0,
531
+ };
532
+
533
+ if (actualProvider === "github-copilot-enterprise") {
534
+ result.provider = "github-copilot-enterprise";
535
+ result.enterpriseUrl = domain;
536
+ }
537
+
538
+ return result;
539
+ }
540
+
541
+ if (data.error === "authorization_pending") {
542
+ await sleep(
543
+ deviceData.interval * 1000 +
544
+ OAUTH_POLLING_SAFETY_MARGIN_MS,
545
+ );
546
+ continue;
547
+ }
548
+
549
+ if (data.error === "slow_down") {
550
+ // Based on the RFC spec, we must add 5 seconds to our current polling interval.
551
+ let newInterval = (deviceData.interval + 5) * 1000;
552
+
553
+ if (
554
+ data.interval &&
555
+ typeof data.interval === "number" &&
556
+ data.interval > 0
557
+ ) {
558
+ newInterval = data.interval * 1000;
559
+ }
560
+
561
+ await sleep(newInterval + OAUTH_POLLING_SAFETY_MARGIN_MS);
562
+ continue;
563
+ }
564
+
565
+ if (data.error) return { type: "failed" };
566
+
567
+ await sleep(
568
+ deviceData.interval * 1000 + OAUTH_POLLING_SAFETY_MARGIN_MS,
569
+ );
570
+ continue;
571
+ }
572
+ },
573
+ };
574
+ },
575
+ },
576
+ ],
577
+ },
578
+ // Hook to add custom headers for Claude reasoning support
579
+ "chat.headers": async (input: any, output: any) => {
580
+ // Only apply to GitHub Copilot provider
581
+ if (!input.model?.providerID?.includes("github-copilot")) return;
582
+
583
+ // Add Anthropic beta header for interleaved thinking (extended reasoning)
584
+ // This is required for Claude models to return thinking blocks
585
+ if (input.model?.api?.npm === "@ai-sdk/anthropic") {
586
+ output.headers["anthropic-beta"] = "interleaved-thinking-2025-05-14";
587
+ }
588
+
589
+ // Mark subagent sessions as agent-initiated (matching standard Copilot tools)
590
+ try {
591
+ const session = await sdk.session
592
+ .get({
593
+ path: {
594
+ id: input.sessionID,
595
+ },
596
+ throwOnError: true,
597
+ })
598
+ .catch(() => undefined);
599
+ if (session?.data?.parentID) {
600
+ output.headers["x-initiator"] = "agent";
601
+ }
602
+ } catch {
603
+ // Ignore errors from session lookup
604
+ }
605
+ },
606
+ };
607
+ };