specsmith 0.12.0.dev496__tar.gz → 0.12.0.dev498__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.dev498}/PKG-INFO +46 -9
  2. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/README.md +45 -8
  3. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/pyproject.toml +1 -1
  4. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/auditor.py +19 -0
  5. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/config.py +66 -0
  6. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/importer.py +66 -0
  7. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/scaffolder.py +169 -0
  8. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/skills/__init__.py +17 -0
  9. specsmith-0.12.0.dev498/src/specsmith/skills/ai_agents.py +1439 -0
  10. specsmith-0.12.0.dev498/src/specsmith/skills/data_engineering.py +960 -0
  11. specsmith-0.12.0.dev498/src/specsmith/skills/platform_engineering.py +1391 -0
  12. specsmith-0.12.0.dev498/src/specsmith/skills/software_engineering.py +1291 -0
  13. specsmith-0.12.0.dev498/src/specsmith/skills/web_backend.py +1427 -0
  14. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/tools.py +123 -0
  15. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498/src/specsmith.egg-info}/PKG-INFO +46 -9
  16. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith.egg-info/SOURCES.txt +5 -0
  17. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/LICENSE +0 -0
  18. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/setup.cfg +0 -0
  19. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/epistemic/__init__.py +0 -0
  20. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/epistemic/belief.py +0 -0
  21. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/epistemic/certainty.py +0 -0
  22. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/epistemic/failure_graph.py +0 -0
  23. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/epistemic/py.typed +0 -0
  24. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/epistemic/recovery.py +0 -0
  25. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/epistemic/session.py +0 -0
  26. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/epistemic/stress_tester.py +0 -0
  27. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/epistemic/trace.py +0 -0
  28. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/__init__.py +0 -0
  29. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/__main__.py +0 -0
  30. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/agent/__init__.py +0 -0
  31. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/agent/broker.py +0 -0
  32. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/agent/chat_runner.py +0 -0
  33. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/agent/cleanup.py +0 -0
  34. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/agent/context_seed.py +0 -0
  35. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/agent/core.py +0 -0
  36. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/agent/dispatch/__init__.py +0 -0
  37. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/agent/dispatch/_status.py +0 -0
  38. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/agent/dispatch/dag.py +0 -0
  39. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/agent/dispatch/dispatcher.py +0 -0
  40. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/agent/dispatch/events.py +0 -0
  41. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/agent/dispatch/result.py +0 -0
  42. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/agent/endpoints.py +0 -0
  43. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/agent/events.py +0 -0
  44. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/agent/execution_profiles.py +0 -0
  45. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/agent/fallback.py +0 -0
  46. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/agent/hf_leaderboard.py +0 -0
  47. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/agent/hf_sync.py +0 -0
  48. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/agent/indexer.py +0 -0
  49. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/agent/llm_client.py +0 -0
  50. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/agent/mcp.py +0 -0
  51. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/agent/memory.py +0 -0
  52. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/agent/model_intelligence.py +0 -0
  53. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/agent/model_profiles.py +0 -0
  54. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/agent/orchestrator.py +0 -0
  55. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/agent/permissions.py +0 -0
  56. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/agent/profiles.py +0 -0
  57. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/agent/provider_registry.py +0 -0
  58. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/agent/repl.py +0 -0
  59. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/agent/router.py +0 -0
  60. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/agent/rules.py +0 -0
  61. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/agent/runner.py +0 -0
  62. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/agent/safety.py +0 -0
  63. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/agent/spawner.py +0 -0
  64. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/agent/suggester.py +0 -0
  65. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/agent/teams.py +0 -0
  66. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/agent/tools.py +0 -0
  67. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/agent/verifier.py +0 -0
  68. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/agent/voice.py +0 -0
  69. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/architect.py +0 -0
  70. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/auth.py +0 -0
  71. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/block_export.py +0 -0
  72. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/channel.py +0 -0
  73. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/ci_manager.py +0 -0
  74. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/cli.py +0 -0
  75. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/commands/__init__.py +0 -0
  76. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/commands/intelligence.py +0 -0
  77. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/compliance/__init__.py +0 -0
  78. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/compliance/_compat.py +0 -0
  79. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/compliance/checker.py +0 -0
  80. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/compliance/evidence.py +0 -0
  81. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/compliance/regulations.py +0 -0
  82. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/compliance/reporter.py +0 -0
  83. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/compressor.py +0 -0
  84. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/console_utils.py +0 -0
  85. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/context_orchestrator.py +0 -0
  86. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/context_window.py +0 -0
  87. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/credit_analyzer.py +0 -0
  88. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/credits.py +0 -0
  89. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/datasources/__init__.py +0 -0
  90. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/datasources/base.py +0 -0
  91. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/datasources/citations.py +0 -0
  92. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/datasources/fpd.py +0 -0
  93. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/datasources/odp.py +0 -0
  94. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/datasources/patentsview.py +0 -0
  95. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/datasources/pfw.py +0 -0
  96. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/datasources/ppubs.py +0 -0
  97. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/datasources/ptab.py +0 -0
  98. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/differ.py +0 -0
  99. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/doctor.py +0 -0
  100. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/drive.py +0 -0
  101. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/editor.py +0 -0
  102. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/epistemic/__init__.py +0 -0
  103. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/epistemic/belief.py +0 -0
  104. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/epistemic/certainty.py +0 -0
  105. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/epistemic/failure_graph.py +0 -0
  106. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/epistemic/recovery.py +0 -0
  107. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/epistemic/stress_tester.py +0 -0
  108. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/esdb/__init__.py +0 -0
  109. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/esdb/bridge.py +0 -0
  110. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/eval/__init__.py +0 -0
  111. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/eval/builtins.py +0 -0
  112. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/eval/runner.py +0 -0
  113. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/executor.py +0 -0
  114. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/exporter.py +0 -0
  115. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/governance_logic.py +0 -0
  116. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/governance_store.py +0 -0
  117. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/governance_yaml.py +0 -0
  118. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/gui/__init__.py +0 -0
  119. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/gui/app.py +0 -0
  120. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/gui/main_window.py +0 -0
  121. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/gui/session_tab.py +0 -0
  122. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/gui/theme.py +0 -0
  123. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/gui/widgets/__init__.py +0 -0
  124. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/gui/widgets/chat_view.py +0 -0
  125. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/gui/widgets/input_bar.py +0 -0
  126. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/gui/widgets/provider_bar.py +0 -0
  127. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/gui/widgets/token_meter.py +0 -0
  128. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/gui/widgets/tool_panel.py +0 -0
  129. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/gui/widgets/update_checker.py +0 -0
  130. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/gui/worker.py +0 -0
  131. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/history_search.py +0 -0
  132. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/instinct.py +0 -0
  133. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/integrations/__init__.py +0 -0
  134. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/integrations/agent_skill.py +0 -0
  135. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/integrations/aider.py +0 -0
  136. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/integrations/base.py +0 -0
  137. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/integrations/claude_code.py +0 -0
  138. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/integrations/codity.py +0 -0
  139. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/integrations/copilot.py +0 -0
  140. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/integrations/cursor.py +0 -0
  141. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/integrations/gemini.py +0 -0
  142. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/integrations/windsurf.py +0 -0
  143. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/issue_reporter.py +0 -0
  144. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/languages.py +0 -0
  145. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/ledger.py +0 -0
  146. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/mcp_generator.py +0 -0
  147. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/mcp_server.py +0 -0
  148. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/migrations/__init__.py +0 -0
  149. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/migrations/m001_governance_yaml.py +0 -0
  150. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/migrations/m002_agents_slim.py +0 -0
  151. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/migrations/m003_compliance_init.py +0 -0
  152. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/migrations/m004_ledger_esdb.py +0 -0
  153. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/migrations/m005_agent_run_tool.py +0 -0
  154. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/migrations/m006_session_governance.py +0 -0
  155. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/migrations/runner.py +0 -0
  156. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/ollama_cmds.py +0 -0
  157. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/patent.py +0 -0
  158. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/paths.py +0 -0
  159. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/phase.py +0 -0
  160. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/plugins.py +0 -0
  161. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/profiles.py +0 -0
  162. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/rate_limits.py +0 -0
  163. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/releaser.py +0 -0
  164. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/requirements.py +0 -0
  165. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/requirements_parser.py +0 -0
  166. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/retrieval.py +0 -0
  167. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/safe_write.py +0 -0
  168. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/serve.py +0 -0
  169. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/session.py +0 -0
  170. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/session_init.py +0 -0
  171. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/session_store.py +0 -0
  172. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/skills/cloud.py +0 -0
  173. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/skills/corporate.py +0 -0
  174. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/skills/cross_platform.py +0 -0
  175. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/skills/devops.py +0 -0
  176. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/skills/docs.py +0 -0
  177. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/skills/embedded.py +0 -0
  178. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/skills/governance.py +0 -0
  179. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/skills/hardware.py +0 -0
  180. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/skills/mobile.py +0 -0
  181. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/skills/productivity.py +0 -0
  182. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/skills/specsmith_skills.py +0 -0
  183. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/skills/ssh.py +0 -0
  184. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/skills_builder.py +0 -0
  185. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/sync.py +0 -0
  186. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/templates/agents.md.j2 +0 -0
  187. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/templates/community/bug_report.md.j2 +0 -0
  188. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/templates/community/code_of_conduct.md.j2 +0 -0
  189. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/templates/community/contributing.md.j2 +0 -0
  190. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/templates/community/feature_request.md.j2 +0 -0
  191. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/templates/community/license-Apache-2.0.j2 +0 -0
  192. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/templates/community/license-MIT.j2 +0 -0
  193. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/templates/community/pull_request_template.md.j2 +0 -0
  194. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/templates/community/security.md.j2 +0 -0
  195. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/templates/docs/architecture.md.j2 +0 -0
  196. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/templates/docs/mkdocs.yml.j2 +0 -0
  197. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/templates/docs/readthedocs.yaml.j2 +0 -0
  198. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/templates/docs/requirements.md.j2 +0 -0
  199. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/templates/docs/test-spec.md.j2 +0 -0
  200. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/templates/editorconfig.j2 +0 -0
  201. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/templates/gitattributes.j2 +0 -0
  202. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/templates/gitignore.j2 +0 -0
  203. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/templates/go/go.mod.j2 +0 -0
  204. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/templates/go/main.go.j2 +0 -0
  205. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/templates/governance/belief-registry.md.j2 +0 -0
  206. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/templates/governance/context-budget.md.j2 +0 -0
  207. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/templates/governance/drift-metrics.md.j2 +0 -0
  208. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/templates/governance/epistemic-axioms.md.j2 +0 -0
  209. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/templates/governance/failure-modes.md.j2 +0 -0
  210. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/templates/governance/lifecycle.md.j2 +0 -0
  211. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/templates/governance/roles.md.j2 +0 -0
  212. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/templates/governance/rules.md.j2 +0 -0
  213. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/templates/governance/session-protocol.md.j2 +0 -0
  214. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/templates/governance/uncertainty-map.md.j2 +0 -0
  215. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/templates/governance/verification.md.j2 +0 -0
  216. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/templates/js/package.json.j2 +0 -0
  217. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/templates/ledger.md.j2 +0 -0
  218. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/templates/python/cli.py.j2 +0 -0
  219. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/templates/python/init.py.j2 +0 -0
  220. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/templates/python/pyproject.toml.j2 +0 -0
  221. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/templates/readme.md.j2 +0 -0
  222. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/templates/rust/Cargo.toml.j2 +0 -0
  223. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/templates/rust/main.rs.j2 +0 -0
  224. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/templates/scripts/exec.cmd.j2 +0 -0
  225. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/templates/scripts/exec.sh.j2 +0 -0
  226. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/templates/scripts/run.cmd.j2 +0 -0
  227. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/templates/scripts/run.sh.j2 +0 -0
  228. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/templates/scripts/setup.cmd.j2 +0 -0
  229. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/templates/scripts/setup.sh.j2 +0 -0
  230. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/templates/workflows/release.yml.j2 +0 -0
  231. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/tool_installer.py +0 -0
  232. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/toolrules.py +0 -0
  233. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/trace.py +0 -0
  234. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/updater.py +0 -0
  235. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/upgrader.py +0 -0
  236. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/validator.py +0 -0
  237. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/vcs/__init__.py +0 -0
  238. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/vcs/base.py +0 -0
  239. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/vcs/bitbucket.py +0 -0
  240. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/vcs/github.py +0 -0
  241. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/vcs/gitlab.py +0 -0
  242. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/vcs_commands.py +0 -0
  243. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/wireframes.py +0 -0
  244. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith/workspace.py +0 -0
  245. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith.egg-info/dependency_links.txt +0 -0
  246. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith.egg-info/entry_points.txt +0 -0
  247. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith.egg-info/requires.txt +0 -0
  248. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/src/specsmith.egg-info/top_level.txt +0 -0
  249. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/tests/test_CMD_001.py +0 -0
  250. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/tests/test_agent_profiles.py +0 -0
  251. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/tests/test_agent_run_feedback.py +0 -0
  252. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/tests/test_agent_runner_ready.py +0 -0
  253. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/tests/test_ai_client.py +0 -0
  254. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/tests/test_ai_intelligence.py +0 -0
  255. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/tests/test_auditor.py +0 -0
  256. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/tests/test_channel.py +0 -0
  257. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/tests/test_chat_diff_decision.py +0 -0
  258. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/tests/test_chat_runner_openai_compat.py +0 -0
  259. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/tests/test_chat_stdin_protocol.py +0 -0
  260. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/tests/test_cli.py +0 -0
  261. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/tests/test_cli_workflows_history_drive.py +0 -0
  262. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/tests/test_compliance.py +0 -0
  263. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/tests/test_compressor.py +0 -0
  264. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/tests/test_dispatch.py +0 -0
  265. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/tests/test_e2e_nexus.py +0 -0
  266. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/tests/test_endpoints_cli.py +0 -0
  267. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/tests/test_endpoints_store.py +0 -0
  268. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/tests/test_epistemic.py +0 -0
  269. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/tests/test_fallback_chain.py +0 -0
  270. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/tests/test_importer.py +0 -0
  271. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/tests/test_integrations.py +0 -0
  272. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/tests/test_integrations_codity.py +0 -0
  273. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/tests/test_intelligence.py +0 -0
  274. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/tests/test_issue_reporter.py +0 -0
  275. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/tests/test_mcp_client.py +0 -0
  276. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/tests/test_mcp_server.py +0 -0
  277. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/tests/test_new_modules.py +0 -0
  278. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/tests/test_nexus.py +0 -0
  279. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/tests/test_permissions.py +0 -0
  280. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/tests/test_phase1_4_new.py +0 -0
  281. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/tests/test_phase34_completion.py +0 -0
  282. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/tests/test_rate_limits.py +0 -0
  283. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/tests/test_req_248_262.py +0 -0
  284. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/tests/test_req_358_359.py +0 -0
  285. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/tests/test_scaffolder.py +0 -0
  286. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/tests/test_skill_marketplace.py +0 -0
  287. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/tests/test_skills_mcp.py +0 -0
  288. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/tests/test_smoke.py +0 -0
  289. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/tests/test_suggester.py +0 -0
  290. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/tests/test_tools.py +0 -0
  291. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/tests/test_validator.py +0 -0
  292. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/tests/test_vcs.py +0 -0
  293. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/tests/test_warp_parity.py +0 -0
  294. {specsmith-0.12.0.dev496 → specsmith-0.12.0.dev498}/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.dev498
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
@@ -87,7 +87,7 @@ specsmith treats belief systems like code: codable, testable, and deployable. It
87
87
  epistemically-governed projects, stress-tests requirements as BeliefArtifacts, runs
