gemcode 0.3.48__tar.gz → 0.3.49__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 (121) hide show
  1. {gemcode-0.3.48/src/gemcode.egg-info → gemcode-0.3.49}/PKG-INFO +1 -1
  2. {gemcode-0.3.48 → gemcode-0.3.49}/pyproject.toml +1 -1
  3. {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/agent.py +15 -23
  4. {gemcode-0.3.48 → gemcode-0.3.49/src/gemcode.egg-info}/PKG-INFO +1 -1
  5. {gemcode-0.3.48 → gemcode-0.3.49}/LICENSE +0 -0
  6. {gemcode-0.3.48 → gemcode-0.3.49}/MANIFEST.in +0 -0
  7. {gemcode-0.3.48 → gemcode-0.3.49}/README.md +0 -0
  8. {gemcode-0.3.48 → gemcode-0.3.49}/setup.cfg +0 -0
  9. {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/__init__.py +0 -0
  10. {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/__main__.py +0 -0
  11. {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/audit.py +0 -0
  12. {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/autocompact.py +0 -0
  13. {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/callbacks.py +0 -0
  14. {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/capability_routing.py +0 -0
  15. {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/cli.py +0 -0
  16. {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/compaction.py +0 -0
  17. {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/computer_use/__init__.py +0 -0
  18. {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/computer_use/browser_computer.py +0 -0
  19. {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/config.py +0 -0
  20. {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/context_budget.py +0 -0
  21. {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/context_warning.py +0 -0
  22. {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/credentials.py +0 -0
  23. {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/hitl_session.py +0 -0
  24. {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/hooks.py +0 -0
  25. {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/intent_classifier.py +0 -0
  26. {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/interactions.py +0 -0
  27. {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/invoke.py +0 -0
  28. {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/kairos_daemon.py +0 -0
  29. {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/limits.py +0 -0
  30. {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/live_audio_engine.py +0 -0
  31. {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/logging_config.py +0 -0
  32. {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/mcp_loader.py +0 -0
  33. {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/memory/__init__.py +0 -0
  34. {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/memory/embedding_memory_service.py +0 -0
  35. {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/memory/file_memory_service.py +0 -0
  36. {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/modality_tools.py +0 -0
  37. {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/model_errors.py +0 -0
  38. {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/model_routing.py +0 -0
  39. {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/openapi_loader.py +0 -0
  40. {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/paths.py +0 -0
  41. {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/permissions.py +0 -0
  42. {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/plugins/__init__.py +0 -0
  43. {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/plugins/terminal_hooks_plugin.py +0 -0
  44. {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/plugins/tool_recovery_plugin.py +0 -0
  45. {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/pricing.py +0 -0
  46. {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/prompt_suggestions.py +0 -0
  47. {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/query/__init__.py +0 -0
  48. {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/query/config.py +0 -0
  49. {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/query/deps.py +0 -0
  50. {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/query/engine.py +0 -0
  51. {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/query/stop_hooks.py +0 -0
  52. {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/query/token_budget.py +0 -0
  53. {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/query/transitions.py +0 -0
  54. {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/refine.py +0 -0
  55. {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/repl_commands.py +0 -0
  56. {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/repl_slash.py +0 -0
  57. {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/review_agent.py +0 -0
  58. {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/session_runtime.py +0 -0
  59. {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/session_store.py +0 -0
  60. {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/slash_commands.py +0 -0
  61. {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/thinking.py +0 -0
  62. {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/tool_prompt_manifest.py +0 -0
  63. {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/tool_registry.py +0 -0
  64. {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/tools/__init__.py +0 -0
  65. {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/tools/bash.py +0 -0
  66. {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/tools/browser.py +0 -0
  67. {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/tools/edit.py +0 -0
  68. {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/tools/filesystem.py +0 -0
  69. {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/tools/notes.py +0 -0
  70. {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/tools/search.py +0 -0
  71. {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/tools/shell.py +0 -0
  72. {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/tools/shell_gate.py +0 -0
  73. {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/tools/subtask.py +0 -0
  74. {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/tools/think.py +0 -0
  75. {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/tools/todo.py +0 -0
  76. {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/tools/web.py +0 -0
  77. {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/tools_inspector.py +0 -0
  78. {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/trust.py +0 -0
  79. {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/tui/input_handler.py +0 -0
  80. {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/tui/scrollback.py +0 -0
  81. {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/tui/spinner.py +0 -0
  82. {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/tui/welcome_banner.py +0 -0
  83. {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/tui/welcome_rich.py +0 -0
  84. {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/version.py +0 -0
  85. {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/vertex.py +0 -0
  86. {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/web/__init__.py +0 -0
  87. {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/web/claude_sse_adapter.py +0 -0
  88. {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/web/terminal_repl.py +0 -0
  89. {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/workspace_hints.py +0 -0
  90. {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode.egg-info/SOURCES.txt +0 -0
  91. {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode.egg-info/dependency_links.txt +0 -0
  92. {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode.egg-info/entry_points.txt +0 -0
  93. {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode.egg-info/requires.txt +0 -0
  94. {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode.egg-info/top_level.txt +0 -0
  95. {gemcode-0.3.48 → gemcode-0.3.49}/tests/test_agent_instruction.py +0 -0
  96. {gemcode-0.3.48 → gemcode-0.3.49}/tests/test_autocompact.py +0 -0
  97. {gemcode-0.3.48 → gemcode-0.3.49}/tests/test_capability_routing.py +0 -0
  98. {gemcode-0.3.48 → gemcode-0.3.49}/tests/test_claude_web_adapter_sse.py +0 -0
  99. {gemcode-0.3.48 → gemcode-0.3.49}/tests/test_cli_init.py +0 -0
  100. {gemcode-0.3.48 → gemcode-0.3.49}/tests/test_computer_use_permissions.py +0 -0
  101. {gemcode-0.3.48 → gemcode-0.3.49}/tests/test_context_budget.py +0 -0
  102. {gemcode-0.3.48 → gemcode-0.3.49}/tests/test_context_warning.py +0 -0
  103. {gemcode-0.3.48 → gemcode-0.3.49}/tests/test_credentials.py +0 -0
  104. {gemcode-0.3.48 → gemcode-0.3.49}/tests/test_interactive_permission_ask.py +0 -0
  105. {gemcode-0.3.48 → gemcode-0.3.49}/tests/test_kairos_scheduler.py +0 -0
  106. {gemcode-0.3.48 → gemcode-0.3.49}/tests/test_modality_tools.py +0 -0
  107. {gemcode-0.3.48 → gemcode-0.3.49}/tests/test_model_error_retry.py +0 -0
  108. {gemcode-0.3.48 → gemcode-0.3.49}/tests/test_model_errors.py +0 -0
  109. {gemcode-0.3.48 → gemcode-0.3.49}/tests/test_model_routing.py +0 -0
  110. {gemcode-0.3.48 → gemcode-0.3.49}/tests/test_paths.py +0 -0
  111. {gemcode-0.3.48 → gemcode-0.3.49}/tests/test_permissions.py +0 -0
  112. {gemcode-0.3.48 → gemcode-0.3.49}/tests/test_prompt_suggestions.py +0 -0
  113. {gemcode-0.3.48 → gemcode-0.3.49}/tests/test_repl_commands.py +0 -0
  114. {gemcode-0.3.48 → gemcode-0.3.49}/tests/test_repl_slash.py +0 -0
  115. {gemcode-0.3.48 → gemcode-0.3.49}/tests/test_slash_commands.py +0 -0
  116. {gemcode-0.3.48 → gemcode-0.3.49}/tests/test_thinking_config.py +0 -0
  117. {gemcode-0.3.48 → gemcode-0.3.49}/tests/test_token_budget.py +0 -0
  118. {gemcode-0.3.48 → gemcode-0.3.49}/tests/test_tool_context_circulation.py +0 -0
  119. {gemcode-0.3.48 → gemcode-0.3.49}/tests/test_tools.py +0 -0
  120. {gemcode-0.3.48 → gemcode-0.3.49}/tests/test_tools_inspector.py +0 -0
  121. {gemcode-0.3.48 → gemcode-0.3.49}/tests/test_workspace_hints.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: gemcode
3
- Version: 0.3.48
3
+ Version: 0.3.49
4
4
  Summary: Local-first coding agent on Google Gemini + ADK
5
5
  Author: GemCode Contributors
6
6
  License: Apache License
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "gemcode"
7
- version = "0.3.48"
7
+ version = "0.3.49"
8
8
  description = "Local-first coding agent on Google Gemini + ADK"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.11"
@@ -398,25 +398,19 @@ You run locally via the GemCode CLI. You are the same agent the user launched
398
398
 
399
399
  ## Core identity and approach
400
400
 
401
- Use your built-in thinking to read the user's intent before acting. Match the response style to what was actually asked:
401
+ Before you respond to anything, **think through what the person is actually trying to achieve**. Not what category their message fits into — what outcome they want, what they already know, and what the most useful response looks like.
402
402
 
403
- | Message type | Examples | Right action |
404
- |---|---|---|
405
- | **Greeting / chitchat** | "hi", "thanks", "cool" | Reply warmly in one sentence. No tools. |
406
- | **General knowledge** | "what is a closure?", "explain OAuth" | Answer from knowledge. No tools unless this specific repo is needed. |
407
- | **Project question** | "how does auth work here?", "what's in this folder?" | 1–2 read-only tools, then a focused answer. |
408
- | **Engineering task** | "fix the bug", "add pagination", "refactor X" | Orient → Plan → Execute → Verify. |
409
- | **Analysis / audit** | "analyse the whole backend", "summarise all endpoints" | Thorough tool sweep, then synthesise. |
403
+ That thinking should drive everything: how much you use tools, how deep you go, how long you reply, what tone you take. A one-line social message deserves a one-line reply. A vague half-formed request might need a clarifying question before acting. A complex multi-file task needs systematic exploration first. A debugging session mid-error needs a hypothesis, not a search. There is no fixed list of intent types — the space of what people ask is open-ended, and your judgment should be too.
410
404
 
411
- **Never call `list_directory`, `read_project_notes`, or any tool in response to a greeting or a general knowledge question that needs no project context.**
405
+ The one hard rule: **only reach for tools when they genuinely serve the response**. If the answer is in your knowledge, give it. If project context is needed, use the minimal set of read-only tools to get it. If you need to execute something, do it. But never open a tool call just to appear busy.
412
406
 
413
- ### Engineering task workflow
414
- 1. **Orient** — use `list_directory`, `glob_files`, `grep_content`, `read_file` to understand structure. These tools need **no permission** and are instant.
415
- 2. **Plan** for complex tasks, call `todo_write` upfront to map out the work.
416
- 3. **Execute** — make the changes, run the checks, iterate.
417
- 4. **Verify** confirm the result is correct before reporting done.
407
+ When you do need to act on the codebase:
408
+ 1. **Understand first** — explore with `list_directory`, `glob_files`, `grep_content`, `read_file` before touching anything. These are instant and need no permission.
409
+ 2. **Plan for anything complex** use `todo_write` to structure multi-step work before starting.
410
+ 3. **Execute completely** — don't stop at the first success. Finish the whole task.
411
+ 4. **Verify before you call it done** check your own work.
418
412
 
419
- Never stop mid-task just because the first tool call succeeded. Keep going until the full task is complete or you hit a genuine blocker.
413
+ The depth of each step should match the complexity of what was asked. Don't run a four-step engineering workflow for a one-sentence question.
420
414
 
421
415
  ## CRITICAL: Read-only tools first — never bash for exploration
422
416
  `bash` and `run_command` require permission confirmation by default. Always start with the **zero-permission** read-only tools:
@@ -439,12 +433,10 @@ You have native deep thinking capability — use it actively:
439
433
  - **For trade-off decisions** (which library, which pattern, which approach): reason through the pros/cons given this specific codebase.
440
434
 
441
435
  ## Interpreting requests
442
- - **Think first.** Read the message intent before touching any tool. The intent table above is your guide.
443
- - **Engineering tasks** ("fix", "add", "refactor", "analyse", "debug"): infer from the repo — search, read, then act. Do not give abstract advice when concrete files exist.
444
- - If the user refers to symbols or behaviors, **find them** with `glob_files`/`grep_content`/`list_directory` — never ask them to paste paths you can discover yourself.
436
+ - If the user refers to symbols, files, or behaviors they expect you to know **find them** with `glob_files`/`grep_content`/`list_directory`. Never ask them to paste paths you can discover yourself.
445
437
  - **Never propose edits to files you haven't read.** Read first, then edit.
446
438
  - When something fails, diagnose (re-read the error, check assumptions) before switching strategy. Do not repeat the same failed call.
447
- - For analysis tasks ("analyse X", "explain X", "what does X do"): immediately start reading files with `list_directory` + `read_file` + `grep_content`. Produce concrete findings, not hypotheses.
439
+ - When asked to analyse or explain something: read the actual files, produce concrete findings, not hypotheses.
448
440
 
449
441
  ## Tool selection guide
450
442
 
@@ -761,10 +753,10 @@ def build_root_agent(
761
753
  # prepended to every agent's effective instruction.
762
754
  global_instr = (
763
755
  "You are GemCode, an expert software engineering agent powered by Google Gemini. "
764
- "Think through the user's intent before acting. "
765
- "For greetings or general questions, reply directly without calling tools. "
766
- "For engineering tasks, act fully and autonomously orient, plan, execute, verify. "
767
- "Use read-only tools before shell/write tools."
756
+ "Think deeply about what the person actually wants before you do anything. "
757
+ "Use exactly as many tools as the task genuinely requires — no more. "
758
+ "Act fully and autonomously when action is needed. "
759
+ "Always use read-only tools before shell or write tools."
768
760
  )
769
761
 
770
762
  agent_kwargs: dict = dict(
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: gemcode
3
- Version: 0.3.48
3
+ Version: 0.3.49
4
4
  Summary: Local-first coding agent on Google Gemini + ADK
5
5
  Author: GemCode Contributors
6
6
  License: Apache License
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