intake-ai-cli 0.2.0__tar.gz → 0.4.0__tar.gz

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 (232) hide show
  1. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/CHANGELOG.md +136 -1
  2. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/PKG-INFO +226 -17
  3. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/README.md +220 -16
  4. intake_ai_cli-0.4.0/SECURITY.md +379 -0
  5. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/SEGUIMIENTO-V0.md +454 -1
  6. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/docs/README.md +49 -7
  7. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/docs/arquitectura.md +71 -15
  8. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/docs/buenas-practicas.md +49 -0
  9. intake_ai_cli-0.4.0/docs/conectores.md +278 -0
  10. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/docs/configuracion.md +140 -23
  11. intake_ai_cli-0.4.0/docs/despliegue.md +306 -0
  12. intake_ai_cli-0.4.0/docs/exportacion.md +462 -0
  13. intake_ai_cli-0.4.0/docs/feedback.md +230 -0
  14. intake_ai_cli-0.4.0/docs/flujos-trabajo.md +445 -0
  15. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/docs/formatos-entrada.md +75 -0
  16. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/docs/github-notes/v0.1.0.md +9 -9
  17. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/docs/github-notes/v0.2.0.md +36 -54
  18. intake_ai_cli-0.4.0/docs/github-notes/v0.3.0.md +442 -0
  19. intake_ai_cli-0.4.0/docs/github-notes/v0.4.0.md +278 -0
  20. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/docs/guia-cli.md +205 -7
  21. intake_ai_cli-0.4.0/docs/integracion-cicd.md +537 -0
  22. intake_ai_cli-0.4.0/docs/mcp-server.md +432 -0
  23. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/docs/pipeline.md +122 -2
  24. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/docs/plugins.md +19 -7
  25. intake_ai_cli-0.4.0/docs/seguridad.md +366 -0
  26. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/docs/solucion-problemas.md +125 -9
  27. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/docs/verificacion.md +40 -0
  28. intake_ai_cli-0.4.0/docs/watch-mode.md +316 -0
  29. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/pyproject.toml +14 -1
  30. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/src/intake/__init__.py +1 -1
  31. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/src/intake/cli.py +412 -18
  32. intake_ai_cli-0.4.0/src/intake/config/schema.py +196 -0
  33. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/src/intake/connectors/__init__.py +6 -0
  34. intake_ai_cli-0.4.0/src/intake/connectors/confluence_api.py +254 -0
  35. intake_ai_cli-0.4.0/src/intake/connectors/github_api.py +271 -0
  36. intake_ai_cli-0.4.0/src/intake/connectors/jira_api.py +237 -0
  37. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/src/intake/doctor/checks.py +115 -0
  38. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/src/intake/export/__init__.py +10 -5
  39. intake_ai_cli-0.4.0/src/intake/export/_helpers.py +152 -0
  40. intake_ai_cli-0.4.0/src/intake/export/claude_code.py +326 -0
  41. intake_ai_cli-0.4.0/src/intake/export/copilot.py +157 -0
  42. intake_ai_cli-0.4.0/src/intake/export/cursor.py +158 -0
  43. intake_ai_cli-0.4.0/src/intake/export/kiro.py +271 -0
  44. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/src/intake/export/registry.py +20 -6
  45. intake_ai_cli-0.4.0/src/intake/feedback/__init__.py +39 -0
  46. intake_ai_cli-0.4.0/src/intake/feedback/analyzer.py +309 -0
  47. intake_ai_cli-0.4.0/src/intake/feedback/prompts.py +60 -0
  48. intake_ai_cli-0.4.0/src/intake/feedback/spec_updater.py +324 -0
  49. intake_ai_cli-0.4.0/src/intake/feedback/suggestions.py +109 -0
  50. intake_ai_cli-0.4.0/src/intake/mcp/__init__.py +68 -0
  51. intake_ai_cli-0.4.0/src/intake/mcp/prompts.py +167 -0
  52. intake_ai_cli-0.4.0/src/intake/mcp/resources.py +108 -0
  53. intake_ai_cli-0.4.0/src/intake/mcp/server.py +154 -0
  54. intake_ai_cli-0.4.0/src/intake/mcp/tools.py +427 -0
  55. intake_ai_cli-0.4.0/src/intake/templates/claude_md.j2 +38 -0
  56. intake_ai_cli-0.4.0/src/intake/templates/claude_task.md.j2 +22 -0
  57. intake_ai_cli-0.4.0/src/intake/templates/copilot_instructions.md.j2 +43 -0
  58. intake_ai_cli-0.4.0/src/intake/templates/cursor_rules.mdc.j2 +47 -0
  59. intake_ai_cli-0.4.0/src/intake/templates/feedback.md.j2 +47 -0
  60. intake_ai_cli-0.4.0/src/intake/templates/kiro_design.md.j2 +9 -0
  61. intake_ai_cli-0.4.0/src/intake/templates/kiro_requirements.md.j2 +19 -0
  62. intake_ai_cli-0.4.0/src/intake/templates/kiro_tasks.md.j2 +22 -0
  63. intake_ai_cli-0.4.0/src/intake/templates/verify_sh.j2 +39 -0
  64. intake_ai_cli-0.4.0/src/intake/watch/__init__.py +25 -0
  65. intake_ai_cli-0.4.0/src/intake/watch/watcher.py +237 -0
  66. intake_ai_cli-0.4.0/tests/fixtures/confluence_api_response.json +19 -0
  67. intake_ai_cli-0.4.0/tests/fixtures/jira_api_response.json +32 -0
  68. intake_ai_cli-0.4.0/tests/fixtures/verify_report_failed.json +44 -0
  69. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/tests/test_cli.py +199 -1
  70. intake_ai_cli-0.4.0/tests/test_config/test_schema.py +206 -0
  71. intake_ai_cli-0.4.0/tests/test_connectors/test_confluence_api.py +181 -0
  72. intake_ai_cli-0.4.0/tests/test_connectors/test_github_api.py +206 -0
  73. intake_ai_cli-0.4.0/tests/test_connectors/test_jira_api.py +258 -0
  74. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/tests/test_doctor/test_checks.py +105 -0
  75. intake_ai_cli-0.4.0/tests/test_export/test_claude_code.py +259 -0
  76. intake_ai_cli-0.4.0/tests/test_export/test_copilot.py +191 -0
  77. intake_ai_cli-0.4.0/tests/test_export/test_cursor.py +145 -0
  78. intake_ai_cli-0.4.0/tests/test_export/test_helpers.py +125 -0
  79. intake_ai_cli-0.4.0/tests/test_export/test_kiro.py +207 -0
  80. intake_ai_cli-0.4.0/tests/test_export/test_protocol_conformance.py +138 -0
  81. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/tests/test_export/test_registry.py +8 -1
  82. intake_ai_cli-0.4.0/tests/test_feedback/__init__.py +1 -0
  83. intake_ai_cli-0.4.0/tests/test_feedback/test_analyzer.py +275 -0
  84. intake_ai_cli-0.4.0/tests/test_feedback/test_spec_updater.py +188 -0
  85. intake_ai_cli-0.4.0/tests/test_feedback/test_suggestions.py +116 -0
  86. intake_ai_cli-0.4.0/tests/test_mcp/test_prompts.py +99 -0
  87. intake_ai_cli-0.4.0/tests/test_mcp/test_resources.py +143 -0
  88. intake_ai_cli-0.4.0/tests/test_mcp/test_server.py +91 -0
  89. intake_ai_cli-0.4.0/tests/test_mcp/test_tools.py +338 -0
  90. intake_ai_cli-0.4.0/tests/test_verify/__init__.py +0 -0
  91. intake_ai_cli-0.4.0/tests/test_watch/__init__.py +0 -0
  92. intake_ai_cli-0.4.0/tests/test_watch/test_watcher.py +505 -0
  93. intake_ai_cli-0.2.0/docs/exportacion.md +0 -236
  94. intake_ai_cli-0.2.0/src/intake/config/schema.py +0 -112
  95. intake_ai_cli-0.2.0/tests/test_config/test_schema.py +0 -66
  96. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/.gitignore +0 -0
  97. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/.intake.yaml.example +0 -0
  98. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/LICENSE +0 -0
  99. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/examples/from-jira/README.md +0 -0
  100. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/examples/from-jira/jira-export.json +0 -0
  101. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/examples/from-markdown/README.md +0 -0
  102. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/examples/from-markdown/requirements.md +0 -0
  103. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/examples/from-scratch/README.md +0 -0
  104. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/examples/from-scratch/idea.txt +0 -0
  105. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/examples/multi-source/README.md +0 -0
  106. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/examples/multi-source/api-decisions.json +0 -0
  107. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/examples/multi-source/notes.txt +0 -0
  108. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/examples/multi-source/user-stories.md +0 -0
  109. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/src/intake/__main__.py +0 -0
  110. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/src/intake/analyze/__init__.py +0 -0
  111. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/src/intake/analyze/analyzer.py +0 -0
  112. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/src/intake/analyze/complexity.py +0 -0
  113. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/src/intake/analyze/conflicts.py +0 -0
  114. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/src/intake/analyze/dedup.py +0 -0
  115. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/src/intake/analyze/design.py +0 -0
  116. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/src/intake/analyze/extraction.py +0 -0
  117. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/src/intake/analyze/models.py +0 -0
  118. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/src/intake/analyze/prompts.py +0 -0
  119. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/src/intake/analyze/questions.py +0 -0
  120. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/src/intake/analyze/risks.py +0 -0
  121. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/src/intake/config/__init__.py +0 -0
  122. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/src/intake/config/defaults.py +0 -0
  123. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/src/intake/config/loader.py +0 -0
  124. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/src/intake/config/presets.py +0 -0
  125. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/src/intake/connectors/base.py +0 -0
  126. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/src/intake/diff/__init__.py +0 -0
  127. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/src/intake/diff/differ.py +0 -0
  128. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/src/intake/doctor/__init__.py +0 -0
  129. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/src/intake/export/architect.py +0 -0
  130. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/src/intake/export/base.py +0 -0
  131. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/src/intake/export/generic.py +0 -0
  132. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/src/intake/generate/__init__.py +0 -0
  133. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/src/intake/generate/adaptive.py +0 -0
  134. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/src/intake/generate/lock.py +0 -0
  135. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/src/intake/generate/spec_builder.py +0 -0
  136. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/src/intake/ingest/__init__.py +0 -0
  137. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/src/intake/ingest/base.py +0 -0
  138. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/src/intake/ingest/confluence.py +0 -0
  139. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/src/intake/ingest/docx.py +0 -0
  140. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/src/intake/ingest/github_issues.py +0 -0
  141. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/src/intake/ingest/image.py +0 -0
  142. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/src/intake/ingest/jira.py +0 -0
  143. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/src/intake/ingest/markdown.py +0 -0
  144. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/src/intake/ingest/pdf.py +0 -0
  145. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/src/intake/ingest/plaintext.py +0 -0
  146. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/src/intake/ingest/registry.py +0 -0
  147. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/src/intake/ingest/slack.py +0 -0
  148. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/src/intake/ingest/url.py +0 -0
  149. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/src/intake/ingest/yaml_input.py +0 -0
  150. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/src/intake/llm/__init__.py +0 -0
  151. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/src/intake/llm/adapter.py +0 -0
  152. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/src/intake/plugins/__init__.py +0 -0
  153. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/src/intake/plugins/discovery.py +0 -0
  154. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/src/intake/plugins/hooks.py +0 -0
  155. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/src/intake/plugins/protocols.py +0 -0
  156. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/src/intake/templates/acceptance.yaml.j2 +0 -0
  157. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/src/intake/templates/context.md.j2 +0 -0
  158. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/src/intake/templates/design.md.j2 +0 -0
  159. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/src/intake/templates/requirements.md.j2 +0 -0
  160. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/src/intake/templates/sources.md.j2 +0 -0
  161. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/src/intake/templates/tasks.md.j2 +0 -0
  162. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/src/intake/utils/__init__.py +0 -0
  163. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/src/intake/utils/cost.py +0 -0
  164. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/src/intake/utils/file_detect.py +0 -0
  165. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/src/intake/utils/logging.py +0 -0
  166. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/src/intake/utils/project_detect.py +0 -0
  167. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/src/intake/utils/source_uri.py +0 -0
  168. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/src/intake/utils/task_state.py +0 -0
  169. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/src/intake/verify/__init__.py +0 -0
  170. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/src/intake/verify/engine.py +0 -0
  171. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/src/intake/verify/reporter.py +0 -0
  172. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/tests/__init__.py +0 -0
  173. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/tests/conftest.py +0 -0
  174. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/tests/fixtures/confluence_page.html +0 -0
  175. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/tests/fixtures/github_issues.json +0 -0
  176. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/tests/fixtures/jira_export.json +0 -0
  177. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/tests/fixtures/jira_export_multi.json +0 -0
  178. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/tests/fixtures/sample_webpage.html +0 -0
  179. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/tests/fixtures/simple_spec.md +0 -0
  180. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/tests/fixtures/slack_export.json +0 -0
  181. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/tests/fixtures/slack_thread.txt +0 -0
  182. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/tests/fixtures/structured_reqs.yaml +0 -0
  183. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/tests/fixtures/wireframe.png +0 -0
  184. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/tests/test_analyze/__init__.py +0 -0
  185. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/tests/test_analyze/test_analyzer.py +0 -0
  186. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/tests/test_analyze/test_complexity.py +0 -0
  187. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/tests/test_analyze/test_conflicts.py +0 -0
  188. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/tests/test_analyze/test_dedup.py +0 -0
  189. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/tests/test_analyze/test_design.py +0 -0
  190. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/tests/test_analyze/test_extraction.py +0 -0
  191. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/tests/test_analyze/test_llm_adapter.py +0 -0
  192. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/tests/test_analyze/test_risks.py +0 -0
  193. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/tests/test_config/__init__.py +0 -0
  194. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/tests/test_config/test_loader.py +0 -0
  195. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/tests/test_config/test_presets.py +0 -0
  196. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/tests/test_connectors/__init__.py +0 -0
  197. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/tests/test_connectors/test_base.py +0 -0
  198. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/tests/test_diff/__init__.py +0 -0
  199. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/tests/test_diff/test_differ.py +0 -0
  200. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/tests/test_doctor/__init__.py +0 -0
  201. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/tests/test_export/__init__.py +0 -0
  202. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/tests/test_export/test_architect.py +0 -0
  203. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/tests/test_export/test_generic.py +0 -0
  204. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/tests/test_generate/__init__.py +0 -0
  205. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/tests/test_generate/test_adaptive.py +0 -0
  206. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/tests/test_generate/test_lock.py +0 -0
  207. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/tests/test_generate/test_spec_builder.py +0 -0
  208. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/tests/test_ingest/__init__.py +0 -0
  209. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/tests/test_ingest/test_confluence.py +0 -0
  210. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/tests/test_ingest/test_github_issues.py +0 -0
  211. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/tests/test_ingest/test_hardening.py +0 -0
  212. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/tests/test_ingest/test_image.py +0 -0
  213. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/tests/test_ingest/test_jira.py +0 -0
  214. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/tests/test_ingest/test_markdown.py +0 -0
  215. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/tests/test_ingest/test_plaintext.py +0 -0
  216. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/tests/test_ingest/test_registry.py +0 -0
  217. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/tests/test_ingest/test_slack.py +0 -0
  218. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/tests/test_ingest/test_url.py +0 -0
  219. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/tests/test_ingest/test_yaml_input.py +0 -0
  220. {intake_ai_cli-0.2.0/tests/test_plugins → intake_ai_cli-0.4.0/tests/test_mcp}/__init__.py +0 -0
  221. {intake_ai_cli-0.2.0/tests/test_utils → intake_ai_cli-0.4.0/tests/test_plugins}/__init__.py +0 -0
  222. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/tests/test_plugins/test_discovery.py +0 -0
  223. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/tests/test_plugins/test_hooks.py +0 -0
  224. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/tests/test_plugins/test_protocols.py +0 -0
  225. {intake_ai_cli-0.2.0/tests/test_verify → intake_ai_cli-0.4.0/tests/test_utils}/__init__.py +0 -0
  226. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/tests/test_utils/test_cost.py +0 -0
  227. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/tests/test_utils/test_file_detect.py +0 -0
  228. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/tests/test_utils/test_project_detect.py +0 -0
  229. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/tests/test_utils/test_source_uri.py +0 -0
  230. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/tests/test_utils/test_task_state.py +0 -0
  231. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/tests/test_verify/test_engine.py +0 -0
  232. {intake_ai_cli-0.2.0 → intake_ai_cli-0.4.0}/tests/test_verify/test_reporter.py +0 -0
