specsmith 0.12.0.dev496__tar.gz → 0.12.0.dev497__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 (294) hide show
  1. {specsmith-0.12.0.dev496/src/specsmith.egg-info → specsmith-0.12.0.dev497}/PKG-INFO +1 -1
  2. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/pyproject.toml +1 -1
  3. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/auditor.py +19 -0
  4. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/config.py +66 -0
  5. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/importer.py +66 -0
  6. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/scaffolder.py +169 -0
  7. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/skills/__init__.py +17 -0
  8. specsmith-0.12.0.dev497/src/specsmith/skills/ai_agents.py +1439 -0
  9. specsmith-0.12.0.dev497/src/specsmith/skills/data_engineering.py +960 -0
  10. specsmith-0.12.0.dev497/src/specsmith/skills/platform_engineering.py +1391 -0
  11. specsmith-0.12.0.dev497/src/specsmith/skills/software_engineering.py +1291 -0
  12. specsmith-0.12.0.dev497/src/specsmith/skills/web_backend.py +1427 -0
  13. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/tools.py +123 -0
  14. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497/src/specsmith.egg-info}/PKG-INFO +1 -1
  15. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith.egg-info/SOURCES.txt +5 -0
  16. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/LICENSE +0 -0
  17. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/README.md +0 -0
  18. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/setup.cfg +0 -0
  19. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/epistemic/__init__.py +0 -0
  20. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/epistemic/belief.py +0 -0
  21. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/epistemic/certainty.py +0 -0
  22. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/epistemic/failure_graph.py +0 -0
  23. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/epistemic/py.typed +0 -0
  24. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/epistemic/recovery.py +0 -0
  25. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/epistemic/session.py +0 -0
  26. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/epistemic/stress_tester.py +0 -0
  27. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/epistemic/trace.py +0 -0
  28. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/__init__.py +0 -0
  29. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/__main__.py +0 -0
  30. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/agent/__init__.py +0 -0
  31. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/agent/broker.py +0 -0
  32. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/agent/chat_runner.py +0 -0
  33. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/agent/cleanup.py +0 -0
  34. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/agent/context_seed.py +0 -0
  35. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/agent/core.py +0 -0
  36. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/agent/dispatch/__init__.py +0 -0
  37. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/agent/dispatch/_status.py +0 -0
  38. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/agent/dispatch/dag.py +0 -0
  39. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/agent/dispatch/dispatcher.py +0 -0
  40. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/agent/dispatch/events.py +0 -0
  41. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/agent/dispatch/result.py +0 -0
  42. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/agent/endpoints.py +0 -0
  43. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/agent/events.py +0 -0
  44. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/agent/execution_profiles.py +0 -0
  45. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/agent/fallback.py +0 -0
  46. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/agent/hf_leaderboard.py +0 -0
  47. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/agent/hf_sync.py +0 -0
  48. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/agent/indexer.py +0 -0
  49. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/agent/llm_client.py +0 -0
  50. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/agent/mcp.py +0 -0
  51. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/agent/memory.py +0 -0
  52. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/agent/model_intelligence.py +0 -0
  53. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/agent/model_profiles.py +0 -0
  54. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/agent/orchestrator.py +0 -0
  55. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/agent/permissions.py +0 -0
  56. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/agent/profiles.py +0 -0
  57. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/agent/provider_registry.py +0 -0
  58. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/agent/repl.py +0 -0
  59. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/agent/router.py +0 -0
  60. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/agent/rules.py +0 -0
  61. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/agent/runner.py +0 -0
  62. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/agent/safety.py +0 -0
  63. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/agent/spawner.py +0 -0
  64. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/agent/suggester.py +0 -0
  65. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/agent/teams.py +0 -0
  66. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/agent/tools.py +0 -0
  67. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/agent/verifier.py +0 -0
  68. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/agent/voice.py +0 -0
  69. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/architect.py +0 -0
  70. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/auth.py +0 -0
  71. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/block_export.py +0 -0
  72. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/channel.py +0 -0
  73. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/ci_manager.py +0 -0
  74. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/cli.py +0 -0
  75. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/commands/__init__.py +0 -0
  76. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/commands/intelligence.py +0 -0
  77. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/compliance/__init__.py +0 -0
  78. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/compliance/_compat.py +0 -0
  79. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/compliance/checker.py +0 -0
  80. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/compliance/evidence.py +0 -0
  81. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/compliance/regulations.py +0 -0
  82. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/compliance/reporter.py +0 -0
  83. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/compressor.py +0 -0
  84. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/console_utils.py +0 -0
  85. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/context_orchestrator.py +0 -0
  86. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/context_window.py +0 -0
  87. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/credit_analyzer.py +0 -0
  88. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/credits.py +0 -0
  89. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/datasources/__init__.py +0 -0
  90. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/datasources/base.py +0 -0
  91. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/datasources/citations.py +0 -0
  92. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/datasources/fpd.py +0 -0
  93. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/datasources/odp.py +0 -0
  94. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/datasources/patentsview.py +0 -0
  95. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/datasources/pfw.py +0 -0
  96. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/datasources/ppubs.py +0 -0
  97. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/datasources/ptab.py +0 -0
  98. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/differ.py +0 -0
  99. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/doctor.py +0 -0
  100. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/drive.py +0 -0
  101. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/editor.py +0 -0
  102. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/epistemic/__init__.py +0 -0
  103. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/epistemic/belief.py +0 -0
  104. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/epistemic/certainty.py +0 -0
  105. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/epistemic/failure_graph.py +0 -0
  106. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/epistemic/recovery.py +0 -0
  107. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/epistemic/stress_tester.py +0 -0
  108. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/esdb/__init__.py +0 -0
  109. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/esdb/bridge.py +0 -0
  110. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/eval/__init__.py +0 -0
  111. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/eval/builtins.py +0 -0
  112. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/eval/runner.py +0 -0
  113. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/executor.py +0 -0
  114. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/exporter.py +0 -0
  115. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/governance_logic.py +0 -0
  116. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/governance_store.py +0 -0
  117. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/governance_yaml.py +0 -0
  118. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/gui/__init__.py +0 -0
  119. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/gui/app.py +0 -0
  120. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/gui/main_window.py +0 -0
  121. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/gui/session_tab.py +0 -0
  122. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/gui/theme.py +0 -0
  123. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/gui/widgets/__init__.py +0 -0
  124. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/gui/widgets/chat_view.py +0 -0
  125. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/gui/widgets/input_bar.py +0 -0
  126. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/gui/widgets/provider_bar.py +0 -0
  127. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/gui/widgets/token_meter.py +0 -0
  128. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/gui/widgets/tool_panel.py +0 -0
  129. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/gui/widgets/update_checker.py +0 -0
  130. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/gui/worker.py +0 -0
  131. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/history_search.py +0 -0
  132. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/instinct.py +0 -0
  133. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/integrations/__init__.py +0 -0
  134. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/integrations/agent_skill.py +0 -0
  135. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/integrations/aider.py +0 -0
  136. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/integrations/base.py +0 -0
  137. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/integrations/claude_code.py +0 -0
  138. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/integrations/codity.py +0 -0
  139. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/integrations/copilot.py +0 -0
  140. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/integrations/cursor.py +0 -0
  141. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/integrations/gemini.py +0 -0
  142. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/integrations/windsurf.py +0 -0
  143. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/issue_reporter.py +0 -0
  144. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/languages.py +0 -0
  145. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/ledger.py +0 -0
  146. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/mcp_generator.py +0 -0
  147. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/mcp_server.py +0 -0
  148. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/migrations/__init__.py +0 -0
  149. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/migrations/m001_governance_yaml.py +0 -0
  150. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/migrations/m002_agents_slim.py +0 -0
  151. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/migrations/m003_compliance_init.py +0 -0
  152. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/migrations/m004_ledger_esdb.py +0 -0
  153. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/migrations/m005_agent_run_tool.py +0 -0
  154. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/migrations/m006_session_governance.py +0 -0
  155. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/migrations/runner.py +0 -0
  156. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/ollama_cmds.py +0 -0
  157. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/patent.py +0 -0
  158. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/paths.py +0 -0
  159. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/phase.py +0 -0
  160. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/plugins.py +0 -0
  161. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/profiles.py +0 -0
  162. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/rate_limits.py +0 -0
  163. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/releaser.py +0 -0
  164. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/requirements.py +0 -0
  165. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/requirements_parser.py +0 -0
  166. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/retrieval.py +0 -0
  167. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/safe_write.py +0 -0
  168. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/serve.py +0 -0
  169. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/session.py +0 -0
  170. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/session_init.py +0 -0
  171. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/session_store.py +0 -0
  172. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/skills/cloud.py +0 -0
  173. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/skills/corporate.py +0 -0
  174. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/skills/cross_platform.py +0 -0
  175. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/skills/devops.py +0 -0
  176. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/skills/docs.py +0 -0
  177. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/skills/embedded.py +0 -0
  178. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/skills/governance.py +0 -0
  179. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/skills/hardware.py +0 -0
  180. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/skills/mobile.py +0 -0
  181. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/skills/productivity.py +0 -0
  182. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/skills/specsmith_skills.py +0 -0
  183. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/skills/ssh.py +0 -0
  184. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/skills_builder.py +0 -0
  185. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/sync.py +0 -0
  186. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/templates/agents.md.j2 +0 -0
  187. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/templates/community/bug_report.md.j2 +0 -0
  188. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/templates/community/code_of_conduct.md.j2 +0 -0
  189. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/templates/community/contributing.md.j2 +0 -0
  190. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/templates/community/feature_request.md.j2 +0 -0
  191. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/templates/community/license-Apache-2.0.j2 +0 -0
  192. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/templates/community/license-MIT.j2 +0 -0
  193. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/templates/community/pull_request_template.md.j2 +0 -0
  194. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/templates/community/security.md.j2 +0 -0
  195. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/templates/docs/architecture.md.j2 +0 -0
  196. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/templates/docs/mkdocs.yml.j2 +0 -0
  197. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/templates/docs/readthedocs.yaml.j2 +0 -0
  198. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/templates/docs/requirements.md.j2 +0 -0
  199. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/templates/docs/test-spec.md.j2 +0 -0
  200. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/templates/editorconfig.j2 +0 -0
  201. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/templates/gitattributes.j2 +0 -0
  202. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/templates/gitignore.j2 +0 -0
  203. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/templates/go/go.mod.j2 +0 -0
  204. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/templates/go/main.go.j2 +0 -0
  205. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/templates/governance/belief-registry.md.j2 +0 -0
  206. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/templates/governance/context-budget.md.j2 +0 -0
  207. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/templates/governance/drift-metrics.md.j2 +0 -0
  208. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/templates/governance/epistemic-axioms.md.j2 +0 -0
  209. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/templates/governance/failure-modes.md.j2 +0 -0
  210. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/templates/governance/lifecycle.md.j2 +0 -0
  211. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/templates/governance/roles.md.j2 +0 -0
  212. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/templates/governance/rules.md.j2 +0 -0
  213. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/templates/governance/session-protocol.md.j2 +0 -0
  214. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/templates/governance/uncertainty-map.md.j2 +0 -0
  215. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/templates/governance/verification.md.j2 +0 -0
  216. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/templates/js/package.json.j2 +0 -0
  217. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/templates/ledger.md.j2 +0 -0
  218. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/templates/python/cli.py.j2 +0 -0
  219. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/templates/python/init.py.j2 +0 -0
  220. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/templates/python/pyproject.toml.j2 +0 -0
  221. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/templates/readme.md.j2 +0 -0
  222. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/templates/rust/Cargo.toml.j2 +0 -0
  223. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/templates/rust/main.rs.j2 +0 -0
  224. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/templates/scripts/exec.cmd.j2 +0 -0
  225. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/templates/scripts/exec.sh.j2 +0 -0
  226. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/templates/scripts/run.cmd.j2 +0 -0
  227. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/templates/scripts/run.sh.j2 +0 -0
  228. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/templates/scripts/setup.cmd.j2 +0 -0
  229. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/templates/scripts/setup.sh.j2 +0 -0
  230. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/templates/workflows/release.yml.j2 +0 -0
  231. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/tool_installer.py +0 -0
  232. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/toolrules.py +0 -0
  233. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/trace.py +0 -0
  234. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/updater.py +0 -0
  235. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/upgrader.py +0 -0
  236. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/validator.py +0 -0
  237. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/vcs/__init__.py +0 -0
  238. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/vcs/base.py +0 -0
  239. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/vcs/bitbucket.py +0 -0
  240. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/vcs/github.py +0 -0
  241. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/vcs/gitlab.py +0 -0
  242. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/vcs_commands.py +0 -0
  243. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/wireframes.py +0 -0
  244. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith/workspace.py +0 -0
  245. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith.egg-info/dependency_links.txt +0 -0
  246. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith.egg-info/entry_points.txt +0 -0
  247. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith.egg-info/requires.txt +0 -0
  248. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/src/specsmith.egg-info/top_level.txt +0 -0
  249. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/tests/test_CMD_001.py +0 -0
  250. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/tests/test_agent_profiles.py +0 -0
  251. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/tests/test_agent_run_feedback.py +0 -0
  252. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/tests/test_agent_runner_ready.py +0 -0
  253. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/tests/test_ai_client.py +0 -0
  254. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/tests/test_ai_intelligence.py +0 -0
  255. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/tests/test_auditor.py +0 -0
  256. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/tests/test_channel.py +0 -0
  257. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/tests/test_chat_diff_decision.py +0 -0
  258. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/tests/test_chat_runner_openai_compat.py +0 -0
  259. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/tests/test_chat_stdin_protocol.py +0 -0
  260. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/tests/test_cli.py +0 -0
  261. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/tests/test_cli_workflows_history_drive.py +0 -0
  262. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/tests/test_compliance.py +0 -0
  263. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/tests/test_compressor.py +0 -0
  264. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/tests/test_dispatch.py +0 -0
  265. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/tests/test_e2e_nexus.py +0 -0
  266. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/tests/test_endpoints_cli.py +0 -0
  267. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/tests/test_endpoints_store.py +0 -0
  268. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/tests/test_epistemic.py +0 -0
  269. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/tests/test_fallback_chain.py +0 -0
  270. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/tests/test_importer.py +0 -0
  271. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/tests/test_integrations.py +0 -0
  272. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/tests/test_integrations_codity.py +0 -0
  273. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/tests/test_intelligence.py +0 -0
  274. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/tests/test_issue_reporter.py +0 -0
  275. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/tests/test_mcp_client.py +0 -0
  276. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/tests/test_mcp_server.py +0 -0
  277. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/tests/test_new_modules.py +0 -0
  278. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/tests/test_nexus.py +0 -0
  279. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/tests/test_permissions.py +0 -0
  280. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/tests/test_phase1_4_new.py +0 -0
  281. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/tests/test_phase34_completion.py +0 -0
  282. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/tests/test_rate_limits.py +0 -0
  283. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/tests/test_req_248_262.py +0 -0
  284. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/tests/test_req_358_359.py +0 -0
  285. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/tests/test_scaffolder.py +0 -0
  286. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/tests/test_skill_marketplace.py +0 -0
  287. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/tests/test_skills_mcp.py +0 -0
  288. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/tests/test_smoke.py +0 -0
  289. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/tests/test_suggester.py +0 -0
  290. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/tests/test_tools.py +0 -0
  291. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/tests/test_validator.py +0 -0
  292. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/tests/test_vcs.py +0 -0
  293. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/tests/test_warp_parity.py +0 -0
  294. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev497}/tests/test_warp_parity_followup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: specsmith
