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.
- {gemcode-0.3.48/src/gemcode.egg-info → gemcode-0.3.49}/PKG-INFO +1 -1
- {gemcode-0.3.48 → gemcode-0.3.49}/pyproject.toml +1 -1
- {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/agent.py +15 -23
- {gemcode-0.3.48 → gemcode-0.3.49/src/gemcode.egg-info}/PKG-INFO +1 -1
- {gemcode-0.3.48 → gemcode-0.3.49}/LICENSE +0 -0
- {gemcode-0.3.48 → gemcode-0.3.49}/MANIFEST.in +0 -0
- {gemcode-0.3.48 → gemcode-0.3.49}/README.md +0 -0
- {gemcode-0.3.48 → gemcode-0.3.49}/setup.cfg +0 -0
- {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/__init__.py +0 -0
- {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/__main__.py +0 -0
- {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/audit.py +0 -0
- {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/autocompact.py +0 -0
- {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/callbacks.py +0 -0
- {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/capability_routing.py +0 -0
- {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/cli.py +0 -0
- {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/compaction.py +0 -0
- {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/computer_use/__init__.py +0 -0
- {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/computer_use/browser_computer.py +0 -0
- {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/config.py +0 -0
- {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/context_budget.py +0 -0
- {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/context_warning.py +0 -0
- {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/credentials.py +0 -0
- {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/hitl_session.py +0 -0
- {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/hooks.py +0 -0
- {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/intent_classifier.py +0 -0
- {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/interactions.py +0 -0
- {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/invoke.py +0 -0
- {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/kairos_daemon.py +0 -0
- {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/limits.py +0 -0
- {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/live_audio_engine.py +0 -0
- {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/logging_config.py +0 -0
- {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/mcp_loader.py +0 -0
- {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/memory/__init__.py +0 -0
- {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/memory/embedding_memory_service.py +0 -0
- {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/memory/file_memory_service.py +0 -0
- {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/modality_tools.py +0 -0
- {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/model_errors.py +0 -0
- {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/model_routing.py +0 -0
- {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/openapi_loader.py +0 -0
- {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/paths.py +0 -0
- {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/permissions.py +0 -0
- {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/plugins/__init__.py +0 -0
- {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/plugins/terminal_hooks_plugin.py +0 -0
- {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/plugins/tool_recovery_plugin.py +0 -0
- {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/pricing.py +0 -0
- {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/prompt_suggestions.py +0 -0
- {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/query/__init__.py +0 -0
- {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/query/config.py +0 -0
- {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/query/deps.py +0 -0
- {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/query/engine.py +0 -0
- {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/query/stop_hooks.py +0 -0
- {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/query/token_budget.py +0 -0
- {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/query/transitions.py +0 -0
- {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/refine.py +0 -0
- {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/repl_commands.py +0 -0
- {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/repl_slash.py +0 -0
- {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/review_agent.py +0 -0
- {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/session_runtime.py +0 -0
- {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/session_store.py +0 -0
- {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/slash_commands.py +0 -0
- {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/thinking.py +0 -0
- {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/tool_prompt_manifest.py +0 -0
- {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/tool_registry.py +0 -0
- {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/tools/__init__.py +0 -0
- {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/tools/bash.py +0 -0
- {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/tools/browser.py +0 -0
- {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/tools/edit.py +0 -0
- {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/tools/filesystem.py +0 -0
- {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/tools/notes.py +0 -0
- {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/tools/search.py +0 -0
- {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/tools/shell.py +0 -0
- {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/tools/shell_gate.py +0 -0
- {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/tools/subtask.py +0 -0
- {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/tools/think.py +0 -0
- {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/tools/todo.py +0 -0
- {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/tools/web.py +0 -0
- {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/tools_inspector.py +0 -0
- {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/trust.py +0 -0
- {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/tui/input_handler.py +0 -0
- {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/tui/scrollback.py +0 -0
- {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/tui/spinner.py +0 -0
- {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/tui/welcome_banner.py +0 -0
- {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/tui/welcome_rich.py +0 -0
- {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/version.py +0 -0
- {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/vertex.py +0 -0
- {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/web/__init__.py +0 -0
- {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/web/claude_sse_adapter.py +0 -0
- {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/web/terminal_repl.py +0 -0
- {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode/workspace_hints.py +0 -0
- {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode.egg-info/SOURCES.txt +0 -0
- {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode.egg-info/dependency_links.txt +0 -0
- {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode.egg-info/entry_points.txt +0 -0
- {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode.egg-info/requires.txt +0 -0
- {gemcode-0.3.48 → gemcode-0.3.49}/src/gemcode.egg-info/top_level.txt +0 -0
- {gemcode-0.3.48 → gemcode-0.3.49}/tests/test_agent_instruction.py +0 -0
- {gemcode-0.3.48 → gemcode-0.3.49}/tests/test_autocompact.py +0 -0
- {gemcode-0.3.48 → gemcode-0.3.49}/tests/test_capability_routing.py +0 -0
- {gemcode-0.3.48 → gemcode-0.3.49}/tests/test_claude_web_adapter_sse.py +0 -0
- {gemcode-0.3.48 → gemcode-0.3.49}/tests/test_cli_init.py +0 -0
- {gemcode-0.3.48 → gemcode-0.3.49}/tests/test_computer_use_permissions.py +0 -0
- {gemcode-0.3.48 → gemcode-0.3.49}/tests/test_context_budget.py +0 -0
- {gemcode-0.3.48 → gemcode-0.3.49}/tests/test_context_warning.py +0 -0
- {gemcode-0.3.48 → gemcode-0.3.49}/tests/test_credentials.py +0 -0
- {gemcode-0.3.48 → gemcode-0.3.49}/tests/test_interactive_permission_ask.py +0 -0
- {gemcode-0.3.48 → gemcode-0.3.49}/tests/test_kairos_scheduler.py +0 -0
- {gemcode-0.3.48 → gemcode-0.3.49}/tests/test_modality_tools.py +0 -0
- {gemcode-0.3.48 → gemcode-0.3.49}/tests/test_model_error_retry.py +0 -0
- {gemcode-0.3.48 → gemcode-0.3.49}/tests/test_model_errors.py +0 -0
- {gemcode-0.3.48 → gemcode-0.3.49}/tests/test_model_routing.py +0 -0
- {gemcode-0.3.48 → gemcode-0.3.49}/tests/test_paths.py +0 -0
- {gemcode-0.3.48 → gemcode-0.3.49}/tests/test_permissions.py +0 -0
- {gemcode-0.3.48 → gemcode-0.3.49}/tests/test_prompt_suggestions.py +0 -0
- {gemcode-0.3.48 → gemcode-0.3.49}/tests/test_repl_commands.py +0 -0
- {gemcode-0.3.48 → gemcode-0.3.49}/tests/test_repl_slash.py +0 -0
- {gemcode-0.3.48 → gemcode-0.3.49}/tests/test_slash_commands.py +0 -0
- {gemcode-0.3.48 → gemcode-0.3.49}/tests/test_thinking_config.py +0 -0
- {gemcode-0.3.48 → gemcode-0.3.49}/tests/test_token_budget.py +0 -0
- {gemcode-0.3.48 → gemcode-0.3.49}/tests/test_tool_context_circulation.py +0 -0
- {gemcode-0.3.48 → gemcode-0.3.49}/tests/test_tools.py +0 -0
- {gemcode-0.3.48 → gemcode-0.3.49}/tests/test_tools_inspector.py +0 -0
- {gemcode-0.3.48 → gemcode-0.3.49}/tests/test_workspace_hints.py +0 -0
|
@@ -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
|
-
|
|
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
|
-
|
|
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
|
-
**
|
|
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
|
-
|
|
414
|
-
1. **
|
|
415
|
-
2. **Plan
|
|
416
|
-
3. **Execute** —
|
|
417
|
-
4. **Verify
|
|
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
|
-
|
|
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
|
-
-
|
|
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
|
-
-
|
|
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
|
|
765
|
-
"
|
|
766
|
-
"
|
|
767
|
-
"
|
|
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(
|
|
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
|
|
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
|
|
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
|