@@ -5,7 +5,142 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
- ## [0.2.0] - 2026-03-03
8
+ ## [0.4.0] - 2026-03-05
9
+
10
+ ### Added
11
+
12
+ #### MCP (Model Context Protocol) server
13
+
14
+ - **MCP server module** (`mcp/`): Full MCP server implementation with stdio and SSE transports. Requires `pip install intake-ai-cli[mcp]`.
15
+ - **`create_server()`** (`mcp/server.py`): Creates and configures the MCP server with all tools, resources, and prompts registered. `MCP_SERVER_NAME = "intake-spec"`.
16
+ - **`run_stdio()`** and **`run_sse()`** (`mcp/server.py`): Two transport modes — stdio for CLI agent integration, SSE (HTTP) for browser/IDE integration via starlette + uvicorn.
17
+ - **7 MCP tools** (`mcp/tools.py`):
18
+ - `intake_show`: Show spec summary with truncated file content (MAX_SECTION_LENGTH = 3000).
19
+ - `intake_get_context`: Read `context.md` for a spec.
20
+ - `intake_get_tasks`: List tasks with status filtering (all/pending/in_progress/done/blocked).
21
+ - `intake_update_task`: Update task status with optional note.
22
+ - `intake_verify`: Run acceptance checks with optional tag filtering.
23
+ - `intake_feedback`: Run verification + analyze failures.
24
+ - `intake_list_specs`: List available specs (filters directories without `requirements.md`).
25
+ - **MCP resources** (`mcp/resources.py`): Dynamic spec file resources via `intake://specs/{name}/{section}` URIs. Supports 6 sections: requirements, tasks, context, acceptance, design, sources. `FILE_MAP` maps section names to actual filenames.
26
+ - **MCP prompts** (`mcp/prompts.py`): Two structured prompt templates:
27
+ - `implement_next_task`: Reads spec files and generates implementation instructions referencing MCP tools.
28
+ - `verify_and_fix`: Generates a verify → fix → re-verify loop until all checks pass.
29
+ - **MCPError exception** (`mcp/__init__.py`): Error with `reason` and `suggestion` attributes.
30
+ - **Lazy imports**: `mcp`, `starlette`, `uvicorn` imported lazily with clear `ImportError` messages and installation commands.
31
+
32
+ #### Watch mode (file monitoring + auto-verification)
33
+
34
+ - **Watch module** (`watch/`): File watcher with selective re-verification. Requires `pip install intake-ai-cli[watch]`.
35
+ - **SpecWatcher** (`watch/watcher.py`): Monitors project directory using `watchfiles` (Rust-based, efficient). On file change, re-runs verification checks and displays results.
36
+ - `run_once()`: Single verification without watching.
37
+ - `run()`: Continuous watch loop with debouncing.
38
+ - `_filter_ignored()`: Filters files by ignore patterns (fnmatch per path component).
39
+ - `_matches_any()`: Static method for pattern matching against individual path components.
40
+ - `_extract_changed_files()`: Extracts relative paths from watchfiles change sets.
41
+ - `MAX_CHANGED_FILES_DISPLAY = 5`: Limits terminal output.
42
+ - **WatchError exception** (`watch/__init__.py`): Error with `reason` and `suggestion` attributes.
43
+ - **Debouncing**: Configurable via `WatchConfig.debounce_seconds`, passed to watchfiles native debouncing.
44
+
45
+ #### Configuration
46
+
47
+ - **MCPConfig** (`config/schema.py`): `specs_dir`, `project_dir`, `transport` (stdio/sse), `sse_port`.
48
+ - **WatchConfig** (`config/schema.py`): `debounce_seconds` (default: 2.0), `ignore_patterns` (default: `["*.pyc", "__pycache__", ".git", "node_modules", ".intake"]`).
49
+ - Both added to `IntakeConfig` as `mcp` and `watch` fields.
50
+
51
+ #### CLI commands
52
+
53
+ - **`intake mcp serve`**: Start the MCP server. Options: `--transport` (stdio/sse), `--port`, `--specs-dir`, `--project-dir`.
54
+ - **`intake watch`**: Watch project files and re-run verification. Options: `--project-dir`, `--tags`, `--debounce`, `--verbose`.
55
+
56
+ #### Optional dependencies
57
+
58
+ - `mcp = ["mcp[cli]>=1.0"]`: MCP server support.
59
+ - `watch = ["watchfiles>=1.0"]`: Watch mode support.
60
+ - `all = [connectors + watch + mcp]`: Install everything.
61
+
62
+ #### Test suite
63
+
64
+ - **772 tests** (up from 673), **0 failures**, **10 skipped** (MCP prompts tests when mcp package not installed). 99 new tests added.
65
+ - 5 new test files: `test_mcp/test_tools.py` (31), `test_mcp/test_resources.py` (17), `test_mcp/test_prompts.py` (10), `test_mcp/test_server.py` (10), `test_watch/test_watcher.py` (27).
66
+ - Config tests: 2 new tests for MCPConfig and WatchConfig nested overrides.
67
+ - CLI tests: 4 new tests for MCP and Watch help output.
68
+
69
+ ### Fixed
70
+
71
+ - **`_filter_ignored` path matching** (`watch/watcher.py`): Fixed fnmatch to check individual path components (e.g., `.git` now correctly matches `.git/objects/abc`). Added `_matches_any()` static method.
72
+ - **Silent exception in `_handle_get_tasks`** (`mcp/tools.py`): Added `logger.debug("task_state_manager_fallback", ...)` to bare `except Exception` block.
73
+ - **Missing `run_sse` export** (`mcp/__init__.py`): Added `run_sse` to `__all__` and convenience re-export function.
74
+ - **`__all__` sort order** (`mcp/__init__.py`): Fixed RUF022 by sorting alphabetically.
75
+ - **ruff TC003 in tests**: Added `per-file-ignores` rule for `tests/**/*.py` to allow stdlib imports at runtime in test fixtures.
76
+
77
+ ## [0.3.0] - 2026-03-04
78
+
79
+ ### Added
80
+
81
+ #### 3 API connectors (live data fetching)
82
+
83
+ - **Jira connector** (`connectors/jira_api.py`): Fetches issues from Jira via REST API. Supports single issue (`jira://PROJ-123`), multiple issues (`jira://PROJ-1,PROJ-2`), JQL queries (`jira://PROJ?jql=sprint=42`), and sprint-based fetching (`jira://PROJ/sprint/42`). Lazy import of `atlassian-python-api`. Saves as JSON temp files compatible with `JiraParser`.
84
+ - **Confluence connector** (`connectors/confluence_api.py`): Fetches pages from Confluence Cloud/Server. Supports page by ID (`confluence://page/123456`), by space and title (`confluence://SPACE/Page-Title`), and CQL search (`confluence://search?cql=...`). Saves as HTML temp files compatible with `ConfluenceParser`.
85
+ - **GitHub connector** (`connectors/github_api.py`): Fetches issues from GitHub repos via PyGithub. Supports single issue (`github://org/repo/issues/42`), multiple issues, and filtered queries (`github://org/repo/issues?labels=bug&state=open`). Max 50 issues, 10 comments per issue.
86
+ - **Doctor connector checks** (`doctor/checks.py`): `_check_connectors()` validates connector credentials when connectors are configured.
87
+ - **3 connector entry points** in `pyproject.toml`: `jira`, `confluence`, `github` under `[project.entry-points."intake.connectors"]`.
88
+
89
+ #### 4 new exporters (6 total)
90
+
91
+ - **Claude Code exporter** (`export/claude_code.py`): Generates `CLAUDE.md` (smart append/replace), `.intake/tasks/TASK-NNN.md`, `.intake/verify.sh`, `.intake/spec-summary.md`, and `.intake/spec/` copy.
92
+ - **Cursor exporter** (`export/cursor.py`): Generates `.cursor/rules/intake-spec.mdc` with YAML frontmatter.
93
+ - **Kiro exporter** (`export/kiro.py`): Generates `requirements.md`, `design.md`, `tasks.md` in Kiro's native format.
94
+ - **Copilot exporter** (`export/copilot.py`): Generates `.github/copilot-instructions.md`.
95
+ - All 4 exporters implement the **V2 ExporterPlugin protocol**: `meta`, `supported_agents`, `export() → ExportResult`.
96
+ - **Shared export helpers** (`export/_helpers.py`): `read_spec_file()`, `parse_tasks()`, `load_acceptance_checks()`, `summarize_content()`, `count_requirements()`.
97
+ - **9 new Jinja2 templates**: `claude_md.j2`, `claude_task.md.j2`, `verify_sh.j2`, `cursor_rules.mdc.j2`, `kiro_requirements.md.j2`, `kiro_design.md.j2`, `kiro_tasks.md.j2`, `copilot_instructions.md.j2`, `feedback.md.j2`.
98
+
99
+ #### Feedback loop (analyze verification failures)
100
+
101
+ - **Feedback analyzer** (`feedback/analyzer.py`): LLM-based failure analysis with root cause identification, severity classification, and spec amendments. Dataclasses: `SpecAmendment`, `FailureAnalysis`, `FeedbackResult`.
102
+ - **Feedback prompts** (`feedback/prompts.py`): Analysis prompt with `{language}` placeholder and structured JSON output schema.
103
+ - **Suggestion formatter** (`feedback/suggestions.py`): Terminal output (Rich) + agent-specific formatting (generic, claude-code, cursor).
104
+ - **Spec updater** (`feedback/spec_updater.py`): Preview and apply spec amendments with add/modify/remove actions.
105
+ - **`intake feedback` CLI command**: Options `--verify-report`, `--project-dir`, `--apply`, `--agent-format`, `--verbose`.
106
+
107
+ #### Configuration updates
108
+
109
+ - **`FeedbackConfig`** model: `auto_amend_spec`, `max_suggestions`, `include_code_snippets`.
110
+ - **Expanded connector configs**: `JiraConfig` (auth_type, fields, max_comments), `ConfluenceConfig` (include_child_pages, max_depth), `GithubConfig` (default_repo).
111
+ - **`ExportConfig`** expanded: `claude_code_task_dir`, `cursor_rules_dir`.
112
+
113
+ #### Enterprise documentation
114
+
115
+ - **`docs/seguridad.md`** (NEW): Threat model, data flow, secrets management, redaction patterns, offline/air-gapped mode, audit trail, compliance (SOC2/HIPAA/ISO 27001/GDPR).
116
+ - **`docs/despliegue.md`** (NEW): Docker multi-stage, docker-compose, pre-commit hooks, deployment patterns, env vars.
117
+ - **`docs/integracion-cicd.md`** (NEW): GitHub Actions, GitLab CI, Jenkins, Azure DevOps, JUnit/JSON reports, spec drift, notifications.
118
+ - **`docs/flujos-trabajo.md`** (NEW): Solo developer, small team, enterprise, monorepo, AI agent, regulated industries.
119
+ - **`docs/conectores.md`** (NEW): Jira, Confluence, GitHub API connectors documentation.
120
+ - **`docs/feedback.md`** (NEW): Feedback loop usage, severity levels, spec amendments, agent formats.
121
+ - **`SECURITY.md`** (NEW): English security policy at project root (GitHub Security tab).
122
+ - 10 existing documentation files updated with Phase 2 content.
123
+
124
+ #### Test suite
125
+
126
+ - **673 tests** (up from 492), **0 failures**. 181 new tests added.
127
+ - 14 new test files covering connectors, exporters, feedback, and protocol conformance.
128
+ - Protocol conformance tests: 20 parametrized tests for V2 exporters + 3 for connectors.
129
+
130
+ ### Fixed
131
+
132
+ #### QA Audit (14 mypy errors, 7 ruff errors, 25 format issues)
133
+
134
+ - **ExporterRegistry type safety** (`export/registry.py`): Introduced `AnyExporter = Exporter | Any` union type for V1/V2 dual protocol support. Changed `_exporters`, `register()`, and `get()` types to accept both V1 and V2 exporters without `type: ignore`.
135
+ - **Connector `Returning Any`** (`connectors/jira_api.py`, `connectors/confluence_api.py`): Wrapped `data.get()` calls with `list()` and explicit `str` annotations to satisfy mypy --strict.
136
+ - **Unused `type: ignore` comments**: Removed 3 stale `# type: ignore[import-untyped]` from connectors after `atlassian-python-api` and `PyGithub` gained type stubs.
137
+ - **CLI report type** (`cli.py`): Changed `report_data: dict[str, object]` to `dict[str, Any]` for correct iterable access.
138
+ - **Connector registration guard** (`cli.py`): Added `isinstance(connector_obj, ConnectorPlugin)` check for type-safe connector registration.
139
+ - **Unused imports** (`tests/`): Removed `PropertyMock`, `pytest`, `json`, `yaml` unused imports in test files.
140
+ - **TYPE_CHECKING import** (`tests/test_feedback/test_analyzer.py`): Moved `Path` import to `TYPE_CHECKING` block (TC003).
141
+ - **25 files reformatted** with `ruff format` for consistent code style.
142
+
143
+ ## [0.2.0] - 2026-03-04
9
144
 