3
- Version: 0.12.0.dev496
3
+ Version: 0.12.0.dev497
4
4
  Summary: Applied Epistemic Engineering toolkit — AEE agent sessions, execution profiles, FPGA/HDL governance, tool installer, 50+ CLI commands.
5
5
  Author: BitConcepts
6
6
  License-Expression: MIT
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "specsmith"
7
- version = "0.12.0.dev496"
7
+ version = "0.12.0.dev497"
8
8
  description = "Applied Epistemic Engineering toolkit — AEE agent sessions, execution profiles, FPGA/HDL governance, tool installer, 50+ CLI commands."
9
9
  readme = "README.md"
10
10
  license = "MIT"
@@ -724,6 +724,8 @@ def check_tool_configuration(root: Path) -> list[AuditResult]:
724
724
  # mismatch. See GitHub issue #194.
725
725
  _EXPLICIT_ONLY_TYPES: frozenset[str] = frozenset(
726
726
  [
727
+ # Hardware / vendor-specific types that cannot be auto-detected from
728
+ # file extensions (Python/C tooling dominates file counts).
727
729
  "fpga-rtl",
728
730
  "fpga-rtl-amd",
729
731
  "fpga-rtl-intel",
@@ -733,6 +735,23 @@ _EXPLICIT_ONLY_TYPES: frozenset[str] = frozenset(
733
735
  "embedded-hardware",
734
736
  "pcb-hardware",
735
737
  "yocto-bsp",
738
+ # Infrastructure types where auxiliary Python/JS glue code dominates
739
+ # and a generic detection pass would misclassify the primary type.
740
+ "kubernetes-operator",
741
+ "streaming-pipeline",
742
+ "serverless",
743
+ # AI / agent types: an LLM app is indistinguishable from a regular
744
+ # Python library unless dependency signals are present. Suppress
745
+ # false-positive mismatches when the type is set explicitly.
746
+ "agent-orchestration",
747
+ "mcp-server",
748
+ "rag-pipeline",
749
+ "mlops-platform",
750
+ # Game engines: Unity / Godot projects often have Python tooling alongside.
751
+ "game-unity",
752
+ "game-godot",
753
+ # Data warehouse: dbt + SQL projects have no primary-language file bias.
754
+ "data-warehouse",
736
755
  ]
737
756
  )
738
757
 
@@ -74,6 +74,28 @@ class ProjectType(str, Enum):
74
74
  SVELTEKIT_APP = "sveltekit-app" # SvelteKit app
75
75
  REMIX_APP = "remix-app" # Remix full-stack React app
76
76
  ASTRO_SITE = "astro-site" # Astro static/SSR site
77
+ # AI / LLM / Agents
78
+ LLM_APP = "llm-app" # LLM-powered app (LangChain / LlamaIndex / custom SDK)
79
+ AGENT_ORCHESTRATION = "agent-orchestration" # Multi-agent system (AutoGen/CrewAI/LangGraph)
80
+ MCP_SERVER = "mcp-server" # Model Context Protocol server
81
+ RAG_PIPELINE = "rag-pipeline" # RAG + embedding pipeline
82
+ MLOPS_PLATFORM = "mlops-platform" # MLOps platform (MLflow / BentoML / Ray Serve)
83
+ # JVM
84
+ JAVA_SPRING = "java-spring" # Spring Boot application
85
+ JAVA_LIBRARY = "java-library" # Java library / SDK
86
+ # Cloud / Infrastructure
87
+ SERVERLESS = "serverless" # FaaS (Lambda / GCP Functions / Cloudflare Workers)
88
+ KUBERNETES_OPERATOR = "kubernetes-operator" # K8s controller / operator
89
+ STREAMING_PIPELINE = "streaming-pipeline" # Kafka / Flink / Beam / Spark Streaming
90
+ DATA_WAREHOUSE = "data-warehouse" # dbt / Snowflake / BigQuery / Redshift
91
+ # Game development
92
+ GAME_UNITY = "game-unity" # Unity game project
93
+ GAME_GODOT = "game-godot" # Godot game project
94
+ # Web3 / blockchain
95
+ SMART_CONTRACT = "smart-contract" # Solidity / EVM smart contracts
96
+ # Desktop
97
+ DESKTOP_ELECTRON = "desktop-electron" # Electron desktop app
98
+ DESKTOP_TAURI = "desktop-tauri" # Tauri desktop app (Rust + WebView)
77
99
 
78
100
 
79
101
  class Platform(str, Enum):
@@ -548,6 +570,28 @@ _TYPE_LABELS: dict[str, str] = {
548
570
  ProjectType.SVELTEKIT_APP: "SvelteKit application",
549
571
  ProjectType.REMIX_APP: "Remix application (React + full-stack)",
550
572
  ProjectType.ASTRO_SITE: "Astro site (static / SSR)",
573
+ # AI / LLM / Agents
574
+ ProjectType.LLM_APP: "LLM-powered application (LangChain / LlamaIndex / custom)",
575
+ ProjectType.AGENT_ORCHESTRATION: "Multi-agent orchestration (AutoGen / CrewAI / LangGraph)",
576
+ ProjectType.MCP_SERVER: "MCP server (Model Context Protocol)",
577
+ ProjectType.RAG_PIPELINE: "RAG / embedding pipeline",
578
+ ProjectType.MLOPS_PLATFORM: "MLOps platform (MLflow / BentoML / Ray Serve)",
579
+ # JVM
580
+ ProjectType.JAVA_SPRING: "Java Spring Boot application",
581
+ ProjectType.JAVA_LIBRARY: "Java library / SDK",
582
+ # Cloud / Infrastructure
583
+ ProjectType.SERVERLESS: "Serverless / FaaS (Lambda / GCP Functions / Cloudflare Workers)",
584
+ ProjectType.KUBERNETES_OPERATOR: "Kubernetes operator / controller",
585
+ ProjectType.STREAMING_PIPELINE: "Streaming data pipeline (Kafka / Flink / Beam)",
586
+ ProjectType.DATA_WAREHOUSE: "Data warehouse (dbt / Snowflake / BigQuery)",
587
+ # Game development
588
+ ProjectType.GAME_UNITY: "Game (Unity)",
589
+ ProjectType.GAME_GODOT: "Game (Godot)",
590
+ # Web3
591
+ ProjectType.SMART_CONTRACT: "Smart contract (Solidity / EVM)",
592
+ # Desktop
593
+ ProjectType.DESKTOP_ELECTRON: "Desktop application (Electron)",
594
+ ProjectType.DESKTOP_TAURI: "Desktop application (Tauri — Rust + WebView)",
551
595
  }
552
596
 
553
597
  _SECTION_REFS: dict[str, str] = {
@@ -584,4 +628,26 @@ _SECTION_REFS: dict[str, str] = {
584
628
  ProjectType.EPISTEMIC_PIPELINE: "17.31",
585
629
  ProjectType.KNOWLEDGE_ENGINEERING: "17.32",
586
630
  ProjectType.AEE_RESEARCH: "17.33",
631
+ # AI / LLM / Agents
632
+ ProjectType.LLM_APP: "17.34",
633
+ ProjectType.AGENT_ORCHESTRATION: "17.35",
634
+ ProjectType.MCP_SERVER: "17.36",
635
+ ProjectType.RAG_PIPELINE: "17.37",
636
+ ProjectType.MLOPS_PLATFORM: "17.38",
637
+ # JVM
638
+ ProjectType.JAVA_SPRING: "17.39",
639
+ ProjectType.JAVA_LIBRARY: "17.40",
640
+ # Cloud / Infrastructure
641
+ ProjectType.SERVERLESS: "17.41",
642
+ ProjectType.KUBERNETES_OPERATOR: "17.42",
643
+ ProjectType.STREAMING_PIPELINE: "17.43",
644
+ ProjectType.DATA_WAREHOUSE: "17.44",
645
+ # Game development
646
+ ProjectType.GAME_UNITY: "17.45",
647
+ ProjectType.GAME_GODOT: "17.46",
648
+ # Web3
649
+ ProjectType.SMART_CONTRACT: "17.47",
650
+ # Desktop
651
+ ProjectType.DESKTOP_ELECTRON: "17.48",
652
+ ProjectType.DESKTOP_TAURI: "17.49",
587
653
  }
@@ -1142,15 +1142,81 @@ def _infer_type(result: DetectionResult) -> ProjectType:
1142
1142
  pkg = result.root / "package.json"
1143
1143
  if pkg.exists():
1144
1144
  content = pkg.read_text(encoding="utf-8")
1145
+ if "electron" in content:
1146
+ return ProjectType.DESKTOP_ELECTRON
1147
+ if "solidity" in content or "hardhat" in content or "ethers" in content:
1148
+ return ProjectType.SMART_CONTRACT
1149
+ if (result.root / "serverless.yml").exists() or (
1150
+ result.root / "wrangler.toml"
1151
+ ).exists():
1152
+ return ProjectType.SERVERLESS
1145
1153
  if "react" in content or "vue" in content or "angular" in content:
1146
1154
  # Check if there's also a server
1147
1155
  if (result.root / "server").exists() or "express" in content:
1148
1156
  return ProjectType.FULLSTACK_JS
1149
1157
  return ProjectType.WEB_FRONTEND
1158
+ # Tauri: has src-tauri/
1159
+ if (result.root / "src-tauri").is_dir():
1160
+ return ProjectType.DESKTOP_TAURI
1150
1161
  return ProjectType.FULLSTACK_JS
1151
1162
 
1163
+ # Data warehouse: dbt_project.yml is a strong signal
1164
+ if (result.root / "dbt_project.yml").exists():
1165
+ return ProjectType.DATA_WAREHOUSE
1166
+ # Kubernetes operator: Go + controllers/ dir
1167
+ if lang == "go" and (result.root / "controllers").is_dir():
1168
+ return ProjectType.KUBERNETES_OPERATOR
1169
+ # Serverless: serverless.yml or SAM template.yaml or wrangler.toml
1170
+ if (
1171
+ (result.root / "serverless.yml").exists()
1172
+ or (result.root / "serverless.yaml").exists()
1173
+ or (result.root / "wrangler.toml").exists()
1174
+ ):
1175
+ return ProjectType.SERVERLESS
1152
1176
  # Python types
1153
1177
  if lang == "python":
1178
+ # Detect AI / agent project types from dependencies before build-system checks
1179
+ _req_text = ""
1180
+ for _rf in (
1181
+ result.root / "requirements.txt",
1182
+ result.root / "pyproject.toml",
1183
+ ):
1184
+ if _rf.exists():
1185
+ _req_text += _rf.read_text(encoding="utf-8", errors="ignore").lower()
1186
+ _mcp_indicators = {"mcp", "model-context-protocol", "fastmcp", "modelcontextprotocol"}
1187
+ _agent_orch_indicators = {"autogen", "crewai", "langgraph", "swarm", "ag2", "pyautogen"}
1188
+ _llm_indicators = {
1189
+ "langchain",
1190
+ "llama-index",
1191
+ "llama_index",
1192
+ "haystack",
1193
+ "openai",
1194
+ "anthropic",
1195
+ "litellm",
1196
+ }
1197
+ _rag_indicators = {
1198
+ "chromadb",
1199
+ "faiss",
1200
+ "pinecone",
1201
+ "weaviate",
1202
+ "qdrant",
1203
+ "pgvector",
1204
+ "llama-index",
1205
+ }
1206
+ _mlops_indicators = {"mlflow", "bentoml", "ray", "kubeflow", "prefect", "airflow"}
1207
+ _streaming_indicators = {"kafka", "flink", "pyflink", "apache-beam", "pyspark"}
1208
+ if any(ind in _req_text for ind in _mcp_indicators):
1209
+ return ProjectType.MCP_SERVER
1210
+ if any(ind in _req_text for ind in _agent_orch_indicators):
1211
+ return ProjectType.AGENT_ORCHESTRATION
1212
+ if any(ind in _req_text for ind in _rag_indicators):
1213
+ return ProjectType.RAG_PIPELINE
1214
+ if any(ind in _req_text for ind in _mlops_indicators):
1215
+ return ProjectType.MLOPS_PLATFORM
1216
+ if any(ind in _req_text for ind in _streaming_indicators):
1217
+ return ProjectType.STREAMING_PIPELINE
1218
+ if any(ind in _req_text for ind in _llm_indicators):
1219
+ return ProjectType.LLM_APP
1154
1220
  if build in ("pyproject", "setuptools"):
1155
1221
  # Check for CLI entry point
1156
1222
  if any("cli.py" in e for e in result.entry_points):
@@ -435,6 +435,175 @@ def _get_empty_dirs(config: ProjectConfig, target: Path) -> list[Path]:
435
435
  target / "tests",
436
436
  ]
437
437
  )
