claude-autopm 2.8.1 → 2.8.3

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 (450) hide show
  1. package/README.md +399 -529
  2. package/bin/autopm.js +2 -0
  3. package/bin/commands/plugin.js +395 -0
  4. package/bin/commands/team.js +184 -10
  5. package/install/install.js +223 -4
  6. package/lib/plugins/PluginManager.js +1328 -0
  7. package/lib/plugins/PluginManager.old.js +400 -0
  8. package/package.json +5 -1
  9. package/packages/plugin-ai/LICENSE +21 -0
  10. package/packages/plugin-ai/README.md +316 -0
  11. package/packages/plugin-ai/agents/anthropic-claude-expert.md +579 -0
  12. package/packages/plugin-ai/agents/azure-openai-expert.md +1411 -0
  13. package/packages/plugin-ai/agents/google-a2a-expert.md +1445 -0
  14. package/packages/plugin-ai/agents/huggingface-expert.md +2131 -0
  15. package/packages/plugin-ai/agents/langchain-expert.md +1427 -0
  16. package/packages/plugin-ai/commands/a2a-setup.md +886 -0
  17. package/packages/plugin-ai/commands/ai-model-deployment.md +481 -0
  18. package/packages/plugin-ai/commands/anthropic-optimize.md +793 -0
  19. package/packages/plugin-ai/commands/huggingface-deploy.md +789 -0
  20. package/packages/plugin-ai/commands/langchain-optimize.md +807 -0
  21. package/packages/plugin-ai/commands/llm-optimize.md +348 -0
  22. package/packages/plugin-ai/commands/openai-optimize.md +863 -0
  23. package/packages/plugin-ai/commands/rag-optimize.md +841 -0
  24. package/packages/plugin-ai/commands/rag-setup-scaffold.md +382 -0
  25. package/packages/plugin-ai/package.json +66 -0
  26. package/packages/plugin-ai/plugin.json +519 -0
  27. package/packages/plugin-ai/rules/ai-model-standards.md +449 -0
  28. package/packages/plugin-ai/rules/prompt-engineering-standards.md +509 -0
  29. package/packages/plugin-ai/scripts/examples/huggingface-inference-example.py +145 -0
  30. package/packages/plugin-ai/scripts/examples/langchain-rag-example.py +366 -0
  31. package/packages/plugin-ai/scripts/examples/mlflow-tracking-example.py +224 -0
  32. package/packages/plugin-ai/scripts/examples/openai-chat-example.py +425 -0
  33. package/packages/plugin-cloud/README.md +268 -0
  34. package/packages/plugin-cloud/agents/gemini-api-expert.md +880 -0
  35. package/packages/plugin-cloud/agents/openai-python-expert.md +1087 -0
  36. package/packages/plugin-cloud/commands/cloud-cost-optimize.md +243 -0
  37. package/packages/plugin-cloud/commands/cloud-validate.md +196 -0
  38. package/packages/plugin-cloud/hooks/pre-cloud-deploy.js +456 -0
  39. package/packages/plugin-cloud/package.json +64 -0
  40. package/packages/plugin-cloud/plugin.json +338 -0
  41. package/packages/plugin-cloud/rules/cloud-security-compliance.md +313 -0
  42. package/packages/plugin-cloud/scripts/examples/aws-validate.sh +30 -0
  43. package/packages/plugin-cloud/scripts/examples/azure-setup.sh +33 -0
  44. package/packages/plugin-cloud/scripts/examples/gcp-setup.sh +39 -0
  45. package/packages/plugin-cloud/scripts/examples/k8s-validate.sh +40 -0
  46. package/packages/plugin-cloud/scripts/examples/terraform-init.sh +26 -0
  47. package/packages/plugin-core/README.md +274 -0
  48. package/packages/plugin-core/commands/code-rabbit.md +128 -0
  49. package/packages/plugin-core/commands/prompt.md +9 -0
  50. package/packages/plugin-core/commands/re-init.md +9 -0
  51. package/packages/plugin-core/hooks/context7-reminder.md +29 -0
  52. package/packages/plugin-core/hooks/enforce-agents.js +125 -0
  53. package/packages/plugin-core/hooks/enforce-agents.sh +35 -0
  54. package/packages/plugin-core/hooks/pre-agent-context7.js +224 -0
  55. package/packages/plugin-core/hooks/pre-command-context7.js +229 -0
  56. package/packages/plugin-core/hooks/strict-enforce-agents.sh +39 -0
  57. package/packages/plugin-core/hooks/test-hook.sh +21 -0
  58. package/packages/plugin-core/hooks/unified-context7-enforcement.sh +38 -0
  59. package/packages/plugin-core/package.json +45 -0
  60. package/packages/plugin-core/plugin.json +387 -0
  61. package/packages/plugin-core/rules/agent-coordination.md +549 -0
  62. package/packages/plugin-core/rules/agent-mandatory.md +170 -0
  63. package/packages/plugin-core/rules/command-pipelines.md +208 -0
  64. package/packages/plugin-core/rules/context-optimization.md +176 -0
  65. package/packages/plugin-core/rules/context7-enforcement.md +327 -0
  66. package/packages/plugin-core/rules/datetime.md +122 -0
  67. package/packages/plugin-core/rules/definition-of-done.md +272 -0
  68. package/packages/plugin-core/rules/development-environments.md +19 -0
  69. package/packages/plugin-core/rules/development-workflow.md +198 -0
  70. package/packages/plugin-core/rules/framework-path-rules.md +180 -0
  71. package/packages/plugin-core/rules/frontmatter-operations.md +64 -0
  72. package/packages/plugin-core/rules/git-strategy.md +237 -0
  73. package/packages/plugin-core/rules/golden-rules.md +181 -0
  74. package/packages/plugin-core/rules/naming-conventions.md +111 -0
  75. package/packages/plugin-core/rules/no-pr-workflow.md +183 -0
  76. package/packages/plugin-core/rules/pipeline-mandatory.md +109 -0
  77. package/packages/plugin-core/rules/security-checklist.md +318 -0
  78. package/packages/plugin-core/rules/standard-patterns.md +197 -0
  79. package/packages/plugin-core/rules/strip-frontmatter.md +85 -0
  80. package/packages/plugin-core/rules/tdd.enforcement.md +103 -0
  81. package/packages/plugin-core/rules/use-ast-grep.md +113 -0
  82. package/packages/plugin-core/scripts/lib/datetime-utils.sh +254 -0
  83. package/packages/plugin-core/scripts/lib/frontmatter-utils.sh +294 -0
  84. package/packages/plugin-core/scripts/lib/github-utils.sh +221 -0
  85. package/packages/plugin-core/scripts/lib/logging-utils.sh +199 -0
  86. package/packages/plugin-core/scripts/lib/validation-utils.sh +339 -0
  87. package/packages/plugin-core/scripts/mcp/add.sh +7 -0
  88. package/packages/plugin-core/scripts/mcp/disable.sh +12 -0
  89. package/packages/plugin-core/scripts/mcp/enable.sh +12 -0
  90. package/packages/plugin-core/scripts/mcp/list.sh +7 -0
  91. package/packages/plugin-core/scripts/mcp/sync.sh +8 -0
  92. package/packages/plugin-data/README.md +315 -0
  93. package/packages/plugin-data/agents/airflow-orchestration-expert.md +158 -0
  94. package/packages/plugin-data/agents/kedro-pipeline-expert.md +304 -0
  95. package/packages/plugin-data/agents/langgraph-workflow-expert.md +530 -0
  96. package/packages/plugin-data/commands/airflow-dag-scaffold.md +413 -0
  97. package/packages/plugin-data/commands/kafka-pipeline-scaffold.md +503 -0
  98. package/packages/plugin-data/package.json +66 -0
  99. package/packages/plugin-data/plugin.json +294 -0
  100. package/packages/plugin-data/rules/data-quality-standards.md +373 -0
  101. package/packages/plugin-data/rules/etl-pipeline-standards.md +255 -0
  102. package/packages/plugin-data/scripts/examples/airflow-dag-example.py +245 -0
  103. package/packages/plugin-data/scripts/examples/dbt-transform-example.sql +238 -0
  104. package/packages/plugin-data/scripts/examples/kafka-streaming-example.py +257 -0
  105. package/packages/plugin-data/scripts/examples/pandas-etl-example.py +332 -0
  106. package/packages/plugin-databases/README.md +330 -0
  107. package/{autopm/.claude/agents/databases → packages/plugin-databases/agents}/bigquery-expert.md +24 -15
  108. package/{autopm/.claude/agents/databases → packages/plugin-databases/agents}/cosmosdb-expert.md +22 -15
  109. package/{autopm/.claude/agents/databases → packages/plugin-databases/agents}/mongodb-expert.md +24 -15
  110. package/{autopm/.claude/agents/databases → packages/plugin-databases/agents}/postgresql-expert.md +23 -15
  111. package/{autopm/.claude/agents/databases → packages/plugin-databases/agents}/redis-expert.md +29 -7
  112. package/packages/plugin-databases/commands/db-optimize.md +612 -0
  113. package/packages/plugin-databases/package.json +60 -0
  114. package/packages/plugin-databases/plugin.json +237 -0
  115. package/packages/plugin-databases/rules/database-management-strategy.md +146 -0
  116. package/packages/plugin-databases/rules/database-pipeline.md +316 -0
  117. package/packages/plugin-databases/scripts/examples/bigquery-cost-analyze.sh +160 -0
  118. package/packages/plugin-databases/scripts/examples/cosmosdb-ru-optimize.sh +163 -0
  119. package/packages/plugin-databases/scripts/examples/mongodb-shard-check.sh +120 -0
  120. package/packages/plugin-databases/scripts/examples/postgres-index-analyze.sh +95 -0
  121. package/packages/plugin-databases/scripts/examples/redis-cache-stats.sh +121 -0
  122. package/packages/plugin-devops/README.md +367 -0
  123. package/{autopm/.claude/agents/devops → packages/plugin-devops/agents}/github-operations-specialist.md +1 -1
  124. package/packages/plugin-devops/commands/ci-pipeline-create.md +581 -0
  125. package/packages/plugin-devops/commands/docker-optimize.md +493 -0
  126. package/packages/plugin-devops/hooks/pre-docker-build.js +472 -0
  127. package/packages/plugin-devops/package.json +61 -0
  128. package/packages/plugin-devops/plugin.json +302 -0
  129. package/packages/plugin-devops/rules/github-operations.md +92 -0
  130. package/packages/plugin-devops/scripts/examples/docker-build-multistage.sh +43 -0
  131. package/packages/plugin-devops/scripts/examples/docker-compose-validate.sh +74 -0
  132. package/packages/plugin-devops/scripts/examples/github-workflow-validate.sh +48 -0
  133. package/packages/plugin-devops/scripts/examples/prometheus-health-check.sh +58 -0
  134. package/packages/plugin-devops/scripts/examples/ssh-key-setup.sh +74 -0
  135. package/packages/plugin-frameworks/README.md +309 -0
  136. package/{autopm/.claude/agents/frameworks → packages/plugin-frameworks/agents}/e2e-test-engineer.md +219 -0
  137. package/{autopm/.claude/agents/frameworks → packages/plugin-frameworks/agents}/react-frontend-engineer.md +176 -0
  138. package/{autopm/.claude/agents/frameworks → packages/plugin-frameworks/agents}/tailwindcss-expert.md +251 -0
  139. package/packages/plugin-frameworks/commands/nextjs-optimize.md +692 -0
  140. package/packages/plugin-frameworks/commands/react-optimize.md +583 -0
  141. package/packages/plugin-frameworks/package.json +59 -0
  142. package/packages/plugin-frameworks/plugin.json +224 -0
  143. package/packages/plugin-frameworks/rules/performance-guidelines.md +403 -0
  144. package/packages/plugin-frameworks/scripts/examples/react-component-perf.sh +34 -0
  145. package/packages/plugin-frameworks/scripts/examples/tailwind-optimize.sh +44 -0
  146. package/packages/plugin-frameworks/scripts/examples/vue-composition-check.sh +41 -0
  147. package/packages/plugin-languages/README.md +333 -0
  148. package/packages/plugin-languages/commands/javascript-optimize.md +636 -0
  149. package/packages/plugin-languages/commands/nodejs-api-scaffold.md +341 -0
  150. package/packages/plugin-languages/commands/nodejs-optimize.md +689 -0
  151. package/packages/plugin-languages/commands/python-api-scaffold.md +261 -0
  152. package/packages/plugin-languages/commands/python-optimize.md +593 -0
  153. package/packages/plugin-languages/package.json +65 -0
  154. package/packages/plugin-languages/plugin.json +265 -0
  155. package/packages/plugin-languages/rules/code-quality-standards.md +496 -0
  156. package/packages/plugin-languages/rules/testing-standards.md +768 -0
  157. package/packages/plugin-languages/scripts/examples/bash-production-script.sh +520 -0
  158. package/packages/plugin-languages/scripts/examples/javascript-es6-patterns.js +291 -0
  159. package/packages/plugin-languages/scripts/examples/nodejs-async-iteration.js +360 -0
  160. package/packages/plugin-languages/scripts/examples/python-async-patterns.py +289 -0
  161. package/packages/plugin-languages/scripts/examples/typescript-patterns.ts +432 -0
  162. package/packages/plugin-ml/README.md +430 -0
  163. package/packages/plugin-ml/agents/automl-expert.md +326 -0
  164. package/packages/plugin-ml/agents/computer-vision-expert.md +550 -0
  165. package/packages/plugin-ml/agents/gradient-boosting-expert.md +455 -0
  166. package/packages/plugin-ml/agents/neural-network-architect.md +1228 -0
  167. package/packages/plugin-ml/agents/nlp-transformer-expert.md +584 -0
  168. package/packages/plugin-ml/agents/pytorch-expert.md +412 -0
  169. package/packages/plugin-ml/agents/reinforcement-learning-expert.md +2088 -0
  170. package/packages/plugin-ml/agents/scikit-learn-expert.md +228 -0
  171. package/packages/plugin-ml/agents/tensorflow-keras-expert.md +509 -0
  172. package/packages/plugin-ml/agents/time-series-expert.md +303 -0
  173. package/packages/plugin-ml/commands/ml-automl.md +572 -0
  174. package/packages/plugin-ml/commands/ml-train-optimize.md +657 -0
  175. package/packages/plugin-ml/package.json +52 -0
  176. package/packages/plugin-ml/plugin.json +338 -0
  177. package/packages/plugin-pm/README.md +368 -0
  178. package/packages/plugin-pm/claudeautopm-plugin-pm-2.0.0.tgz +0 -0
  179. package/packages/plugin-pm/commands/github/workflow-create.md +42 -0
  180. package/packages/plugin-pm/package.json +57 -0
  181. package/packages/plugin-pm/plugin.json +503 -0
  182. package/packages/plugin-testing/README.md +401 -0
  183. package/{autopm/.claude/agents/testing → packages/plugin-testing/agents}/frontend-testing-engineer.md +373 -0
  184. package/packages/plugin-testing/commands/jest-optimize.md +800 -0
  185. package/packages/plugin-testing/commands/playwright-optimize.md +887 -0
  186. package/packages/plugin-testing/commands/test-coverage.md +512 -0
  187. package/packages/plugin-testing/commands/test-performance.md +1041 -0
  188. package/packages/plugin-testing/commands/test-setup.md +414 -0
  189. package/packages/plugin-testing/package.json +40 -0
  190. package/packages/plugin-testing/plugin.json +197 -0
  191. package/packages/plugin-testing/rules/test-coverage-requirements.md +581 -0
  192. package/packages/plugin-testing/rules/testing-standards.md +529 -0
  193. package/packages/plugin-testing/scripts/examples/react-testing-example.test.jsx +460 -0
  194. package/packages/plugin-testing/scripts/examples/vitest-config-example.js +352 -0
  195. package/packages/plugin-testing/scripts/examples/vue-testing-example.test.js +586 -0
  196. package/scripts/publish-plugins.sh +166 -0
  197. package/autopm/.claude/agents/data/airflow-orchestration-expert.md +0 -52
  198. package/autopm/.claude/agents/data/kedro-pipeline-expert.md +0 -50
  199. package/autopm/.claude/agents/integration/message-queue-engineer.md +0 -794
  200. package/autopm/.claude/commands/ai/langgraph-workflow.md +0 -65
  201. package/autopm/.claude/commands/ai/openai-chat.md +0 -65
  202. package/autopm/.claude/commands/playwright/test-scaffold.md +0 -38
  203. package/autopm/.claude/commands/python/api-scaffold.md +0 -50
  204. package/autopm/.claude/commands/python/docs-query.md +0 -48
  205. package/autopm/.claude/commands/testing/prime.md +0 -314
  206. package/autopm/.claude/commands/testing/run.md +0 -125
  207. package/autopm/.claude/commands/ui/bootstrap-scaffold.md +0 -65
  208. package/autopm/.claude/rules/database-management-strategy.md +0 -17
  209. package/autopm/.claude/rules/database-pipeline.md +0 -94
  210. package/autopm/.claude/rules/ux-design-rules.md +0 -209
  211. package/autopm/.claude/rules/visual-testing.md +0 -223
  212. package/autopm/.claude/scripts/azure/README.md +0 -192
  213. package/autopm/.claude/scripts/azure/active-work.js +0 -524
  214. package/autopm/.claude/scripts/azure/active-work.sh +0 -20
  215. package/autopm/.claude/scripts/azure/blocked.js +0 -520
  216. package/autopm/.claude/scripts/azure/blocked.sh +0 -20
  217. package/autopm/.claude/scripts/azure/daily.js +0 -533
  218. package/autopm/.claude/scripts/azure/daily.sh +0 -20
  219. package/autopm/.claude/scripts/azure/dashboard.js +0 -970
  220. package/autopm/.claude/scripts/azure/dashboard.sh +0 -20
  221. package/autopm/.claude/scripts/azure/feature-list.js +0 -254
  222. package/autopm/.claude/scripts/azure/feature-list.sh +0 -20
  223. package/autopm/.claude/scripts/azure/feature-show.js +0 -7
  224. package/autopm/.claude/scripts/azure/feature-show.sh +0 -20
  225. package/autopm/.claude/scripts/azure/feature-status.js +0 -604
  226. package/autopm/.claude/scripts/azure/feature-status.sh +0 -20
  227. package/autopm/.claude/scripts/azure/help.js +0 -342
  228. package/autopm/.claude/scripts/azure/help.sh +0 -20
  229. package/autopm/.claude/scripts/azure/next-task.js +0 -508
  230. package/autopm/.claude/scripts/azure/next-task.sh +0 -20
  231. package/autopm/.claude/scripts/azure/search.js +0 -469
  232. package/autopm/.claude/scripts/azure/search.sh +0 -20
  233. package/autopm/.claude/scripts/azure/setup.js +0 -745
  234. package/autopm/.claude/scripts/azure/setup.sh +0 -20
  235. package/autopm/.claude/scripts/azure/sprint-report.js +0 -1012
  236. package/autopm/.claude/scripts/azure/sprint-report.sh +0 -20
  237. package/autopm/.claude/scripts/azure/sync.js +0 -563
  238. package/autopm/.claude/scripts/azure/sync.sh +0 -20
  239. package/autopm/.claude/scripts/azure/us-list.js +0 -210
  240. package/autopm/.claude/scripts/azure/us-list.sh +0 -20
  241. package/autopm/.claude/scripts/azure/us-status.js +0 -238
  242. package/autopm/.claude/scripts/azure/us-status.sh +0 -20
  243. package/autopm/.claude/scripts/azure/validate.js +0 -626
  244. package/autopm/.claude/scripts/azure/validate.sh +0 -20
  245. package/autopm/.claude/scripts/azure/wrapper-template.sh +0 -20
  246. package/autopm/.claude/scripts/github/dependency-tracker.js +0 -554
  247. package/autopm/.claude/scripts/github/dependency-validator.js +0 -545
  248. package/autopm/.claude/scripts/github/dependency-visualizer.js +0 -477
  249. package/bin/node/azure-feature-show.js +0 -7
  250. /package/{autopm/.claude/agents/cloud → packages/plugin-ai/agents}/gemini-api-expert.md +0 -0
  251. /package/{autopm/.claude/agents/data → packages/plugin-ai/agents}/langgraph-workflow-expert.md +0 -0
  252. /package/{autopm/.claude/agents/cloud → packages/plugin-ai/agents}/openai-python-expert.md +0 -0
  253. /package/{autopm/.claude/agents/cloud → packages/plugin-cloud/agents}/README.md +0 -0
  254. /package/{autopm/.claude/agents/cloud → packages/plugin-cloud/agents}/aws-cloud-architect.md +0 -0
  255. /package/{autopm/.claude/agents/cloud → packages/plugin-cloud/agents}/azure-cloud-architect.md +0 -0
  256. /package/{autopm/.claude/agents/cloud → packages/plugin-cloud/agents}/gcp-cloud-architect.md +0 -0
  257. /package/{autopm/.claude/agents/cloud → packages/plugin-cloud/agents}/gcp-cloud-functions-engineer.md +0 -0
  258. /package/{autopm/.claude/agents/cloud → packages/plugin-cloud/agents}/kubernetes-orchestrator.md +0 -0
  259. /package/{autopm/.claude/agents/cloud → packages/plugin-cloud/agents}/terraform-infrastructure-expert.md +0 -0
  260. /package/{autopm/.claude/commands/cloud → packages/plugin-cloud/commands}/infra-deploy.md +0 -0
  261. /package/{autopm/.claude/commands/kubernetes/deploy.md → packages/plugin-cloud/commands/k8s-deploy.md} +0 -0
  262. /package/{autopm/.claude/commands/infrastructure → packages/plugin-cloud/commands}/ssh-security.md +0 -0
  263. /package/{autopm/.claude/commands/infrastructure → packages/plugin-cloud/commands}/traefik-setup.md +0 -0
  264. /package/{autopm/.claude → packages/plugin-cloud}/rules/infrastructure-pipeline.md +0 -0
  265. /package/{autopm/.claude → packages/plugin-core}/agents/core/agent-manager.md +0 -0
  266. /package/{autopm/.claude → packages/plugin-core}/agents/core/code-analyzer.md +0 -0
  267. /package/{autopm/.claude → packages/plugin-core}/agents/core/file-analyzer.md +0 -0
  268. /package/{autopm/.claude → packages/plugin-core}/agents/core/test-runner.md +0 -0
  269. /package/{autopm/.claude → packages/plugin-core}/rules/ai-integration-patterns.md +0 -0
  270. /package/{autopm/.claude → packages/plugin-core}/rules/performance-guidelines.md +0 -0
  271. /package/{autopm/.claude/agents/databases → packages/plugin-databases/agents}/README.md +0 -0
  272. /package/{autopm/.claude/agents/devops → packages/plugin-devops/agents}/README.md +0 -0
  273. /package/{autopm/.claude/agents/devops → packages/plugin-devops/agents}/azure-devops-specialist.md +0 -0
  274. /package/{autopm/.claude/agents/devops → packages/plugin-devops/agents}/docker-containerization-expert.md +0 -0
  275. /package/{autopm/.claude/agents/devops → packages/plugin-devops/agents}/mcp-context-manager.md +0 -0
  276. /package/{autopm/.claude/agents/devops → packages/plugin-devops/agents}/observability-engineer.md +0 -0
  277. /package/{autopm/.claude/agents/devops → packages/plugin-devops/agents}/ssh-operations-expert.md +0 -0
  278. /package/{autopm/.claude/agents/devops → packages/plugin-devops/agents}/traefik-proxy-expert.md +0 -0
  279. /package/{autopm/.claude/commands/github → packages/plugin-devops/commands}/workflow-create.md +0 -0
  280. /package/{autopm/.claude → packages/plugin-devops}/rules/ci-cd-kubernetes-strategy.md +0 -0
  281. /package/{autopm/.claude → packages/plugin-devops}/rules/devops-troubleshooting-playbook.md +0 -0
  282. /package/{autopm/.claude → packages/plugin-devops}/rules/docker-first-development.md +0 -0
  283. /package/{autopm/.claude/agents/frameworks → packages/plugin-frameworks/agents}/README.md +0 -0
  284. /package/{autopm/.claude/agents/frameworks → packages/plugin-frameworks/agents}/nats-messaging-expert.md +0 -0
  285. /package/{autopm/.claude/agents/frameworks → packages/plugin-frameworks/agents}/react-ui-expert.md +0 -0
  286. /package/{autopm/.claude/agents/frameworks → packages/plugin-frameworks/agents}/ux-design-expert.md +0 -0
  287. /package/{autopm/.claude/commands/react → packages/plugin-frameworks/commands}/app-scaffold.md +0 -0
  288. /package/{autopm/.claude/commands/ui → packages/plugin-frameworks/commands}/tailwind-system.md +0 -0
  289. /package/{autopm/.claude → packages/plugin-frameworks}/rules/ui-development-standards.md +0 -0
  290. /package/{autopm/.claude → packages/plugin-frameworks}/rules/ui-framework-rules.md +0 -0
  291. /package/{autopm/.claude/agents/languages → packages/plugin-languages/agents}/README.md +0 -0
  292. /package/{autopm/.claude/agents/languages → packages/plugin-languages/agents}/bash-scripting-expert.md +0 -0
  293. /package/{autopm/.claude/agents/languages → packages/plugin-languages/agents}/javascript-frontend-engineer.md +0 -0
  294. /package/{autopm/.claude/agents/languages → packages/plugin-languages/agents}/nodejs-backend-engineer.md +0 -0
  295. /package/{autopm/.claude/agents/languages → packages/plugin-languages/agents}/python-backend-engineer.md +0 -0
  296. /package/{autopm/.claude/agents/languages → packages/plugin-languages/agents}/python-backend-expert.md +0 -0
  297. /package/{autopm/.claude → packages/plugin-pm}/commands/azure/COMMANDS.md +0 -0
  298. /package/{autopm/.claude → packages/plugin-pm}/commands/azure/COMMAND_MAPPING.md +0 -0
  299. /package/{autopm/.claude → packages/plugin-pm}/commands/azure/INTEGRATION_FIX.md +0 -0
  300. /package/{autopm/.claude → packages/plugin-pm}/commands/azure/README.md +0 -0
  301. /package/{autopm/.claude → packages/plugin-pm}/commands/azure/active-work.md +0 -0
  302. /package/{autopm/.claude → packages/plugin-pm}/commands/azure/aliases.md +0 -0
  303. /package/{autopm/.claude → packages/plugin-pm}/commands/azure/blocked-items.md +0 -0
  304. /package/{autopm/.claude → packages/plugin-pm}/commands/azure/clean.md +0 -0
  305. /package/{autopm/.claude → packages/plugin-pm}/commands/azure/docs-query.md +0 -0
  306. /package/{autopm/.claude → packages/plugin-pm}/commands/azure/feature-decompose.md +0 -0
  307. /package/{autopm/.claude → packages/plugin-pm}/commands/azure/feature-list.md +0 -0
  308. /package/{autopm/.claude → packages/plugin-pm}/commands/azure/feature-new.md +0 -0
  309. /package/{autopm/.claude → packages/plugin-pm}/commands/azure/feature-show.md +0 -0
  310. /package/{autopm/.claude → packages/plugin-pm}/commands/azure/feature-start.md +0 -0
  311. /package/{autopm/.claude → packages/plugin-pm}/commands/azure/fix-integration-example.md +0 -0
  312. /package/{autopm/.claude → packages/plugin-pm}/commands/azure/help.md +0 -0
  313. /package/{autopm/.claude → packages/plugin-pm}/commands/azure/import-us.md +0 -0
  314. /package/{autopm/.claude → packages/plugin-pm}/commands/azure/init.md +0 -0
  315. /package/{autopm/.claude → packages/plugin-pm}/commands/azure/next-task.md +0 -0
  316. /package/{autopm/.claude → packages/plugin-pm}/commands/azure/search.md +0 -0
  317. /package/{autopm/.claude → packages/plugin-pm}/commands/azure/sprint-status.md +0 -0
  318. /package/{autopm/.claude → packages/plugin-pm}/commands/azure/standup.md +0 -0
  319. /package/{autopm/.claude → packages/plugin-pm}/commands/azure/sync-all.md +0 -0
  320. /package/{autopm/.claude → packages/plugin-pm}/commands/azure/task-analyze.md +0 -0
  321. /package/{autopm/.claude → packages/plugin-pm}/commands/azure/task-close.md +0 -0
  322. /package/{autopm/.claude → packages/plugin-pm}/commands/azure/task-edit.md +0 -0
  323. /package/{autopm/.claude → packages/plugin-pm}/commands/azure/task-list.md +0 -0
  324. /package/{autopm/.claude → packages/plugin-pm}/commands/azure/task-new.md +0 -0
  325. /package/{autopm/.claude → packages/plugin-pm}/commands/azure/task-reopen.md +0 -0
  326. /package/{autopm/.claude → packages/plugin-pm}/commands/azure/task-show.md +0 -0
  327. /package/{autopm/.claude → packages/plugin-pm}/commands/azure/task-start.md +0 -0
  328. /package/{autopm/.claude → packages/plugin-pm}/commands/azure/task-status.md +0 -0
  329. /package/{autopm/.claude → packages/plugin-pm}/commands/azure/task-sync.md +0 -0
  330. /package/{autopm/.claude → packages/plugin-pm}/commands/azure/us-edit.md +0 -0
  331. /package/{autopm/.claude → packages/plugin-pm}/commands/azure/us-list.md +0 -0
  332. /package/{autopm/.claude → packages/plugin-pm}/commands/azure/us-new.md +0 -0
  333. /package/{autopm/.claude → packages/plugin-pm}/commands/azure/us-parse.md +0 -0
  334. /package/{autopm/.claude → packages/plugin-pm}/commands/azure/us-show.md +0 -0
  335. /package/{autopm/.claude → packages/plugin-pm}/commands/azure/us-status.md +0 -0
  336. /package/{autopm/.claude → packages/plugin-pm}/commands/azure/validate.md +0 -0
  337. /package/{autopm/.claude → packages/plugin-pm}/commands/azure/work-item-sync.md +0 -0
  338. /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/blocked.md +0 -0
  339. /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/clean.md +0 -0
  340. /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/context-create.md +0 -0
  341. /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/context-prime.md +0 -0
  342. /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/context-update.md +0 -0
  343. /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/context.md +0 -0
  344. /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/epic-close.md +0 -0
  345. /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/epic-decompose.md +0 -0
  346. /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/epic-edit.md +0 -0
  347. /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/epic-list.md +0 -0
  348. /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/epic-merge.md +0 -0
  349. /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/epic-oneshot.md +0 -0
  350. /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/epic-refresh.md +0 -0
  351. /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/epic-show.md +0 -0
  352. /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/epic-split.md +0 -0
  353. /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/epic-start.md +0 -0
  354. /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/epic-status.md +0 -0
  355. /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/epic-sync-modular.md +0 -0
  356. /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/epic-sync-original.md +0 -0
  357. /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/epic-sync.md +0 -0
  358. /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/help.md +0 -0
  359. /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/import.md +0 -0
  360. /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/in-progress.md +0 -0
  361. /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/init.md +0 -0
  362. /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/issue-analyze.md +0 -0
  363. /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/issue-close.md +0 -0
  364. /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/issue-edit.md +0 -0
  365. /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/issue-reopen.md +0 -0
  366. /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/issue-show.md +0 -0
  367. /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/issue-start.md +0 -0
  368. /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/issue-status.md +0 -0
  369. /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/issue-sync.md +0 -0
  370. /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/next.md +0 -0
  371. /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/prd-edit.md +0 -0
  372. /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/prd-list.md +0 -0
  373. /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/prd-new.md +0 -0
  374. /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/prd-parse.md +0 -0
  375. /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/prd-status.md +0 -0
  376. /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/search.md +0 -0
  377. /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/standup.md +0 -0
  378. /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/status.md +0 -0
  379. /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/sync.md +0 -0
  380. /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/test-reference-update.md +0 -0
  381. /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/validate.md +0 -0
  382. /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/what-next.md +0 -0
  383. /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/analytics.js +0 -0
  384. /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/blocked.js +0 -0
  385. /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/blocked.sh +0 -0
  386. /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/clean.js +0 -0
  387. /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/context-create.js +0 -0
  388. /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/context-prime.js +0 -0
  389. /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/context-update.js +0 -0
  390. /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/context.js +0 -0
  391. /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/epic-close.js +0 -0
  392. /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/epic-edit.js +0 -0
  393. /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/epic-list.js +0 -0
  394. /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/epic-list.sh +0 -0
  395. /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/epic-show.js +0 -0
  396. /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/epic-show.sh +0 -0
  397. /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/epic-split.js +0 -0
  398. /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/epic-start/epic-start.js +0 -0
  399. /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/epic-start/epic-start.sh +0 -0
  400. /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/epic-status.js +0 -0
  401. /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/epic-status.sh +0 -0
  402. /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/epic-sync/README.md +0 -0
  403. /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/epic-sync/create-epic-issue.sh +0 -0
  404. /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/epic-sync/create-task-issues.sh +0 -0
  405. /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/epic-sync/update-epic-file.sh +0 -0
  406. /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/epic-sync/update-references.sh +0 -0
  407. /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/epic-sync.sh +0 -0
  408. /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/help.js +0 -0
  409. /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/help.sh +0 -0
  410. /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/in-progress.js +0 -0
  411. /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/in-progress.sh +0 -0
  412. /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/init.js +0 -0
  413. /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/init.sh +0 -0
  414. /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/issue-close.js +0 -0
  415. /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/issue-edit.js +0 -0
  416. /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/issue-show.js +0 -0
  417. /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/issue-start.js +0 -0
  418. /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/issue-sync/format-comment.sh +0 -0
  419. /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/issue-sync/gather-updates.sh +0 -0
  420. /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/issue-sync/post-comment.sh +0 -0
  421. /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/issue-sync/preflight-validation.sh +0 -0
  422. /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/issue-sync/update-frontmatter.sh +0 -0
  423. /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/lib/README.md +0 -0
  424. /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/lib/epic-discovery.js +0 -0
  425. /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/lib/logger.js +0 -0
  426. /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/next.js +0 -0
  427. /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/next.sh +0 -0
  428. /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/optimize.js +0 -0
  429. /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/pr-create.js +0 -0
  430. /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/pr-list.js +0 -0
  431. /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/prd-list.js +0 -0
  432. /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/prd-list.sh +0 -0
  433. /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/prd-new.js +0 -0
  434. /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/prd-parse.js +0 -0
  435. /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/prd-status.js +0 -0
  436. /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/prd-status.sh +0 -0
  437. /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/release.js +0 -0
  438. /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/search.js +0 -0
  439. /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/search.sh +0 -0
  440. /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/standup.js +0 -0
  441. /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/standup.sh +0 -0
  442. /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/status.js +0 -0
  443. /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/status.sh +0 -0
  444. /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/sync-batch.js +0 -0
  445. /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/sync.js +0 -0
  446. /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/template-list.js +0 -0
  447. /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/template-new.js +0 -0
  448. /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/validate.js +0 -0
  449. /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/validate.sh +0 -0
  450. /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/what-next.js +0 -0
