intake-ai-cli 0.2.0__tar.gz → 0.3.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 (214) hide show
  1. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/CHANGELOG.md +67 -1
  2. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/PKG-INFO +136 -17
  3. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/README.md +135 -16
  4. intake_ai_cli-0.3.0/SECURITY.md +379 -0
  5. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/SEGUIMIENTO-V0.md +251 -1
  6. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/docs/README.md +41 -7
  7. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/docs/arquitectura.md +53 -15
  8. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/docs/buenas-practicas.md +8 -0
  9. intake_ai_cli-0.3.0/docs/conectores.md +278 -0
  10. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/docs/configuracion.md +99 -23
  11. intake_ai_cli-0.3.0/docs/despliegue.md +306 -0
  12. intake_ai_cli-0.3.0/docs/exportacion.md +462 -0
  13. intake_ai_cli-0.3.0/docs/feedback.md +230 -0
  14. intake_ai_cli-0.3.0/docs/flujos-trabajo.md +445 -0
  15. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/docs/formatos-entrada.md +75 -0
  16. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/docs/github-notes/v0.1.0.md +9 -9
  17. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/docs/github-notes/v0.2.0.md +36 -54
  18. intake_ai_cli-0.3.0/docs/github-notes/v0.3.0.md +442 -0
  19. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/docs/guia-cli.md +82 -7
  20. intake_ai_cli-0.3.0/docs/integracion-cicd.md +537 -0
  21. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/docs/pipeline.md +63 -2
  22. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/docs/plugins.md +19 -7
  23. intake_ai_cli-0.3.0/docs/seguridad.md +366 -0
  24. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/docs/solucion-problemas.md +51 -9
  25. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/pyproject.toml +8 -1
  26. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/src/intake/__init__.py +1 -1
  27. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/src/intake/cli.py +270 -18
  28. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/src/intake/config/schema.py +64 -16
  29. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/src/intake/connectors/__init__.py +6 -0
  30. intake_ai_cli-0.3.0/src/intake/connectors/confluence_api.py +254 -0
  31. intake_ai_cli-0.3.0/src/intake/connectors/github_api.py +271 -0
  32. intake_ai_cli-0.3.0/src/intake/connectors/jira_api.py +237 -0
  33. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/src/intake/doctor/checks.py +115 -0
  34. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/src/intake/export/__init__.py +10 -5
  35. intake_ai_cli-0.3.0/src/intake/export/_helpers.py +152 -0
  36. intake_ai_cli-0.3.0/src/intake/export/claude_code.py +326 -0
  37. intake_ai_cli-0.3.0/src/intake/export/copilot.py +157 -0
  38. intake_ai_cli-0.3.0/src/intake/export/cursor.py +158 -0
  39. intake_ai_cli-0.3.0/src/intake/export/kiro.py +271 -0
  40. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/src/intake/export/registry.py +20 -6
  41. intake_ai_cli-0.3.0/src/intake/feedback/__init__.py +39 -0
  42. intake_ai_cli-0.3.0/src/intake/feedback/analyzer.py +309 -0
  43. intake_ai_cli-0.3.0/src/intake/feedback/prompts.py +60 -0
  44. intake_ai_cli-0.3.0/src/intake/feedback/spec_updater.py +324 -0
  45. intake_ai_cli-0.3.0/src/intake/feedback/suggestions.py +109 -0
  46. intake_ai_cli-0.3.0/src/intake/templates/claude_md.j2 +38 -0
  47. intake_ai_cli-0.3.0/src/intake/templates/claude_task.md.j2 +22 -0
  48. intake_ai_cli-0.3.0/src/intake/templates/copilot_instructions.md.j2 +43 -0
  49. intake_ai_cli-0.3.0/src/intake/templates/cursor_rules.mdc.j2 +47 -0
  50. intake_ai_cli-0.3.0/src/intake/templates/feedback.md.j2 +47 -0
  51. intake_ai_cli-0.3.0/src/intake/templates/kiro_design.md.j2 +9 -0
  52. intake_ai_cli-0.3.0/src/intake/templates/kiro_requirements.md.j2 +19 -0
  53. intake_ai_cli-0.3.0/src/intake/templates/kiro_tasks.md.j2 +22 -0
  54. intake_ai_cli-0.3.0/src/intake/templates/verify_sh.j2 +39 -0
  55. intake_ai_cli-0.3.0/tests/fixtures/confluence_api_response.json +19 -0
  56. intake_ai_cli-0.3.0/tests/fixtures/jira_api_response.json +32 -0
  57. intake_ai_cli-0.3.0/tests/fixtures/verify_report_failed.json +44 -0
  58. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/tests/test_cli.py +138 -1
  59. intake_ai_cli-0.3.0/tests/test_config/test_schema.py +154 -0
  60. intake_ai_cli-0.3.0/tests/test_connectors/test_confluence_api.py +181 -0
  61. intake_ai_cli-0.3.0/tests/test_connectors/test_github_api.py +206 -0
  62. intake_ai_cli-0.3.0/tests/test_connectors/test_jira_api.py +258 -0
  63. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/tests/test_doctor/test_checks.py +105 -0
  64. intake_ai_cli-0.3.0/tests/test_export/test_claude_code.py +259 -0
  65. intake_ai_cli-0.3.0/tests/test_export/test_copilot.py +191 -0
  66. intake_ai_cli-0.3.0/tests/test_export/test_cursor.py +145 -0
  67. intake_ai_cli-0.3.0/tests/test_export/test_helpers.py +125 -0
  68. intake_ai_cli-0.3.0/tests/test_export/test_kiro.py +207 -0
  69. intake_ai_cli-0.3.0/tests/test_export/test_protocol_conformance.py +138 -0
  70. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/tests/test_export/test_registry.py +8 -1
  71. intake_ai_cli-0.3.0/tests/test_feedback/__init__.py +1 -0
  72. intake_ai_cli-0.3.0/tests/test_feedback/test_analyzer.py +275 -0
  73. intake_ai_cli-0.3.0/tests/test_feedback/test_spec_updater.py +188 -0
  74. intake_ai_cli-0.3.0/tests/test_feedback/test_suggestions.py +116 -0
  75. intake_ai_cli-0.2.0/docs/exportacion.md +0 -236
  76. intake_ai_cli-0.2.0/tests/test_config/test_schema.py +0 -66
  77. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/.gitignore +0 -0
  78. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/.intake.yaml.example +0 -0
  79. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/LICENSE +0 -0
  80. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/docs/verificacion.md +0 -0
  81. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/examples/from-jira/README.md +0 -0
  82. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/examples/from-jira/jira-export.json +0 -0
  83. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/examples/from-markdown/README.md +0 -0
  84. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/examples/from-markdown/requirements.md +0 -0
  85. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/examples/from-scratch/README.md +0 -0
  86. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/examples/from-scratch/idea.txt +0 -0
  87. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/examples/multi-source/README.md +0 -0
  88. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/examples/multi-source/api-decisions.json +0 -0
  89. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/examples/multi-source/notes.txt +0 -0
  90. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/examples/multi-source/user-stories.md +0 -0
  91. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/src/intake/__main__.py +0 -0
  92. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/src/intake/analyze/__init__.py +0 -0
  93. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/src/intake/analyze/analyzer.py +0 -0
  94. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/src/intake/analyze/complexity.py +0 -0
  95. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/src/intake/analyze/conflicts.py +0 -0
  96. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/src/intake/analyze/dedup.py +0 -0
  97. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/src/intake/analyze/design.py +0 -0
  98. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/src/intake/analyze/extraction.py +0 -0
  99. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/src/intake/analyze/models.py +0 -0
  100. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/src/intake/analyze/prompts.py +0 -0
  101. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/src/intake/analyze/questions.py +0 -0
  102. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/src/intake/analyze/risks.py +0 -0
  103. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/src/intake/config/__init__.py +0 -0
  104. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/src/intake/config/defaults.py +0 -0
  105. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/src/intake/config/loader.py +0 -0
  106. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/src/intake/config/presets.py +0 -0
  107. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/src/intake/connectors/base.py +0 -0
  108. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/src/intake/diff/__init__.py +0 -0
  109. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/src/intake/diff/differ.py +0 -0
  110. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/src/intake/doctor/__init__.py +0 -0
  111. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/src/intake/export/architect.py +0 -0
  112. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/src/intake/export/base.py +0 -0
  113. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/src/intake/export/generic.py +0 -0
  114. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/src/intake/generate/__init__.py +0 -0
  115. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/src/intake/generate/adaptive.py +0 -0
  116. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/src/intake/generate/lock.py +0 -0
  117. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/src/intake/generate/spec_builder.py +0 -0
  118. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/src/intake/ingest/__init__.py +0 -0
  119. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/src/intake/ingest/base.py +0 -0
  120. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/src/intake/ingest/confluence.py +0 -0
  121. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/src/intake/ingest/docx.py +0 -0
  122. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/src/intake/ingest/github_issues.py +0 -0
  123. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/src/intake/ingest/image.py +0 -0
  124. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/src/intake/ingest/jira.py +0 -0
  125. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/src/intake/ingest/markdown.py +0 -0
  126. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/src/intake/ingest/pdf.py +0 -0
  127. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/src/intake/ingest/plaintext.py +0 -0
  128. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/src/intake/ingest/registry.py +0 -0
  129. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/src/intake/ingest/slack.py +0 -0
  130. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/src/intake/ingest/url.py +0 -0
  131. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/src/intake/ingest/yaml_input.py +0 -0
  132. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/src/intake/llm/__init__.py +0 -0
  133. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/src/intake/llm/adapter.py +0 -0
  134. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/src/intake/plugins/__init__.py +0 -0
  135. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/src/intake/plugins/discovery.py +0 -0
  136. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/src/intake/plugins/hooks.py +0 -0
  137. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/src/intake/plugins/protocols.py +0 -0
  138. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/src/intake/templates/acceptance.yaml.j2 +0 -0
  139. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/src/intake/templates/context.md.j2 +0 -0
  140. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/src/intake/templates/design.md.j2 +0 -0
  141. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/src/intake/templates/requirements.md.j2 +0 -0
  142. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/src/intake/templates/sources.md.j2 +0 -0
  143. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/src/intake/templates/tasks.md.j2 +0 -0
  144. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/src/intake/utils/__init__.py +0 -0
  145. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/src/intake/utils/cost.py +0 -0
  146. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/src/intake/utils/file_detect.py +0 -0
  147. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/src/intake/utils/logging.py +0 -0
  148. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/src/intake/utils/project_detect.py +0 -0
  149. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/src/intake/utils/source_uri.py +0 -0
  150. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/src/intake/utils/task_state.py +0 -0
  151. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/src/intake/verify/__init__.py +0 -0
  152. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/src/intake/verify/engine.py +0 -0
  153. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/src/intake/verify/reporter.py +0 -0
  154. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/tests/__init__.py +0 -0
  155. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/tests/conftest.py +0 -0
  156. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/tests/fixtures/confluence_page.html +0 -0
  157. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/tests/fixtures/github_issues.json +0 -0
  158. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/tests/fixtures/jira_export.json +0 -0
  159. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/tests/fixtures/jira_export_multi.json +0 -0
  160. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/tests/fixtures/sample_webpage.html +0 -0
  161. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/tests/fixtures/simple_spec.md +0 -0
  162. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/tests/fixtures/slack_export.json +0 -0
  163. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/tests/fixtures/slack_thread.txt +0 -0
  164. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/tests/fixtures/structured_reqs.yaml +0 -0
  165. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/tests/fixtures/wireframe.png +0 -0
  166. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/tests/test_analyze/__init__.py +0 -0
  167. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/tests/test_analyze/test_analyzer.py +0 -0
  168. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/tests/test_analyze/test_complexity.py +0 -0
  169. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/tests/test_analyze/test_conflicts.py +0 -0
  170. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/tests/test_analyze/test_dedup.py +0 -0
  171. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/tests/test_analyze/test_design.py +0 -0
  172. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/tests/test_analyze/test_extraction.py +0 -0
  173. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/tests/test_analyze/test_llm_adapter.py +0 -0
  174. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/tests/test_analyze/test_risks.py +0 -0
  175. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/tests/test_config/__init__.py +0 -0
  176. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/tests/test_config/test_loader.py +0 -0
  177. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/tests/test_config/test_presets.py +0 -0
  178. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/tests/test_connectors/__init__.py +0 -0
  179. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/tests/test_connectors/test_base.py +0 -0
  180. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/tests/test_diff/__init__.py +0 -0
  181. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/tests/test_diff/test_differ.py +0 -0
  182. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/tests/test_doctor/__init__.py +0 -0
  183. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/tests/test_export/__init__.py +0 -0
  184. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/tests/test_export/test_architect.py +0 -0
  185. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/tests/test_export/test_generic.py +0 -0
  186. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/tests/test_generate/__init__.py +0 -0
  187. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/tests/test_generate/test_adaptive.py +0 -0
  188. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/tests/test_generate/test_lock.py +0 -0
  189. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/tests/test_generate/test_spec_builder.py +0 -0
  190. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/tests/test_ingest/__init__.py +0 -0
  191. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/tests/test_ingest/test_confluence.py +0 -0
  192. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/tests/test_ingest/test_github_issues.py +0 -0
  193. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/tests/test_ingest/test_hardening.py +0 -0
  194. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/tests/test_ingest/test_image.py +0 -0
  195. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/tests/test_ingest/test_jira.py +0 -0
  196. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/tests/test_ingest/test_markdown.py +0 -0
  197. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/tests/test_ingest/test_plaintext.py +0 -0
  198. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/tests/test_ingest/test_registry.py +0 -0
  199. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/tests/test_ingest/test_slack.py +0 -0
  200. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/tests/test_ingest/test_url.py +0 -0
  201. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/tests/test_ingest/test_yaml_input.py +0 -0
  202. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/tests/test_plugins/__init__.py +0 -0
  203. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/tests/test_plugins/test_discovery.py +0 -0
  204. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/tests/test_plugins/test_hooks.py +0 -0
  205. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/tests/test_plugins/test_protocols.py +0 -0
  206. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/tests/test_utils/__init__.py +0 -0
  207. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/tests/test_utils/test_cost.py +0 -0
  208. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/tests/test_utils/test_file_detect.py +0 -0
  209. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/tests/test_utils/test_project_detect.py +0 -0
  210. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/tests/test_utils/test_source_uri.py +0 -0
  211. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/tests/test_utils/test_task_state.py +0 -0
  212. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/tests/test_verify/__init__.py +0 -0
  213. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/tests/test_verify/test_engine.py +0 -0
  214. {intake_ai_cli-0.2.0 → intake_ai_cli-0.3.0}/tests/test_verify/test_reporter.py +0 -0
@@ -5,7 +5,73 @@ 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.3.0] - 2026-03-04
9
+
10
+ ### Added
11
+
12
+ #### 3 API connectors (live data fetching)
13
+
14
+ - **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`.
15
+ - **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`.
16
+ - **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.
17
+ - **Doctor connector checks** (`doctor/checks.py`): `_check_connectors()` validates connector credentials when connectors are configured.
18
+ - **3 connector entry points** in `pyproject.toml`: `jira`, `confluence`, `github` under `[project.entry-points."intake.connectors"]`.
19
+
20
+ #### 4 new exporters (6 total)
21
+
22
+ - **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.
23
+ - **Cursor exporter** (`export/cursor.py`): Generates `.cursor/rules/intake-spec.mdc` with YAML frontmatter.
24
+ - **Kiro exporter** (`export/kiro.py`): Generates `requirements.md`, `design.md`, `tasks.md` in Kiro's native format.
25
+ - **Copilot exporter** (`export/copilot.py`): Generates `.github/copilot-instructions.md`.
26
+ - All 4 exporters implement the **V2 ExporterPlugin protocol**: `meta`, `supported_agents`, `export() → ExportResult`.
27
+ - **Shared export helpers** (`export/_helpers.py`): `read_spec_file()`, `parse_tasks()`, `load_acceptance_checks()`, `summarize_content()`, `count_requirements()`.
28
+ - **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`.
29
+
30
+ #### Feedback loop (analyze verification failures)
31
+
32
+ - **Feedback analyzer** (`feedback/analyzer.py`): LLM-based failure analysis with root cause identification, severity classification, and spec amendments. Dataclasses: `SpecAmendment`, `FailureAnalysis`, `FeedbackResult`.
33
+ - **Feedback prompts** (`feedback/prompts.py`): Analysis prompt with `{language}` placeholder and structured JSON output schema.
34
+ - **Suggestion formatter** (`feedback/suggestions.py`): Terminal output (Rich) + agent-specific formatting (generic, claude-code, cursor).
35
+ - **Spec updater** (`feedback/spec_updater.py`): Preview and apply spec amendments with add/modify/remove actions.
36
+ - **`intake feedback` CLI command**: Options `--verify-report`, `--project-dir`, `--apply`, `--agent-format`, `--verbose`.
37
+
38
+ #### Configuration updates
39
+
40
+ - **`FeedbackConfig`** model: `auto_amend_spec`, `max_suggestions`, `include_code_snippets`.
41
+ - **Expanded connector configs**: `JiraConfig` (auth_type, fields, max_comments), `ConfluenceConfig` (include_child_pages, max_depth), `GithubConfig` (default_repo).
42
+ - **`ExportConfig`** expanded: `claude_code_task_dir`, `cursor_rules_dir`.
43
+
44
+ #### Enterprise documentation
45
+
46
+ - **`docs/seguridad.md`** (NEW): Threat model, data flow, secrets management, redaction patterns, offline/air-gapped mode, audit trail, compliance (SOC2/HIPAA/ISO 27001/GDPR).
47
+ - **`docs/despliegue.md`** (NEW): Docker multi-stage, docker-compose, pre-commit hooks, deployment patterns, env vars.
48
+ - **`docs/integracion-cicd.md`** (NEW): GitHub Actions, GitLab CI, Jenkins, Azure DevOps, JUnit/JSON reports, spec drift, notifications.
49
+ - **`docs/flujos-trabajo.md`** (NEW): Solo developer, small team, enterprise, monorepo, AI agent, regulated industries.
50
+ - **`docs/conectores.md`** (NEW): Jira, Confluence, GitHub API connectors documentation.
51
+ - **`docs/feedback.md`** (NEW): Feedback loop usage, severity levels, spec amendments, agent formats.
52
+ - **`SECURITY.md`** (NEW): English security policy at project root (GitHub Security tab).
53
+ - 10 existing documentation files updated with Phase 2 content.
54
+
55
+ #### Test suite
56
+
57
+ - **673 tests** (up from 492), **0 failures**. 181 new tests added.
58
+ - 14 new test files covering connectors, exporters, feedback, and protocol conformance.
59
+ - Protocol conformance tests: 20 parametrized tests for V2 exporters + 3 for connectors.
60
+
61
+ ### Fixed
62
+
63
+ #### QA Audit (14 mypy errors, 7 ruff errors, 25 format issues)
64
+
65
+ - **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`.
66
+ - **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.
67
+ - **Unused `type: ignore` comments**: Removed 3 stale `# type: ignore[import-untyped]` from connectors after `atlassian-python-api` and `PyGithub` gained type stubs.
68
+ - **CLI report type** (`cli.py`): Changed `report_data: dict[str, object]` to `dict[str, Any]` for correct iterable access.
69
+ - **Connector registration guard** (`cli.py`): Added `isinstance(connector_obj, ConnectorPlugin)` check for type-safe connector registration.
70
+ - **Unused imports** (`tests/`): Removed `PropertyMock`, `pytest`, `json`, `yaml` unused imports in test files.
71
+ - **TYPE_CHECKING import** (`tests/test_feedback/test_analyzer.py`): Moved `Path` import to `TYPE_CHECKING` block (TC003).
72
+ - **25 files reformatted** with `ruff format` for consistent code style.
73
+
74
+ ## [0.2.0] - 2026-03-04
9
75
 
