gdmcode 0.1.6__tar.gz → 0.1.8__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 (267) hide show
  1. {gdmcode-0.1.6 → gdmcode-0.1.8}/PKG-INFO +1 -1
  2. gdmcode-0.1.8/gdmcode/__init__.py +1 -0
  3. {gdmcode-0.1.6 → gdmcode-0.1.8}/gdmcode/cli.py +5 -4
  4. {gdmcode-0.1.6 → gdmcode-0.1.8}/gdmcode/integrations/mcp_server.py +1 -1
  5. {gdmcode-0.1.6 → gdmcode-0.1.8}/gdmcode/repl.py +33 -5
  6. {gdmcode-0.1.6 → gdmcode-0.1.8}/pyproject.toml +1 -1
  7. {gdmcode-0.1.6 → gdmcode-0.1.8}/tests/test_cli_smoke.py +19 -0
  8. {gdmcode-0.1.6 → gdmcode-0.1.8}/tests/test_repl_smoke.py +22 -0
  9. gdmcode-0.1.6/gdmcode/__init__.py +0 -1
  10. {gdmcode-0.1.6 → gdmcode-0.1.8}/.gitignore +0 -0
  11. {gdmcode-0.1.6 → gdmcode-0.1.8}/CONTRIBUTING.md +0 -0
  12. {gdmcode-0.1.6 → gdmcode-0.1.8}/README.md +0 -0
  13. {gdmcode-0.1.6 → gdmcode-0.1.8}/config.toml +0 -0
  14. {gdmcode-0.1.6 → gdmcode-0.1.8}/docs/agentic-runtime-audit.md +0 -0
  15. {gdmcode-0.1.6 → gdmcode-0.1.8}/docs/architecture.md +0 -0
  16. {gdmcode-0.1.6 → gdmcode-0.1.8}/docs/cli-reference.md +0 -0
  17. {gdmcode-0.1.6 → gdmcode-0.1.8}/docs/configuration.md +0 -0
  18. {gdmcode-0.1.6 → gdmcode-0.1.8}/docs/deployment.md +0 -0
  19. {gdmcode-0.1.6 → gdmcode-0.1.8}/docs/plugin-guide.md +0 -0
  20. {gdmcode-0.1.6 → gdmcode-0.1.8}/docs/quick-start.md +0 -0
  21. {gdmcode-0.1.6 → gdmcode-0.1.8}/docs/security-hardening.md +0 -0
  22. {gdmcode-0.1.6 → gdmcode-0.1.8}/gdmcode/_internal/__init__.py +0 -0
  23. {gdmcode-0.1.6 → gdmcode-0.1.8}/gdmcode/_internal/constants.py +0 -0
  24. {gdmcode-0.1.6 → gdmcode-0.1.8}/gdmcode/_internal/domain_skills.py +0 -0
  25. {gdmcode-0.1.6 → gdmcode-0.1.8}/gdmcode/agent/__init__.py +0 -0
  26. {gdmcode-0.1.6 → gdmcode-0.1.8}/gdmcode/agent/commit_classifier.py +0 -0
  27. {gdmcode-0.1.6 → gdmcode-0.1.8}/gdmcode/agent/context_budget.py +0 -0
  28. {gdmcode-0.1.6 → gdmcode-0.1.8}/gdmcode/agent/daemon.py +0 -0
  29. {gdmcode-0.1.6 → gdmcode-0.1.8}/gdmcode/agent/dag_validator.py +0 -0
  30. {gdmcode-0.1.6 → gdmcode-0.1.8}/gdmcode/agent/debug_loop.py +0 -0
  31. {gdmcode-0.1.6 → gdmcode-0.1.8}/gdmcode/agent/impact_analyzer.py +0 -0
  32. {gdmcode-0.1.6 → gdmcode-0.1.8}/gdmcode/agent/impact_graph.py +0 -0
  33. {gdmcode-0.1.6 → gdmcode-0.1.8}/gdmcode/agent/loop.py +0 -0
  34. {gdmcode-0.1.6 → gdmcode-0.1.8}/gdmcode/agent/orchestrator.py +0 -0
  35. {gdmcode-0.1.6 → gdmcode-0.1.8}/gdmcode/agent/regression_guard.py +0 -0
  36. {gdmcode-0.1.6 → gdmcode-0.1.8}/gdmcode/agent/review_gate.py +0 -0
  37. {gdmcode-0.1.6 → gdmcode-0.1.8}/gdmcode/agent/risk_scorer.py +0 -0
  38. {gdmcode-0.1.6 → gdmcode-0.1.8}/gdmcode/agent/self_healing.py +0 -0
  39. {gdmcode-0.1.6 → gdmcode-0.1.8}/gdmcode/agent/smart_test_selector.py +0 -0
  40. {gdmcode-0.1.6 → gdmcode-0.1.8}/gdmcode/agent/system_prompt.py +0 -0
  41. {gdmcode-0.1.6 → gdmcode-0.1.8}/gdmcode/agent/task_tracker.py +0 -0
  42. {gdmcode-0.1.6 → gdmcode-0.1.8}/gdmcode/agent/test_validator.py +0 -0
  43. {gdmcode-0.1.6 → gdmcode-0.1.8}/gdmcode/agent/tool_orchestrator.py +0 -0
  44. {gdmcode-0.1.6 → gdmcode-0.1.8}/gdmcode/agent/transcript.py +0 -0
  45. {gdmcode-0.1.6 → gdmcode-0.1.8}/gdmcode/agent/verification_loop.py +0 -0
  46. {gdmcode-0.1.6 → gdmcode-0.1.8}/gdmcode/agent/work_director.py +0 -0
  47. {gdmcode-0.1.6 → gdmcode-0.1.8}/gdmcode/agent/worktree_manager.py +0 -0
  48. {gdmcode-0.1.6 → gdmcode-0.1.8}/gdmcode/artifacts/__init__.py +0 -0
  49. {gdmcode-0.1.6 → gdmcode-0.1.8}/gdmcode/artifacts/artifact_store.py +0 -0
  50. {gdmcode-0.1.6 → gdmcode-0.1.8}/gdmcode/artifacts/verification_graph.py +0 -0
  51. {gdmcode-0.1.6 → gdmcode-0.1.8}/gdmcode/auth.py +0 -0
  52. {gdmcode-0.1.6 → gdmcode-0.1.8}/gdmcode/commands.py +0 -0
  53. {gdmcode-0.1.6 → gdmcode-0.1.8}/gdmcode/config.py +0 -0
  54. {gdmcode-0.1.6 → gdmcode-0.1.8}/gdmcode/cost_tracker.py +0 -0
  55. {gdmcode-0.1.6 → gdmcode-0.1.8}/gdmcode/db/__init__.py +0 -0
  56. {gdmcode-0.1.6 → gdmcode-0.1.8}/gdmcode/db/migrations.py +0 -0
  57. {gdmcode-0.1.6 → gdmcode-0.1.8}/gdmcode/enterprise/__init__.py +0 -0
  58. {gdmcode-0.1.6 → gdmcode-0.1.8}/gdmcode/enterprise/audit_log.py +0 -0
  59. {gdmcode-0.1.6 → gdmcode-0.1.8}/gdmcode/enterprise/identity.py +0 -0
  60. {gdmcode-0.1.6 → gdmcode-0.1.8}/gdmcode/enterprise/rbac.py +0 -0
  61. {gdmcode-0.1.6 → gdmcode-0.1.8}/gdmcode/enterprise/team_config.py +0 -0
  62. {gdmcode-0.1.6 → gdmcode-0.1.8}/gdmcode/enterprise/usage_analytics.py +0 -0
  63. {gdmcode-0.1.6 → gdmcode-0.1.8}/gdmcode/exceptions.py +0 -0
  64. {gdmcode-0.1.6 → gdmcode-0.1.8}/gdmcode/git_workflow.py +0 -0
  65. {gdmcode-0.1.6 → gdmcode-0.1.8}/gdmcode/integrations/__init__.py +0 -0
  66. {gdmcode-0.1.6 → gdmcode-0.1.8}/gdmcode/integrations/github_actions.py +0 -0
  67. {gdmcode-0.1.6 → gdmcode-0.1.8}/gdmcode/integrations/sentry_integration.py +0 -0
  68. {gdmcode-0.1.6 → gdmcode-0.1.8}/gdmcode/integrations/sentry_server.py +0 -0
  69. {gdmcode-0.1.6 → gdmcode-0.1.8}/gdmcode/integrations/webhook_security.py +0 -0
  70. {gdmcode-0.1.6 → gdmcode-0.1.8}/gdmcode/main.py +0 -0
  71. {gdmcode-0.1.6 → gdmcode-0.1.8}/gdmcode/memory/__init__.py +0 -0
  72. {gdmcode-0.1.6 → gdmcode-0.1.8}/gdmcode/memory/code_index.py +0 -0
  73. {gdmcode-0.1.6 → gdmcode-0.1.8}/gdmcode/memory/compressor.py +0 -0
  74. {gdmcode-0.1.6 → gdmcode-0.1.8}/gdmcode/memory/context_memory.py +0 -0
  75. {gdmcode-0.1.6 → gdmcode-0.1.8}/gdmcode/memory/continuous_memory.py +0 -0
  76. {gdmcode-0.1.6 → gdmcode-0.1.8}/gdmcode/memory/conventions.py +0 -0
  77. {gdmcode-0.1.6 → gdmcode-0.1.8}/gdmcode/memory/db.py +0 -0
  78. {gdmcode-0.1.6 → gdmcode-0.1.8}/gdmcode/memory/document_index.py +0 -0
  79. {gdmcode-0.1.6 → gdmcode-0.1.8}/gdmcode/memory/file_cache.py +0 -0
  80. {gdmcode-0.1.6 → gdmcode-0.1.8}/gdmcode/memory/project_scanner.py +0 -0
  81. {gdmcode-0.1.6 → gdmcode-0.1.8}/gdmcode/memory/session_store.py +0 -0
  82. {gdmcode-0.1.6 → gdmcode-0.1.8}/gdmcode/models/__init__.py +0 -0
  83. {gdmcode-0.1.6 → gdmcode-0.1.8}/gdmcode/models/client.py +0 -0
  84. {gdmcode-0.1.6 → gdmcode-0.1.8}/gdmcode/models/definitions.py +0 -0
  85. {gdmcode-0.1.6 → gdmcode-0.1.8}/gdmcode/models/router.py +0 -0
  86. {gdmcode-0.1.6 → gdmcode-0.1.8}/gdmcode/models/schemas.py +0 -0
  87. {gdmcode-0.1.6 → gdmcode-0.1.8}/gdmcode/permissions.py +0 -0
  88. {gdmcode-0.1.6 → gdmcode-0.1.8}/gdmcode/remote/__init__.py +0 -0
  89. {gdmcode-0.1.6 → gdmcode-0.1.8}/gdmcode/remote/command_filter.py +0 -0
  90. {gdmcode-0.1.6 → gdmcode-0.1.8}/gdmcode/remote/models.py +0 -0
  91. {gdmcode-0.1.6 → gdmcode-0.1.8}/gdmcode/remote/permission_handler.py +0 -0
  92. {gdmcode-0.1.6 → gdmcode-0.1.8}/gdmcode/remote/phone_ui.py +0 -0
  93. {gdmcode-0.1.6 → gdmcode-0.1.8}/gdmcode/remote/protocol.py +0 -0
  94. {gdmcode-0.1.6 → gdmcode-0.1.8}/gdmcode/remote/qr.py +0 -0
  95. {gdmcode-0.1.6 → gdmcode-0.1.8}/gdmcode/remote/server.py +0 -0
  96. {gdmcode-0.1.6 → gdmcode-0.1.8}/gdmcode/remote/token_manager.py +0 -0
  97. {gdmcode-0.1.6 → gdmcode-0.1.8}/gdmcode/remote/tunnel.py +0 -0
  98. {gdmcode-0.1.6 → gdmcode-0.1.8}/gdmcode/runtime/__init__.py +0 -0
  99. {gdmcode-0.1.6 → gdmcode-0.1.8}/gdmcode/runtime/branch_farm.py +0 -0
  100. {gdmcode-0.1.6 → gdmcode-0.1.8}/gdmcode/runtime/replay.py +0 -0
  101. {gdmcode-0.1.6 → gdmcode-0.1.8}/gdmcode/sandbox/__init__.py +0 -0
  102. {gdmcode-0.1.6 → gdmcode-0.1.8}/gdmcode/sandbox/hermetic.py +0 -0
  103. {gdmcode-0.1.6 → gdmcode-0.1.8}/gdmcode/sandbox/policy.py +0 -0
  104. {gdmcode-0.1.6 → gdmcode-0.1.8}/gdmcode/sdk/__init__.py +0 -0
  105. {gdmcode-0.1.6 → gdmcode-0.1.8}/gdmcode/sdk/plugin_base.py +0 -0
  106. {gdmcode-0.1.6 → gdmcode-0.1.8}/gdmcode/sdk/plugin_host.py +0 -0
  107. {gdmcode-0.1.6 → gdmcode-0.1.8}/gdmcode/sdk/plugin_loader.py +0 -0
  108. {gdmcode-0.1.6 → gdmcode-0.1.8}/gdmcode/security.py +0 -0
  109. {gdmcode-0.1.6 → gdmcode-0.1.8}/gdmcode/server/__init__.py +0 -0
  110. {gdmcode-0.1.6 → gdmcode-0.1.8}/gdmcode/server/bridge.py +0 -0
  111. {gdmcode-0.1.6 → gdmcode-0.1.8}/gdmcode/server/bridge_cli.py +0 -0
  112. {gdmcode-0.1.6 → gdmcode-0.1.8}/gdmcode/server/bridge_client.py +0 -0
  113. {gdmcode-0.1.6 → gdmcode-0.1.8}/gdmcode/server/protocol_version.py +0 -0
  114. {gdmcode-0.1.6 → gdmcode-0.1.8}/gdmcode/session/__init__.py +0 -0
  115. {gdmcode-0.1.6 → gdmcode-0.1.8}/gdmcode/session/event_fanout.py +0 -0
  116. {gdmcode-0.1.6 → gdmcode-0.1.8}/gdmcode/session/input_broker.py +0 -0
  117. {gdmcode-0.1.6 → gdmcode-0.1.8}/gdmcode/session/permission_bridge.py +0 -0
  118. {gdmcode-0.1.6 → gdmcode-0.1.8}/gdmcode/tools/__init__.py +0 -0
  119. {gdmcode-0.1.6 → gdmcode-0.1.8}/gdmcode/tools/_atomic.py +0 -0
  120. {gdmcode-0.1.6 → gdmcode-0.1.8}/gdmcode/tools/agent_tools.py +0 -0
  121. {gdmcode-0.1.6 → gdmcode-0.1.8}/gdmcode/tools/ask_user_tool.py +0 -0
  122. {gdmcode-0.1.6 → gdmcode-0.1.8}/gdmcode/tools/bash_tool.py +0 -0
  123. {gdmcode-0.1.6 → gdmcode-0.1.8}/gdmcode/tools/browser_tool.py +0 -0
  124. {gdmcode-0.1.6 → gdmcode-0.1.8}/gdmcode/tools/browser_tools.py +0 -0
  125. {gdmcode-0.1.6 → gdmcode-0.1.8}/gdmcode/tools/dep_tools.py +0 -0
  126. {gdmcode-0.1.6 → gdmcode-0.1.8}/gdmcode/tools/document_reader.py +0 -0
  127. {gdmcode-0.1.6 → gdmcode-0.1.8}/gdmcode/tools/document_tool.py +0 -0
  128. {gdmcode-0.1.6 → gdmcode-0.1.8}/gdmcode/tools/document_writer.py +0 -0
  129. {gdmcode-0.1.6 → gdmcode-0.1.8}/gdmcode/tools/impact_tools.py +0 -0
  130. {gdmcode-0.1.6 → gdmcode-0.1.8}/gdmcode/tools/playwright_tool.py +0 -0
  131. {gdmcode-0.1.6 → gdmcode-0.1.8}/gdmcode/tools/quality_tools.py +0 -0
  132. {gdmcode-0.1.6 → gdmcode-0.1.8}/gdmcode/tools/read_tools.py +0 -0
  133. {gdmcode-0.1.6 → gdmcode-0.1.8}/gdmcode/tools/result_cache.py +0 -0
  134. {gdmcode-0.1.6 → gdmcode-0.1.8}/gdmcode/tools/search_tools.py +0 -0
  135. {gdmcode-0.1.6 → gdmcode-0.1.8}/gdmcode/tools/shell_tools.py +0 -0
  136. {gdmcode-0.1.6 → gdmcode-0.1.8}/gdmcode/tools/write_tools.py +0 -0
  137. {gdmcode-0.1.6 → gdmcode-0.1.8}/gdmcode/voice/__init__.py +0 -0
  138. {gdmcode-0.1.6 → gdmcode-0.1.8}/gdmcode/voice/audio_capture.py +0 -0
  139. {gdmcode-0.1.6 → gdmcode-0.1.8}/gdmcode/voice/audio_playback.py +0 -0
  140. {gdmcode-0.1.6 → gdmcode-0.1.8}/gdmcode/voice/errors.py +0 -0
  141. {gdmcode-0.1.6 → gdmcode-0.1.8}/gdmcode/voice/models.py +0 -0
  142. {gdmcode-0.1.6 → gdmcode-0.1.8}/gdmcode/voice/providers.py +0 -0
  143. {gdmcode-0.1.6 → gdmcode-0.1.8}/gdmcode/voice/vad.py +0 -0
  144. {gdmcode-0.1.6 → gdmcode-0.1.8}/gdmcode/voice/voice_loop.py +0 -0
  145. {gdmcode-0.1.6 → gdmcode-0.1.8}/proxy/Dockerfile +0 -0
  146. {gdmcode-0.1.6 → gdmcode-0.1.8}/proxy/main.py +0 -0
  147. {gdmcode-0.1.6 → gdmcode-0.1.8}/proxy/requirements.txt +0 -0
  148. {gdmcode-0.1.6 → gdmcode-0.1.8}/tests/__init__.py +0 -0
  149. {gdmcode-0.1.6 → gdmcode-0.1.8}/tests/remote/__init__.py +0 -0
  150. {gdmcode-0.1.6 → gdmcode-0.1.8}/tests/remote/test_remote_server.py +0 -0
  151. {gdmcode-0.1.6 → gdmcode-0.1.8}/tests/test_agent_loop.py +0 -0
  152. {gdmcode-0.1.6 → gdmcode-0.1.8}/tests/test_agent_tools.py +0 -0
  153. {gdmcode-0.1.6 → gdmcode-0.1.8}/tests/test_api_fallback.py +0 -0
  154. {gdmcode-0.1.6 → gdmcode-0.1.8}/tests/test_artifact_store.py +0 -0
  155. {gdmcode-0.1.6 → gdmcode-0.1.8}/tests/test_audit_log.py +0 -0
  156. {gdmcode-0.1.6 → gdmcode-0.1.8}/tests/test_auth.py +0 -0
  157. {gdmcode-0.1.6 → gdmcode-0.1.8}/tests/test_auto_quality.py +0 -0
  158. {gdmcode-0.1.6 → gdmcode-0.1.8}/tests/test_autonomy_levels.py +0 -0
  159. {gdmcode-0.1.6 → gdmcode-0.1.8}/tests/test_bash_tool.py +0 -0
  160. {gdmcode-0.1.6 → gdmcode-0.1.8}/tests/test_batch_api.py +0 -0
  161. {gdmcode-0.1.6 → gdmcode-0.1.8}/tests/test_branch_farm.py +0 -0
  162. {gdmcode-0.1.6 → gdmcode-0.1.8}/tests/test_bridge.py +0 -0
  163. {gdmcode-0.1.6 → gdmcode-0.1.8}/tests/test_bridge_smoke.py +0 -0
  164. {gdmcode-0.1.6 → gdmcode-0.1.8}/tests/test_browser_tool_smoke.py +0 -0
  165. {gdmcode-0.1.6 → gdmcode-0.1.8}/tests/test_browser_tools.py +0 -0
  166. {gdmcode-0.1.6 → gdmcode-0.1.8}/tests/test_btw_queue.py +0 -0
  167. {gdmcode-0.1.6 → gdmcode-0.1.8}/tests/test_budget_tracker.py +0 -0
  168. {gdmcode-0.1.6 → gdmcode-0.1.8}/tests/test_chrome_extension.py +0 -0
  169. {gdmcode-0.1.6 → gdmcode-0.1.8}/tests/test_ci_runner.py +0 -0
  170. {gdmcode-0.1.6 → gdmcode-0.1.8}/tests/test_code_index.py +0 -0
  171. {gdmcode-0.1.6 → gdmcode-0.1.8}/tests/test_commands.py +0 -0
  172. {gdmcode-0.1.6 → gdmcode-0.1.8}/tests/test_compression.py +0 -0
  173. {gdmcode-0.1.6 → gdmcode-0.1.8}/tests/test_confidence.py +0 -0
  174. {gdmcode-0.1.6 → gdmcode-0.1.8}/tests/test_config.py +0 -0
  175. {gdmcode-0.1.6 → gdmcode-0.1.8}/tests/test_continuous_memory.py +0 -0
  176. {gdmcode-0.1.6 → gdmcode-0.1.8}/tests/test_convention_drift.py +0 -0
  177. {gdmcode-0.1.6 → gdmcode-0.1.8}/tests/test_cost_tracker.py +0 -0
  178. {gdmcode-0.1.6 → gdmcode-0.1.8}/tests/test_daemon.py +0 -0
  179. {gdmcode-0.1.6 → gdmcode-0.1.8}/tests/test_daemon_stability.py +0 -0
  180. {gdmcode-0.1.6 → gdmcode-0.1.8}/tests/test_daemon_watchdog.py +0 -0
  181. {gdmcode-0.1.6 → gdmcode-0.1.8}/tests/test_db.py +0 -0
  182. {gdmcode-0.1.6 → gdmcode-0.1.8}/tests/test_debate.py +0 -0
  183. {gdmcode-0.1.6 → gdmcode-0.1.8}/tests/test_debug_loop.py +0 -0
  184. {gdmcode-0.1.6 → gdmcode-0.1.8}/tests/test_debug_loop_smoke.py +0 -0
  185. {gdmcode-0.1.6 → gdmcode-0.1.8}/tests/test_dep_tools.py +0 -0
  186. {gdmcode-0.1.6 → gdmcode-0.1.8}/tests/test_doctor.py +0 -0
  187. {gdmcode-0.1.6 → gdmcode-0.1.8}/tests/test_document_index.py +0 -0
  188. {gdmcode-0.1.6 → gdmcode-0.1.8}/tests/test_document_reader.py +0 -0
  189. {gdmcode-0.1.6 → gdmcode-0.1.8}/tests/test_document_tool.py +0 -0
  190. {gdmcode-0.1.6 → gdmcode-0.1.8}/tests/test_document_writer.py +0 -0
  191. {gdmcode-0.1.6 → gdmcode-0.1.8}/tests/test_domain_skills.py +0 -0
  192. {gdmcode-0.1.6 → gdmcode-0.1.8}/tests/test_eval_harness.py +0 -0
  193. {gdmcode-0.1.6 → gdmcode-0.1.8}/tests/test_event_log.py +0 -0
  194. {gdmcode-0.1.6 → gdmcode-0.1.8}/tests/test_failure_taxonomy.py +0 -0
  195. {gdmcode-0.1.6 → gdmcode-0.1.8}/tests/test_file_tools.py +0 -0
  196. {gdmcode-0.1.6 → gdmcode-0.1.8}/tests/test_git_workflow.py +0 -0
  197. {gdmcode-0.1.6 → gdmcode-0.1.8}/tests/test_github_actions.py +0 -0
  198. {gdmcode-0.1.6 → gdmcode-0.1.8}/tests/test_health.py +0 -0
  199. {gdmcode-0.1.6 → gdmcode-0.1.8}/tests/test_hermetic_sandbox.py +0 -0
  200. {gdmcode-0.1.6 → gdmcode-0.1.8}/tests/test_identity_rbac.py +0 -0
  201. {gdmcode-0.1.6 → gdmcode-0.1.8}/tests/test_impact_analysis.py +0 -0
  202. {gdmcode-0.1.6 → gdmcode-0.1.8}/tests/test_impact_analyzer.py +0 -0
  203. {gdmcode-0.1.6 → gdmcode-0.1.8}/tests/test_impact_graph.py +0 -0
  204. {gdmcode-0.1.6 → gdmcode-0.1.8}/tests/test_impact_tools.py +0 -0
  205. {gdmcode-0.1.6 → gdmcode-0.1.8}/tests/test_injection_gate.py +0 -0
  206. {gdmcode-0.1.6 → gdmcode-0.1.8}/tests/test_leaderboard.py +0 -0
  207. {gdmcode-0.1.6 → gdmcode-0.1.8}/tests/test_local_models.py +0 -0
  208. {gdmcode-0.1.6 → gdmcode-0.1.8}/tests/test_loop.py +0 -0
  209. {gdmcode-0.1.6 → gdmcode-0.1.8}/tests/test_loop_p3.py +0 -0
  210. {gdmcode-0.1.6 → gdmcode-0.1.8}/tests/test_mcp_server.py +0 -0
  211. {gdmcode-0.1.6 → gdmcode-0.1.8}/tests/test_memory.py +0 -0
  212. {gdmcode-0.1.6 → gdmcode-0.1.8}/tests/test_migrations.py +0 -0
  213. {gdmcode-0.1.6 → gdmcode-0.1.8}/tests/test_mock_provider.py +0 -0
  214. {gdmcode-0.1.6 → gdmcode-0.1.8}/tests/test_model_config.py +0 -0
  215. {gdmcode-0.1.6 → gdmcode-0.1.8}/tests/test_orchestrator.py +0 -0
  216. {gdmcode-0.1.6 → gdmcode-0.1.8}/tests/test_package.py +0 -0
  217. {gdmcode-0.1.6 → gdmcode-0.1.8}/tests/test_permissions.py +0 -0
  218. {gdmcode-0.1.6 → gdmcode-0.1.8}/tests/test_phase2_modules.py +0 -0
  219. {gdmcode-0.1.6 → gdmcode-0.1.8}/tests/test_phone_ui.py +0 -0
  220. {gdmcode-0.1.6 → gdmcode-0.1.8}/tests/test_playwright_tool.py +0 -0
  221. {gdmcode-0.1.6 → gdmcode-0.1.8}/tests/test_plugin_sdk.py +0 -0
  222. {gdmcode-0.1.6 → gdmcode-0.1.8}/tests/test_protocol_version.py +0 -0
  223. {gdmcode-0.1.6 → gdmcode-0.1.8}/tests/test_provenance.py +0 -0
  224. {gdmcode-0.1.6 → gdmcode-0.1.8}/tests/test_proxy_server.py +0 -0
  225. {gdmcode-0.1.6 → gdmcode-0.1.8}/tests/test_quality_integration.py +0 -0
  226. {gdmcode-0.1.6 → gdmcode-0.1.8}/tests/test_reasoning_toggle.py +0 -0
  227. {gdmcode-0.1.6 → gdmcode-0.1.8}/tests/test_redaction.py +0 -0
  228. {gdmcode-0.1.6 → gdmcode-0.1.8}/tests/test_regression_collector.py +0 -0
  229. {gdmcode-0.1.6 → gdmcode-0.1.8}/tests/test_regression_guard_integration.py +0 -0
  230. {gdmcode-0.1.6 → gdmcode-0.1.8}/tests/test_regression_runner.py +0 -0
  231. {gdmcode-0.1.6 → gdmcode-0.1.8}/tests/test_replay.py +0 -0
  232. {gdmcode-0.1.6 → gdmcode-0.1.8}/tests/test_resilience.py +0 -0
  233. {gdmcode-0.1.6 → gdmcode-0.1.8}/tests/test_result_cache.py +0 -0
  234. {gdmcode-0.1.6 → gdmcode-0.1.8}/tests/test_review_gate_expanded.py +0 -0
  235. {gdmcode-0.1.6 → gdmcode-0.1.8}/tests/test_risk_scorer.py +0 -0
  236. {gdmcode-0.1.6 → gdmcode-0.1.8}/tests/test_rollback.py +0 -0
  237. {gdmcode-0.1.6 → gdmcode-0.1.8}/tests/test_router.py +0 -0
  238. {gdmcode-0.1.6 → gdmcode-0.1.8}/tests/test_router_compressor_conventions.py +0 -0
  239. {gdmcode-0.1.6 → gdmcode-0.1.8}/tests/test_router_escalation.py +0 -0
  240. {gdmcode-0.1.6 → gdmcode-0.1.8}/tests/test_sandbox.py +0 -0
  241. {gdmcode-0.1.6 → gdmcode-0.1.8}/tests/test_scoring.py +0 -0
  242. {gdmcode-0.1.6 → gdmcode-0.1.8}/tests/test_search_tools.py +0 -0
  243. {gdmcode-0.1.6 → gdmcode-0.1.8}/tests/test_self_healing.py +0 -0
  244. {gdmcode-0.1.6 → gdmcode-0.1.8}/tests/test_semantic_edit.py +0 -0
  245. {gdmcode-0.1.6 → gdmcode-0.1.8}/tests/test_sentry_integration.py +0 -0
  246. {gdmcode-0.1.6 → gdmcode-0.1.8}/tests/test_session_checkpoint.py +0 -0
  247. {gdmcode-0.1.6 → gdmcode-0.1.8}/tests/test_session_controller.py +0 -0
  248. {gdmcode-0.1.6 → gdmcode-0.1.8}/tests/test_session_restore.py +0 -0
  249. {gdmcode-0.1.6 → gdmcode-0.1.8}/tests/test_signal_handling.py +0 -0
  250. {gdmcode-0.1.6 → gdmcode-0.1.8}/tests/test_swebench_adapter.py +0 -0
  251. {gdmcode-0.1.6 → gdmcode-0.1.8}/tests/test_swebench_runner.py +0 -0
  252. {gdmcode-0.1.6 → gdmcode-0.1.8}/tests/test_system_prompt.py +0 -0
  253. {gdmcode-0.1.6 → gdmcode-0.1.8}/tests/test_team_config.py +0 -0
  254. {gdmcode-0.1.6 → gdmcode-0.1.8}/tests/test_tool_cache.py +0 -0
  255. {gdmcode-0.1.6 → gdmcode-0.1.8}/tests/test_tool_orchestrator.py +0 -0
  256. {gdmcode-0.1.6 → gdmcode-0.1.8}/tests/test_tool_timeout.py +0 -0
  257. {gdmcode-0.1.6 → gdmcode-0.1.8}/tests/test_tools_registry.py +0 -0
  258. {gdmcode-0.1.6 → gdmcode-0.1.8}/tests/test_tunnel_qr.py +0 -0
  259. {gdmcode-0.1.6 → gdmcode-0.1.8}/tests/test_usage_analytics.py +0 -0
  260. {gdmcode-0.1.6 → gdmcode-0.1.8}/tests/test_verification_graph.py +0 -0
  261. {gdmcode-0.1.6 → gdmcode-0.1.8}/tests/test_verification_loop.py +0 -0
  262. {gdmcode-0.1.6 → gdmcode-0.1.8}/tests/test_voice_loop.py +0 -0
  263. {gdmcode-0.1.6 → gdmcode-0.1.8}/tests/test_voice_providers.py +0 -0
  264. {gdmcode-0.1.6 → gdmcode-0.1.8}/tests/test_whole_codebase.py +0 -0
  265. {gdmcode-0.1.6 → gdmcode-0.1.8}/tests/test_work_director.py +0 -0
  266. {gdmcode-0.1.6 → gdmcode-0.1.8}/tests/voice/__init__.py +0 -0
  267. {gdmcode-0.1.6 → gdmcode-0.1.8}/tests/voice/test_audio_foundation.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: gdmcode
