forge-server 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (412) hide show
  1. package/.claude/hooks/worktree-create.sh +64 -0
  2. package/.claude/hooks/worktree-remove.sh +57 -0
  3. package/.claude/settings.local.json +29 -0
  4. package/.forge/knowledge/conventions.yaml +1 -0
  5. package/.forge/knowledge/decisions.yaml +1 -0
  6. package/.forge/knowledge/gotchas.yaml +1 -0
  7. package/.forge/knowledge/patterns.yaml +1 -0
  8. package/.forge/manifest.yaml +6 -0
  9. package/CLAUDE.md +144 -0
  10. package/bin/setup-forge.sh +132 -0
  11. package/dist/cli.d.ts +3 -0
  12. package/dist/cli.d.ts.map +1 -0
  13. package/dist/cli.js +553 -0
  14. package/dist/cli.js.map +1 -0
  15. package/dist/context/codebase.d.ts +57 -0
  16. package/dist/context/codebase.d.ts.map +1 -0
  17. package/dist/context/codebase.js +301 -0
  18. package/dist/context/codebase.js.map +1 -0
  19. package/dist/context/injector.d.ts +147 -0
  20. package/dist/context/injector.d.ts.map +1 -0
  21. package/dist/context/injector.js +533 -0
  22. package/dist/context/injector.js.map +1 -0
  23. package/dist/context/memory.d.ts +32 -0
  24. package/dist/context/memory.d.ts.map +1 -0
  25. package/dist/context/memory.js +140 -0
  26. package/dist/context/memory.js.map +1 -0
  27. package/dist/context/session-index.d.ts +54 -0
  28. package/dist/context/session-index.d.ts.map +1 -0
  29. package/dist/context/session-index.js +265 -0
  30. package/dist/context/session-index.js.map +1 -0
  31. package/dist/context/session.d.ts +42 -0
  32. package/dist/context/session.d.ts.map +1 -0
  33. package/dist/context/session.js +121 -0
  34. package/dist/context/session.js.map +1 -0
  35. package/dist/index.d.ts +3 -0
  36. package/dist/index.d.ts.map +1 -0
  37. package/dist/index.js +37 -0
  38. package/dist/index.js.map +1 -0
  39. package/dist/ingestion/chunker.d.ts +19 -0
  40. package/dist/ingestion/chunker.d.ts.map +1 -0
  41. package/dist/ingestion/chunker.js +189 -0
  42. package/dist/ingestion/chunker.js.map +1 -0
  43. package/dist/ingestion/embedder.d.ts +45 -0
  44. package/dist/ingestion/embedder.d.ts.map +1 -0
  45. package/dist/ingestion/embedder.js +152 -0
  46. package/dist/ingestion/embedder.js.map +1 -0
  47. package/dist/ingestion/git-analyzer.d.ts +77 -0
  48. package/dist/ingestion/git-analyzer.d.ts.map +1 -0
  49. package/dist/ingestion/git-analyzer.js +437 -0
  50. package/dist/ingestion/git-analyzer.js.map +1 -0
  51. package/dist/ingestion/indexer.d.ts +79 -0
  52. package/dist/ingestion/indexer.d.ts.map +1 -0
  53. package/dist/ingestion/indexer.js +766 -0
  54. package/dist/ingestion/indexer.js.map +1 -0
  55. package/dist/ingestion/markdown-chunker.d.ts +19 -0
  56. package/dist/ingestion/markdown-chunker.d.ts.map +1 -0
  57. package/dist/ingestion/markdown-chunker.js +243 -0
  58. package/dist/ingestion/markdown-chunker.js.map +1 -0
  59. package/dist/ingestion/markdown-knowledge.d.ts +21 -0
  60. package/dist/ingestion/markdown-knowledge.d.ts.map +1 -0
  61. package/dist/ingestion/markdown-knowledge.js +129 -0
  62. package/dist/ingestion/markdown-knowledge.js.map +1 -0
  63. package/dist/ingestion/parser.d.ts +20 -0
  64. package/dist/ingestion/parser.d.ts.map +1 -0
  65. package/dist/ingestion/parser.js +429 -0
  66. package/dist/ingestion/parser.js.map +1 -0
  67. package/dist/ingestion/watcher.d.ts +28 -0
  68. package/dist/ingestion/watcher.d.ts.map +1 -0
  69. package/dist/ingestion/watcher.js +147 -0
  70. package/dist/ingestion/watcher.js.map +1 -0
  71. package/dist/knowledge/hydrator.d.ts +37 -0
  72. package/dist/knowledge/hydrator.d.ts.map +1 -0
  73. package/dist/knowledge/hydrator.js +220 -0
  74. package/dist/knowledge/hydrator.js.map +1 -0
  75. package/dist/knowledge/registry.d.ts +129 -0
  76. package/dist/knowledge/registry.d.ts.map +1 -0
  77. package/dist/knowledge/registry.js +361 -0
  78. package/dist/knowledge/registry.js.map +1 -0
  79. package/dist/knowledge/search.d.ts +114 -0
  80. package/dist/knowledge/search.d.ts.map +1 -0
  81. package/dist/knowledge/search.js +428 -0
  82. package/dist/knowledge/search.js.map +1 -0
  83. package/dist/knowledge/store.d.ts +76 -0
  84. package/dist/knowledge/store.d.ts.map +1 -0
  85. package/dist/knowledge/store.js +230 -0
  86. package/dist/knowledge/store.js.map +1 -0
  87. package/dist/learning/confidence.d.ts +30 -0
  88. package/dist/learning/confidence.d.ts.map +1 -0
  89. package/dist/learning/confidence.js +165 -0
  90. package/dist/learning/confidence.js.map +1 -0
  91. package/dist/learning/patterns.d.ts +52 -0
  92. package/dist/learning/patterns.d.ts.map +1 -0
  93. package/dist/learning/patterns.js +290 -0
  94. package/dist/learning/patterns.js.map +1 -0
  95. package/dist/learning/trajectory.d.ts +55 -0
  96. package/dist/learning/trajectory.d.ts.map +1 -0
  97. package/dist/learning/trajectory.js +200 -0
  98. package/dist/learning/trajectory.js.map +1 -0
  99. package/dist/memory/memory-compat.d.ts +100 -0
  100. package/dist/memory/memory-compat.d.ts.map +1 -0
  101. package/dist/memory/memory-compat.js +146 -0
  102. package/dist/memory/memory-compat.js.map +1 -0
  103. package/dist/memory/observation-store.d.ts +57 -0
  104. package/dist/memory/observation-store.d.ts.map +1 -0
  105. package/dist/memory/observation-store.js +154 -0
  106. package/dist/memory/observation-store.js.map +1 -0
  107. package/dist/memory/session-tracker.d.ts +81 -0
  108. package/dist/memory/session-tracker.d.ts.map +1 -0
  109. package/dist/memory/session-tracker.js +262 -0
  110. package/dist/memory/session-tracker.js.map +1 -0
  111. package/dist/pipeline/engine.d.ts +179 -0
  112. package/dist/pipeline/engine.d.ts.map +1 -0
  113. package/dist/pipeline/engine.js +691 -0
  114. package/dist/pipeline/engine.js.map +1 -0
  115. package/dist/pipeline/events.d.ts +54 -0
  116. package/dist/pipeline/events.d.ts.map +1 -0
  117. package/dist/pipeline/events.js +157 -0
  118. package/dist/pipeline/events.js.map +1 -0
  119. package/dist/pipeline/parallel.d.ts +83 -0
  120. package/dist/pipeline/parallel.d.ts.map +1 -0
  121. package/dist/pipeline/parallel.js +277 -0
  122. package/dist/pipeline/parallel.js.map +1 -0
  123. package/dist/pipeline/state-machine.d.ts +65 -0
  124. package/dist/pipeline/state-machine.d.ts.map +1 -0
  125. package/dist/pipeline/state-machine.js +176 -0
  126. package/dist/pipeline/state-machine.js.map +1 -0
  127. package/dist/query/graph-queries.d.ts +84 -0
  128. package/dist/query/graph-queries.d.ts.map +1 -0
  129. package/dist/query/graph-queries.js +216 -0
  130. package/dist/query/graph-queries.js.map +1 -0
  131. package/dist/query/hybrid-search.d.ts +34 -0
  132. package/dist/query/hybrid-search.d.ts.map +1 -0
  133. package/dist/query/hybrid-search.js +263 -0
  134. package/dist/query/hybrid-search.js.map +1 -0
  135. package/dist/query/intent-detector.d.ts +35 -0
  136. package/dist/query/intent-detector.d.ts.map +1 -0
  137. package/dist/query/intent-detector.js +115 -0
  138. package/dist/query/intent-detector.js.map +1 -0
  139. package/dist/query/ranking.d.ts +57 -0
  140. package/dist/query/ranking.d.ts.map +1 -0
  141. package/dist/query/ranking.js +109 -0
  142. package/dist/query/ranking.js.map +1 -0
  143. package/dist/server.d.ts +3 -0
  144. package/dist/server.d.ts.map +1 -0
  145. package/dist/server.js +291 -0
  146. package/dist/server.js.map +1 -0
  147. package/dist/storage/falkordb-store.d.ts +73 -0
  148. package/dist/storage/falkordb-store.d.ts.map +1 -0
  149. package/dist/storage/falkordb-store.js +346 -0
  150. package/dist/storage/falkordb-store.js.map +1 -0
  151. package/dist/storage/file-cache.d.ts +32 -0
  152. package/dist/storage/file-cache.d.ts.map +1 -0
  153. package/dist/storage/file-cache.js +115 -0
  154. package/dist/storage/file-cache.js.map +1 -0
  155. package/dist/storage/interfaces.d.ts +151 -0
  156. package/dist/storage/interfaces.d.ts.map +1 -0
  157. package/dist/storage/interfaces.js +7 -0
  158. package/dist/storage/interfaces.js.map +1 -0
  159. package/dist/storage/qdrant-store.d.ts +110 -0
  160. package/dist/storage/qdrant-store.d.ts.map +1 -0
  161. package/dist/storage/qdrant-store.js +467 -0
  162. package/dist/storage/qdrant-store.js.map +1 -0
  163. package/dist/storage/schema.d.ts +4 -0
  164. package/dist/storage/schema.d.ts.map +1 -0
  165. package/dist/storage/schema.js +136 -0
  166. package/dist/storage/schema.js.map +1 -0
  167. package/dist/storage/sqlite.d.ts +35 -0
  168. package/dist/storage/sqlite.d.ts.map +1 -0
  169. package/dist/storage/sqlite.js +132 -0
  170. package/dist/storage/sqlite.js.map +1 -0
  171. package/dist/tools/collaboration-tools.d.ts +111 -0
  172. package/dist/tools/collaboration-tools.d.ts.map +1 -0
  173. package/dist/tools/collaboration-tools.js +174 -0
  174. package/dist/tools/collaboration-tools.js.map +1 -0
  175. package/dist/tools/context-tools.d.ts +293 -0
  176. package/dist/tools/context-tools.d.ts.map +1 -0
  177. package/dist/tools/context-tools.js +437 -0
  178. package/dist/tools/context-tools.js.map +1 -0
  179. package/dist/tools/graph-tools.d.ts +129 -0
  180. package/dist/tools/graph-tools.d.ts.map +1 -0
  181. package/dist/tools/graph-tools.js +237 -0
  182. package/dist/tools/graph-tools.js.map +1 -0
  183. package/dist/tools/ingestion-tools.d.ts +96 -0
  184. package/dist/tools/ingestion-tools.d.ts.map +1 -0
  185. package/dist/tools/ingestion-tools.js +90 -0
  186. package/dist/tools/ingestion-tools.js.map +1 -0
  187. package/dist/tools/learning-tools.d.ts +168 -0
  188. package/dist/tools/learning-tools.d.ts.map +1 -0
  189. package/dist/tools/learning-tools.js +158 -0
  190. package/dist/tools/learning-tools.js.map +1 -0
  191. package/dist/tools/memory-tools.d.ts +183 -0
  192. package/dist/tools/memory-tools.d.ts.map +1 -0
  193. package/dist/tools/memory-tools.js +197 -0
  194. package/dist/tools/memory-tools.js.map +1 -0
  195. package/dist/tools/phase-tools.d.ts +954 -0
  196. package/dist/tools/phase-tools.d.ts.map +1 -0
  197. package/dist/tools/phase-tools.js +1215 -0
  198. package/dist/tools/phase-tools.js.map +1 -0
  199. package/dist/tools/pipeline-tools.d.ts +140 -0
  200. package/dist/tools/pipeline-tools.d.ts.map +1 -0
  201. package/dist/tools/pipeline-tools.js +162 -0
  202. package/dist/tools/pipeline-tools.js.map +1 -0
  203. package/dist/tools/registration-tools.d.ts +220 -0
  204. package/dist/tools/registration-tools.d.ts.map +1 -0
  205. package/dist/tools/registration-tools.js +391 -0
  206. package/dist/tools/registration-tools.js.map +1 -0
  207. package/dist/util/circuit-breaker.d.ts +75 -0
  208. package/dist/util/circuit-breaker.d.ts.map +1 -0
  209. package/dist/util/circuit-breaker.js +159 -0
  210. package/dist/util/circuit-breaker.js.map +1 -0
  211. package/dist/util/config.d.ts +23 -0
  212. package/dist/util/config.d.ts.map +1 -0
  213. package/dist/util/config.js +164 -0
  214. package/dist/util/config.js.map +1 -0
  215. package/dist/util/logger.d.ts +13 -0
  216. package/dist/util/logger.d.ts.map +1 -0
  217. package/dist/util/logger.js +45 -0
  218. package/dist/util/logger.js.map +1 -0
  219. package/dist/util/token-counter.d.ts +24 -0
  220. package/dist/util/token-counter.d.ts.map +1 -0
  221. package/dist/util/token-counter.js +48 -0
  222. package/dist/util/token-counter.js.map +1 -0
  223. package/dist/util/types.d.ts +525 -0
  224. package/dist/util/types.d.ts.map +1 -0
  225. package/dist/util/types.js +5 -0
  226. package/dist/util/types.js.map +1 -0
  227. package/docker-compose.yml +20 -0
  228. package/docs/plans/2026-02-27-swarm-coordination/architecture.md +203 -0
  229. package/docs/plans/2026-02-27-swarm-coordination/vision.md +57 -0
  230. package/docs/plans/completed/2026-02-26-forge-plugin-bundling/architecture.md +1 -0
  231. package/docs/plans/completed/2026-02-26-forge-plugin-bundling/vision.md +300 -0
  232. package/docs/plans/completed/2026-02-27-forge-swarm-learning/architecture.md +480 -0
  233. package/docs/plans/completed/2026-02-27-forge-swarm-learning/verification-checklist.md +462 -0
  234. package/docs/plans/completed/2026-02-27-git-history-atlassian/git-jira-plan.md +181 -0
  235. package/package.json +39 -0
  236. package/plugin/.claude-plugin/plugin.json +8 -0
  237. package/plugin/.mcp.json +15 -0
  238. package/plugin/README.md +134 -0
  239. package/plugin/agents/architect.md +367 -0
  240. package/plugin/agents/backend-specialist.md +263 -0
  241. package/plugin/agents/brainstormer.md +122 -0
  242. package/plugin/agents/data-specialist.md +266 -0
  243. package/plugin/agents/designer.md +408 -0
  244. package/plugin/agents/frontend-specialist.md +241 -0
  245. package/plugin/agents/inspector.md +406 -0
  246. package/plugin/agents/knowledge-keeper.md +443 -0
  247. package/plugin/agents/platform-engineer.md +326 -0
  248. package/plugin/agents/product-manager.md +268 -0
  249. package/plugin/agents/product-owner.md +438 -0
  250. package/plugin/agents/pulse-checker.md +73 -0
  251. package/plugin/agents/qa-strategist.md +500 -0
  252. package/plugin/agents/self-improver.md +310 -0
  253. package/plugin/agents/strategist.md +360 -0
  254. package/plugin/agents/supervisor.md +380 -0
  255. package/plugin/commands/brainstorm.md +25 -0
  256. package/plugin/commands/forge.md +88 -0
  257. package/plugin/docs/atlassian-integration.md +110 -0
  258. package/plugin/docs/workflow.md +126 -0
  259. package/plugin/skills/agent-development/.skillfish.json +10 -0
  260. package/plugin/skills/agent-development/SKILL.md +415 -0
  261. package/plugin/skills/agent-development/examples/agent-creation-prompt.md +238 -0
  262. package/plugin/skills/agent-development/examples/complete-agent-examples.md +427 -0
  263. package/plugin/skills/agent-development/references/agent-creation-system-prompt.md +207 -0
  264. package/plugin/skills/agent-development/references/system-prompt-design.md +411 -0
  265. package/plugin/skills/agent-development/references/triggering-examples.md +491 -0
  266. package/plugin/skills/agent-development/scripts/validate-agent.sh +217 -0
  267. package/plugin/skills/agent-handoff/SKILL.md +335 -0
  268. package/plugin/skills/anti-stub/SKILL.md +317 -0
  269. package/plugin/skills/brainstorm/SKILL.md +31 -0
  270. package/plugin/skills/debugging/SKILL.md +276 -0
  271. package/plugin/skills/fix/SKILL.md +62 -0
  272. package/plugin/skills/frontend-design/.skillfish.json +10 -0
  273. package/plugin/skills/frontend-design/SKILL.md +42 -0
  274. package/plugin/skills/gotchas/SKILL.md +61 -0
  275. package/plugin/skills/graph-orchestrator/SKILL.md +38 -0
  276. package/plugin/skills/history/SKILL.md +58 -0
  277. package/plugin/skills/impact/SKILL.md +59 -0
  278. package/plugin/skills/implementation-execution/SKILL.md +291 -0
  279. package/plugin/skills/index-repo/SKILL.md +55 -0
  280. package/plugin/skills/interviewing/SKILL.md +225 -0
  281. package/plugin/skills/knowledge-curation/SKILL.md +393 -0
  282. package/plugin/skills/learn/SKILL.md +69 -0
  283. package/plugin/skills/mcp-integration/.skillfish.json +10 -0
  284. package/plugin/skills/mcp-integration/SKILL.md +554 -0
  285. package/plugin/skills/mcp-integration/examples/http-server.json +20 -0
  286. package/plugin/skills/mcp-integration/examples/sse-server.json +19 -0
  287. package/plugin/skills/mcp-integration/examples/stdio-server.json +26 -0
  288. package/plugin/skills/mcp-integration/references/authentication.md +549 -0
  289. package/plugin/skills/mcp-integration/references/server-types.md +536 -0
  290. package/plugin/skills/mcp-integration/references/tool-usage.md +538 -0
  291. package/plugin/skills/nestjs/.skillfish.json +10 -0
  292. package/plugin/skills/nestjs/SKILL.md +669 -0
  293. package/plugin/skills/nestjs/drizzle-reference.md +1894 -0
  294. package/plugin/skills/nestjs/reference.md +1447 -0
  295. package/plugin/skills/nestjs/workflow-optimization.md +229 -0
  296. package/plugin/skills/parallel-dispatch/SKILL.md +308 -0
  297. package/plugin/skills/project-discovery/SKILL.md +304 -0
  298. package/plugin/skills/search/SKILL.md +56 -0
  299. package/plugin/skills/security-audit/SKILL.md +362 -0
  300. package/plugin/skills/skill-development/.skillfish.json +10 -0
  301. package/plugin/skills/skill-development/SKILL.md +637 -0
  302. package/plugin/skills/skill-development/references/skill-creator-original.md +209 -0
  303. package/plugin/skills/tdd/SKILL.md +273 -0
  304. package/plugin/skills/terminal-presentation/SKILL.md +395 -0
  305. package/plugin/skills/test-strategy/SKILL.md +365 -0
  306. package/plugin/skills/verification-protocol/SKILL.md +256 -0
  307. package/plugin/skills/visual-explainer/CHANGELOG.md +97 -0
  308. package/plugin/skills/visual-explainer/LICENSE +21 -0
  309. package/plugin/skills/visual-explainer/README.md +137 -0
  310. package/plugin/skills/visual-explainer/SKILL.md +352 -0
  311. package/plugin/skills/visual-explainer/banner.png +0 -0
  312. package/plugin/skills/visual-explainer/package.json +11 -0
  313. package/plugin/skills/visual-explainer/prompts/diff-review.md +68 -0
  314. package/plugin/skills/visual-explainer/prompts/fact-check.md +63 -0
  315. package/plugin/skills/visual-explainer/prompts/generate-slides.md +18 -0
  316. package/plugin/skills/visual-explainer/prompts/generate-web-diagram.md +10 -0
  317. package/plugin/skills/visual-explainer/prompts/plan-review.md +86 -0
  318. package/plugin/skills/visual-explainer/prompts/project-recap.md +61 -0
  319. package/plugin/skills/visual-explainer/references/css-patterns.md +1188 -0
  320. package/plugin/skills/visual-explainer/references/libraries.md +470 -0
  321. package/plugin/skills/visual-explainer/references/responsive-nav.md +212 -0
  322. package/plugin/skills/visual-explainer/references/slide-patterns.md +1403 -0
  323. package/plugin/skills/visual-explainer/templates/architecture.html +596 -0
  324. package/plugin/skills/visual-explainer/templates/data-table.html +540 -0
  325. package/plugin/skills/visual-explainer/templates/mermaid-flowchart.html +435 -0
  326. package/plugin/skills/visual-explainer/templates/slide-deck.html +913 -0
  327. package/src/cli.ts +655 -0
  328. package/src/context/.gitkeep +0 -0
  329. package/src/context/codebase.ts +393 -0
  330. package/src/context/injector.ts +797 -0
  331. package/src/context/memory.ts +187 -0
  332. package/src/context/session-index.ts +327 -0
  333. package/src/context/session.ts +152 -0
  334. package/src/index.ts +47 -0
  335. package/src/ingestion/.gitkeep +0 -0
  336. package/src/ingestion/chunker.ts +277 -0
  337. package/src/ingestion/embedder.ts +167 -0
  338. package/src/ingestion/git-analyzer.ts +545 -0
  339. package/src/ingestion/indexer.ts +984 -0
  340. package/src/ingestion/markdown-chunker.ts +337 -0
  341. package/src/ingestion/markdown-knowledge.ts +175 -0
  342. package/src/ingestion/parser.ts +475 -0
  343. package/src/ingestion/watcher.ts +182 -0
  344. package/src/knowledge/.gitkeep +0 -0
  345. package/src/knowledge/hydrator.ts +246 -0
  346. package/src/knowledge/registry.ts +463 -0
  347. package/src/knowledge/search.ts +565 -0
  348. package/src/knowledge/store.ts +262 -0
  349. package/src/learning/.gitkeep +0 -0
  350. package/src/learning/confidence.ts +193 -0
  351. package/src/learning/patterns.ts +360 -0
  352. package/src/learning/trajectory.ts +268 -0
  353. package/src/memory/.gitkeep +0 -0
  354. package/src/memory/memory-compat.ts +233 -0
  355. package/src/memory/observation-store.ts +224 -0
  356. package/src/memory/session-tracker.ts +332 -0
  357. package/src/pipeline/.gitkeep +0 -0
  358. package/src/pipeline/engine.ts +1139 -0
  359. package/src/pipeline/events.ts +253 -0
  360. package/src/pipeline/parallel.ts +394 -0
  361. package/src/pipeline/state-machine.ts +199 -0
  362. package/src/query/.gitkeep +0 -0
  363. package/src/query/graph-queries.ts +262 -0
  364. package/src/query/hybrid-search.ts +337 -0
  365. package/src/query/intent-detector.ts +131 -0
  366. package/src/query/ranking.ts +161 -0
  367. package/src/server.ts +352 -0
  368. package/src/storage/.gitkeep +0 -0
  369. package/src/storage/falkordb-store.ts +388 -0
  370. package/src/storage/file-cache.ts +141 -0
  371. package/src/storage/interfaces.ts +201 -0
  372. package/src/storage/qdrant-store.ts +557 -0
  373. package/src/storage/schema.ts +139 -0
  374. package/src/storage/sqlite.ts +168 -0
  375. package/src/tools/.gitkeep +0 -0
  376. package/src/tools/collaboration-tools.ts +208 -0
  377. package/src/tools/context-tools.ts +493 -0
  378. package/src/tools/graph-tools.ts +295 -0
  379. package/src/tools/ingestion-tools.ts +122 -0
  380. package/src/tools/learning-tools.ts +181 -0
  381. package/src/tools/memory-tools.ts +234 -0
  382. package/src/tools/phase-tools.ts +1452 -0
  383. package/src/tools/pipeline-tools.ts +188 -0
  384. package/src/tools/registration-tools.ts +450 -0
  385. package/src/util/.gitkeep +0 -0
  386. package/src/util/circuit-breaker.ts +193 -0
  387. package/src/util/config.ts +177 -0
  388. package/src/util/logger.ts +53 -0
  389. package/src/util/token-counter.ts +52 -0
  390. package/src/util/types.ts +710 -0
  391. package/tests/context/.gitkeep +0 -0
  392. package/tests/integration/.gitkeep +0 -0
  393. package/tests/knowledge/.gitkeep +0 -0
  394. package/tests/learning/.gitkeep +0 -0
  395. package/tests/pipeline/.gitkeep +0 -0
  396. package/tests/tools/.gitkeep +0 -0
  397. package/tsconfig.json +21 -0
  398. package/vitest.config.ts +10 -0
  399. package/vscode-extension/.vscodeignore +7 -0
  400. package/vscode-extension/README.md +43 -0
  401. package/vscode-extension/out/edge-collector.js +274 -0
  402. package/vscode-extension/out/edge-collector.js.map +1 -0
  403. package/vscode-extension/out/extension.js +264 -0
  404. package/vscode-extension/out/extension.js.map +1 -0
  405. package/vscode-extension/out/forge-client.js +318 -0
  406. package/vscode-extension/out/forge-client.js.map +1 -0
  407. package/vscode-extension/package-lock.json +59 -0
  408. package/vscode-extension/package.json +71 -0
  409. package/vscode-extension/src/edge-collector.ts +320 -0
  410. package/vscode-extension/src/extension.ts +269 -0
  411. package/vscode-extension/src/forge-client.ts +364 -0
  412. package/vscode-extension/tsconfig.json +19 -0