10
76
  ### Added
11
77
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: intake-ai-cli
3
- Version: 0.2.0
3
+ Version: 0.3.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
@@ -75,7 +75,7 @@ intake processes requirements through a 5-phase pipeline:
75
75
  2. **Analyze** — LLM extracts structured requirements, detects conflicts, deduplicates
76
76
  3. **Generate** — Produce 6 spec files + `spec.lock.yaml`
77
77
  4. **Verify** — Run executable acceptance checks against the implementation
78
- 5. **Export** — Generate agent-ready output (architect, Claude Code, Cursor, generic)
78
+ 5. **Export** — Generate agent-ready output (Claude Code, Cursor, Kiro, Copilot, architect, generic)
79
79
 
80
80
  ### The 6 Spec Files
81
81
 
@@ -132,6 +132,21 @@ intake init "Fix login bug" -s notes.txt --mode quick
132
132
  # Fetch requirements from a URL
133
133
  intake init "API review" -s https://wiki.company.com/rfc/auth
134
134
 
135
+ # Fetch from live APIs (requires credentials)
136
+ intake init "Sprint planning" -s jira://PROJ/sprint/42
137
+ intake init "Wiki review" -s confluence://SPACE/Page-Title
138
+ intake init "Bug triage" -s github://org/repo/issues?labels=bug
139
+
140
+ # Export for specific agents
141
+ intake init "Payments" -s reqs.pdf --format claude-code
142
+ intake export ./specs/auth -f cursor -o .
143
+ intake export ./specs/auth -f kiro -o .
144
+ intake export ./specs/auth -f copilot -o .
145
+
146
+ # Analyze verification failures and get fix suggestions
147
+ intake feedback ./specs/auth-oauth2
148
+ intake feedback ./specs/auth -r report.json --apply --agent-format claude-code
149
+
135
150
  # List discovered plugins