@@ -0,0 +1,291 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * JavaScript ES6 Patterns - Context7 Best Practices
4
+ *
5
+ * Demonstrates modern ES6 patterns from Airbnb JavaScript Style Guide:
6
+ * - Default parameters
7
+ * - Object property shorthand
8
+ * - Object method shorthand
9
+ * - Spread syntax for copying
10
+ * - Destructuring
11
+ * - Arrow functions
12
+ *
13
+ * Source: /airbnb/javascript (221 snippets, trust 8.1)
14
+ */
15
+
16
+ // Context7 Pattern 1: Default Parameters
17
+ function handleThings(opts = {}) {
18
+ // ✅ CORRECT: Use default parameters instead of opts = opts || {}
19
+ const {
20
+ retries = 3,
21
+ timeout = 5000,
22
+ debug = false,
23
+ } = opts;
24
+
25
+ if (debug) {
26
+ console.log(`Retries: ${retries}, Timeout: ${timeout}`);
27
+ }
28
+
29
+ return { retries, timeout, debug };
30
+ }
31
+
32
+ // Example usage
33
+ console.log('Pattern 1: Default Parameters');
34
+ console.log(handleThings());
35
+ console.log(handleThings({ retries: 5, debug: true }));
36
+
37
+ // Context7 Pattern 2: Object Property Shorthand
38
+ const lukeSkywalker = 'Luke Skywalker';
39
+ const age = 25;
40
+ const planet = 'Tatooine';
41
+
42
+ // ✅ CORRECT: Object property shorthand
43
+ const obj = {
44
+ lukeSkywalker, // instead of lukeSkywalker: lukeSkywalker
45
+ age,
46
+ planet,
47
+ };
48
+
49
+ console.log('\nPattern 2: Object Property Shorthand');
50
+ console.log(obj);
51
+
52
+ // Context7 Pattern 3: Object Method Shorthand
53
+ const atom = {
54
+ value: 1,
55
+
56
+ // ✅ CORRECT: Object method shorthand
57
+ addValue(value) {
58
+ return atom.value + value;
59
+ },
60
+
61
+ // Works with async too
62
+ async fetchValue() {
63
+ return Promise.resolve(this.value);
64
+ },
65
+ };
66
+
67
+ console.log('\nPattern 3: Object Method Shorthand');
68
+ console.log(atom.addValue(5));
69
+
70
+ // Context7 Pattern 4: Spread Syntax for Copying
71
+ const original = { a: 1, b: 2 };
72
+
73
+ // ✅ CORRECT: Use spread for shallow copy
74
+ const copy = { ...original, c: 3 };
75
+
76
+ // Also works for arrays
77
+ const arr1 = [1, 2, 3];
78
+ const arr2 = [...arr1, 4, 5];
79
+
80
+ console.log('\nPattern 4: Spread Syntax');
81
+ console.log('Object copy:', copy);
82
+ console.log('Array copy:', arr2);
83
+
84
+ // Context7 Pattern 5: Destructuring
85
+ const user = {
86
+ firstName: 'John',
87
+ lastName: 'Doe',
88
+ email: 'john@example.com',
89
+ address: {
90
+ city: 'New York',
91
+ country: 'USA',
92
+ },
93
+ };
94
+
95
+ // ✅ CORRECT: Use destructuring
96
+ const { firstName, lastName, address: { city } } = user;
97
+
98
+ // Array destructuring
99
+ const numbers = [1, 2, 3, 4, 5];
100
+ const [first, second, ...rest] = numbers;
101
+
102
+ console.log('\nPattern 5: Destructuring');
103
+ console.log(`Name: ${firstName} ${lastName}, City: ${city}`);
104
+ console.log(`First: ${first}, Second: ${second}, Rest: ${rest}`);
105
+
106
+ // Context7 Pattern 6: Arrow Functions
107
+ const items = [1, 2, 3, 4, 5];
108
+
109
+ // ✅ CORRECT: Use arrow functions for simple callbacks
110
+ const doubled = items.map(x => x * 2);
111
+ const evens = items.filter(x => x % 2 === 0);
112
+ const sum = items.reduce((acc, x) => acc + x, 0);
113
+
114
+ console.log('\nPattern 6: Arrow Functions');
115
+ console.log('Doubled:', doubled);
116
+ console.log('Evens:', evens);
117
+ console.log('Sum:', sum);
118
+
119
+ // Advanced ES6 Patterns
120
+
121
+ // Pattern 7: Template Literals
122
+ const buildGreeting = (name, time) => {
123
+ // ✅ CORRECT: Use template literals instead of string concatenation
124
+ return `Good ${time}, ${name}!`;
125
+ };
126
+
127
+ console.log('\nPattern 7: Template Literals');
128
+ console.log(buildGreeting('Alice', 'morning'));
129
+
130
+ // Pattern 8: Enhanced Object Literals
131
+ const getUser = (firstName, lastName, age) => ({
132
+ // Property shorthand
133
+ firstName,
134
+ lastName,
135
+ age,
136
+
137
+ // Method shorthand
138
+ getFullName() {
139
+ return `${this.firstName} ${this.lastName}`;
140
+ },
141
+
142
+ // Computed property names
143
+ [`is${age >= 18 ? 'Adult' : 'Minor'}`]: true,
144
+ });
145
+
146
+ console.log('\nPattern 8: Enhanced Object Literals');
147
+ const alice = getUser('Alice', 'Smith', 25);
148
+ console.log(alice);
149
+ console.log(alice.getFullName());
150
+
151
+ // Pattern 9: Async/Await (Modern Promise Handling)
152
+ const delay = (ms) => new Promise(resolve => setTimeout(resolve, ms));
153
+
154
+ const fetchData = async (url) => {
155
+ try {
156
+ // Simulate API call
157
+ await delay(100);
158
+ return { url, data: 'sample data' };
159
+ } catch (error) {
160
+ console.error('Error fetching data:', error);
161
+ throw error;
162
+ }
163
+ };
164
+
165
+ const processMultipleRequests = async (urls) => {
166
+ // ✅ CORRECT: Use Promise.all for parallel requests
167
+ const results = await Promise.all(urls.map(url => fetchData(url)));
168
+ return results;
169
+ };
170
+
171
+ // Pattern 10: Optional Chaining & Nullish Coalescing
172
+ const getUserEmail = (user) => {
173
+ // ✅ CORRECT: Use optional chaining
174
+ return user?.profile?.email ?? 'no-email@example.com';
175
+ };
176
+
177
+ console.log('\nPattern 10: Optional Chaining & Nullish Coalescing');
178
+ console.log(getUserEmail({ profile: { email: 'user@example.com' } }));
179
+ console.log(getUserEmail({}));
180
+ console.log(getUserEmail(null));
181
+
182
+ // Real-World Example: API Client
183
+ class ApiClient {
184
+ constructor(baseURL, options = {}) {
185
+ this.baseURL = baseURL;
186
+ // Destructuring with defaults
187
+ const {
188
+ timeout = 5000,
189
+ retries = 3,
190
+ headers = {},
191
+ } = options;
192
+
193
+ // Object shorthand
194
+ this.config = {
195
+ timeout,
196
+ retries,
197
+ headers: {
198
+ 'Content-Type': 'application/json',
199
+ ...headers, // Spread existing headers
200
+ },
201
+ };
202
+ }
203
+
204
+ async get(endpoint, params = {}) {
205
+ // Template literal for URL
206
+ const url = `${this.baseURL}/${endpoint}`;
207
+
208
+ // Destructuring from config
209
+ const { timeout, retries } = this.config;
210
+
211
+ for (let attempt = 0; attempt < retries; attempt++) {
212
+ try {
213
+ await delay(100); // Simulate request
214
+ return {
215
+ status: 200,
216
+ data: { endpoint, params },
217
+ };
218
+ } catch (error) {
219
+ if (attempt === retries - 1) throw error;
220
+ }
221
+ }
222
+ }
223
+
224
+ async post(endpoint, data) {
225
+ // Object method shorthand
226
+ return this.makeRequest('POST', endpoint, data);
227
+ }
228
+
229
+ async makeRequest(method, endpoint, data) {
230
+ // Arrow function in method
231
+ const processResponse = (response) => ({
232
+ ...response,
233
+ timestamp: Date.now(),
234
+ });
235
+
236
+ await delay(100);
237
+ const response = {
238
+ status: 200,
239
+ data,
240
+ method,
241
+ endpoint,
242
+ };
243
+
244
+ return processResponse(response);
245
+ }
246
+
247
+ // Static method with arrow function
248
+ static create = (baseURL, options) => new ApiClient(baseURL, options);
249
+ }
250
+
251
+ // Usage
252
+ (async () => {
253
+ console.log('\nReal-World Example: API Client');
254
+
255
+ // Create client with defaults
256
+ const client = ApiClient.create('https://api.example.com', {
257
+ timeout: 3000,
258
+ headers: { 'X-API-Key': 'secret' },
259
+ });
260
+
261
+ // Use async/await
262
+ const response = await client.get('users', { page: 1 });
263
+ console.log('GET response:', response);
264
+
265
+ const postResponse = await client.post('users', {
266
+ name: 'Alice',
267
+ email: 'alice@example.com',
268
+ });
269
+ console.log('POST response:', postResponse);
270
+ })();
271
+
272
+ // Context7 Best Practices Summary
273
+ console.log(`
274
+ Context7 Verified Best Practices Applied:
275
+ ==========================================
276
+ 1. ✅ Default parameters instead of || operator
277
+ 2. ✅ Object property shorthand ({ name } not { name: name })
278
+ 3. ✅ Object method shorthand (method() {} not method: function() {})
279
+ 4. ✅ Spread syntax for copying ({ ...obj } and [...arr])
280
+ 5. ✅ Destructuring for cleaner code
281
+ 6. ✅ Arrow functions for callbacks
282
+ 7. ✅ Template literals for strings
283
+ 8. ✅ Enhanced object literals
284
+ 9. ✅ Async/await for promises
285
+ 10. ✅ Optional chaining & nullish coalescing
286
+
287
+ Source:
288
+ - /airbnb/javascript (221 snippets, trust 8.1)
289
+
290
+ All patterns follow Airbnb JavaScript Style Guide
291
+ `);
@@ -0,0 +1,360 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Node.js Async Iteration Patterns - Context7 Best Practices
4
+ *
5
+ * Demonstrates modern Node.js async patterns:
6
+ * - for await...of with Symbol.asyncIterator
7
+ * - AbortSignal for cancellation
8
+ * - Mixed approach (event + await) for performance
9
+ * - Stream processing with async iterators
10
+ *
11
+ * Source: /nodejs/node (8,761 snippets, trust 9.1)
12
+ */
13
+
14
+ import { createReadStream } from 'node:fs';
15
+ import { writeFile, readFile } from 'node:fs/promises';
16
+ import * as readline from 'node:readline';
17
+ import { once, on } from 'node:events';
18
+ import { EventEmitter } from 'node:events';
19
+ import { Readable } from 'node:stream';
20
+
21
+ // Context7 Pattern 1: for await...of with Symbol.asyncIterator
22
+ async function processLineByLine(filePath) {
23
+ console.log('Pattern 1: Async Line-by-Line Processing');
24
+
25
+ const rl = readline.createInterface({
26
+ input: createReadStream(filePath),
27
+ crlfDelay: Infinity,
28
+ });
29
+
30
+ // ✅ CORRECT: Use for await...of for async iteration
31
+ let lineCount = 0;
32
+ for await (const line of rl) {
33
+ // Each line is processed sequentially
34
+ lineCount++;
35
+ if (lineCount <= 3) {
36
+ console.log(` Line ${lineCount}: ${line.substring(0, 50)}...`);
37
+ }
38
+ }
39
+
40
+ console.log(` Total lines: ${lineCount}`);
41
+ }
42
+
43
+ // Context7 Pattern 2: Mixed Approach for Better Performance
44
+ async function processLinesMixed(filePath) {
45
+ console.log('\nPattern 2: Mixed Approach (Event + Await)');
46
+
47
+ const rl = readline.createInterface({
48
+ input: createReadStream(filePath),
49
+ crlfDelay: Infinity,
50
+ });
51
+
52
+ let lineCount = 0;
53
+
54
+ // ✅ CORRECT: Use event handler for better performance
55
+ rl.on('line', (line) => {
56
+ lineCount++;
57
+ // Process line synchronously
58
+ });
59
+
60
+ // Wait for 'close' event
61
+ await once(rl, 'close');
62
+
63
+ console.log(` Processed ${lineCount} lines (mixed approach)`);
64
+ }
65
+
66
+ // Context7 Pattern 3: AbortSignal for Cancellation
67
+ async function fetchWithTimeout(url, timeout = 5000) {
68
+ console.log('\nPattern 3: AbortSignal for Request Cancellation');
69
+
70
+ // ✅ CORRECT: Use AbortController for cancellation
71
+ const controller = new AbortController();
72
+ const { signal } = controller;
73
+
74
+ const timeoutId = setTimeout(() => {
75
+ console.log(' Aborting request due to timeout');
76
+ controller.abort();
77
+ }, timeout);
78
+
79
+ try {
80
+ // Simulate fetch with signal
81
+ await new Promise((resolve, reject) => {
82
+ const timer = setTimeout(resolve, 1000);
83
+
84
+ signal.addEventListener('abort', () => {
85
+ clearTimeout(timer);
86
+ reject(new Error('Request aborted'));
87
+ });
88
+ });
89
+
90
+ console.log(` Request completed successfully`);
91
+ return { status: 200, data: 'success' };
92
+ } catch (error) {
93
+ if (error.name === 'AbortError' || error.message === 'Request aborted') {
94
+ console.log(' Request was cancelled');
95
+ throw error;
96
+ }
97
+ throw error;
98
+ } finally {
99
+ clearTimeout(timeoutId);
100
+ }
101
+ }
102
+
103
+ // Context7 Pattern 4: AbortSignal with Event Iteration
104
+ async function watchEventsWithCancellation(emitter, eventName, timeout = 5000) {
105
+ console.log('\nPattern 4: Event Iteration with AbortSignal');
106
+
107
+ const ac = new AbortController();
108
+ const { signal } = ac;
109
+
110
+ // Cancel after timeout
111
+ setTimeout(() => {
112
+ console.log(' Cancelling event watching');
113
+ ac.abort();
114
+ }, timeout);
115
+
116
+ try {
117
+ // ✅ CORRECT: Use AbortSignal with event iteration
118
+ let eventCount = 0;
119
+ for await (const event of on(emitter, eventName, { signal })) {
120
+ eventCount++;
121
+ console.log(` Event ${eventCount}: ${JSON.stringify(event)}`);
122
+
123
+ if (eventCount >= 3) {
124
+ ac.abort();
125
+ break;
126
+ }
127
+ }
128
+
129
+ console.log(` Processed ${eventCount} events`);
130
+ } catch (error) {
131
+ if (error.name === 'AbortError') {
132
+ console.log(' Event watching cancelled');
133
+ } else {
134
+ throw error;
135
+ }
136
+ }
137
+ }
138
+
139
+ // Context7 Pattern 5: Custom Async Iterator with Symbol.asyncIterator
140
+ class AsyncNumberGenerator {
141
+ constructor(max = 10) {
142
+ this.max = max;
143
+ }
144
+
145
+ // ✅ CORRECT: Implement Symbol.asyncIterator
146
+ async *[Symbol.asyncIterator]() {
147
+ for (let i = 1; i <= this.max; i++) {
148
+ // Simulate async operation
149
+ await new Promise(resolve => setTimeout(resolve, 100));
150
+ yield i;
151
+ }
152
+ }
153
+ }
154
+
155
+ async function useCustomAsyncIterator() {
156
+ console.log('\nPattern 5: Custom Async Iterator');
157
+
158
+ const generator = new AsyncNumberGenerator(5);
159
+
160
+ let sum = 0;
161
+ for await (const num of generator) {
162
+ sum += num;
163
+ console.log(` Generated: ${num}, Sum: ${sum}`);
164
+ }
165
+
166
+ console.log(` Final sum: ${sum}`);
167
+ }
168
+
169
+ // Context7 Pattern 6: Stream Processing with Async Iteration
170
+ async function processStream() {
171
+ console.log('\nPattern 6: Stream Processing');
172
+
173
+ // Create readable stream
174
+ const readable = Readable.from(async function* () {
175
+ for (let i = 0; i < 5; i++) {
176
+ await new Promise(resolve => setTimeout(resolve, 100));
177
+ yield `chunk-${i}`;
178
+ }
179
+ }());
180
+
181
+ // ✅ CORRECT: Process stream with for await...of
182
+ let chunkCount = 0;
183
+ for await (const chunk of readable) {
184
+ chunkCount++;
185
+ console.log(` Chunk ${chunkCount}: ${chunk}`);
186
+ }
187
+
188
+ console.log(` Processed ${chunkCount} chunks`);
189
+ }
190
+
191
+ // Real-World Example: Log File Processor
192
+ class LogProcessor {
193
+ constructor(logFilePath) {
194
+ this.logFilePath = logFilePath;
195
+ this.stats = {
196
+ totalLines: 0,
197
+ errors: 0,
198
+ warnings: 0,
199
+ info: 0,
200
+ };
201
+ }
202
+
203
+ async *processLogs() {
204
+ const rl = readline.createInterface({
205
+ input: createReadStream(this.logFilePath),
206
+ crlfDelay: Infinity,
207
+ });
208
+
209
+ // ✅ Async iteration with Symbol.asyncIterator
210
+ for await (const line of rl) {
211
+ this.stats.totalLines++;
212
+
213
+ const logEntry = this.parseLine(line);
214
+ if (logEntry) {
215
+ yield logEntry;
216
+ }
217
+ }
218
+ }
219
+
220
+ parseLine(line) {
221
+ this.stats.totalLines++;
222
+
223
+ if (line.includes('ERROR')) {
224
+ this.stats.errors++;
225
+ return { level: 'ERROR', line };
226
+ } else if (line.includes('WARNING')) {
227
+ this.stats.warnings++;
228
+ return { level: 'WARNING', line };
229
+ } else if (line.includes('INFO')) {
230
+ this.stats.info++;
231
+ return { level: 'INFO', line };
232
+ }
233
+
234
+ return null;
235
+ }
236
+
237
+ async analyzeWithTimeout(timeoutMs = 10000) {
238
+ const ac = new AbortController();
239
+ const { signal } = ac;
240
+
241
+ // Set timeout
242
+ const timeoutId = setTimeout(() => ac.abort(), timeoutMs);
243
+
244
+ try {
245
+ const results = [];
246
+
247
+ // ✅ Use AbortSignal with async iteration
248
+ for await (const entry of this.processLogs()) {
249
+ if (signal.aborted) {
250
+ break;
251
+ }
252
+
253
+ results.push(entry);
254
+
255
+ if (results.length >= 10) {
256
+ break; // Process only first 10 for demo
257
+ }
258
+ }
259
+
260
+ clearTimeout(timeoutId);
261
+ return { results, stats: this.stats };
262
+ } catch (error) {
263
+ clearTimeout(timeoutId);
264
+ if (signal.aborted) {
265
+ console.log('Analysis cancelled due to timeout');
266
+ }
267
+ throw error;
268
+ }
269
+ }
270
+ }
271
+
272
+ // Main Demo
273
+ async function main() {
274
+ console.log('Node.js Async Iteration Patterns - Context7 Best Practices');
275
+ console.log('='.repeat(60));
276
+
277
+ // Create test file
278
+ const testFile = '/tmp/test-nodejs-async.txt';
279
+ await writeFile(testFile, `Line 1: INFO - Application started
280
+ Line 2: WARNING - High memory usage
281
+ Line 3: ERROR - Database connection failed
282
+ Line 4: INFO - Retrying connection
283
+ Line 5: INFO - Connection established
284
+ Line 6: WARNING - Slow query detected
285
+ Line 7: INFO - Processing request
286
+ Line 8: ERROR - Invalid input
287
+ Line 9: INFO - Request completed
288
+ Line 10: INFO - Application running`);
289
+
290
+ try {
291
+ // Pattern 1: Basic async iteration
292
+ await processLineByLine(testFile);
293
+
294
+ // Pattern 2: Mixed approach
295
+ await processLinesMixed(testFile);
296
+
297
+ // Pattern 3: AbortSignal for timeout
298
+ await fetchWithTimeout('https://example.com/api', 5000);
299
+
300
+ // Pattern 4: Event iteration with cancellation
301
+ const emitter = new EventEmitter();
302
+ const watchPromise = watchEventsWithCancellation(emitter, 'data', 2000);
303
+
304
+ // Emit some events
305
+ setTimeout(() => emitter.emit('data', { value: 1 }), 100);
306
+ setTimeout(() => emitter.emit('data', { value: 2 }), 200);
307
+ setTimeout(() => emitter.emit('data', { value: 3 }), 300);
308
+ setTimeout(() => emitter.emit('data', { value: 4 }), 400);
309
+
310
+ await watchPromise;
311
+
312
+ // Pattern 5: Custom async iterator
313
+ await useCustomAsyncIterator();
314
+
315
+ // Pattern 6: Stream processing
316
+ await processStream();
317
+
318
+ // Real-world example
319
+ console.log('\nReal-World Example: Log Processor');
320
+ console.log('-'.repeat(60));
321
+ const processor = new LogProcessor(testFile);
322
+ const analysis = await processor.analyzeWithTimeout(5000);
323
+
324
+ console.log('Analysis Results:');
325
+ console.log(` Total entries: ${analysis.results.length}`);
326
+ console.log('Statistics:');
327
+ console.log(` Total lines: ${analysis.stats.totalLines}`);
328
+ console.log(` Errors: ${analysis.stats.errors}`);
329
+ console.log(` Warnings: ${analysis.stats.warnings}`);
330
+ console.log(` Info: ${analysis.stats.info}`);
331
+
332
+ } catch (error) {
333
+ console.error('Error in demo:', error);
334
+ }
335
+
336
+ console.log(`
337
+ Context7 Verified Best Practices Applied:
338
+ ==========================================
339
+ 1. ✅ for await...of for async iteration
340
+ 2. ✅ Mixed approach (event + await once) for performance
341
+ 3. ✅ AbortSignal for request cancellation
342
+ 4. ✅ AbortSignal with event iteration (on + signal)
343
+ 5. ✅ Symbol.asyncIterator for custom iterators
344
+ 6. ✅ Stream processing with async iteration
345
+ 7. ✅ Proper error handling and cleanup
346
+ 8. ✅ Real-world log processing example
347
+
348
+ Source:
349
+ - /nodejs/node (8,761 snippets, trust 9.1)
350
+
351
+ Key Performance Benefits:
352
+ - Event handling faster than async iteration for simple tasks
353
+ - AbortSignal enables graceful cancellation
354
+ - Symbol.asyncIterator provides standard interface
355
+ - Streams enable memory-efficient processing
356
+ `);
357
+ }
358
+
359
+ // Run the demo
360
+ main().catch(console.error);