10
145
  ### Added
11
146
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: intake-ai-cli
3
- Version: 0.2.0
3
+ Version: 0.4.0
4
4
  Summary: From requirements in any format to verified implementation
5
5
  Project-URL: Homepage, https://diego303.github.io/intake-docs/
6
6
  Project-URL: Repository, https://github.com/Diego303/intake-cli
@@ -28,6 +28,11 @@ Requires-Dist: python-docx>=1.1
28
28
  Requires-Dist: pyyaml>=6.0
29
29
  Requires-Dist: rich>=13.0
30
30
  Requires-Dist: structlog>=24.0
31
+ Provides-Extra: all
32
+ Requires-Dist: atlassian-python-api>=3.40; extra == 'all'
33
+ Requires-Dist: mcp>=1.0; extra == 'all'
34
+ Requires-Dist: pygithub>=2.0; extra == 'all'
35
+ Requires-Dist: watchfiles>=0.21; extra == 'all'
31
36
  Provides-Extra: connectors
32
37
  Requires-Dist: atlassian-python-api>=3.40; extra == 'connectors'
33
38
  Requires-Dist: pygithub>=2.0; extra == 'connectors'
@@ -75,7 +80,7 @@ intake processes requirements through a 5-phase pipeline:
75
80
  2. **Analyze** — LLM extracts structured requirements, detects conflicts, deduplicates
