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,362 @@
1
+ ---
2
+ name: security-audit
3
+ description: This skill should be used when reviewing code for security vulnerabilities, conducting security audits, or implementing security-sensitive features like authentication, authorization, or data handling. Used by the inspector and platform-engineer agents.
4
+ user-invocable: false
5
+ ---
6
+
7
+ # Security Audit Skill
8
+
9
+ ## Purpose
10
+
11
+ Provide a comprehensive, structured methodology for identifying and remediating security vulnerabilities in NestJS/React applications running on AWS/Kubernetes infrastructure. Apply this skill when reviewing code for security issues, implementing authentication or authorization features, handling sensitive data, configuring infrastructure access, or conducting periodic security audits. The methodology is adapted from the OWASP Top 10 and tailored to the specific technology stack and deployment patterns used in this organization.
12
+
13
+ ---
14
+
15
+ ## OWASP Top 10: Stack-Specific Checklist
16
+
17
+ ### 1. Injection
18
+
19
+ **Threat**: Malicious input is interpreted as code or query syntax, allowing attackers to execute unauthorized operations.
20
+
21
+ **SQL Injection**: Drizzle ORM uses parameterized queries by default. Direct string concatenation into SQL is the primary risk vector. Verify that:
22
+
23
+ - No raw SQL queries contain string interpolation or concatenation with user input.
24
+ - All user-supplied values pass through Drizzle's query builder or parameterized `sql` template literals.
25
+ - Dynamic table or column names (if any) are validated against a whitelist, not interpolated.
26
+
27
+ **Command Injection**: Never pass user input to shell execution functions (`exec`, `spawn`, `execSync`). If shell commands are absolutely necessary, use `execFile` with an argument array (not a command string) and validate every argument against an explicit whitelist.
28
+
29
+ **NoSQL Injection**: If any NoSQL datastores are in use (Redis commands, Elasticsearch queries), verify that user input is not directly embedded in query objects. Use builder patterns or parameterized queries.
30
+
31
+ **Template Injection**: Verify that server-side template rendering (if any) does not embed user input without escaping.
32
+
33
+ ### 2. Broken Authentication
34
+
35
+ **JWT Validation**: Verify that every JWT validation checks:
36
+
37
+ - **Signature**: The token is signed by the expected key (JWKS endpoint or shared secret).
38
+ - **Expiration**: The `exp` claim is validated and expired tokens are rejected.
39
+ - **Issuer**: The `iss` claim matches the expected identity provider.
40
+ - **Audience**: The `aud` claim matches the application's expected audience.
41
+ - **Not-before**: The `nbf` claim is respected if present.
42
+
43
+ **Token Handling**: Verify that:
44
+
45
+ - Tokens are not logged (not even in debug mode).
46
+ - Tokens are transmitted only over HTTPS.
47
+ - Refresh token rotation is implemented (each refresh token is single-use).
48
+ - Token storage on the frontend uses httpOnly, secure, sameSite cookies — not localStorage.
49
+
50
+ **Password Handling** (if applicable): Verify that:
51
+
52
+ - Passwords are hashed with bcrypt (cost factor >= 12) or argon2.
53
+ - Plaintext passwords are never stored, logged, or returned in API responses.
54
+ - Password reset tokens are single-use and time-limited.
55
+
56
+ ### 3. Sensitive Data Exposure
57
+
58
+ **Secrets in Code**: Scan for:
59
+
60
+ - API keys, tokens, or passwords hardcoded in source files.
61
+ - Secrets in configuration files committed to version control.
62
+ - Secrets in Docker images (build args, env statements in Dockerfiles).
63
+ - Secrets in log output (even debug-level logs).
64
+
65
+ **Encryption**:
66
+
67
+ - Data in transit: all communications must use TLS. Verify that internal service-to-service calls also use TLS or are within an encrypted network mesh.
68
+ - Data at rest: sensitive database columns (PII, financial data) should use application-level or database-level encryption. Verify that RDS instances use encrypted storage.
69
+
70
+ **CORS Configuration**: Verify that:
71
+
72
+ - CORS origin is an explicit whitelist of allowed domains, not `*`.
73
+ - CORS credentials mode is enabled only for whitelisted origins.
74
+ - CORS methods are restricted to the methods actually used.
75
+
76
+ ### 4. XML External Entities (XXE)
77
+
78
+ Not a primary concern in Node.js/React applications. However, if any XML parsing occurs (file uploads, SAML integration, third-party API responses), verify that:
79
+
80
+ - External entity processing is disabled in the XML parser configuration.
81
+ - DTD processing is disabled.
82
+ - XML input size is limited.
83
+
84
+ ### 5. Broken Access Control
85
+
86
+ **Authorization Checks**: Verify that every endpoint:
87
+
88
+ - Requires authentication (unless explicitly marked as public with `@Public()`).
89
+ - Performs authorization — not just "is the user authenticated?" but "does this user have permission to perform this action on this resource?"
90
+ - Validates resource ownership: a user requesting `/users/123/documents` must be user 123, or must have admin/elevated permissions.
91
+
92
+ **RBAC/ABAC Validation**: Verify that:
93
+
94
+ - Role checks use NestJS guards, not inline if-statements in controllers.
95
+ - Permission checks are consistent — the same action requires the same permission everywhere it appears.
96
+ - Role hierarchies are enforced at the guard level, not assumed in business logic.
97
+
98
+ **Direct Object Reference**: Verify that:
99
+
100
+ - API endpoints do not expose sequential integer IDs that can be enumerated.
101
+ - Resource access validates ownership/permission, not just existence.
102
+ - Bulk endpoints (list, export) filter by the authenticated user's scope.
103
+
104
+ ### 6. Security Misconfiguration
105
+
106
+ **HTTP Headers**: Verify that Helmet.js (or equivalent) is configured with:
107
+
108
+ - `Content-Security-Policy`: restrict script sources, object sources, and frame ancestors.
109
+ - `Strict-Transport-Security`: enforce HTTPS with a long max-age.
110
+ - `X-Content-Type-Options: nosniff`: prevent MIME type sniffing.
111
+ - `X-Frame-Options: DENY` (or `SAMEORIGIN` if iframing is required).
112
+ - `Referrer-Policy: strict-origin-when-cross-origin` (or stricter).
113
+
114
+ **Debug Mode**: Verify that:
115
+
116
+ - NestJS detailed error responses (stack traces) are disabled in production.
117
+ - Source maps are not served in production.
118
+ - Swagger/OpenAPI documentation is disabled or auth-gated in production.
119
+
120
+ **Default Credentials**: Verify that:
121
+
122
+ - No default passwords exist in configuration, database seeds, or Docker compose files.
123
+ - Database users have unique, strong passwords (sourced from Secrets Manager, not environment files).
124
+
125
+ ### 7. Cross-Site Scripting (XSS)
126
+
127
+ **React Default Protection**: React escapes all interpolated values in JSX by default. The primary risk vectors are:
128
+
129
+ - `dangerouslySetInnerHTML`: Every use must be reviewed. The input must be sanitized with a library like DOMPurify before rendering.
130
+ - URL attributes (`href`, `src`, `action`): User-controlled URLs can contain `javascript:` protocol. Validate that URLs start with `https://` or a known safe protocol.
131
+ - CSS injection: User-controlled values in `style` attributes can execute expressions in older browsers. Sanitize or whitelist.
132
+
133
+ **Server-Side Rendering**: If SSR is used, verify that user input embedded in the HTML response is escaped properly. SSR bypasses React's JSX escaping for the initial render.
134
+
135
+ ### 8. Insecure Deserialization
136
+
137
+ **Input Validation**: Verify that:
138
+
139
+ - Every API endpoint uses NestJS `ValidationPipe` with `whitelist: true` and `forbidNonWhitelisted: true` — this strips unknown properties and rejects unexpected fields.
140
+ - DTOs use `class-validator` decorators for all fields (type, length, format, range).
141
+ - Nested objects in DTOs are validated with `@ValidateNested()` and `@Type()` decorators.
142
+ - File uploads validate file type, size, and content (not just the extension).
143
+
144
+ **JSON Parsing**: Verify that large JSON payloads are size-limited (NestJS body parser limit). Unbounded JSON parsing can be used for denial-of-service.
145
+
146
+ ### 9. Using Components with Known Vulnerabilities
147
+
148
+ **Dependency Auditing**: Verify that:
149
+
150
+ - `npm audit` reports no high or critical vulnerabilities. If vulnerabilities exist, they must be documented with a mitigation plan (upgrade, patch, or accept with justification).
151
+ - Dependencies are updated regularly. Stale dependencies accumulate vulnerabilities.
152
+ - No deprecated packages are in use without a documented migration plan.
153
+
154
+ **Supply Chain**: Verify that:
155
+
156
+ - Lock files (`package-lock.json`) are committed and used for deterministic installs.
157
+ - No packages are installed from registries other than npm without explicit justification.
158
+ - Pre/post-install scripts from third-party packages are reviewed.
159
+
160
+ ### 10. Insufficient Logging and Monitoring
161
+
162
+ **Security Event Logging**: Verify that the following events are logged:
163
+
164
+ - Authentication failures (failed login, invalid token, expired token).
165
+ - Authorization failures (access denied, insufficient permissions).
166
+ - Input validation failures (rejected requests with invalid data).
167
+ - Administrative actions (user creation, role changes, permission grants).
168
+ - Data access patterns (bulk exports, unusual query volumes).
169
+
170
+ **Logging Hygiene**: Verify that logs never contain:
171
+
172
+ - Passwords or password hashes.
173
+ - Authentication tokens (JWT, API keys, session IDs).
174
+ - Personally identifiable information (full SSN, credit card numbers, medical data).
175
+ - Full request bodies for endpoints that accept sensitive data.
176
+
177
+ **Log Format**: Use structured logging (JSON) with consistent fields: timestamp, level, requestId, userId, action, outcome. Unstructured string logs are difficult to search, alert on, and correlate.
178
+
179
+ ---
180
+
181
+ ## NestJS-Specific Security Patterns
182
+
183
+ ### Authentication Guards
184
+
185
+ Use NestJS guards for authentication. Apply the guard globally and use `@Public()` decorator to opt out specific endpoints:
186
+
187
+ ```typescript
188
+ // Apply globally in main.ts or app module
189
+ app.useGlobalGuards(new JwtAuthGuard(reflector));
190
+
191
+ // Opt out specific endpoints
192
+ @Public()
193
+ @Get('health')
194
+ healthCheck() { return { status: 'ok' }; }
195
+ ```
196
+
197
+ This is safer than applying guards per-controller — a forgotten guard on a new controller silently exposes an unauthenticated endpoint.
198
+
199
+ ### Authorization Decorators
200
+
201
+ Create custom decorators for role-based access control:
202
+
203
+ ```typescript
204
+ @Roles('admin', 'manager')
205
+ @UseGuards(RolesGuard)
206
+ @Delete(':id')
207
+ async deleteUser(@Param('id') id: string) { ... }
208
+ ```
209
+
210
+ The guard reads the metadata set by the decorator and validates against the authenticated user's roles. This keeps authorization logic in the guard (testable, centralized) and out of the controller (which should only handle HTTP concerns).
211
+
212
+ ### ValidationPipe Configuration
213
+
214
+ Configure the global ValidationPipe to be strict:
215
+
216
+ ```typescript
217
+ app.useGlobalPipes(new ValidationPipe({
218
+ whitelist: true, // Strip properties not in the DTO
219
+ forbidNonWhitelisted: true, // Reject requests with unknown properties
220
+ transform: true, // Auto-transform payloads to DTO instances
221
+ transformOptions: {
222
+ enableImplicitConversion: false, // Require explicit type decorators
223
+ },
224
+ }));
225
+ ```
226
+
227
+ With `whitelist: true`, any property not decorated in the DTO is silently removed. With `forbidNonWhitelisted: true`, the request is rejected entirely. This prevents mass assignment attacks where extra properties (e.g., `isAdmin: true`) are injected into a request body.
228
+
229
+ ### Rate Limiting
230
+
231
+ Apply rate limiting on public-facing and authentication endpoints using `@nestjs/throttler`:
232
+
233
+ ```typescript
234
+ @UseGuards(ThrottlerGuard)
235
+ @Throttle({ default: { limit: 5, ttl: 60000 } }) // 5 requests per minute
236
+ @Post('login')
237
+ async login(@Body() dto: LoginDto) { ... }
238
+ ```
239
+
240
+ Rate limiting prevents brute-force attacks on login endpoints, credential stuffing, and API abuse. Apply stricter limits on authentication endpoints and more generous limits on read endpoints.
241
+
242
+ ---
243
+
244
+ ## Infrastructure Security
245
+
246
+ ### IAM Least Privilege
247
+
248
+ All IAM roles and policies must be defined in the IaC repository (`aws-infrastructure`). Never create or modify IAM resources via the AWS CLI or console.
249
+
250
+ Verify that:
251
+
252
+ - Each service/pod has its own IAM role with only the permissions it needs.
253
+ - No wildcard (`*`) actions in IAM policies unless absolutely necessary (and documented with justification).
254
+ - No wildcard (`*`) resources unless the action genuinely applies to all resources (e.g., `logs:CreateLogGroup`).
255
+ - Policies use resource-level permissions wherever the AWS service supports them.
256
+
257
+ ### IRSA (IAM Roles for Service Accounts)
258
+
259
+ Verify that:
260
+
261
+ - Each Kubernetes service account is bound to a specific IAM role via IRSA annotations.
262
+ - The IAM role's trust policy restricts assumption to the specific namespace and service account: `system:serviceaccount:dk-synapse:dk-synapse-sa`.
263
+ - No service account uses the node's IAM role (which grants overly broad permissions).
264
+
265
+ ### Secrets Management
266
+
267
+ Verify that:
268
+
269
+ - Application secrets (database credentials, API keys, encryption keys) are stored in AWS Secrets Manager.
270
+ - Secrets are injected into pods via External Secrets Operator, not via Kubernetes Secrets defined in plain text.
271
+ - No secrets appear in Helm values files, ConfigMaps, or container environment variable definitions in deployment manifests.
272
+ - Secret rotation is configured for database credentials.
273
+
274
+ ### Network Policies
275
+
276
+ Verify that:
277
+
278
+ - Kubernetes NetworkPolicies restrict pod-to-pod communication to only the required paths.
279
+ - Ingress is restricted to the ingress controller; pods do not accept traffic directly from external sources.
280
+ - Egress is restricted to known destinations (database, external APIs, AWS services). Unrestricted egress allows data exfiltration.
281
+
282
+ ---
283
+
284
+ ## Code Review Security Checklist
285
+
286
+ Use this quick-scan checklist for every code review. Each item takes seconds to verify but catches the most common security issues:
287
+
288
+ - [ ] **No hardcoded secrets**: Search for API keys, tokens, passwords, connection strings in the diff. Check for strings that look like base64-encoded or hex-encoded secrets.
289
+ - [ ] **All user input validated**: Every `@Body()`, `@Query()`, `@Param()` uses a DTO with class-validator decorators. No raw `any` types on request inputs.
290
+ - [ ] **Auth checks on all protected endpoints**: New endpoints have `@UseGuards()` or are within a controller that has a global guard. Any `@Public()` decorator is intentional and justified.
291
+ - [ ] **No sensitive data in logs**: Log statements do not include request bodies (which may contain passwords), authorization headers (which contain tokens), or PII.
292
+ - [ ] **Dependencies checked**: If new dependencies are added, verify they are maintained, have no known critical vulnerabilities, and are necessary (not duplicating existing functionality).
293
+ - [ ] **CORS unchanged or intentional**: If CORS configuration is modified, the change is reviewed explicitly. No accidental `origin: '*'`.
294
+ - [ ] **Rate limiting on new public endpoints**: Any new public-facing endpoint (especially auth endpoints) has rate limiting configured.
295
+ - [ ] **Error responses do not leak internals**: Catch blocks do not return stack traces, database error messages, or internal implementation details to the client. Production error responses use generic messages with a request ID for correlation.
296
+ - [ ] **File uploads validated**: If the endpoint accepts file uploads, verify that file type, size, and content are validated. Files are stored with generated names (not user-supplied names) in a non-executable location.
297
+ - [ ] **Database queries parameterized**: If raw SQL or dynamic queries are used, verify that user input is parameterized, not interpolated.
298
+
299
+ ---
300
+
301
+ ## Periodic Audit Procedure
302
+
303
+ Conduct a full security audit at the following intervals and triggers:
304
+
305
+ ### Trigger-Based Audits
306
+
307
+ - Before every production deployment of a new feature.
308
+ - After adding a new third-party dependency.
309
+ - After any change to authentication or authorization logic.
310
+ - After any infrastructure change (IAM roles, network policies, secrets).
311
+
312
+ ### Periodic Audits (Monthly)
313
+
314
+ 1. **Dependency audit**: Run `npm audit`. Review and remediate all high and critical findings. Update stale dependencies.
315
+ 2. **Secret scan**: Search the codebase for hardcoded secrets using pattern matching (API key formats, base64 strings, common secret variable names).
316
+ 3. **Permission review**: Review IAM roles and Kubernetes RBAC. Remove permissions that are no longer needed. Verify that no new wildcard permissions have been added.
317
+ 4. **Log review**: Sample application logs for the past period. Verify that no sensitive data appears in logs. Verify that security events (auth failures, access denials) are being logged.
318
+ 5. **Access review**: Verify that all human access (AWS console, Kubernetes, database) follows least privilege. Deactivate access for team members who have left or changed roles.
319
+
320
+ ---
321
+
322
+ ## Common Vulnerability Patterns in This Stack
323
+
324
+ ### Unprotected Endpoint
325
+
326
+ **Pattern**: A new controller is added without a guard, or an existing controller's guard is accidentally removed during refactoring.
327
+
328
+ **Detection**: Search for controllers without `@UseGuards()` at the class or method level. Cross-reference with the global guard configuration — if a global guard is applied, verify that the controller does not accidentally bypass it.
329
+
330
+ **Prevention**: Apply authentication guards globally. Use `@Public()` as an explicit opt-out rather than relying on opt-in.
331
+
332
+ ### Overly Permissive CORS
333
+
334
+ **Pattern**: During development, CORS is set to `origin: '*'` for convenience. The wildcard configuration reaches production.
335
+
336
+ **Detection**: Search for CORS configuration in `main.ts` or the app module. Verify that the origin is an explicit whitelist in production configuration.
337
+
338
+ **Prevention**: Use environment-specific CORS configuration. The development config may use `'*'`; the production config must use an explicit domain list.
339
+
340
+ ### Token in URL
341
+
342
+ **Pattern**: An API token or session ID is passed as a query parameter (`/api/data?token=xxx`). Query parameters are logged in access logs, cached by proxies, stored in browser history, and leaked via the Referer header.
343
+
344
+ **Detection**: Search for `@Query()` parameters named `token`, `key`, `secret`, `auth`, or similar. Search for URL construction that appends tokens.
345
+
346
+ **Prevention**: Transmit tokens in the `Authorization` header (for API tokens) or in httpOnly cookies (for session tokens). Never in URLs.
347
+
348
+ ### Mass Assignment
349
+
350
+ **Pattern**: An API endpoint accepts a raw object type (or an overly permissive DTO) that allows the client to set fields that should be server-controlled (e.g., `isAdmin`, `role`, `createdBy`).
351
+
352
+ **Detection**: Search for `@Body() body: any` or DTOs that include sensitive fields without `@Exclude()` or that lack `whitelist: true` in the ValidationPipe.
353
+
354
+ **Prevention**: Use strict DTOs with only the fields the client is allowed to set. Apply `whitelist: true` to strip unknown properties. Never spread the raw body into a database insert without selecting specific fields.
355
+
356
+ ### Logging Sensitive Data
357
+
358
+ **Pattern**: A debug log statement includes the full request body, which contains a password field. Or an error log includes the authorization header, which contains a JWT.
359
+
360
+ **Detection**: Search for log statements that reference `req.body`, `req.headers`, `request.body`, `request.headers`, or that log entire objects (which may contain nested sensitive fields).
361
+
362
+ **Prevention**: Log specific, non-sensitive fields. Use a structured logging approach where sensitive fields are redacted automatically. Never log `req.body` or `req.headers` directly.
@@ -0,0 +1,10 @@
1
+ {
2
+ "version": 2,
3
+ "name": "skill-development",
4
+ "owner": "anthropics",
5
+ "repo": "claude-code",
6
+ "path": "plugins/plugin-dev/skills/skill-development",
7
+ "branch": "main",
8
+ "sha": "3dd57083301fd1ba1a4e04967c6fc055c6d740eb",
9
+ "source": "manual"
10
+ }