136
151
  intake plugins list
137
152
 
@@ -157,9 +172,44 @@ intake task update ./specs/auth-oauth2 1 done --note "Implemented and tested"
157
172
  | URLs | `http://`, `https://` | Fetches page, converts HTML → Markdown |
158
173
  | Slack export | `.json` (auto-detected) | Messages, threads, decisions, action items |
159
174
  | GitHub Issues | `.json` (auto-detected) | Issues, labels, comments, cross-references |
175
+ | **Jira API** | `jira://PROJ-123` | Live issue fetching via REST API |
176
+ | **Confluence API** | `confluence://SPACE/Title` | Live page fetching via REST API |
177
+ | **GitHub API** | `github://org/repo/issues/42` | Live issue fetching via PyGithub |
160
178
 
161
179
  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
180
 
181
+ ### Live API Connectors
182
+
183
+ Connect directly to project management tools (requires credentials):
184
+
185
+ ```bash
186
+ # Jira: single issue, multiple, JQL, sprint
187
+ intake init "Sprint" -s jira://PROJ-123
188
+ intake init "Sprint" -s "jira://PROJ?jql=sprint=42"
189
+
190
+ # Confluence: page by ID, by space/title, CQL search
191
+ intake init "Docs" -s confluence://page/123456
192
+ intake init "Docs" -s confluence://SPACE/Page-Title
193
+
194
+ # GitHub: single/multiple issues, filtered queries
195
+ intake init "Bugs" -s github://org/repo/issues/42
196
+ intake init "Bugs" -s "github://org/repo/issues?labels=bug&state=open"
197
+ ```
198
+
199
+ Configure credentials in `.intake.yaml`:
200
+
201
+ ```yaml
202
+ connectors:
203
+ jira:
204
+ url: https://your-org.atlassian.net
205
+ # Set JIRA_API_TOKEN and JIRA_EMAIL env vars
206
+ confluence:
207
+ url: https://your-org.atlassian.net/wiki
208
+ # Set CONFLUENCE_API_TOKEN and CONFLUENCE_EMAIL env vars
209
+ github:
210
+ # Set GITHUB_TOKEN env var
211
+ ```
212
+
163
213
  ---
164
214
 
165
215
  ## Commands
@@ -175,7 +225,9 @@ Format is auto-detected by file extension and content inspection. Jira, Slack, a
175
225
  | `intake diff` | Compare two spec versions | **Available** |
176
226
  | `intake doctor` | Check environment and configuration health | **Available** |
177
227
  | `intake doctor --fix` | Auto-fix environment issues (install deps, create config) | **Available** |
178
- | `intake plugins list` | List all discovered plugins (parsers, exporters) | **Available** |
228
+ | `intake feedback` | Analyze verification failures and suggest fixes | **Available** |
229
+ | `intake feedback --apply` | Auto-apply suggested spec amendments | **Available** |
230
+ | `intake plugins list` | List all discovered plugins (parsers, exporters, connectors) | **Available** |
179
231
  | `intake plugins check` | Validate plugin compatibility | **Available** |
180
232
  | `intake task list` | List tasks from a spec with current status | **Available** |
181
233
  | `intake task update` | Update a task's status (pending/in_progress/done/blocked) | **Available** |
@@ -205,7 +257,19 @@ spec:
205
257
  auto_mode: true # auto-detect quick/standard/enterprise