76
81
  3. **Generate** — Produce 6 spec files + `spec.lock.yaml`
77
82
  4. **Verify** — Run executable acceptance checks against the implementation
78
- 5. **Export** — Generate agent-ready output (architect, Claude Code, Cursor, generic)
83
+ 5. **Export** — Generate agent-ready output (Claude Code, Cursor, Kiro, Copilot, architect, generic)
79
84
 
80
85
  ### The 6 Spec Files
81
86
 
@@ -94,6 +99,12 @@ intake processes requirements through a 5-phase pipeline:
94
99
 
95
100
  ```bash
96
101
  pip install intake-ai-cli
102
+
103
+ # With optional features
104
+ pip install intake-ai-cli[mcp] # MCP server support
105
+ pip install intake-ai-cli[watch] # Watch mode support
106
+ pip install intake-ai-cli[connectors] # Jira, Confluence, GitHub API connectors
107
+ pip install intake-ai-cli[all] # Everything
97
108
  ```
98
109
 
99
110
  Requires Python 3.12+. The CLI command is `intake`.
@@ -132,6 +143,29 @@ intake init "Fix login bug" -s notes.txt --mode quick
132
143
  # Fetch requirements from a URL
133
144
  intake init "API review" -s https://wiki.company.com/rfc/auth