88
88
  cryptographically-sealed trace vaults, and orchestrates AI agents under formal AEE governance.
89
89
 
90
- **v0.12.0 — Native Warp/Oz MCP governance server, repository workflows, 72 built-in skills, EU AI Act / NIST AI RMF compliance, multi-agent DAG dispatch, and context window management.**
90
+ **v0.12.0 — Native Warp/Oz MCP governance server, 131 built-in skills across 16 domains, 53 project types, EU AI Act / NIST AI RMF compliance, multi-agent DAG dispatch, and context window management.**
91
91
  Specsmith ships a full compliance and auditability layer aligned to the EU AI Act (2024/1689)
92
92
  and the NIST AI Risk Management Framework 1.0. Every agent action is cryptographically sealed,
93
93
  every AI-generated output is disclosed, context windows are GPU-aware and protected against
@@ -862,17 +862,33 @@ Supported tools: **Synthesis:** vivado, quartus, radiant, diamond, gowin.
862
862
 
863
863
  ---
864
864
 
865
- ## 47 Project Types
865
+ ## 53 Project Types
866
866
 
867
- **Software:** Python CLI/lib/web/API, Rust, Go, C/C++, .NET, Node.js/TypeScript, mobile, microservices, data/ML.
867
+ **Python:** `cli-python`, `library-python`, `backend-frontend`, `backend-frontend-tray`, `embedded-python-hmi`, `research-python`.
868
868
 