3
- Version: 0.1.6
3
+ Version: 0.1.8
4
4
  Summary: gdm: AI coding agent for professional developers
5
5
  Project-URL: Homepage, https://github.com/guidegdm/gdmcode
6
6
  Project-URL: Repository, https://github.com/guidegdm/gdmcode
@@ -0,0 +1 @@
1
+ __version__ = "0.1.8"
@@ -367,7 +367,7 @@ def cmd_health(
367
367
  text = client.complete_text(
368
368
  "Reply with exactly: OK",
369
369
  model=model_def.id,
370
- max_tokens=8,
370
+ max_tokens=128,
371
371
  system="You are a health check. Reply only with OK.",
372
372
  )
373
373
  status = "ok" if text.strip() else "fail"
@@ -1365,10 +1365,11 @@ def _run_connection_probe_once(cfg: object, prompt: str, *, model_override: str
1365
1365
  response = client.complete_text(
1366
1366
  prompt,
1367
1367
  model=model_def.id,
1368
- max_tokens=80,
1368
+ max_tokens=512,
1369
1369
  system=(
1370
- "You are gdm code's CLI connection check. Reply in one short, friendly "
1371
- "sentence. Confirm the LLM is connected. Do not inspect files or call tools."
1370
+ "You are gdm code's lightweight chat and connection check. Reply briefly. "
1371
+ "If asked who you are, say you are gdm, an AI coding-agent CLI. "
1372
+ "Confirm the LLM route is working. Do not inspect files or call tools."
1372
1373
  ),
1373
1374
  ).strip()
1374
1375
  status.stop()
@@ -51,7 +51,7 @@ _INTERNAL_ERROR = -32603
51
51
  class MCPServer:
52
52
  """Minimal MCP server with stdio transport."""
53
53
 
54
- def __init__(self, name: str = "gdmcode", version: str = "0.1.6") -> None:
54
+ def __init__(self, name: str = "gdmcode", version: str = "0.1.8") -> None:
55
55
  self._name = name
56
56
  self._version = version
57
57
  self._tools: dict[str, MCPTool] = {}
@@ -163,13 +163,21 @@ def _format_llm_error(error: object) -> str:
163
163
 
164
164
 
165
165
  def _is_connection_probe(text: str) -> bool:
166
- """Return True for tiny greetings/checks that should not enter tool mode."""
166
+ """Return True for lightweight chat/status prompts that should not enter tool mode."""
167
167
  import re
168
168
 
169
169
  normalized = re.sub(r"[^a-z0-9\s']", " ", text.lower()).strip()
170
170
  normalized = re.sub(r"\s+", " ", normalized)
171
171
  if not normalized:
172
172
  return False
173
+ work_terms = {
174
+ "fix", "edit", "change", "create", "write", "delete", "read", "open", "search",
175
+ "find", "run", "test", "build", "install", "commit", "review", "debug", "explain",
176
+ "refactor", "implement", "update", "file", "folder", "repo", "code",
177
+ }
178
+ words = normalized.split()
179
+ if any(word in work_terms for word in words):
180
+ return False
173
181
  direct = {
174
182
  "hey",
175
183
  "hi",
@@ -182,10 +190,29 @@ def _is_connection_probe(text: str) -> bool:
182
190
  "hi there",
183
191
  "are you there",
184
192
  "you there",
193
+ "who are you",
194
+ "what are you",
195
+ "what can you do",
196
+ "are you working",
197
+ "are you connected",
198
+ "is the llm connected",
199
+ "are tools working",
200
+ "do tools work",
201
+ "status",
185
202
  }
186
203
  if normalized in direct:
187
204
  return True
188
- words = normalized.split()
205
+ prefixes = (
206
+ "who are you",
207
+ "what are you",
208
+ "what can you do",
209
+ "are you there",
210
+ "are you connected",
211
+ "are tools working",
212
+ "do tools work",
213
+ )
214
+ if len(words) <= 8 and normalized.startswith(prefixes):
215
+ return True
189
216
  return len(words) <= 4 and words[0] in {"hey", "hi", "hello"} and all(
190
217
  word in {"hey", "hi", "hello", "there", "gdm", "agent", "please"} for word in words
191
218
  )
@@ -447,10 +474,11 @@ def start_repl(cfg: "GdmConfig", db: "GdmDatabase", *, yes: bool = False, model_
447
474
  response = client.complete_text(
448
475
  text,
449
476
  model=model_def.id,
450
- max_tokens=80,
477
+ max_tokens=512,
451
478
  system=(
452
- "You are gdm code's CLI connection check. Reply in one short, friendly "
453
- "sentence. Confirm the LLM is connected. Do not inspect files or call tools."
479
+ "You are gdm code's lightweight chat and connection check. Reply briefly. "
480
+ "If asked who you are, say you are gdm, an AI coding-agent CLI. "
481
+ "Confirm the LLM route is working. Do not inspect files or call tools."
454
482
  ),
455
483
  ).strip()
456
484
  status.stop()
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "gdmcode"
7
- version = "0.1.6"
7
+ version = "0.1.8"
8
8
  description = "gdm: AI coding agent for professional developers"
9
9
  readme = "README.md"
10
10
  license = { text = "MIT" }
@@ -113,3 +113,22 @@ class TestCliSmoke:
113
113
  probe.assert_called_once()
114
114
  assert probe.call_args.args[1] == "hey"
115
115
  assert probe.call_args.kwargs == {"model_override": None}
116
+
117
+ def test_one_shot_identity_uses_connection_probe(self, tmp_path, monkeypatch) -> None:
118
+ import gdmcode.cli as cli
119
+
120
+ monkeypatch.setattr(
121
+ cli,
122
+ "load_config",
123
+ lambda require_credentials=False: SimpleNamespace(provider="gemini", api_key="key", project_root=tmp_path),
124
+ )
125
+ monkeypatch.setattr(cli, "_print_header", lambda _cfg: None)
126
+ monkeypatch.setattr(cli, "_has_model_connection", lambda _cfg: True)
127
+ probe = MagicMock()
128
+ monkeypatch.setattr(cli, "_run_connection_probe_once", probe)
129
+
130
+ result = runner.invoke(app, ["code", "--prompt", "who are you?"])
131
+
132
+ assert result.exit_code == 0
133
+ probe.assert_called_once()
134
+ assert probe.call_args.args[1] == "who are you?"
@@ -44,7 +44,11 @@ class TestReplHelpers:
44
44
 
45
45
  assert _is_connection_probe("hey")
46
46
  assert _is_connection_probe("hello there")
47
+ assert _is_connection_probe("who are you?")
48
+ assert _is_connection_probe("what can you do?")
49
+ assert _is_connection_probe("are tools working?")
47
50
  assert not _is_connection_probe("fix the failing tests")
51
+ assert not _is_connection_probe("explain this file")
48
52
 
49
53
 
50
54
  class TestReplStartRepl:
@@ -182,6 +186,24 @@ class TestReplStartRepl:
182
186
  assert "LLM connected" in output
183
187
  run_agent.assert_not_called()
184
188
 
189
+ def test_identity_prompt_with_credentials_uses_no_tool_probe(self, tmp_path, capsys) -> None:
190
+ from gdmcode.repl import start_repl
191
+
192
+ cfg, db = self._make_mocks(tmp_path)
193
+ cfg.api_key = "test-key"
194
+
195
+ with patch("gdmcode.repl._build_input_fn") as mock_build:
196
+ mock_build.return_value = MagicMock(side_effect=["who are you?", EOFError])
197
+ with patch("gdmcode.models.client.GdmClient.complete_text", return_value="I am gdm, your coding-agent CLI."):
198
+ with patch("gdmcode.repl._run_agent_turn") as run_agent:
199
+ with patch("gdmcode.cost_tracker.CostTracker"):
200
+ with patch("gdmcode.repl._ensure_session", return_value="session-123"):
201
+ start_repl(cfg, db)
202
+
203
+ output = capsys.readouterr().out
204
+ assert "coding-agent CLI" in output
205
+ run_agent.assert_not_called()
206
+
185
207
 
186
208
  class TestReplErrorFormatting:
187
209
  def test_format_llm_error_rate_limit(self) -> None:
@@ -1 +0,0 @@
1
- __version__ = "0.1.6"
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes