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,180 @@
1
+ # VAT `.opencode` Classification Matrix
2
+
3
+ **Source repo:** `/Users/mrcagents/Work/projects/VAT`
4
+ **Source path:** `/Users/mrcagents/Work/projects/VAT/.opencode`
5
+ **Purpose:** classify VAT `.opencode` contents into `global baseline`, `thin project overlay`, and `runtime-only / remove from repo` for the new `mrc-opc` installer architecture.
6
+
7
+ ---
8
+
9
+ ## Executive Summary
10
+
11
+ Current VAT `.opencode` is too heavy for per-project installation:
12
+
13
+ - Total size: **42M**
14
+ - `node_modules`: **35M**
15
+ - `memory.db*`: **~2.4M**
16
+ - skills files: **92** files under `.opencode/skill`
17
+
18
+ ### Decision
19
+
20
+ - Promote most of VAT `.opencode` to **global baseline** under `~/.config/opencode`
21
+ - Keep only a **thin project overlay** in each repo
22
+ - Remove runtime/cache state from the repo-local `.opencode`
23
+
24
+ ---
25
+
26
+ ## Classification Rules
27
+
28
+ ### A. Global baseline
29
+ Use for reusable OpenCode operating system content shared across repos.
30
+
31
+ ### B. Thin project overlay
32
+ Use only for repo-specific instructions, memory, model overrides, MCP toggles, and repo-local hooks.
33
+
34
+ ### C. Runtime-only / remove from repo
35
+ Use for cache, local DB, generated state, dependencies, and other machine-local artifacts.
36
+
37
+ ---
38
+
39
+ ## File/Folder Classification Matrix
40
+
41
+ | Path | Category | Reason | Target handling |
42
+ |---|---|---|---|
43
+ | `.opencode/agent/` | Global baseline | Reusable agent definitions across repos | Move to global baseline package/templates |
44
+ | `.opencode/command/` | Global baseline | Generic command set, not VAT-specific | Move to global baseline |
45
+ | `.opencode/context/README.md` | Global baseline | Generic documentation | Move to global docs |
46
+ | `.opencode/plugin/copilot-auth.ts` | Global baseline | Shared provider/auth integration | Move to global plugin |
47
+ | `.opencode/plugin/sessions.ts` | Global baseline | Shared session search/read tooling | Move to global plugin |
48
+ | `.opencode/plugin/skill-mcp.ts` | Global baseline | Shared MCP bridge behavior | Move to global plugin |
49
+ | `.opencode/plugin/memory.ts` | Global baseline | Shared memory operating layer | Move to global plugin |
50
+ | `.opencode/plugin/lib/*` | Global baseline | Shared implementation helpers | Move to global plugin library |
51
+ | `.opencode/plugin/README.md` | Global baseline | Generic plugin docs | Move to global docs |
52
+ | `.opencode/plugin/package.json` | Global baseline | Shared plugin package metadata | Move to global baseline |
53
+ | `.opencode/plugin/tsconfig.json` | Global baseline | Shared plugin build config | Move to global baseline |
54
+ | `.opencode/skill/` | Global baseline | Reusable skills, not repo-specific | Move to global baseline |
55
+ | `.opencode/tool/context7.ts` | Global baseline | Reusable tool | Move to global baseline |
56
+ | `.opencode/tool/grepsearch.ts` | Global baseline | Reusable tool | Move to global baseline |
57
+ | `.opencode/README.md` | Global baseline | Generic OpenCode workspace docs | Move to global docs |
58
+ | `.opencode/AGENTS.md` | Global baseline | Shared operating rules | Move to global baseline docs/policy |
59
+ | `.opencode/AGENT_ALIGNMENT.md` | Global baseline | Shared agent alignment contract | Move to global baseline |
60
+ | `.opencode/.template-manifest.json` | Global baseline | Template system metadata | Move to global baseline |
61
+ | `.opencode/.version` | Global baseline | Baseline package/version metadata | Move to global baseline |
62
+ | `.opencode/package.json` | Global baseline | Baseline package metadata | Move to global baseline |
63
+ | `.opencode/package-lock.json` | Global baseline | Baseline dependency lockfile | Move to global baseline |
64
+ | `.opencode/tsconfig.json` | Global baseline | Shared baseline config | Move to global baseline |
65
+ | `.opencode/tui.json` | Global baseline | Shared TUI config | Move to global baseline |
66
+ | `.opencode/dcp.jsonc` | Global baseline | Shared DCP config pattern | Move to global baseline, allow overlay override if needed |
67
+ | `.opencode/memory/_templates/*` | Global baseline | Shared memory file templates | Move to global baseline template pack |
68
+ | `.opencode/memory/README.md` | Global baseline | Shared memory docs | Move to global baseline |
69
+ | `.opencode/plans/swarm-protocol.md` | Global baseline | Reusable process doc | Move to global docs/templates |
70
+ | `.opencode/plans/*.md` (generated historical plans) | Runtime-only / maybe archive | Historical local planning artifacts, not baseline installer payload | Exclude from thin overlay; optionally archive externally |
71
+ | `.opencode/memory/research/*` | Project overlay (optional archive) | VAT-specific research/history, useful context but not installer baseline | Keep only if user wants repo memory preserved; otherwise archive |
72
+ | `.opencode/memory/project/project.md` | Thin project overlay | VAT-specific project context | Keep in repo overlay |
73
+ | `.opencode/memory/project/state.md` | Thin project overlay | VAT-specific execution/state context | Keep in repo overlay |
74
+ | `.opencode/memory/project/roadmap.md` | Thin project overlay | VAT-specific roadmap | Keep in repo overlay |
75
+ | `.opencode/memory/project/tech-stack.md` | Thin project overlay | VAT-specific stack | Keep in repo overlay |
76
+ | `.opencode/memory/project/user.md` | Thin project overlay | VAT-specific user/product context | Keep in repo overlay |
77
+ | `.opencode/memory/project/gotchas.md` | Thin project overlay | Repo-specific footguns | Keep in repo overlay |
78
+ | `.opencode/memory/session-context.md` | Thin project overlay (optional) | Session bootstrap context that may still be repo-specific | Keep only if actively used; otherwise generate on demand |
79
+ | `.opencode/opencode.json` | Thin project overlay | Repo-specific resolved config, agent/model overrides, plugin enablement, MCP wiring | Rewrite into minimal overlay |
80
+ | `.opencode/opencode.json.tui-migration.bak` | Runtime-only / remove | Backup artifact, not part of thin overlay | Remove from final overlay |
81
+ | `.opencode/.env` | Thin project overlay or avoid | Repo-specific envs if absolutely needed | Prefer not to materialize by default |
82
+ | `.opencode/.env.example` | Thin project overlay | Repo-specific example envs | Keep only if genuinely repo-specific |
83
+ | `.opencode/node_modules/` | Runtime-only / remove | Machine-local dependencies, huge weight | Remove from project overlay |
84
+ | `.opencode/memory.db` | Runtime-only / remove | Local DB state | Move out of repo / do not install in overlay |
85
+ | `.opencode/memory.db-shm` | Runtime-only / remove | SQLite runtime artifact | Remove |
86
+ | `.opencode/memory.db-wal` | Runtime-only / remove | SQLite runtime artifact | Remove |
87
+ | `.opencode/plugin/notification.ts.bak` | Runtime-only / archive | Old experimental backup file | Remove or archive |
88
+
89
+ ---
90
+
91
+ ## Thin Overlay Shape for VAT (Target)
92
+
93
+ ```text
94
+ .opencode/
95
+ opencode.json
96
+ memory/
97
+ project/
98
+ project.md
99
+ state.md
100
+ roadmap.md
101
+ tech-stack.md
102
+ user.md
103
+ gotchas.md
104
+ ```
105
+
106
+ ### Optional thin overlay additions
107
+ Only if truly needed:
108
+
109
+ ```text
110
+ .opencode/
111
+ .env.example
112
+ plugin/<repo-specific-hook>.ts
113
+ memory/session-context.md
114
+ ```
115
+
116
+ ---
117
+
118
+ ## Proposed Global Baseline Contents for `mrc-opc`
119
+
120
+ Derived from VAT `.opencode`:
121
+
122
+ ```text
123
+ templates/global/
124
+ agents/
125
+ commands/
126
+ plugins/
127
+ skills/
128
+ tools/
129
+ docs/
130
+ opencode.json
131
+ package.json
132
+ tsconfig.json
133
+ tui.json
134
+ dcp.jsonc
135
+ memory-templates/
136
+ ```
137
+
138
+ ---
139
+
140
+ ## Immediate Migration Priorities
141
+
142
+ ### Priority 1 — remove weight from repo overlay source while preserving per-project runtime memory
143
+ - `.opencode/node_modules/`
144
+ - generated backup/cache artifacts
145
+ - keep `.opencode/memory.db*` as per-project runtime state, but do not ship/commit them in the thin overlay template
146
+
147
+ ### Priority 2 — promote reusable baseline
148
+ - `agent/`
149
+ - `command/`
150
+ - `plugin/`
151
+ - `skill/`
152
+ - `tool/`
153
+ - generic docs/manifests/configs
154
+
155
+ ### Priority 3 — rewrite project overlay
156
+ - minimize `.opencode/opencode.json`
157
+ - keep only VAT-specific memory/project policy
158
+
159
+ ---
160
+
161
+ ## Risks / Notes
162
+
163
+ 1. Some plugin files may feel shared but could still assume repo-local relative paths; migration must verify path assumptions.
164
+ 2. `opencode.json` rewrite must preserve VAT-specific model/MCP/plugin overrides while dropping baseline duplication.
165
+ 3. Historical research/plans under `.opencode/memory/research` and `.opencode/plans` should not be lost accidentally; archive strategy may be needed.
166
+ 4. `.env` handling should be conservative — avoid auto-moving secrets into global baseline.
167
+
168
+ ---
169
+
170
+ ## Recommendation
171
+
172
+ Use VAT as the **canary repo** for the new two-layer architecture:
173
+
174
+ - `npx mrc-opc install` -> install global baseline
175
+ - `opc install` -> generate VAT thin overlay from templates + VAT-specific overrides
176
+
177
+ Then apply the same classification logic to TAA and future repos.
178
+ cific overrides
179
+
180
+ Then apply the same classification logic to TAA and future repos.
package/package.json ADDED
@@ -0,0 +1,25 @@
1
+ {
2
+ "name": "opencode-starterkit",
3
+ "version": "1.0.1",
4
+ "private": false,
5
+ "type": "module",
6
+ "description": "Global baseline + thin project overlay installer for OpenCode.",
7
+ "license": "MIT",
8
+ "bin": {
9
+ "opencode-starterkit": "./bin/opencode-starterkit.mjs",
10
+ "ocp": "./bin/ocp.mjs"
11
+ },
12
+ "files": [
13
+ "baseline",
14
+ "bin",
15
+ "docs",
16
+ "src",
17
+ "README.md"
18
+ ],
19
+ "scripts": {
20
+ "test:smoke": "node ./bin/opencode-starterkit.mjs --help && node ./bin/ocp.mjs --help"
21
+ },
22
+ "engines": {
23
+ "node": ">=20"
24
+ }
25
+ }
package/src/cli.mjs ADDED
@@ -0,0 +1,41 @@
1
+ export function parseArgs(argv) {
2
+ const args = [...argv]
3
+ const help = args.includes('--help') || args.includes('-h')
4
+ const command = args.find((arg) => !arg.startsWith('-')) || null
5
+
6
+ const getFlagValue = (name) => {
7
+ const prefix = `${name}=`
8
+ const inline = args.find((arg) => arg.startsWith(prefix))
9
+ if (inline) return inline.slice(prefix.length)
10
+ const index = args.indexOf(name)
11
+ if (index >= 0 && index + 1 < args.length) return args[index + 1]
12
+ return null
13
+ }
14
+
15
+ return {
16
+ help,
17
+ command,
18
+ args,
19
+ options: {
20
+ action: getFlagValue('--action'),
21
+ preset: getFlagValue('--preset'),
22
+ model: getFlagValue('--model'),
23
+ yes: args.includes('--yes'),
24
+ },
25
+ }
26
+ }
27
+
28
+ export function printHelp(binName) {
29
+ const isGlobal = binName === 'opencode-starterkit'
30
+ console.log(`${binName} <command>\n`)
31
+ console.log('Commands:')
32
+ console.log(` ${binName} install ${isGlobal ? 'Install global OpenCode baseline and expose ocp command' : 'Install thin project overlay in current repo'}`)
33
+ console.log(' --help, -h Show help')
34
+ if (!isGlobal) {
35
+ console.log('\nProject install flags:')
36
+ console.log(' --action <name> Non-interactive action selection')
37
+ console.log(' --preset <name> free | recommended | custom | skip')
38
+ console.log(' --model <id> Custom model id when using scripted install')
39
+ console.log(' --yes Apply without confirmation prompt')
40
+ }
41
+ }
@@ -0,0 +1,61 @@
1
+ import fs from 'node:fs'
2
+
3
+ function isPlainObject(value) {
4
+ return value && typeof value === 'object' && !Array.isArray(value)
5
+ }
6
+
7
+ function mergeArraysAdditive(current = [], incoming = []) {
8
+ const out = [...current]
9
+ for (const item of incoming) {
10
+ if (!out.some((existing) => JSON.stringify(existing) === JSON.stringify(item))) {
11
+ out.push(item)
12
+ }
13
+ }
14
+ return out
15
+ }
16
+
17
+ function mergeObjectsAdditive(current = {}, incoming = {}) {
18
+ const out = { ...current }
19
+ for (const [key, value] of Object.entries(incoming)) {
20
+ if (!(key in out)) {
21
+ out[key] = value
22
+ continue
23
+ }
24
+
25
+ const existing = out[key]
26
+ if (Array.isArray(existing) && Array.isArray(value)) {
27
+ out[key] = mergeArraysAdditive(existing, value)
28
+ } else if (isPlainObject(existing) && isPlainObject(value)) {
29
+ out[key] = mergeObjectsAdditive(existing, value)
30
+ }
31
+ }
32
+ return out
33
+ }
34
+
35
+ export function mergeOpencodeConfigAdditive({ current, baseline }) {
36
+ const out = { ...current }
37
+
38
+ for (const [key, value] of Object.entries(baseline)) {
39
+ if (!(key in out)) {
40
+ out[key] = value
41
+ continue
42
+ }
43
+
44
+ const existing = out[key]
45
+ if (Array.isArray(existing) && Array.isArray(value)) {
46
+ out[key] = mergeArraysAdditive(existing, value)
47
+ } else if (isPlainObject(existing) && isPlainObject(value)) {
48
+ out[key] = mergeObjectsAdditive(existing, value)
49
+ }
50
+ }
51
+
52
+ return out
53
+ }
54
+
55
+ export function readJson(filePath) {
56
+ return JSON.parse(fs.readFileSync(filePath, 'utf8'))
57
+ }
58
+
59
+ export function writeJson(filePath, value) {
60
+ fs.writeFileSync(filePath, `${JSON.stringify(value, null, 2)}\n`, 'utf8')
61
+ }
@@ -0,0 +1,58 @@
1
+ import path from 'node:path'
2
+ import os from 'node:os'
3
+ import { fileURLToPath } from 'node:url'
4
+
5
+ const THIS_FILE = fileURLToPath(import.meta.url)
6
+ const SRC_DIR = path.dirname(THIS_FILE)
7
+ const PACKAGE_ROOT = path.resolve(SRC_DIR, '..')
8
+
9
+ export const HOME = os.homedir()
10
+ export const MRC_OPC_PACKAGE_ROOT = PACKAGE_ROOT
11
+ export const MRC_OPC_BASELINE_ROOT = path.join(PACKAGE_ROOT, 'baseline')
12
+
13
+ export const GLOBAL_CONFIG_ROOT = path.join(HOME, '.config', 'opencode')
14
+ export const GLOBAL_PACKAGE_ROOT = path.join(GLOBAL_CONFIG_ROOT, 'opencode-starterkit')
15
+ export const GLOBAL_BIN_DIR = path.join(HOME, '.local', 'bin')
16
+ export const GLOBAL_OCP_SHIM = path.join(GLOBAL_BIN_DIR, 'ocp')
17
+
18
+ export const GLOBAL_AGENTS_DIR = path.join(GLOBAL_CONFIG_ROOT, 'agents')
19
+ export const GLOBAL_SKILLS_DIR = path.join(GLOBAL_CONFIG_ROOT, 'skills')
20
+ export const GLOBAL_PLUGIN_DIR = path.join(GLOBAL_CONFIG_ROOT, 'plugin')
21
+ export const GLOBAL_COMMAND_DIR = path.join(GLOBAL_CONFIG_ROOT, 'command')
22
+ export const GLOBAL_TOOL_DIR = path.join(GLOBAL_CONFIG_ROOT, 'tool')
23
+ export const GLOBAL_DOCS_DIR = path.join(GLOBAL_CONFIG_ROOT, 'docs', 'opencode-starterkit-baseline')
24
+ export const GLOBAL_TEMPLATE_DIR = path.join(GLOBAL_CONFIG_ROOT, 'templates', 'project-overlay')
25
+
26
+ export const PROJECT_MEMORY_FILES = ['project.md', 'state.md', 'roadmap.md', 'tech-stack.md', 'user.md', 'gotchas.md']
27
+
28
+ export const ACTION_OPTIONS = [
29
+ 'Initialize project',
30
+ 'Config',
31
+ 'Upgrade',
32
+ 'List agents',
33
+ 'Add agent',
34
+ 'List skills',
35
+ 'Add skill',
36
+ 'Status',
37
+ 'Doctor',
38
+ 'Exit',
39
+ ]
40
+
41
+ export const MODEL_PRESETS = {
42
+ free: {
43
+ label: 'Free models',
44
+ model: 'opencode/minimax-m2.5-free',
45
+ },
46
+ recommended: {
47
+ label: 'Recommended models',
48
+ model: 'proxy/gpt-5.3-codex',
49
+ },
50
+ custom: {
51
+ label: 'Custom',
52
+ model: null,
53
+ },
54
+ skip: {
55
+ label: 'Skip',
56
+ model: null,
57
+ },
58
+ }
@@ -0,0 +1,46 @@
1
+ import fs from 'node:fs'
2
+ import path from 'node:path'
3
+
4
+ export function ensureDir(dirPath) {
5
+ fs.mkdirSync(dirPath, { recursive: true })
6
+ }
7
+
8
+ export function exists(targetPath) {
9
+ return fs.existsSync(targetPath)
10
+ }
11
+
12
+ export function copyFileIfExists(fromPath, toPath) {
13
+ if (!exists(fromPath)) return false
14
+ ensureDir(path.dirname(toPath))
15
+ fs.copyFileSync(fromPath, toPath)
16
+ return true
17
+ }
18
+
19
+ export function copyDirRecursive(fromDir, toDir) {
20
+ if (!exists(fromDir)) return false
21
+ ensureDir(toDir)
22
+ fs.cpSync(fromDir, toDir, { recursive: true, force: true })
23
+ return true
24
+ }
25
+
26
+ export function writeText(filePath, content) {
27
+ ensureDir(path.dirname(filePath))
28
+ fs.writeFileSync(filePath, content, 'utf8')
29
+ }
30
+
31
+ export function readText(filePath) {
32
+ return fs.readFileSync(filePath, 'utf8')
33
+ }
34
+
35
+ export function backupPath(targetPath) {
36
+ const stamp = new Date().toISOString().replace(/[:.]/g, '-')
37
+ return `${targetPath}.bak-${stamp}`
38
+ }
39
+
40
+ export function backupIfExists(targetPath) {
41
+ if (!exists(targetPath)) return null
42
+ const backup = backupPath(targetPath)
43
+ ensureDir(path.dirname(backup))
44
+ fs.cpSync(targetPath, backup, { recursive: true, force: true })
45
+ return backup
46
+ }
@@ -0,0 +1,102 @@
1
+ import fs from 'node:fs'
2
+ import path from 'node:path'
3
+ import {
4
+ GLOBAL_AGENTS_DIR,
5
+ GLOBAL_BIN_DIR,
6
+ GLOBAL_COMMAND_DIR,
7
+ GLOBAL_CONFIG_ROOT,
8
+ GLOBAL_DOCS_DIR,
9
+ GLOBAL_OCP_SHIM,
10
+ GLOBAL_PACKAGE_ROOT,
11
+ GLOBAL_PLUGIN_DIR,
12
+ GLOBAL_SKILLS_DIR,
13
+ GLOBAL_TEMPLATE_DIR,
14
+ GLOBAL_TOOL_DIR,
15
+ MRC_OPC_BASELINE_ROOT,
16
+ MRC_OPC_PACKAGE_ROOT,
17
+ } from './constants.mjs'
18
+ import { backupIfExists, copyDirRecursive, copyFileIfExists, ensureDir, writeText, exists } from './fs-utils.mjs'
19
+ import { mergeOpencodeConfigAdditive, readJson, writeJson } from './config-merge.mjs'
20
+
21
+ function installPackageRuntime() {
22
+ backupIfExists(GLOBAL_PACKAGE_ROOT)
23
+ ensureDir(GLOBAL_CONFIG_ROOT)
24
+ fs.cpSync(MRC_OPC_PACKAGE_ROOT, GLOBAL_PACKAGE_ROOT, {
25
+ recursive: true,
26
+ force: true,
27
+ filter: (src) => !src.includes(`${path.sep}.git${path.sep}`) && !src.endsWith(`${path.sep}.git`),
28
+ })
29
+ }
30
+
31
+ function copyMarkdownAgents() {
32
+ ensureDir(GLOBAL_AGENTS_DIR)
33
+ const sourceDir = path.join(MRC_OPC_BASELINE_ROOT, 'agent')
34
+ if (!exists(sourceDir)) return
35
+ for (const file of fs.readdirSync(sourceDir)) {
36
+ if (!file.endsWith('.md')) continue
37
+ copyFileIfExists(path.join(sourceDir, file), path.join(GLOBAL_AGENTS_DIR, file))
38
+ }
39
+ }
40
+
41
+ function copySkills() { copyDirRecursive(path.join(MRC_OPC_BASELINE_ROOT, 'skill'), GLOBAL_SKILLS_DIR) }
42
+ function copyPlugins() { copyDirRecursive(path.join(MRC_OPC_BASELINE_ROOT, 'plugin'), GLOBAL_PLUGIN_DIR) }
43
+ function copyCommands() { copyDirRecursive(path.join(MRC_OPC_BASELINE_ROOT, 'command'), GLOBAL_COMMAND_DIR) }
44
+ function copyTools() { copyDirRecursive(path.join(MRC_OPC_BASELINE_ROOT, 'tool'), GLOBAL_TOOL_DIR) }
45
+
46
+ function copyTemplatesAndDocs() {
47
+ copyDirRecursive(path.join(MRC_OPC_BASELINE_ROOT, 'memory', '_templates'), path.join(GLOBAL_TEMPLATE_DIR, 'memory'))
48
+ ensureDir(GLOBAL_DOCS_DIR)
49
+ for (const file of ['README.md', 'AGENTS.md', 'AGENT_ALIGNMENT.md', '.template-manifest.json', '.version', 'dcp.jsonc', 'tui.json', 'tsconfig.json', 'package.json', 'package-lock.json', 'opencode.json']) {
50
+ copyFileIfExists(path.join(MRC_OPC_BASELINE_ROOT, file), path.join(GLOBAL_DOCS_DIR, file.replace(/^\./, 'dot-')))
51
+ }
52
+ copyDirRecursive(path.join(MRC_OPC_BASELINE_ROOT, 'context'), path.join(GLOBAL_DOCS_DIR, 'context'))
53
+ }
54
+
55
+ function installOcpShim() {
56
+ ensureDir(GLOBAL_BIN_DIR)
57
+ const shim = `#!/usr/bin/env bash\nnode \"${path.join(GLOBAL_PACKAGE_ROOT, 'bin', 'ocp.mjs')}\" \"$@\"\n`
58
+ writeText(GLOBAL_OCP_SHIM, shim)
59
+ fs.chmodSync(GLOBAL_OCP_SHIM, 0o755)
60
+ }
61
+
62
+ function mergeGlobalOpencodeJson() {
63
+ const baselinePath = path.join(MRC_OPC_BASELINE_ROOT, 'opencode.json')
64
+ const globalPath = path.join(GLOBAL_CONFIG_ROOT, 'opencode.json')
65
+
66
+ if (!exists(baselinePath)) return { merged: false, reason: 'missing baseline opencode.json' }
67
+
68
+ const baseline = readJson(baselinePath)
69
+ const current = exists(globalPath) ? readJson(globalPath) : {}
70
+ const merged = mergeOpencodeConfigAdditive({ current, baseline })
71
+ backupIfExists(globalPath)
72
+ writeJson(globalPath, merged)
73
+ return { merged: true, globalPath }
74
+ }
75
+
76
+ export async function installGlobal({ cwd }) {
77
+ console.log('[opencode-starterkit] Global install starting')
78
+ console.log(`cwd=${cwd}`)
79
+ console.log(`baseline=${MRC_OPC_BASELINE_ROOT}`)
80
+ installPackageRuntime()
81
+ copyMarkdownAgents()
82
+ copySkills()
83
+ copyPlugins()
84
+ copyCommands()
85
+ copyTools()
86
+ copyTemplatesAndDocs()
87
+ const mergeResult = mergeGlobalOpencodeJson()
88
+ installOcpShim()
89
+ console.log(`[opencode-starterkit] Installed package runtime at ${GLOBAL_PACKAGE_ROOT}`)
90
+ console.log(`[opencode-starterkit] Synced agents -> ${GLOBAL_AGENTS_DIR}`)
91
+ console.log(`[opencode-starterkit] Synced skills -> ${GLOBAL_SKILLS_DIR}`)
92
+ console.log(`[opencode-starterkit] Synced plugins -> ${GLOBAL_PLUGIN_DIR}`)
93
+ console.log(`[opencode-starterkit] Synced commands -> ${GLOBAL_COMMAND_DIR}`)
94
+ console.log(`[opencode-starterkit] Synced tools -> ${GLOBAL_TOOL_DIR}`)
95
+ console.log(`[opencode-starterkit] Synced templates/docs -> ${GLOBAL_TEMPLATE_DIR}`)
96
+ if (mergeResult.merged) {
97
+ console.log(`[opencode-starterkit] Merged global config -> ${mergeResult.globalPath}`)
98
+ } else {
99
+ console.log(`[opencode-starterkit] Skipped global config merge: ${mergeResult.reason}`)
100
+ }
101
+ console.log(`[opencode-starterkit] Installed ocp shim at ${GLOBAL_OCP_SHIM}`)
102
+ }
@@ -0,0 +1,81 @@
1
+ import path from 'node:path'
2
+ import { ACTION_OPTIONS, MODEL_PRESETS, PROJECT_MEMORY_FILES } from './constants.mjs'
3
+ import { confirm, askText, selectOption } from './prompt.mjs'
4
+ import { ensureDir, writeText } from './fs-utils.mjs'
5
+ import { loadProjectMemoryTemplates, renderProjectOpencodeJson } from './templates.mjs'
6
+ import { bootstrapProjectMemoryDb } from './memory-bootstrap.mjs'
7
+
8
+ function printSummary({ cwd, action, model }) {
9
+ console.log('\n[opc] Summary')
10
+ console.log(`repo=${cwd}`)
11
+ console.log(`action=${action}`)
12
+ console.log(`model=${model || 'inherit/global-default'}`)
13
+ console.log('apply=.opencode/opencode.json + .opencode/memory/project/* + .opencode/memory.db')
14
+ }
15
+
16
+ function materializeThinOverlay({ cwd, model }) {
17
+ const root = path.join(cwd, '.opencode')
18
+ const memoryDir = path.join(root, 'memory', 'project')
19
+ ensureDir(memoryDir)
20
+
21
+ writeText(path.join(root, 'opencode.json'), renderProjectOpencodeJson({ model }))
22
+
23
+ const templates = loadProjectMemoryTemplates()
24
+ for (const name of PROJECT_MEMORY_FILES) {
25
+ writeText(path.join(memoryDir, name), templates[name])
26
+ }
27
+ }
28
+
29
+ function resolvePresetModel(presetKey, explicitModel) {
30
+ if (presetKey === 'custom') return explicitModel || null
31
+ return MODEL_PRESETS[presetKey]?.model || null
32
+ }
33
+
34
+ export async function installProjectOverlay({ cwd, args, options = {} }) {
35
+ console.log('[opc] Project overlay install')
36
+ console.log(`cwd=${cwd}`)
37
+
38
+ const optionBag = options || {}
39
+ let action = optionBag.action || null
40
+ if (!action) {
41
+ action = await selectOption({ title: 'Step 1/3 — Select action', options: ACTION_OPTIONS, defaultIndex: 0 })
42
+ }
43
+
44
+ if (action === 'Exit') {
45
+ console.log('[opc] Exit without changes')
46
+ return
47
+ }
48
+
49
+ if (action !== 'Initialize project') {
50
+ console.log(`[opc] Action \"${action}\" is not implemented yet in this scaffold. Use Initialize project first.`)
51
+ return
52
+ }
53
+
54
+ let presetKey = optionBag.preset || null
55
+ if (!presetKey) {
56
+ const preset = await selectOption({
57
+ title: 'Step 2/3 — Choose model preset',
58
+ options: Object.entries(MODEL_PRESETS).map(([key, item]) => `${key}: ${item.label}`),
59
+ defaultIndex: 1,
60
+ })
61
+ presetKey = preset.split(':')[0]
62
+ }
63
+
64
+ let model = resolvePresetModel(presetKey, optionBag.model)
65
+ if (presetKey === 'custom' && !model) {
66
+ model = await askText({ title: 'Enter custom model id', placeholder: 'provider/model' })
67
+ }
68
+
69
+ printSummary({ cwd, action, model })
70
+ const approved = optionBag.yes ? true : await confirm({ title: 'Step 3/3 — Apply thin overlay now?', defaultYes: true })
71
+ if (!approved) {
72
+ console.log('[opc] Cancelled before writing files')
73
+ return
74
+ }
75
+
76
+ materializeThinOverlay({ cwd, model })
77
+ const dbResult = bootstrapProjectMemoryDb({ cwd })
78
+ console.log(`[opc] Thin overlay installed`)
79
+ console.log(`[opc] Memory DB bootstrapped via ${dbResult.schemaPath}`)
80
+ console.log('[opc] Ready to code')
81
+ }
@@ -0,0 +1,29 @@
1
+ import path from 'node:path'
2
+ import { spawnSync } from 'node:child_process'
3
+ import { MRC_OPC_BASELINE_ROOT } from './constants.mjs'
4
+ import { exists } from './fs-utils.mjs'
5
+
6
+ function resolveSchemaPath() {
7
+ const baselineSchema = path.join(MRC_OPC_BASELINE_ROOT, 'plugin', 'lib', 'db', 'schema.ts')
8
+ if (exists(baselineSchema)) return baselineSchema
9
+ throw new Error(`schema.ts not found in baseline: ${baselineSchema}`)
10
+ }
11
+
12
+ export function bootstrapProjectMemoryDb({ cwd }) {
13
+ const schemaPath = resolveSchemaPath()
14
+ const code = `import { getMemoryDB, closeMemoryDB } from ${JSON.stringify(schemaPath)}; getMemoryDB(); closeMemoryDB(); console.log('MEMORY_DB_BOOTSTRAPPED');`
15
+ const result = spawnSync('bun', ['-e', code], {
16
+ cwd,
17
+ encoding: 'utf8',
18
+ stdio: ['ignore', 'pipe', 'pipe'],
19
+ })
20
+
21
+ if (result.status !== 0) {
22
+ throw new Error(`memory db bootstrap failed\nstdout=${result.stdout || ''}\nstderr=${result.stderr || ''}`)
23
+ }
24
+
25
+ return {
26
+ schemaPath,
27
+ stdout: (result.stdout || '').trim(),
28
+ }
29
+ }
package/src/prompt.mjs ADDED
@@ -0,0 +1,31 @@
1
+ import readline from 'node:readline/promises'
2
+ import { stdin as input, stdout as output } from 'node:process'
3
+
4
+ export async function selectOption({ title, options, defaultIndex = 0 }) {
5
+ const rl = readline.createInterface({ input, output })
6
+ console.log(`\n${title}`)
7
+ options.forEach((option, index) => {
8
+ console.log(`${index + 1}. ${option}`)
9
+ })
10
+ const answer = await rl.question(`Choose [${defaultIndex + 1}]: `)
11
+ rl.close()
12
+ const selectedIndex = Number(answer || defaultIndex + 1) - 1
13
+ return options[selectedIndex] || options[defaultIndex]
14
+ }
15
+
16
+ export async function askText({ title, placeholder = '' }) {
17
+ const rl = readline.createInterface({ input, output })
18
+ const answer = await rl.question(`${title}${placeholder ? ` (${placeholder})` : ''}: `)
19
+ rl.close()
20
+ return answer.trim()
21
+ }
22
+
23
+ export async function confirm({ title, defaultYes = true }) {
24
+ const rl = readline.createInterface({ input, output })
25
+ const suffix = defaultYes ? '[Y/n]' : '[y/N]'
26
+ const answer = await rl.question(`${title} ${suffix}: `)
27
+ rl.close()
28
+ const normalized = answer.trim().toLowerCase()
29
+ if (!normalized) return defaultYes
30
+ return normalized === 'y' || normalized === 'yes'
31
+ }