438
+ # --- AI / LLM / Agents ---
439
+ elif config.type == ProjectType.LLM_APP:
440
+ dirs.extend(
441
+ [
442
+ target / "src" / config.package_name,
443
+ target / "src" / config.package_name / "agents",
444
+ target / "src" / config.package_name / "tools",
445
+ target / "src" / config.package_name / "prompts",
446
+ target / "tests",
447
+ ]
448
+ )
449
+ elif config.type == ProjectType.AGENT_ORCHESTRATION:
450
+ dirs.extend(
451
+ [
452
+ target / "src" / config.package_name,
453
+ target / "src" / config.package_name / "agents",
454
+ target / "src" / config.package_name / "tools",
455
+ target / "src" / config.package_name / "memory",
456
+ target / "tests",
457
+ target / "examples",
458
+ ]
459
+ )
460
+ elif config.type == ProjectType.MCP_SERVER:
461
+ dirs.extend(
462
+ [
463
+ target / "src" / config.package_name,
464
+ target / "src" / config.package_name / "tools",
465
+ target / "src" / config.package_name / "resources",
466
+ target / "tests",
467
+ ]
468
+ )
469
+ elif config.type == ProjectType.RAG_PIPELINE:
470
+ dirs.extend(
471
+ [
472
+ target / "src" / config.package_name,
473
+ target / "src" / config.package_name / "ingestion",
474
+ target / "src" / config.package_name / "retrieval",
475
+ target / "src" / config.package_name / "generation",
476
+ target / "data",
477
+ target / "tests",
478
+ ]
479
+ )
480
+ elif config.type == ProjectType.MLOPS_PLATFORM:
481
+ dirs.extend(
482
+ [
483
+ target / "src" / config.package_name,
484
+ target / "pipelines",
485
+ target / "models",
486
+ target / "experiments",
487
+ target / "serving",
488
+ target / "tests",
489
+ ]
490
+ )
491
+ # --- JVM ---
492
+ elif config.type == ProjectType.JAVA_SPRING:
493
+ dirs.extend(
494
+ [
495
+ target / "src/main/java",
496
+ target / "src/main/resources",
497
+ target / "src/test/java",
498
+ target / "src/test/resources",
499
+ ]
500
+ )
501
+ elif config.type == ProjectType.JAVA_LIBRARY:
502
+ dirs.extend(
503
+ [
504
+ target / "src/main/java",
505
+ target / "src/test/java",
506
+ target / "examples",
507
+ ]
508
+ )
509
+ # --- Cloud / Infrastructure ---
510
+ elif config.type == ProjectType.SERVERLESS:
511
+ dirs.extend(
512
+ [
513
+ target / "functions",
514
+ target / "shared",
515
+ target / "tests",
516
+ target / "infrastructure",
517
+ ]
518
+ )
519
+ elif config.type == ProjectType.KUBERNETES_OPERATOR:
520
+ dirs.extend(
521
+ [
522
+ target / "cmd/manager",
523
+ target / "controllers",
524
+ target / "api/v1alpha1",
525
+ target / "config/crd",
526
+ target / "config/rbac",
527
+ target / "config/manager",
528
+ target / "tests/e2e",
529
+ ]
530
+ )
531
+ elif config.type == ProjectType.STREAMING_PIPELINE:
532
+ dirs.extend(
533
+ [
534
+ target / "src" / config.package_name / "sources",
535
+ target / "src" / config.package_name / "transforms",
536
+ target / "src" / config.package_name / "sinks",
537
+ target / "tests",
538
+ target / "deploy",
539
+ ]
540
+ )
541
+ elif config.type == ProjectType.DATA_WAREHOUSE:
542
+ dirs.extend(
543
+ [
544
+ target / "models",
545
+ target / "models/staging",
546
+ target / "models/intermediate",
547
+ target / "models/marts",
548
+ target / "macros",
549
+ target / "tests",
550
+ target / "seeds",
551
+ target / "analyses",
552
+ ]
553
+ )
554
+ # --- Game development ---
555
+ elif config.type == ProjectType.GAME_UNITY:
556
+ dirs.extend(
557
+ [
558
+ target / "Assets/Scripts",
559
+ target / "Assets/Scenes",
560
+ target / "Assets/Prefabs",
561
+ target / "Assets/Materials",
562
+ target / "Assets/Audio",
563
+ target / "Assets/Tests",
564
+ ]
565
+ )
566
+ elif config.type == ProjectType.GAME_GODOT:
567
+ dirs.extend(
568
+ [
569
+ target / "scenes",
570
+ target / "scripts",
571
+ target / "assets/sprites",
572
+ target / "assets/audio",
573
+ target / "tests",
574
+ ]
575
+ )
576
+ # --- Web3 ---
577
+ elif config.type == ProjectType.SMART_CONTRACT:
578
+ dirs.extend(
579
+ [
580
+ target / "contracts",
581
+ target / "contracts/interfaces",
582
+ target / "scripts",
583
+ target / "test",
584
+ target / "deployments",
585
+ ]
586
+ )
587
+ # --- Desktop ---
588
+ elif config.type == ProjectType.DESKTOP_ELECTRON:
589
+ dirs.extend(
590
+ [
591
+ target / "src/main",
592
+ target / "src/renderer",
593
+ target / "src/shared",
594
+ target / "tests",
595
+ target / "build",
596
+ ]
597
+ )
598
+ elif config.type == ProjectType.DESKTOP_TAURI:
599
+ dirs.extend(
600
+ [
601
+ target / "src",
602
+ target / "src-tauri/src",
603
+ target / "src-tauri/icons",
604
+ target / "tests",
605
+ ]
606
+ )
438
607
  # --- AEE / Epistemic project types ---