869
- **Modern web:** `nextjs-app`, `nuxt-app`, `sveltekit-app`, `remix-app`, `astro-site`.
869
+ **Systems languages:** `cli-rust`, `library-rust`, `cli-go`, `cli-c`, `library-c`, `dotnet-app`.
870
870
 
871
- **Hardware/Embedded:** FPGA/RTL (Xilinx, Intel, Lattice, generic), Yocto BSP, embedded C/C++, PCB.
871
+ **Modern web:** `web-frontend`, `fullstack-js`, `nextjs-app`, `nuxt-app`, `sveltekit-app`, `remix-app`, `astro-site`.
872
872
 
873
- **Documents & IP:** Technical specs, research papers, API specs, requirements management, patent prosecution.
873
+ **AI / Agents:** `llm-app`, `agent-orchestration`, `mcp-server`, `rag-pipeline`, `mlops-platform`.
874
874
 
875
- **Business/Legal:** Business plans, patent applications, compliance frameworks, legal compliance.
875
+ **JVM:** `java-spring`, `java-library`.
876
+
877
+ **Mobile:** `mobile-app`.
878
+
879
+ **Infrastructure:** `serverless`, `kubernetes-operator`, `microservices`, `devops-iac`, `streaming-pipeline`, `data-warehouse`, `data-ml`.
880
+
881
+ **Game development:** `game-unity`, `game-godot`.
882
+
883
+ **Web3:** `smart-contract`.
884
+
885
+ **Desktop:** `desktop-electron`, `desktop-tauri`.
886
+
887
+ **Hardware / Embedded:** `fpga-rtl`, `fpga-rtl-amd`, `fpga-rtl-intel`, `fpga-rtl-lattice`, `mixed-fpga-embedded`, `mixed-fpga-firmware`, `yocto-bsp`, `embedded-hardware`, `pcb-hardware`, `safety-critical`.
888
+
889
+ **Documents & IP:** `spec-document`, `user-manual`, `research-paper`, `research-python`, `api-specification`, `requirements-mgmt`, `patent-application`, `patent-prosecution`.
890
+
891
+ **Business / Legal / AEE:** `business-plan`, `legal-compliance`, `monorepo`, `browser-extension`, `epistemic-pipeline`, `knowledge-engineering`, `aee-research`.
876
892
 