206
258
 
207
259
  export:
208
- default_format: generic # architect | claude-code | cursor | kiro | generic
260
+ default_format: generic # architect | claude-code | cursor | kiro | copilot | generic
261
+
262
+ feedback:
263
+ auto_amend_spec: false # Auto-apply spec amendments from feedback
264
+ max_suggestions: 10 # Max suggestions per analysis
265
+ include_code_snippets: true # Include code examples in suggestions
266
+
267
+ connectors:
268
+ jira:
269
+ url: https://your-org.atlassian.net
270
+ confluence:
271
+ url: https://your-org.atlassian.net/wiki
272
+ github: {} # Uses GITHUB_TOKEN env var
209
273
  ```
210
274
 
211
275
  ### Presets
@@ -245,7 +309,7 @@ See the [`examples/`](examples/) directory for ready-to-run scenarios:
245
309
  src/intake/
246
310
  ├── cli.py # Click CLI — thin adapter, no logic
247
311
  ├── config/ # Pydantic v2 models, presets, layered loader
248
- │ ├── schema.py # 7 config models (LLM, Project, Spec, Verification, Export, Security, Connectors)
312
+ │ ├── schema.py # 9 config models (LLM, Project, Spec, Verification, Export, Security, Connectors, Feedback)
249
313
  │ ├── presets.py # minimal / standard / enterprise presets
250
314
  │ ├── loader.py # Layered merge: defaults → preset → YAML → CLI
251
315
  │ └── defaults.py # Centralized constants
@@ -253,8 +317,11 @@ src/intake/
253
317
  │ ├── protocols.py # V2 protocols: ParserPlugin, ExporterPlugin, ConnectorPlugin
254
318
  │ ├── discovery.py # Entry point scanning via importlib.metadata
255
319
  │ └── hooks.py # Pipeline hook system (HookManager)
256
- ├── connectors/ # Connector infrastructure (Phase 2 prep)
257
- └── base.py # ConnectorRegistry, ConnectorError
320
+ ├── connectors/ # Live API connectors
321
+ ├── base.py # ConnectorRegistry, ConnectorError
322
+ │ ├── jira_api.py # Jira REST API (single/multi/JQL/sprint)
323
+ │ ├── confluence_api.py # Confluence REST API (page/space/CQL)
324
+ │ └── github_api.py # GitHub API via PyGithub (issues/filters)
258
325
  ├── ingest/ # Phase 1 — 11 parsers, registry, auto-detection
259
326
  │ ├── base.py # ParsedContent dataclass + Parser Protocol
260
327
  │ ├── registry.py # Auto-detection + plugin discovery + parser dispatch
@@ -287,24 +354,41 @@ src/intake/
287
354
  ├── verify/ # Phase 4 — Acceptance check engine
288
355
  │ ├── engine.py # 4 check types: command, files_exist, pattern_*
289
356
  │ └── reporter.py # Terminal (Rich), JSON, JUnit XML reporters
290
- ├── export/ # Phase 5 — Agent-ready output
357
+ ├── export/ # Phase 5 — Agent-ready output (6 exporters)
291
358
  │ ├── base.py # Exporter Protocol
292
359
  │ ├── registry.py # Plugin discovery + format-based dispatch
360
+ │ ├── _helpers.py # Shared utilities (parse_tasks, load_checks, etc.)
361
+ │ ├── claude_code.py # CLAUDE.md + tasks + verify.sh
362
+ │ ├── cursor.py # .cursor/rules/intake-spec.mdc
363
+ │ ├── kiro.py # Kiro-native requirements/design/tasks
364
+ │ ├── copilot.py # .github/copilot-instructions.md
293
365
  │ ├── architect.py # pipeline.yaml generation
294
366
  │ └── generic.py # SPEC.md + verify.sh generation
295
367
  ├── diff/ # Spec comparison
296
368
  │ └── differ.py # Compare two specs by requirement/task IDs
369
+ ├── feedback/ # Feedback loop (analyze failures, suggest fixes)
370
+ │ ├── analyzer.py # LLM-based failure analysis
371
+ │ ├── prompts.py # Feedback analysis prompt
372
+ │ ├── suggestions.py # Multi-format suggestion formatter
373
+ │ └── spec_updater.py # Preview + apply spec amendments
297
374
  ├── doctor/ # Environment health checks
298
- │ └── checks.py # Python, API keys, deps, config validation
375
+ │ └── checks.py # Python, API keys, deps, connectors, config validation
299
376
  ├── llm/ # LiteLLM wrapper (used by analyze/ only)
300
377
  │ └── adapter.py # Async completion, retry, cost tracking, budget
301
- ├── templates/ # Jinja2 templates for spec generation
378
+ ├── templates/ # Jinja2 templates (15 total)
302
379
  │ ├── requirements.md.j2 # FR, NFR, conflicts, open questions
303
380
  │ ├── design.md.j2 # Components, files, tech decisions
304
381
  │ ├── tasks.md.j2 # Task summary + status + detailed sections
305
382
  │ ├── acceptance.yaml.j2 # Executable acceptance checks
306
383
  │ ├── context.md.j2 # Project context for agents
307
- └── sources.md.j2 # Source traceability mapping
384
+ ├── sources.md.j2 # Source traceability mapping
385
+ │ ├── claude_md.j2 # Claude Code CLAUDE.md spec section
386
+ │ ├── claude_task.md.j2 # Claude Code per-task file
387
+ │ ├── verify_sh.j2 # Claude Code verification script
388
+ │ ├── cursor_rules.mdc.j2 # Cursor rules file
389
+ │ ├── kiro_*.md.j2 # Kiro requirements/design/tasks (3 files)
390
+ │ ├── copilot_instructions.md.j2 # Copilot instructions
391
+ │ └── feedback.md.j2 # Feedback results template
308
392
  └── utils/ # Shared utilities
309
393
  ├── file_detect.py # Extension-based format detection
310
394
  ├── project_detect.py # Auto-detect tech stack from project files
@@ -317,7 +401,7 @@ src/intake/
317
401
  **Key design principles:**
318
402
 
319
403
  - **Protocol over ABC** — All extension points use `typing.Protocol`
320
- - **Plugin-first architecture** — Parsers and exporters discovered via entry points, manual fallback
404
+ - **Plugin-first architecture** — Parsers, exporters, and connectors discovered via entry points, manual fallback
321
405
  - **Dataclasses for pipeline data, Pydantic for config** — Never mixed
322
406
  - **Async only in analyze/** — Everything else is synchronous
323
407
  - **Offline mode** — Parsing, verification, export, diff, doctor all work without LLM
@@ -340,7 +424,41 @@ architect pipeline specs/auth-system/pipeline.yaml
340
424
 
341
425
  ```bash