134
145
 
146
+ # Fetch from live APIs (requires credentials)
147
+ intake init "Sprint planning" -s jira://PROJ/sprint/42
148
+ intake init "Wiki review" -s confluence://SPACE/Page-Title
149
+ intake init "Bug triage" -s github://org/repo/issues?labels=bug
150
+
151
+ # Start MCP server for AI agent integration
152
+ intake mcp serve --transport stdio
153
+ intake mcp serve --transport sse --port 8080
154
+
155
+ # Watch project files and auto-verify on changes
156
+ intake watch ./specs/auth-oauth2 --project-dir . --verbose
157
+ intake watch ./specs/auth-oauth2 --tags test,lint --debounce 3
158
+
159
+ # Export for specific agents
160
+ intake init "Payments" -s reqs.pdf --format claude-code
161
+ intake export ./specs/auth -f cursor -o .
162
+ intake export ./specs/auth -f kiro -o .
163
+ intake export ./specs/auth -f copilot -o .
164
+
165
+ # Analyze verification failures and get fix suggestions
166
+ intake feedback ./specs/auth-oauth2
167
+ intake feedback ./specs/auth -r report.json --apply --agent-format claude-code
168
+
135
169
  # List discovered plugins
136
170
  intake plugins list
137
171
 
@@ -157,9 +191,44 @@ intake task update ./specs/auth-oauth2 1 done --note "Implemented and tested"
157
191
  | URLs | `http://`, `https://` | Fetches page, converts HTML → Markdown |