877
893
  ---
878
894
 
@@ -959,7 +975,7 @@ See the `codity-ai-review` governance skill (`specsmith skill install codity-ai-
959
975
 
960
976
  ## Skills
961
977
 
962
- specsmith ships **70+ built-in skills** across 11 domains that AI agents (Warp, Claude Code, Codex, Cursor) can install and use.
978
+ specsmith ships **131 built-in skills** across 16 domains that AI agents (Warp, Claude Code, Codex, Cursor) can install and use.
963
979
 
964
980
  ```bash
965
981
  # List all available skills
@@ -976,6 +992,27 @@ specsmith skill install specsmith-audit
976
992
 
977
993
  Skills are installed as `.agents/skills/<slug>/SKILL.md` and are auto-discovered by any AI tool that scans `.agents/skills/`.
978
994
 
995
+ ### Skill domains
996
+
997
+ | Domain | Count | Coverage |
998
+ |--------|-------|----------|
999
+ | `governance` | 14 | AEE workflows, verification, release, CI polling, patent prosecution |
1000
+ | `ai-agents` | 14 | LLM apps, MCP servers, agent orchestration, RAG, prompt engineering, fine-tuning, MLOps |
1001
+ | `software-engineering` | 12 | Code review, TDD, debugging, security hardening, API design, ADRs |
1002
+ | `web-backend` | 11 | Frontend UI, Next.js, REST/GraphQL, PostgreSQL, Redis, WebSockets |
1003
+ | `platform-engineering` | 10 | Helm, observability, GitOps, secrets, OAuth2, chaos engineering |
1004
+ | `embedded` | 10 | Zephyr, Yocto, FreeRTOS, NuttX, Buildroot, Azure RTOS |
1005
+ | `docs` | 10 | MkDocs, Sphinx, Doxygen, JSDoc, OpenAPI, mdBook |
1006
+ | `data-engineering` | 8 | ETL/ELT, dbt, Spark, data quality, feature stores, Delta Lake |
1007
+ | `hardware` | 9 | KiCad, Altium, Vivado, Quartus, GTKWave, JTAG |
1008
+ | `corporate` | 7 | Budgets, fundraising, marketing, HR, legal |
1009
+ | `devops` | 6 | Docker, Kubernetes, Terraform, GitHub Actions |
1010
+ | `cloud` | 4 | AWS, Azure, GCP, GitHub CLI |
1011
+ | `mobile` | 4 | iOS, Android, Flutter, React Native |
1012
+ | `ssh` | 3 | SSH, WSL2, remote dev |
1013
+ | `cross-platform` | 3 | CMake, package managers, terminal awareness |
1014
+ | `productivity` | 3 | Email, presentations, MS Office |
1015
+
979
1016
  ### Self-referential governance skills
980
1017
 
981
1018
  Three skills document specsmith itself:
@@ -15,7 +15,7 @@ specsmith treats belief systems like code: codable, testable, and deployable. It
15
15
  epistemically-governed projects, stress-tests requirements as BeliefArtifacts, runs
16
16
  cryptographically-sealed trace vaults, and orchestrates AI agents under formal AEE governance.
17
17
 
18
- **v0.12.0 — Native Warp/Oz MCP governance server, repository workflows, 72 built-in skills, EU AI Act / NIST AI RMF compliance, multi-agent DAG dispatch, and context window management.**
18
+ **v0.12.0 — Native Warp/Oz MCP governance server, 131 built-in skills across 16 domains, 53 project types, EU AI Act / NIST AI RMF compliance, multi-agent DAG dispatch, and context window management.**
19
19
  Specsmith ships a full compliance and auditability layer aligned to the EU AI Act (2024/1689)
20
20
  and the NIST AI Risk Management Framework 1.0. Every agent action is cryptographically sealed,
21
21
  every AI-generated output is disclosed, context windows are GPU-aware and protected against
@@ -790,17 +790,33 @@ Supported tools: **Synthesis:** vivado, quartus, radiant, diamond, gowin.
790
790
 
791
791
  ---
792
792
 
793
- ## 47 Project Types
793
+ ## 53 Project Types
794
794
 
795
- **Software:** Python CLI/lib/web/API, Rust, Go, C/C++, .NET, Node.js/TypeScript, mobile, microservices, data/ML.
795
+ **Python:** `cli-python`, `library-python`, `backend-frontend`, `backend-frontend-tray`, `embedded-python-hmi`, `research-python`.
796
796
 
797
- **Modern web:** `nextjs-app`, `nuxt-app`, `sveltekit-app`, `remix-app`, `astro-site`.
797
+ **Systems languages:** `cli-rust`, `library-rust`, `cli-go`, `cli-c`, `library-c`, `dotnet-app`.
798
798
 
799
- **Hardware/Embedded:** FPGA/RTL (Xilinx, Intel, Lattice, generic), Yocto BSP, embedded C/C++, PCB.
799
+ **Modern web:** `web-frontend`, `fullstack-js`, `nextjs-app`, `nuxt-app`, `sveltekit-app`, `remix-app`, `astro-site`.
800
800
 
801
- **Documents & IP:** Technical specs, research papers, API specs, requirements management, patent prosecution.
801
+ **AI / Agents:** `llm-app`, `agent-orchestration`, `mcp-server`, `rag-pipeline`, `mlops-platform`.
802
802
 
803
- **Business/Legal:** Business plans, patent applications, compliance frameworks, legal compliance.
803
+ **JVM:** `java-spring`, `java-library`.
804
+
805
+ **Mobile:** `mobile-app`.
806
+
807
+ **Infrastructure:** `serverless`, `kubernetes-operator`, `microservices`, `devops-iac`, `streaming-pipeline`, `data-warehouse`, `data-ml`.
808
+
809
+ **Game development:** `game-unity`, `game-godot`.
810
+
811
+ **Web3:** `smart-contract`.
812
+
813
+ **Desktop:** `desktop-electron`, `desktop-tauri`.
814
+
815
+ **Hardware / Embedded:** `fpga-rtl`, `fpga-rtl-amd`, `fpga-rtl-intel`, `fpga-rtl-lattice`, `mixed-fpga-embedded`, `mixed-fpga-firmware`, `yocto-bsp`, `embedded-hardware`, `pcb-hardware`, `safety-critical`.
816
+
817
+ **Documents & IP:** `spec-document`, `user-manual`, `research-paper`, `research-python`, `api-specification`, `requirements-mgmt`, `patent-application`, `patent-prosecution`.
818
+
819
+ **Business / Legal / AEE:** `business-plan`, `legal-compliance`, `monorepo`, `browser-extension`, `epistemic-pipeline`, `knowledge-engineering`, `aee-research`.
804
820
 
805
821
  ---
806
822
 
@@ -887,7 +903,7 @@ See the `codity-ai-review` governance skill (`specsmith skill install codity-ai-
887
903
 
888
904
  ## Skills
889
905
 
890
- specsmith ships **70+ built-in skills** across 11 domains that AI agents (Warp, Claude Code, Codex, Cursor) can install and use.
906
+ specsmith ships **131 built-in skills** across 16 domains that AI agents (Warp, Claude Code, Codex, Cursor) can install and use.
891
907
 
892
908
  ```bash
893
909
  # List all available skills
@@ -904,6 +920,27 @@ specsmith skill install specsmith-audit
904
920
 
905
921
  Skills are installed as `.agents/skills/<slug>/SKILL.md` and are auto-discovered by any AI tool that scans `.agents/skills/`.
906
922
 
923
+ ### Skill domains
924
+
925
+ | Domain | Count | Coverage |
926
+ |--------|-------|----------|
927
+ | `governance` | 14 | AEE workflows, verification, release, CI polling, patent prosecution |
928
+ | `ai-agents` | 14 | LLM apps, MCP servers, agent orchestration, RAG, prompt engineering, fine-tuning, MLOps |
929
+ | `software-engineering` | 12 | Code review, TDD, debugging, security hardening, API design, ADRs |
930
+ | `web-backend` | 11 | Frontend UI, Next.js, REST/GraphQL, PostgreSQL, Redis, WebSockets |
931
+ | `platform-engineering` | 10 | Helm, observability, GitOps, secrets, OAuth2, chaos engineering |
932
+ | `embedded` | 10 | Zephyr, Yocto, FreeRTOS, NuttX, Buildroot, Azure RTOS |
933
+ | `docs` | 10 | MkDocs, Sphinx, Doxygen, JSDoc, OpenAPI, mdBook |
934
+ | `data-engineering` | 8 | ETL/ELT, dbt, Spark, data quality, feature stores, Delta Lake |
935
+ | `hardware` | 9 | KiCad, Altium, Vivado, Quartus, GTKWave, JTAG |
936
+ | `corporate` | 7 | Budgets, fundraising, marketing, HR, legal |
937
+ | `devops` | 6 | Docker, Kubernetes, Terraform, GitHub Actions |
938
+ | `cloud` | 4 | AWS, Azure, GCP, GitHub CLI |
939
+ | `mobile` | 4 | iOS, Android, Flutter, React Native |
940
+ | `ssh` | 3 | SSH, WSL2, remote dev |
941
+ | `cross-platform` | 3 | CMake, package managers, terminal awareness |
942
+ | `productivity` | 3 | Email, presentations, MS Office |
943
+
907
944
  ### Self-referential governance skills
908
945
 
909
946
  Three skills document specsmith itself:
@@ -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.dev498"
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