439
608
  elif config.type == ProjectType.EPISTEMIC_PIPELINE:
440
609
  dirs.extend(
@@ -56,6 +56,12 @@ class SkillDomain(str, Enum):
56
56
  PRODUCTIVITY = "productivity"
57
57
  CORPORATE = "corporate"
58
58
  DOCS = "docs" # documentation systems — H23/H24
59
+ # New domains
60
+ AI_AGENTS = "ai-agents" # LLM/agent development, RAG, MCP, MLOps
61
+ SOFTWARE_ENGINEERING = "software-engineering" # code review, TDD, debugging, security
62
+ WEB_BACKEND = "web-backend" # frontend, REST, GraphQL, databases, caching
63
+ DATA_ENGINEERING = "data-engineering" # ETL, dbt, Spark, data quality
64
+ PLATFORM_ENGINEERING = "platform-engineering" # K8s, observability, GitOps, secrets
59
65
 
60
66
 
61
67
  # ---------------------------------------------------------------------------
@@ -112,18 +118,23 @@ _CATALOG: list[SkillEntry] | None = None
112
118
  def _build_catalog() -> list[SkillEntry]:
113
119
  """Import every domain module and concatenate their SKILLS lists."""
114
120
  from specsmith.skills import ( # noqa: PLC0415
121
+ ai_agents,
115
122
  cloud,
116
123
  corporate,
117
124
  cross_platform,
125
+ data_engineering,
118
126
  devops,
119
127
  docs,
120
128
  embedded,
121
129
  governance,
122
130
  hardware,
123
131
  mobile,
132
+ platform_engineering,
124
133
  productivity,
134
+ software_engineering,
125
135
  specsmith_skills,
126
136
  ssh,
137
+ web_backend,
127
138
  )
128
139
 
129
140
  return (
@@ -139,6 +150,12 @@ def _build_catalog() -> list[SkillEntry]:
139
150
  + corporate.SKILLS
140
151
  + docs.SKILLS
141
152
  + specsmith_skills.SKILLS
153
+ # New domains
154
+ + ai_agents.SKILLS
155
+ + software_engineering.SKILLS
156
+ + web_backend.SKILLS
157
+ + data_engineering.SKILLS
158
+ + platform_engineering.SKILLS
142
159
  )
143
160
 
144
161