158
192
  | Slack export | `.json` (auto-detected) | Messages, threads, decisions, action items |
159
193
  | GitHub Issues | `.json` (auto-detected) | Issues, labels, comments, cross-references |
194
+ | **Jira API** | `jira://PROJ-123` | Live issue fetching via REST API |
195
+ | **Confluence API** | `confluence://SPACE/Title` | Live page fetching via REST API |
196
+ | **GitHub API** | `github://org/repo/issues/42` | Live issue fetching via PyGithub |
160
197
 
161
198
  Format is auto-detected by file extension and content inspection. Jira, Slack, and GitHub Issues JSON exports are distinguished automatically from generic JSON files. Confluence HTML is distinguished from generic HTML.
162
199
 
200
+ ### Live API Connectors
201
+
202
+ Connect directly to project management tools (requires credentials):
203
+
204
+ ```bash
205
+ # Jira: single issue, multiple, JQL, sprint
206
+ intake init "Sprint" -s jira://PROJ-123
207
+ intake init "Sprint" -s "jira://PROJ?jql=sprint=42"
208
+
209
+ # Confluence: page by ID, by space/title, CQL search
210
+ intake init "Docs" -s confluence://page/123456
211
+ intake init "Docs" -s confluence://SPACE/Page-Title
212
+
213
+ # GitHub: single/multiple issues, filtered queries
214
+ intake init "Bugs" -s github://org/repo/issues/42
215
+ intake init "Bugs" -s "github://org/repo/issues?labels=bug&state=open"
216
+ ```
217
+
218
+ Configure credentials in `.intake.yaml`:
219
+
220
+ ```yaml
221
+ connectors:
222
+ jira:
223
+ url: https://your-org.atlassian.net
224
+ # Set JIRA_API_TOKEN and JIRA_EMAIL env vars
225
+ confluence:
226
+ url: https://your-org.atlassian.net/wiki
227
+ # Set CONFLUENCE_API_TOKEN and CONFLUENCE_EMAIL env vars
228
+ github:
229
+ # Set GITHUB_TOKEN env var
230
+ ```
231
+
163
232
  ---
164
233
 
165
234
  ## Commands
@@ -175,10 +244,14 @@ Format is auto-detected by file extension and content inspection. Jira, Slack, a
175
244
  | `intake diff` | Compare two spec versions | **Available** |
176
245
  | `intake doctor` | Check environment and configuration health | **Available** |
177
246
  | `intake doctor --fix` | Auto-fix environment issues (install deps, create config) | **Available** |
178
- | `intake plugins list` | List all discovered plugins (parsers, exporters) | **Available** |
247
+ | `intake feedback` | Analyze verification failures and suggest fixes | **Available** |
248
+ | `intake feedback --apply` | Auto-apply suggested spec amendments | **Available** |
249
+ | `intake plugins list` | List all discovered plugins (parsers, exporters, connectors) | **Available** |
179
250
  | `intake plugins check` | Validate plugin compatibility | **Available** |
180
251
  | `intake task list` | List tasks from a spec with current status | **Available** |
181
252
  | `intake task update` | Update a task's status (pending/in_progress/done/blocked) | **Available** |
253
+ | `intake mcp serve` | Start MCP server (stdio or SSE transport) | **Available** |
254
+ | `intake watch` | Watch project files and re-run verification on changes | **Available** |
182
255
 
183
256
  ---
184
257
 
@@ -205,7 +278,34 @@ spec:
205
278
  auto_mode: true # auto-detect quick/standard/enterprise
206
279
 
207
280
  export:
208
- default_format: generic # architect | claude-code | cursor | kiro | generic
281
+ default_format: generic # architect | claude-code | cursor | kiro | copilot | generic
282
+
283
+ feedback:
284
+ auto_amend_spec: false # Auto-apply spec amendments from feedback
285
+ max_suggestions: 10 # Max suggestions per analysis
286
+ include_code_snippets: true # Include code examples in suggestions
287
+
288
+ connectors:
289
+ jira:
290
+ url: https://your-org.atlassian.net
291
+ confluence:
292
+ url: https://your-org.atlassian.net/wiki
293
+ github: {} # Uses GITHUB_TOKEN env var
294
+
295
+ mcp:
296
+ specs_dir: ./specs # Where specs live
297
+ project_dir: . # Project root for verification
298
+ transport: stdio # stdio | sse
299
+ sse_port: 8080 # Port for SSE transport
300
+
301
+ watch:
302
+ debounce_seconds: 2.0 # Wait before re-running verification
303
+ ignore_patterns: # Files/dirs to ignore
304
+ - "*.pyc"
305
+ - "__pycache__"
306
+ - ".git"
307
+ - "node_modules"
308
+ - ".intake"
209
309
  ```
210
310
 
211
311
  ### Presets
@@ -245,7 +345,7 @@ See the [`examples/`](examples/) directory for ready-to-run scenarios:
245
345
  src/intake/
246
346
  ├── cli.py # Click CLI — thin adapter, no logic
247
347
  ├── config/ # Pydantic v2 models, presets, layered loader
248
- │ ├── schema.py # 7 config models (LLM, Project, Spec, Verification, Export, Security, Connectors)
348
+ │ ├── schema.py # 11 config models (LLM, Project, Spec, Verification, Export, Security, Connectors, Feedback, MCP, Watch)
249
349
  │ ├── presets.py # minimal / standard / enterprise presets
250
350
  │ ├── loader.py # Layered merge: defaults → preset → YAML → CLI
251
351
  │ └── defaults.py # Centralized constants
@@ -253,8 +353,11 @@ src/intake/
253
353
  │ ├── protocols.py # V2 protocols: ParserPlugin, ExporterPlugin, ConnectorPlugin
254
354
  │ ├── discovery.py # Entry point scanning via importlib.metadata
255
355
  │ └── hooks.py # Pipeline hook system (HookManager)
256
- ├── connectors/ # Connector infrastructure (Phase 2 prep)
257
- └── base.py # ConnectorRegistry, ConnectorError
356
+ ├── connectors/ # Live API connectors
357
+ ├── base.py # ConnectorRegistry, ConnectorError
358
+ │ ├── jira_api.py # Jira REST API (single/multi/JQL/sprint)
359
+ │ ├── confluence_api.py # Confluence REST API (page/space/CQL)
360
+ │ └── github_api.py # GitHub API via PyGithub (issues/filters)
258
361
  ├── ingest/ # Phase 1 — 11 parsers, registry, auto-detection
259
362
  │ ├── base.py # ParsedContent dataclass + Parser Protocol
260
363
  │ ├── registry.py # Auto-detection + plugin discovery + parser dispatch
@@ -287,24 +390,50 @@ src/intake/
287
390
  ├── verify/ # Phase 4 — Acceptance check engine
288
391
  │ ├── engine.py # 4 check types: command, files_exist, pattern_*
289
392
  │ └── reporter.py # Terminal (Rich), JSON, JUnit XML reporters
290
- ├── export/ # Phase 5 — Agent-ready output
393
+ ├── export/ # Phase 5 — Agent-ready output (6 exporters)
291
394
  │ ├── base.py # Exporter Protocol
292
395
  │ ├── registry.py # Plugin discovery + format-based dispatch
396
+ │ ├── _helpers.py # Shared utilities (parse_tasks, load_checks, etc.)
397
+ │ ├── claude_code.py # CLAUDE.md + tasks + verify.sh
398
+ │ ├── cursor.py # .cursor/rules/intake-spec.mdc
399
+ │ ├── kiro.py # Kiro-native requirements/design/tasks
400
+ │ ├── copilot.py # .github/copilot-instructions.md
293
401
  │ ├── architect.py # pipeline.yaml generation
294
402
  │ └── generic.py # SPEC.md + verify.sh generation
295
403
  ├── diff/ # Spec comparison
296
404
  │ └── differ.py # Compare two specs by requirement/task IDs
405
+ ├── mcp/ # MCP server (Model Context Protocol)
406
+ │ ├── __init__.py # MCPError + re-exports
407
+ │ ├── server.py # Server creation + stdio/SSE transports
408
+ │ ├── tools.py # 7 tools: show, context, tasks, update, verify, feedback, list
409
+ │ ├── resources.py # Dynamic spec file resources (intake://specs/{name}/{section})
410
+ │ └── prompts.py # Prompt templates: implement_next_task, verify_and_fix
411
+ ├── watch/ # Watch mode (file monitoring + auto-verification)
412
+ │ ├── __init__.py # WatchError exception
413
+ │ └── watcher.py # SpecWatcher with watchfiles integration
414
+ ├── feedback/ # Feedback loop (analyze failures, suggest fixes)
415
+ │ ├── analyzer.py # LLM-based failure analysis
416
+ │ ├── prompts.py # Feedback analysis prompt
417
+ │ ├── suggestions.py # Multi-format suggestion formatter
418
+ │ └── spec_updater.py # Preview + apply spec amendments
297
419
  ├── doctor/ # Environment health checks
298
- │ └── checks.py # Python, API keys, deps, config validation
420
+ │ └── checks.py # Python, API keys, deps, connectors, config validation
299
421
  ├── llm/ # LiteLLM wrapper (used by analyze/ only)
300
422
  │ └── adapter.py # Async completion, retry, cost tracking, budget
301
- ├── templates/ # Jinja2 templates for spec generation
423
+ ├── templates/ # Jinja2 templates (15 total)
302
424
  │ ├── requirements.md.j2 # FR, NFR, conflicts, open questions
303
425
  │ ├── design.md.j2 # Components, files, tech decisions
304
426
  │ ├── tasks.md.j2 # Task summary + status + detailed sections
305
427
  │ ├── acceptance.yaml.j2 # Executable acceptance checks
306
428
  │ ├── context.md.j2 # Project context for agents
307
- └── sources.md.j2 # Source traceability mapping
429
+ ├── sources.md.j2 # Source traceability mapping
430
+ │ ├── claude_md.j2 # Claude Code CLAUDE.md spec section
431
+ │ ├── claude_task.md.j2 # Claude Code per-task file
432
+ │ ├── verify_sh.j2 # Claude Code verification script
433
+ │ ├── cursor_rules.mdc.j2 # Cursor rules file
434
+ │ ├── kiro_*.md.j2 # Kiro requirements/design/tasks (3 files)
435
+ │ ├── copilot_instructions.md.j2 # Copilot instructions
436
+ │ └── feedback.md.j2 # Feedback results template
308
437
  └── utils/ # Shared utilities
309
438
  ├── file_detect.py # Extension-based format detection
310
439
  ├── project_detect.py # Auto-detect tech stack from project files
@@ -317,7 +446,7 @@ src/intake/
317
446
  **Key design principles:**
318
447
 
319
448
  - **Protocol over ABC** — All extension points use `typing.Protocol`
320
- - **Plugin-first architecture** — Parsers and exporters discovered via entry points, manual fallback
449
+ - **Plugin-first architecture** — Parsers, exporters, and connectors discovered via entry points, manual fallback
321
450
  - **Dataclasses for pipeline data, Pydantic for config** — Never mixed
322
451
  - **Async only in analyze/** — Everything else is synchronous
323
452
  - **Offline mode** — Parsing, verification, export, diff, doctor all work without LLM
@@ -340,7 +469,84 @@ architect pipeline specs/auth-system/pipeline.yaml
340
469
 
341
470
  ```bash