342
426
  intake init "Payments" -s reqs.pdf --format claude-code
343
- # Generates CLAUDE.md + tasks + verify.sh
427
+ # Generates CLAUDE.md + .intake/tasks/ + .intake/verify.sh + .intake/spec-summary.md
428
+ ```
429
+
430
+ ### With Cursor
431
+
432
+ ```bash
433
+ intake export ./specs/auth -f cursor -o .
434
+ # Generates .cursor/rules/intake-spec.mdc (auto-loaded by Cursor)
435
+ ```
436
+
437
+ ### With Kiro
438
+
439
+ ```bash
440
+ intake export ./specs/auth -f kiro -o .
441
+ # Generates requirements.md, design.md, tasks.md in Kiro native format
442
+ ```
443
+
444
+ ### With GitHub Copilot
445
+
446
+ ```bash
447
+ intake export ./specs/auth -f copilot -o .
448
+ # Generates .github/copilot-instructions.md (auto-loaded by Copilot)
449
+ ```
450
+
451
+ ### Feedback Loop
452
+
453
+ ```bash
454
+ # Analyze why verification checks failed and get fix suggestions
455
+ intake feedback ./specs/auth-oauth2
456
+
457
+ # Use a previous report and auto-apply spec amendments
458
+ intake feedback ./specs/auth -r report.json --apply
459
+
460
+ # Get suggestions formatted for your agent
461
+ intake feedback ./specs/auth --agent-format claude-code
344
462
  ```
345
463
 
346
464
  ### With CI/CD
@@ -374,7 +492,7 @@ ruff format src/ tests/
374
492
  mypy src/ --strict
375
493
  ```
376
494
 
377
- Current test suite: **492 tests**, **86% coverage**, **0 mypy --strict errors**, **0 ruff warnings**.
495
+ Current test suite: **673 tests**, **0 mypy --strict errors**, **0 ruff warnings**.
378
496
 
379
497
  ### Implementation Status
380
498
 
@@ -384,12 +502,13 @@ Current test suite: **492 tests**, **86% coverage**, **0 mypy --strict errors**,
384
502
  | Phase 2 — Analyze | `analyze/` (orchestrator + 7 sub-modules + complexity) | Implemented |
385
503
  | Phase 3 — Generate | `generate/` (spec builder + adaptive builder + 6 templates + lock) | Implemented |
386
504
  | Phase 4 — Verify | `verify/` (engine + 3 reporters) | Implemented |
387
- | Phase 5 — Export | `export/` (architect + generic + plugin registry) | Implemented |
505
+ | Phase 5 — Export | `export/` (6 exporters: claude-code, cursor, kiro, copilot, architect, generic) | Implemented |
388
506
  | Plugins | `plugins/` (protocols + discovery + hooks) | Implemented |
389
- | Connectors | `connectors/` (registry infrastructure, no concrete connectors) | Implemented |
507
+ | Connectors | `connectors/` (Jira, Confluence, GitHub API connectors) | Implemented |
508
+ | Feedback | `feedback/` (analyzer + suggestions + spec updater) | Implemented |
390
509
  | Standalone | `doctor/`, `config/`, `llm/`, `utils/` | Implemented |
391
510
  | Standalone | `diff/` (spec differ) | Implemented |
392
- | CLI | 13 commands/subcommands wired end-to-end | Implemented |
511
+ | CLI | 15 commands/subcommands wired end-to-end | Implemented |
393
512
 
394
513
  ---
395
514
 
@@ -27,7 +27,7 @@ intake processes requirements through a 5-phase pipeline:
27
27
  2. **Analyze** — LLM extracts structured requirements, detects conflicts, deduplicates
28
28
  3. **Generate** — Produce 6 spec files + `spec.lock.yaml`
29
29
  4. **Verify** — Run executable acceptance checks against the implementation
30
- 5. **Export** — Generate agent-ready output (architect, Claude Code, Cursor, generic)
30
+ 5. **Export** — Generate agent-ready output (Claude Code, Cursor, Kiro, Copilot, architect, generic)
31
31
 
32
32
  ### The 6 Spec Files
33
33
 
@@ -84,6 +84,21 @@ intake init "Fix login bug" -s notes.txt --mode quick
84
84
  # Fetch requirements from a URL
85
85
  intake init "API review" -s https://wiki.company.com/rfc/auth
86
86
 
87
+ # Fetch from live APIs (requires credentials)
88
+ intake init "Sprint planning" -s jira://PROJ/sprint/42
89
+ intake init "Wiki review" -s confluence://SPACE/Page-Title
90
+ intake init "Bug triage" -s github://org/repo/issues?labels=bug
91
+
92
+ # Export for specific agents
93
+ intake init "Payments" -s reqs.pdf --format claude-code
94
+ intake export ./specs/auth -f cursor -o .
95
+ intake export ./specs/auth -f kiro -o .
96
+ intake export ./specs/auth -f copilot -o .
97
+
98
+ # Analyze verification failures and get fix suggestions
99
+ intake feedback ./specs/auth-oauth2
100
+ intake feedback ./specs/auth -r report.json --apply --agent-format claude-code
101
+
87
102
  # List discovered plugins
88
103
  intake plugins list
89
104
 
@@ -109,9 +124,44 @@ intake task update ./specs/auth-oauth2 1 done --note "Implemented and tested"
109
124
  | URLs | `http://`, `https://` | Fetches page, converts HTML → Markdown |
110
125
  | Slack export | `.json` (auto-detected) | Messages, threads, decisions, action items |
111
126
  | GitHub Issues | `.json` (auto-detected) | Issues, labels, comments, cross-references |
127
+ | **Jira API** | `jira://PROJ-123` | Live issue fetching via REST API |
128
+ | **Confluence API** | `confluence://SPACE/Title` | Live page fetching via REST API |
129
+ | **GitHub API** | `github://org/repo/issues/42` | Live issue fetching via PyGithub |
112
130
 
113
131
  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.