@@ -0,0 +1,549 @@
1
+ # MCP Authentication Patterns
2
+
3
+ Complete guide to authentication methods for MCP servers in Claude Code plugins.
4
+
5
+ ## Overview
6
+
7
+ MCP servers support multiple authentication methods depending on the server type and service requirements. Choose the method that best matches your use case and security requirements.
8
+
9
+ ## OAuth (Automatic)
10
+
11
+ ### How It Works
12
+
13
+ Claude Code automatically handles the complete OAuth 2.0 flow for SSE and HTTP servers:
14
+
15
+ 1. User attempts to use MCP tool
16
+ 2. Claude Code detects authentication needed
17
+ 3. Opens browser for OAuth consent
18
+ 4. User authorizes in browser
19
+ 5. Tokens stored securely by Claude Code
20
+ 6. Automatic token refresh
21
+
22
+ ### Configuration
23
+
24
+ ```json
25
+ {
26
+ "service": {
27
+ "type": "sse",
28
+ "url": "https://mcp.example.com/sse"
29
+ }
30
+ }
31
+ ```
32
+
33
+ No additional auth configuration needed! Claude Code handles everything.
34
+
35
+ ### Supported Services
36
+
37
+ **Known OAuth-enabled MCP servers:**
38
+ - Asana: `https://mcp.asana.com/sse`
39
+ - GitHub (when available)
40
+ - Google services (when available)
41
+ - Custom OAuth servers
42
+
43
+ ### OAuth Scopes
44
+
45
+ OAuth scopes are determined by the MCP server. Users see required scopes during the consent flow.
46
+
47
+ **Document required scopes in your README:**
48
+ ```markdown
49
+ ## Authentication
50
+
51
+ This plugin requires the following Asana permissions:
52
+ - Read tasks and projects
53
+ - Create and update tasks
54
+ - Access workspace data
55
+ ```
56
+
57
+ ### Token Storage
58
+
59
+ Tokens are stored securely by Claude Code:
60
+ - Not accessible to plugins
61
+ - Encrypted at rest
62
+ - Automatic refresh
63
+ - Cleared on sign-out
64
+
65
+ ### Troubleshooting OAuth
66
+
67
+ **Authentication loop:**
68
+ - Clear cached tokens (sign out and sign in)
69
+ - Check OAuth redirect URLs
70
+ - Verify server OAuth configuration
71
+
72
+ **Scope issues:**
73
+ - User may need to re-authorize for new scopes
74
+ - Check server documentation for required scopes
75
+
76
+ **Token expiration:**
77
+ - Claude Code auto-refreshes
78
+ - If refresh fails, prompts re-authentication
79
+
80
+ ## Token-Based Authentication
81
+
82
+ ### Bearer Tokens
83
+
84
+ Most common for HTTP and WebSocket servers.
85
+
86
+ **Configuration:**
87
+ ```json
88
+ {
89
+ "api": {
90
+ "type": "http",
91
+ "url": "https://api.example.com/mcp",
92
+ "headers": {
93
+ "Authorization": "Bearer ${API_TOKEN}"
94
+ }
95
+ }
96
+ }
97
+ ```
98
+
99
+ **Environment variable:**
100
+ ```bash
101
+ export API_TOKEN="your-secret-token-here"
102
+ ```
103
+
104
+ ### API Keys
105
+
106
+ Alternative to Bearer tokens, often in custom headers.
107
+
108
+ **Configuration:**
109
+ ```json
110
+ {
111
+ "api": {
112
+ "type": "http",
113
+ "url": "https://api.example.com/mcp",
114
+ "headers": {
115
+ "X-API-Key": "${API_KEY}",
116
+ "X-API-Secret": "${API_SECRET}"
117
+ }
118
+ }
119
+ }
120
+ ```
121
+
122
+ ### Custom Headers
123
+
124
+ Services may use custom authentication headers.
125
+
126
+ **Configuration:**
127
+ ```json
128
+ {
129
+ "service": {
130
+ "type": "sse",
131
+ "url": "https://mcp.example.com/sse",
132
+ "headers": {
133
+ "X-Auth-Token": "${AUTH_TOKEN}",
134
+ "X-User-ID": "${USER_ID}",
135
+ "X-Tenant-ID": "${TENANT_ID}"
136
+ }
137
+ }
138
+ }
139
+ ```
140
+
141
+ ### Documenting Token Requirements
142
+
143
+ Always document in your README:
144
+
145
+ ```markdown
146
+ ## Setup
147
+
148
+ ### Required Environment Variables
149
+
150
+ Set these environment variables before using the plugin:
151
+
152
+ \`\`\`bash
153
+ export API_TOKEN="your-token-here"
154
+ export API_SECRET="your-secret-here"
155
+ \`\`\`
156
+
157
+ ### Obtaining Tokens
158
+
159
+ 1. Visit https://api.example.com/tokens
160
+ 2. Create a new API token
161
+ 3. Copy the token and secret
162
+ 4. Set environment variables as shown above
163
+
164
+ ### Token Permissions
165
+
166
+ The API token needs the following permissions:
167
+ - Read access to resources
168
+ - Write access for creating items
169
+ - Delete access (optional, for cleanup operations)
170
+ \`\`\`
171
+ ```
172
+
173
+ ## Environment Variable Authentication (stdio)
174
+
175
+ ### Passing Credentials to Server
176
+
177
+ For stdio servers, pass credentials via environment variables:
178
+
179
+ ```json
180
+ {
181
+ "database": {
182
+ "command": "python",
183
+ "args": ["-m", "mcp_server_db"],
184
+ "env": {
185
+ "DATABASE_URL": "${DATABASE_URL}",
186
+ "DB_USER": "${DB_USER}",
187
+ "DB_PASSWORD": "${DB_PASSWORD}"
188
+ }
189
+ }
190
+ }
191
+ ```
192
+
193
+ ### User Environment Variables
194
+
195
+ ```bash
196
+ # User sets these in their shell
197
+ export DATABASE_URL="postgresql://localhost/mydb"
198
+ export DB_USER="myuser"
199
+ export DB_PASSWORD="mypassword"
200
+ ```
201
+
202
+ ### Documentation Template
203
+
204
+ ```markdown
205
+ ## Database Configuration
206
+
207
+ Set these environment variables:
208
+
209
+ \`\`\`bash
210
+ export DATABASE_URL="postgresql://host:port/database"
211
+ export DB_USER="username"
212
+ export DB_PASSWORD="password"
213
+ \`\`\`
214
+
215
+ Or create a `.env` file (add to `.gitignore`):
216
+
217
+ \`\`\`
218
+ DATABASE_URL=postgresql://localhost:5432/mydb
219
+ DB_USER=myuser
220
+ DB_PASSWORD=mypassword
221
+ \`\`\`
222
+
223
+ Load with: \`source .env\` or \`export $(cat .env | xargs)\`
224
+ \`\`\`
225
+ ```
226
+
227
+ ## Dynamic Headers
228
+
229
+ ### Headers Helper Script
230
+
231
+ For tokens that change or expire, use a helper script:
232
+
233
+ ```json
234
+ {
235
+ "api": {
236
+ "type": "sse",
237
+ "url": "https://api.example.com",
238
+ "headersHelper": "${CLAUDE_PLUGIN_ROOT}/scripts/get-headers.sh"
239
+ }
240
+ }
241
+ ```
242
+
243
+ **Script (get-headers.sh):**
244
+ ```bash
245
+ #!/bin/bash
246
+ # Generate dynamic authentication headers
247
+
248
+ # Fetch fresh token
249
+ TOKEN=$(get-fresh-token-from-somewhere)
250
+
251
+ # Output JSON headers
252
+ cat <<EOF
253
+ {
254
+ "Authorization": "Bearer $TOKEN",
255
+ "X-Timestamp": "$(date -Iseconds)"
256
+ }
257
+ EOF
258
+ ```
259
+
260
+ ### Use Cases for Dynamic Headers
261
+
262
+ - Short-lived tokens that need refresh
263
+ - Tokens with HMAC signatures
264
+ - Time-based authentication
265
+ - Dynamic tenant/workspace selection
266
+
267
+ ## Security Best Practices
268
+
269
+ ### DO
270
+
271
+ ✅ **Use environment variables:**
272
+ ```json
273
+ {
274
+ "headers": {
275
+ "Authorization": "Bearer ${API_TOKEN}"
276
+ }
277
+ }
278
+ ```
279
+
280
+ ✅ **Document required variables in README**
281
+
282
+ ✅ **Use HTTPS/WSS always**
283
+
284
+ ✅ **Implement token rotation**
285
+
286
+ ✅ **Store tokens securely (env vars, not files)**
287
+
288
+ ✅ **Let OAuth handle authentication when available**
289
+
290
+ ### DON'T
291
+
292
+ ❌ **Hardcode tokens:**
293
+ ```json
294
+ {
295
+ "headers": {
296
+ "Authorization": "Bearer sk-abc123..." // NEVER!
297
+ }
298
+ }
299
+ ```
300
+
301
+ ❌ **Commit tokens to git**
302
+
303
+ ❌ **Share tokens in documentation**
304
+
305
+ ❌ **Use HTTP instead of HTTPS**
306
+
307
+ ❌ **Store tokens in plugin files**
308
+
309
+ ❌ **Log tokens or sensitive headers**
310
+
311
+ ## Multi-Tenancy Patterns
312
+
313
+ ### Workspace/Tenant Selection
314
+
315
+ **Via environment variable:**
316
+ ```json
317
+ {
318
+ "api": {
319
+ "type": "http",
320
+ "url": "https://api.example.com/mcp",
321
+ "headers": {
322
+ "Authorization": "Bearer ${API_TOKEN}",
323
+ "X-Workspace-ID": "${WORKSPACE_ID}"
324
+ }
325
+ }
326
+ }
327
+ ```
328
+
329
+ **Via URL:**
330
+ ```json
331
+ {
332
+ "api": {
333
+ "type": "http",
334
+ "url": "https://${TENANT_ID}.api.example.com/mcp"
335
+ }
336
+ }
337
+ ```
338
+
339
+ ### Per-User Configuration
340
+
341
+ Users set their own workspace:
342
+
343
+ ```bash
344
+ export WORKSPACE_ID="my-workspace-123"
345
+ export TENANT_ID="my-company"
346
+ ```
347
+
348
+ ## Authentication Troubleshooting
349
+
350
+ ### Common Issues
351
+
352
+ **401 Unauthorized:**
353
+ - Check token is set correctly
354
+ - Verify token hasn't expired
355
+ - Check token has required permissions
356
+ - Ensure header format is correct
357
+
358
+ **403 Forbidden:**
359
+ - Token valid but lacks permissions
360
+ - Check scope/permissions
361
+ - Verify workspace/tenant ID
362
+ - May need admin approval
363
+
364
+ **Token not found:**
365
+ ```bash
366
+ # Check environment variable is set
367
+ echo $API_TOKEN
368
+
369
+ # If empty, set it
370
+ export API_TOKEN="your-token"
371
+ ```
372
+
373
+ **Token in wrong format:**
374
+ ```json
375
+ // Correct
376
+ "Authorization": "Bearer sk-abc123"
377
+
378
+ // Wrong
379
+ "Authorization": "sk-abc123"
380
+ ```
381
+
382
+ ### Debugging Authentication
383
+
384
+ **Enable debug mode:**
385
+ ```bash
386
+ claude --debug
387
+ ```
388
+
389
+ Look for:
390
+ - Authentication header values (sanitized)
391
+ - OAuth flow progress
392
+ - Token refresh attempts
393
+ - Authentication errors
394
+
395
+ **Test authentication separately:**
396
+ ```bash
397
+ # Test HTTP endpoint
398
+ curl -H "Authorization: Bearer $API_TOKEN" \
399
+ https://api.example.com/mcp/health
400
+
401
+ # Should return 200 OK
402
+ ```
403
+
404
+ ## Migration Patterns
405
+
406
+ ### From Hardcoded to Environment Variables
407
+
408
+ **Before:**
409
+ ```json
410
+ {
411
+ "headers": {
412
+ "Authorization": "Bearer sk-hardcoded-token"
413
+ }
414
+ }
415
+ ```
416
+
417
+ **After:**
418
+ ```json
419
+ {
420
+ "headers": {
421
+ "Authorization": "Bearer ${API_TOKEN}"
422
+ }
423
+ }
424
+ ```
425
+
426
+ **Migration steps:**
427
+ 1. Add environment variable to plugin README
428
+ 2. Update configuration to use ${VAR}
429
+ 3. Test with variable set
430
+ 4. Remove hardcoded value
431
+ 5. Commit changes
432
+
433
+ ### From Basic Auth to OAuth
434
+
435
+ **Before:**
436
+ ```json
437
+ {
438
+ "headers": {
439
+ "Authorization": "Basic ${BASE64_CREDENTIALS}"
440
+ }
441
+ }
442
+ ```
443
+
444
+ **After:**
445
+ ```json
446
+ {
447
+ "type": "sse",
448
+ "url": "https://mcp.example.com/sse"
449
+ }
450
+ ```
451
+
452
+ **Benefits:**
453
+ - Better security
454
+ - No credential management
455
+ - Automatic token refresh
456
+ - Scoped permissions
457
+
458
+ ## Advanced Authentication
459
+
460
+ ### Mutual TLS (mTLS)
461
+
462
+ Some enterprise services require client certificates.
463
+
464
+ **Not directly supported in MCP configuration.**
465
+
466
+ **Workaround:** Wrap in stdio server that handles mTLS:
467
+
468
+ ```json
469
+ {
470
+ "secure-api": {
471
+ "command": "${CLAUDE_PLUGIN_ROOT}/servers/mtls-wrapper",
472
+ "args": ["--cert", "${CLIENT_CERT}", "--key", "${CLIENT_KEY}"],
473
+ "env": {
474
+ "API_URL": "https://secure.example.com"
475
+ }
476
+ }
477
+ }
478
+ ```
479
+
480
+ ### JWT Tokens
481
+
482
+ Generate JWT tokens dynamically with headers helper:
483
+
484
+ ```bash
485
+ #!/bin/bash
486
+ # generate-jwt.sh
487
+
488
+ # Generate JWT (using library or API call)
489
+ JWT=$(generate-jwt-token)
490
+
491
+ echo "{\"Authorization\": \"Bearer $JWT\"}"
492
+ ```
493
+
494
+ ```json
495
+ {
496
+ "headersHelper": "${CLAUDE_PLUGIN_ROOT}/scripts/generate-jwt.sh"
497
+ }
498
+ ```
499
+
500
+ ### HMAC Signatures
501
+
502
+ For APIs requiring request signing:
503
+
504
+ ```bash
505
+ #!/bin/bash
506
+ # generate-hmac.sh
507
+
508
+ TIMESTAMP=$(date -Iseconds)
509
+ SIGNATURE=$(echo -n "$TIMESTAMP" | openssl dgst -sha256 -hmac "$SECRET_KEY" | cut -d' ' -f2)
510
+
511
+ cat <<EOF
512
+ {
513
+ "X-Timestamp": "$TIMESTAMP",
514
+ "X-Signature": "$SIGNATURE",
515
+ "X-API-Key": "$API_KEY"
516
+ }
517
+ EOF
518
+ ```
519
+
520
+ ## Best Practices Summary
521
+
522
+ ### For Plugin Developers
523
+
524
+ 1. **Prefer OAuth** when service supports it
525
+ 2. **Use environment variables** for tokens
526
+ 3. **Document all required variables** in README
527
+ 4. **Provide setup instructions** with examples
528
+ 5. **Never commit credentials**
529
+ 6. **Use HTTPS/WSS only**
530
+ 7. **Test authentication thoroughly**
531
+
532
+ ### For Plugin Users
533
+
534
+ 1. **Set environment variables** before using plugin
535
+ 2. **Keep tokens secure** and private
536
+ 3. **Rotate tokens regularly**
537
+ 4. **Use different tokens** for dev/prod
538
+ 5. **Don't commit .env files** to git
539
+ 6. **Review OAuth scopes** before authorizing
540
+
541
+ ## Conclusion
542
+
543
+ Choose the authentication method that matches your MCP server's requirements:
544
+ - **OAuth** for cloud services (easiest for users)
545
+ - **Bearer tokens** for API services
546
+ - **Environment variables** for stdio servers
547
+ - **Dynamic headers** for complex auth flows
548
+
549
+ Always prioritize security and provide clear setup documentation for users.