342
471
  intake init "Payments" -s reqs.pdf --format claude-code
343
- # Generates CLAUDE.md + tasks + verify.sh
472
+ # Generates CLAUDE.md + .intake/tasks/ + .intake/verify.sh + .intake/spec-summary.md
473
+ ```
474
+
475
+ ### With Cursor
476
+
477
+ ```bash
478
+ intake export ./specs/auth -f cursor -o .
479
+ # Generates .cursor/rules/intake-spec.mdc (auto-loaded by Cursor)
480
+ ```
481
+
482
+ ### With Kiro
483
+
484
+ ```bash
485
+ intake export ./specs/auth -f kiro -o .
486
+ # Generates requirements.md, design.md, tasks.md in Kiro native format
487
+ ```
488
+
489
+ ### With GitHub Copilot
490
+
491
+ ```bash
492
+ intake export ./specs/auth -f copilot -o .
493
+ # Generates .github/copilot-instructions.md (auto-loaded by Copilot)
494
+ ```
495
+
496
+ ### MCP Server (AI Agent Integration)
497
+
498
+ intake exposes specs via the [Model Context Protocol](https://modelcontextprotocol.io/), allowing AI agents to consume specs in real time:
499
+
500
+ ```bash
501
+ # Start MCP server with stdio transport (for CLI agents like Claude Code)
502
+ intake mcp serve --transport stdio
503
+
504
+ # Start MCP server with SSE transport (for IDE integrations)
505
+ intake mcp serve --transport sse --port 8080
506
+ ```
507
+
508
+ **MCP tools available to agents:**
509
+ - `intake_show` — View spec summary
510
+ - `intake_get_context` — Read project context
511
+ - `intake_get_tasks` — List tasks with status filtering
512
+ - `intake_update_task` — Mark tasks as done/in_progress
513
+ - `intake_verify` — Run acceptance checks
514
+ - `intake_feedback` — Analyze verification failures
515
+ - `intake_list_specs` — List available specs
516
+
517
+ **MCP resources:** Direct access to spec files via `intake://specs/{name}/{section}` URIs.
518
+
519
+ **MCP prompts:** `implement_next_task` and `verify_and_fix` provide structured starting points for agents.
520
+
521
+ Install MCP support: `pip install intake-ai-cli[mcp]`
522
+
523
+ ### Watch Mode
524
+
525
+ Automatically re-run verification checks when project files change:
526
+
527
+ ```bash
528
+ # Watch with default settings
529
+ intake watch ./specs/auth-oauth2 --project-dir .
530
+
531
+ # Watch with tags filter and custom debounce
532
+ intake watch ./specs/auth-oauth2 --tags test,lint --debounce 3 --verbose
533
+ ```
534
+
535
+ Uses `watchfiles` (Rust-based) for efficient file monitoring with configurable debounce and ignore patterns.
536
+
537
+ Install watch support: `pip install intake-ai-cli[watch]`
538
+
539
+ ### Feedback Loop
540
+
541
+ ```bash
542
+ # Analyze why verification checks failed and get fix suggestions
543
+ intake feedback ./specs/auth-oauth2
544
+
545
+ # Use a previous report and auto-apply spec amendments
546
+ intake feedback ./specs/auth -r report.json --apply
547
+
548
+ # Get suggestions formatted for your agent
549
+ intake feedback ./specs/auth --agent-format claude-code
344
550
  ```
345
551
 
346
552
  ### With CI/CD
@@ -374,7 +580,7 @@ ruff format src/ tests/
374
580
  mypy src/ --strict
375
581
  ```
376
582
 
377
- Current test suite: **492 tests**, **86% coverage**, **0 mypy --strict errors**, **0 ruff warnings**.
583
+ Current test suite: **772 tests**, **0 mypy --strict errors**, **0 ruff warnings**.
378
584
 
379
585
  ### Implementation Status
380
586
 
@@ -384,12 +590,15 @@ Current test suite: **492 tests**, **86% coverage**, **0 mypy --strict errors**,
384
590
  | Phase 2 — Analyze | `analyze/` (orchestrator + 7 sub-modules + complexity) | Implemented |
385
591
  | Phase 3 — Generate | `generate/` (spec builder + adaptive builder + 6 templates + lock) | Implemented |
386
592
  | Phase 4 — Verify | `verify/` (engine + 3 reporters) | Implemented |
387
- | Phase 5 — Export | `export/` (architect + generic + plugin registry) | Implemented |
593
+ | Phase 5 — Export | `export/` (6 exporters: claude-code, cursor, kiro, copilot, architect, generic) | Implemented |
388
594
  | Plugins | `plugins/` (protocols + discovery + hooks) | Implemented |
389
- | Connectors | `connectors/` (registry infrastructure, no concrete connectors) | Implemented |
595
+ | Connectors | `connectors/` (Jira, Confluence, GitHub API connectors) | Implemented |
596
+ | Feedback | `feedback/` (analyzer + suggestions + spec updater) | Implemented |
597
+ | MCP Server | `mcp/` (server + 7 tools + resources + prompts) | Implemented |
598
+ | Watch Mode | `watch/` (SpecWatcher with watchfiles) | Implemented |
390
599
  | Standalone | `doctor/`, `config/`, `llm/`, `utils/` | Implemented |
391
600
  | Standalone | `diff/` (spec differ) | Implemented |
392
- | CLI | 13 commands/subcommands wired end-to-end | Implemented |
601
+ | CLI | 19 commands/subcommands wired end-to-end | Implemented |
393
602
 
394
603
  ---
395
604