114
132
 
133
+ ### Live API Connectors
134
+
135
+ Connect directly to project management tools (requires credentials):
136
+
137
+ ```bash
138
+ # Jira: single issue, multiple, JQL, sprint
139
+ intake init "Sprint" -s jira://PROJ-123
140
+ intake init "Sprint" -s "jira://PROJ?jql=sprint=42"
141
+
142
+ # Confluence: page by ID, by space/title, CQL search
143
+ intake init "Docs" -s confluence://page/123456
144
+ intake init "Docs" -s confluence://SPACE/Page-Title
145
+
146
+ # GitHub: single/multiple issues, filtered queries
147
+ intake init "Bugs" -s github://org/repo/issues/42
148
+ intake init "Bugs" -s "github://org/repo/issues?labels=bug&state=open"
149
+ ```
150
+
151
+ Configure credentials in `.intake.yaml`:
152
+
153
+ ```yaml
154
+ connectors:
155
+ jira:
156
+ url: https://your-org.atlassian.net
157
+ # Set JIRA_API_TOKEN and JIRA_EMAIL env vars
158
+ confluence:
159
+ url: https://your-org.atlassian.net/wiki
160
+ # Set CONFLUENCE_API_TOKEN and CONFLUENCE_EMAIL env vars
161
+ github:
162
+ # Set GITHUB_TOKEN env var
163
+ ```
164
+
115
165
  ---
116
166
 
117
167
  ## Commands
@@ -127,7 +177,9 @@ Format is auto-detected by file extension and content inspection. Jira, Slack, a
127
177
  | `intake diff` | Compare two spec versions | **Available** |
128
178
  | `intake doctor` | Check environment and configuration health | **Available** |
129
179
  | `intake doctor --fix` | Auto-fix environment issues (install deps, create config) | **Available** |
130
- | `intake plugins list` | List all discovered plugins (parsers, exporters) | **Available** |
180
+ | `intake feedback` | Analyze verification failures and suggest fixes | **Available** |
181
+ | `intake feedback --apply` | Auto-apply suggested spec amendments | **Available** |
182
+ | `intake plugins list` | List all discovered plugins (parsers, exporters, connectors) | **Available** |
131
183
  | `intake plugins check` | Validate plugin compatibility | **Available** |
132
184
  | `intake task list` | List tasks from a spec with current status | **Available** |
133
185
  | `intake task update` | Update a task's status (pending/in_progress/done/blocked) | **Available** |
@@ -157,7 +209,19 @@ spec:
157
209
  auto_mode: true # auto-detect quick/standard/enterprise
158
210
 
159
211
  export:
160
- default_format: generic # architect | claude-code | cursor | kiro | generic
212
+ default_format: generic # architect | claude-code | cursor | kiro | copilot | generic
213
+
214
+ feedback:
215
+ auto_amend_spec: false # Auto-apply spec amendments from feedback
216
+ max_suggestions: 10 # Max suggestions per analysis
217
+ include_code_snippets: true # Include code examples in suggestions
218
+
219
+ connectors:
220
+ jira:
221
+ url: https://your-org.atlassian.net
222
+ confluence:
223
+ url: https://your-org.atlassian.net/wiki
224
+ github: {} # Uses GITHUB_TOKEN env var
161
225
  ```
162
226
 
163
227
  ### Presets
@@ -197,7 +261,7 @@ See the [`examples/`](examples/) directory for ready-to-run scenarios:
197
261
  src/intake/
198
262
  ├── cli.py # Click CLI — thin adapter, no logic
199
263
  ├── config/ # Pydantic v2 models, presets, layered loader
200
- │ ├── schema.py # 7 config models (LLM, Project, Spec, Verification, Export, Security, Connectors)
264
+ │ ├── schema.py # 9 config models (LLM, Project, Spec, Verification, Export, Security, Connectors, Feedback)
201
265
  │ ├── presets.py # minimal / standard / enterprise presets
202
266
  │ ├── loader.py # Layered merge: defaults → preset → YAML → CLI
203
267
  │ └── defaults.py # Centralized constants
@@ -205,8 +269,11 @@ src/intake/
205
269
  │ ├── protocols.py # V2 protocols: ParserPlugin, ExporterPlugin, ConnectorPlugin
206
270
  │ ├── discovery.py # Entry point scanning via importlib.metadata
207
271
  │ └── hooks.py # Pipeline hook system (HookManager)
208
- ├── connectors/ # Connector infrastructure (Phase 2 prep)
209
- └── base.py # ConnectorRegistry, ConnectorError
272
+ ├── connectors/ # Live API connectors
273
+ ├── base.py # ConnectorRegistry, ConnectorError
274
+ │ ├── jira_api.py # Jira REST API (single/multi/JQL/sprint)
275
+ │ ├── confluence_api.py # Confluence REST API (page/space/CQL)
276
+ │ └── github_api.py # GitHub API via PyGithub (issues/filters)
210
277
  ├── ingest/ # Phase 1 — 11 parsers, registry, auto-detection
211
278
  │ ├── base.py # ParsedContent dataclass + Parser Protocol
212
279
  │ ├── registry.py # Auto-detection + plugin discovery + parser dispatch
@@ -239,24 +306,41 @@ src/intake/
239
306
  ├── verify/ # Phase 4 — Acceptance check engine
240
307
  │ ├── engine.py # 4 check types: command, files_exist, pattern_*
241
308
  │ └── reporter.py # Terminal (Rich), JSON, JUnit XML reporters
242
- ├── export/ # Phase 5 — Agent-ready output
309
+ ├── export/ # Phase 5 — Agent-ready output (6 exporters)
243
310
  │ ├── base.py # Exporter Protocol
244
311
  │ ├── registry.py # Plugin discovery + format-based dispatch
312
+ │ ├── _helpers.py # Shared utilities (parse_tasks, load_checks, etc.)
313
+ │ ├── claude_code.py # CLAUDE.md + tasks + verify.sh
314
+ │ ├── cursor.py # .cursor/rules/intake-spec.mdc
315
+ │ ├── kiro.py # Kiro-native requirements/design/tasks
316
+ │ ├── copilot.py # .github/copilot-instructions.md
245
317
  │ ├── architect.py # pipeline.yaml generation
246
318
  │ └── generic.py # SPEC.md + verify.sh generation
247
319
  ├── diff/ # Spec comparison
248
320
  │ └── differ.py # Compare two specs by requirement/task IDs
321
+ ├── feedback/ # Feedback loop (analyze failures, suggest fixes)
322
+ │ ├── analyzer.py # LLM-based failure analysis
323
+ │ ├── prompts.py # Feedback analysis prompt
324
+ │ ├── suggestions.py # Multi-format suggestion formatter
325
+ │ └── spec_updater.py # Preview + apply spec amendments
249
326
  ├── doctor/ # Environment health checks
250
- │ └── checks.py # Python, API keys, deps, config validation
327
+ │ └── checks.py # Python, API keys, deps, connectors, config validation
251
328
  ├── llm/ # LiteLLM wrapper (used by analyze/ only)
252
329
  │ └── adapter.py # Async completion, retry, cost tracking, budget
253
- ├── templates/ # Jinja2 templates for spec generation
330
+ ├── templates/ # Jinja2 templates (15 total)
254
331
  │ ├── requirements.md.j2 # FR, NFR, conflicts, open questions
255
332
  │ ├── design.md.j2 # Components, files, tech decisions
256
333
  │ ├── tasks.md.j2 # Task summary + status + detailed sections
257
334
  │ ├── acceptance.yaml.j2 # Executable acceptance checks
258
335
  │ ├── context.md.j2 # Project context for agents
259
- └── sources.md.j2 # Source traceability mapping
336
+ ├── sources.md.j2 # Source traceability mapping
337
+ │ ├── claude_md.j2 # Claude Code CLAUDE.md spec section
338
+ │ ├── claude_task.md.j2 # Claude Code per-task file
339
+ │ ├── verify_sh.j2 # Claude Code verification script
340
+ │ ├── cursor_rules.mdc.j2 # Cursor rules file
341
+ │ ├── kiro_*.md.j2 # Kiro requirements/design/tasks (3 files)
342
+ │ ├── copilot_instructions.md.j2 # Copilot instructions
343
+ │ └── feedback.md.j2 # Feedback results template
260
344
  └── utils/ # Shared utilities
261
345
  ├── file_detect.py # Extension-based format detection
262
346
  ├── project_detect.py # Auto-detect tech stack from project files
@@ -269,7 +353,7 @@ src/intake/
269
353
  **Key design principles:**
270
354
 
271
355
  - **Protocol over ABC** — All extension points use `typing.Protocol`
272
- - **Plugin-first architecture** — Parsers and exporters discovered via entry points, manual fallback
356
+ - **Plugin-first architecture** — Parsers, exporters, and connectors discovered via entry points, manual fallback
273
357
  - **Dataclasses for pipeline data, Pydantic for config** — Never mixed
274
358
  - **Async only in analyze/** — Everything else is synchronous
275
359
  - **Offline mode** — Parsing, verification, export, diff, doctor all work without LLM
@@ -292,7 +376,41 @@ architect pipeline specs/auth-system/pipeline.yaml
292
376
 
293
377
  ```bash
294
378
  intake init "Payments" -s reqs.pdf --format claude-code
295
- # Generates CLAUDE.md + tasks + verify.sh
379
+ # Generates CLAUDE.md + .intake/tasks/ + .intake/verify.sh + .intake/spec-summary.md
380
+ ```
381
+
382
+ ### With Cursor
383
+
384
+ ```bash
385
+ intake export ./specs/auth -f cursor -o .
386
+ # Generates .cursor/rules/intake-spec.mdc (auto-loaded by Cursor)
387
+ ```
388
+
389
+ ### With Kiro
390
+
391
+ ```bash
392
+ intake export ./specs/auth -f kiro -o .
393
+ # Generates requirements.md, design.md, tasks.md in Kiro native format
394
+ ```
395
+
396
+ ### With GitHub Copilot
397
+
398
+ ```bash
399
+ intake export ./specs/auth -f copilot -o .
400
+ # Generates .github/copilot-instructions.md (auto-loaded by Copilot)
401
+ ```
402
+
403
+ ### Feedback Loop
404
+
405
+ ```bash
406
+ # Analyze why verification checks failed and get fix suggestions
407
+ intake feedback ./specs/auth-oauth2
408
+
409
+ # Use a previous report and auto-apply spec amendments
410
+ intake feedback ./specs/auth -r report.json --apply
411
+
412
+ # Get suggestions formatted for your agent
413
+ intake feedback ./specs/auth --agent-format claude-code
296
414
  ```
297
415
 
298
416
  ### With CI/CD
@@ -326,7 +444,7 @@ ruff format src/ tests/
326
444
  mypy src/ --strict
327
445
  ```
328
446
 
329
- Current test suite: **492 tests**, **86% coverage**, **0 mypy --strict errors**, **0 ruff warnings**.
447
+ Current test suite: **673 tests**, **0 mypy --strict errors**, **0 ruff warnings**.
330
448
 
331
449
  ### Implementation Status
332
450
 
@@ -336,12 +454,13 @@ Current test suite: **492 tests**, **86% coverage**, **0 mypy --strict errors**,
336
454
  | Phase 2 — Analyze | `analyze/` (orchestrator + 7 sub-modules + complexity) | Implemented |
337
455
  | Phase 3 — Generate | `generate/` (spec builder + adaptive builder + 6 templates + lock) | Implemented |
338
456
  | Phase 4 — Verify | `verify/` (engine + 3 reporters) | Implemented |
339
- | Phase 5 — Export | `export/` (architect + generic + plugin registry) | Implemented |
457
+ | Phase 5 — Export | `export/` (6 exporters: claude-code, cursor, kiro, copilot, architect, generic) | Implemented |
340
458
  | Plugins | `plugins/` (protocols + discovery + hooks) | Implemented |
341
- | Connectors | `connectors/` (registry infrastructure, no concrete connectors) | Implemented |
459
+ | Connectors | `connectors/` (Jira, Confluence, GitHub API connectors) | Implemented |
460
+ | Feedback | `feedback/` (analyzer + suggestions + spec updater) | Implemented |
342
461
  | Standalone | `doctor/`, `config/`, `llm/`, `utils/` | Implemented |
343
462
  | Standalone | `diff/` (spec differ) | Implemented |
344
- | CLI | 13 commands/subcommands wired end-to-end | Implemented |
463
+ | CLI | 15 commands/subcommands wired end-to-end | Implemented |
345
464
 
346
465
  ---
347
466