1bcoder 0.1.14__tar.gz → 0.1.15__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 (108) hide show
  1. {1bcoder-0.1.14 → 1bcoder-0.1.15}/1bcoder.egg-info/PKG-INFO +1 -1
  2. {1bcoder-0.1.14 → 1bcoder-0.1.15}/PKG-INFO +1 -1
  3. {1bcoder-0.1.14 → 1bcoder-0.1.15}/_bcoder_data/doc/PARAM.md +4 -0
  4. {1bcoder-0.1.14 → 1bcoder-0.1.15}/chat.py +71 -17
  5. {1bcoder-0.1.14 → 1bcoder-0.1.15}/pyproject.toml +1 -1
  6. {1bcoder-0.1.14 → 1bcoder-0.1.15}/1bcoder.egg-info/SOURCES.txt +0 -0
  7. {1bcoder-0.1.14 → 1bcoder-0.1.15}/1bcoder.egg-info/dependency_links.txt +0 -0
  8. {1bcoder-0.1.14 → 1bcoder-0.1.15}/1bcoder.egg-info/entry_points.txt +0 -0
  9. {1bcoder-0.1.14 → 1bcoder-0.1.15}/1bcoder.egg-info/requires.txt +0 -0
  10. {1bcoder-0.1.14 → 1bcoder-0.1.15}/1bcoder.egg-info/top_level.txt +0 -0
  11. {1bcoder-0.1.14 → 1bcoder-0.1.15}/LICENSE +0 -0
  12. {1bcoder-0.1.14 → 1bcoder-0.1.15}/README.md +0 -0
  13. {1bcoder-0.1.14 → 1bcoder-0.1.15}/_bcoder_data/__init__.py +0 -0
  14. {1bcoder-0.1.14 → 1bcoder-0.1.15}/_bcoder_data/agents/advance.txt +0 -0
  15. {1bcoder-0.1.14 → 1bcoder-0.1.15}/_bcoder_data/agents/ask.txt +0 -0
  16. {1bcoder-0.1.14 → 1bcoder-0.1.15}/_bcoder_data/agents/compact.txt +0 -0
  17. {1bcoder-0.1.14 → 1bcoder-0.1.15}/_bcoder_data/agents/concepts.txt +0 -0
  18. {1bcoder-0.1.14 → 1bcoder-0.1.15}/_bcoder_data/agents/fill.txt +0 -0
  19. {1bcoder-0.1.14 → 1bcoder-0.1.15}/_bcoder_data/agents/planning.txt +0 -0
  20. {1bcoder-0.1.14 → 1bcoder-0.1.15}/_bcoder_data/agents/scan.txt +0 -0
  21. {1bcoder-0.1.14 → 1bcoder-0.1.15}/_bcoder_data/agents/sqlite.txt +0 -0
  22. {1bcoder-0.1.14 → 1bcoder-0.1.15}/_bcoder_data/agents/websearch.txt +0 -0
  23. {1bcoder-0.1.14 → 1bcoder-0.1.15}/_bcoder_data/aliases.txt +0 -0
  24. {1bcoder-0.1.14 → 1bcoder-0.1.15}/_bcoder_data/doc/FLOWS.md +0 -0
  25. {1bcoder-0.1.14 → 1bcoder-0.1.15}/_bcoder_data/doc/MCP.md +0 -0
  26. {1bcoder-0.1.14 → 1bcoder-0.1.15}/_bcoder_data/doc/OLLAMA_SERVER_PARAM.md +0 -0
  27. {1bcoder-0.1.14 → 1bcoder-0.1.15}/_bcoder_data/doc/PROC.md +0 -0
  28. {1bcoder-0.1.14 → 1bcoder-0.1.15}/_bcoder_data/doc/TRANSLATE.md +0 -0
  29. {1bcoder-0.1.14 → 1bcoder-0.1.15}/_bcoder_data/flows/__pycache__/commit_message.cpython-311.pyc +0 -0
  30. {1bcoder-0.1.14 → 1bcoder-0.1.15}/_bcoder_data/flows/__pycache__/webcrawl.cpython-311.pyc +0 -0
  31. {1bcoder-0.1.14 → 1bcoder-0.1.15}/_bcoder_data/flows/commit_message.py +0 -0
  32. {1bcoder-0.1.14 → 1bcoder-0.1.15}/_bcoder_data/flows/deepagent.py +0 -0
  33. {1bcoder-0.1.14 → 1bcoder-0.1.15}/_bcoder_data/flows/deobfuscate.py +0 -0
  34. {1bcoder-0.1.14 → 1bcoder-0.1.15}/_bcoder_data/flows/external_help.py +0 -0
  35. {1bcoder-0.1.14 → 1bcoder-0.1.15}/_bcoder_data/flows/grounding.py +0 -0
  36. {1bcoder-0.1.14 → 1bcoder-0.1.15}/_bcoder_data/flows/obfuscate.py +0 -0
  37. {1bcoder-0.1.14 → 1bcoder-0.1.15}/_bcoder_data/flows/py_error_trace.py +0 -0
  38. {1bcoder-0.1.14 → 1bcoder-0.1.15}/_bcoder_data/flows/simargl_files.py +0 -0
  39. {1bcoder-0.1.14 → 1bcoder-0.1.15}/_bcoder_data/flows/visual_search.py +0 -0
  40. {1bcoder-0.1.14 → 1bcoder-0.1.15}/_bcoder_data/flows/webask.py +0 -0
  41. {1bcoder-0.1.14 → 1bcoder-0.1.15}/_bcoder_data/flows/webcrawl.py +0 -0
  42. {1bcoder-0.1.14 → 1bcoder-0.1.15}/_bcoder_data/map.txt +0 -0
  43. {1bcoder-0.1.14 → 1bcoder-0.1.15}/_bcoder_data/proc/action-required.py +0 -0
  44. {1bcoder-0.1.14 → 1bcoder-0.1.15}/_bcoder_data/proc/add-save.py +0 -0
  45. {1bcoder-0.1.14 → 1bcoder-0.1.15}/_bcoder_data/proc/assist.py +0 -0
  46. {1bcoder-0.1.14 → 1bcoder-0.1.15}/_bcoder_data/proc/collect-files.py +0 -0
  47. {1bcoder-0.1.14 → 1bcoder-0.1.15}/_bcoder_data/proc/ctx_cut.py +0 -0
  48. {1bcoder-0.1.14 → 1bcoder-0.1.15}/_bcoder_data/proc/extract-code.py +0 -0
  49. {1bcoder-0.1.14 → 1bcoder-0.1.15}/_bcoder_data/proc/extract-files.py +0 -0
  50. {1bcoder-0.1.14 → 1bcoder-0.1.15}/_bcoder_data/proc/extract-list.py +0 -0
  51. {1bcoder-0.1.14 → 1bcoder-0.1.15}/_bcoder_data/proc/grounding-check.py +0 -0
  52. {1bcoder-0.1.14 → 1bcoder-0.1.15}/_bcoder_data/proc/md.py +0 -0
  53. {1bcoder-0.1.14 → 1bcoder-0.1.15}/_bcoder_data/proc/mdx.py +0 -0
  54. {1bcoder-0.1.14 → 1bcoder-0.1.15}/_bcoder_data/proc/pattern-gate.py +0 -0
  55. {1bcoder-0.1.14 → 1bcoder-0.1.15}/_bcoder_data/proc/regexp-extract.py +0 -0
  56. {1bcoder-0.1.14 → 1bcoder-0.1.15}/_bcoder_data/proc/rude_words.py +0 -0
  57. {1bcoder-0.1.14 → 1bcoder-0.1.15}/_bcoder_data/proc/scan-save.py +0 -0
  58. {1bcoder-0.1.14 → 1bcoder-0.1.15}/_bcoder_data/proc/secret_check.py +0 -0
  59. {1bcoder-0.1.14 → 1bcoder-0.1.15}/_bcoder_data/proc/sql_readonly_guard.py +0 -0
  60. {1bcoder-0.1.14 → 1bcoder-0.1.15}/_bcoder_data/proc/tempctx-cut.py +0 -0
  61. {1bcoder-0.1.14 → 1bcoder-0.1.15}/_bcoder_data/profiles.txt +0 -0
  62. {1bcoder-0.1.14 → 1bcoder-0.1.15}/_bcoder_data/prompts/analysis.txt +0 -0
  63. {1bcoder-0.1.14 → 1bcoder-0.1.15}/_bcoder_data/prompts/sumarise.txt +0 -0
  64. {1bcoder-0.1.14 → 1bcoder-0.1.15}/_bcoder_data/prompts.txt +0 -0
  65. {1bcoder-0.1.14 → 1bcoder-0.1.15}/_bcoder_data/scripts/AddFunction.txt +0 -0
  66. {1bcoder-0.1.14 → 1bcoder-0.1.15}/_bcoder_data/scripts/AskProject.txt +0 -0
  67. {1bcoder-0.1.14 → 1bcoder-0.1.15}/_bcoder_data/scripts/CheckRequirements.txt +0 -0
  68. {1bcoder-0.1.14 → 1bcoder-0.1.15}/_bcoder_data/scripts/DockerMySQL.txt +0 -0
  69. {1bcoder-0.1.14 → 1bcoder-0.1.15}/_bcoder_data/scripts/DockerNginx.txt +0 -0
  70. {1bcoder-0.1.14 → 1bcoder-0.1.15}/_bcoder_data/scripts/DockerPython.txt +0 -0
  71. {1bcoder-0.1.14 → 1bcoder-0.1.15}/_bcoder_data/scripts/DockerStack.txt +0 -0
  72. {1bcoder-0.1.14 → 1bcoder-0.1.15}/_bcoder_data/scripts/DuckDuckGoInstant.txt +0 -0
  73. {1bcoder-0.1.14 → 1bcoder-0.1.15}/_bcoder_data/scripts/EnvTemplate.txt +0 -0
  74. {1bcoder-0.1.14 → 1bcoder-0.1.15}/_bcoder_data/scripts/Explain.txt +0 -0
  75. {1bcoder-0.1.14 → 1bcoder-0.1.15}/_bcoder_data/scripts/ExploreProjectStructure.txt +0 -0
  76. {1bcoder-0.1.14 → 1bcoder-0.1.15}/_bcoder_data/scripts/GitIgnorePython.txt +0 -0
  77. {1bcoder-0.1.14 → 1bcoder-0.1.15}/_bcoder_data/scripts/MySQLDump.txt +0 -0
  78. {1bcoder-0.1.14 → 1bcoder-0.1.15}/_bcoder_data/scripts/NewScript.txt +0 -0
  79. {1bcoder-0.1.14 → 1bcoder-0.1.15}/_bcoder_data/scripts/PipFreeze.txt +0 -0
  80. {1bcoder-0.1.14 → 1bcoder-0.1.15}/_bcoder_data/scripts/PyPI.txt +0 -0
  81. {1bcoder-0.1.14 → 1bcoder-0.1.15}/_bcoder_data/scripts/Refactor.txt +0 -0
  82. {1bcoder-0.1.14 → 1bcoder-0.1.15}/_bcoder_data/scripts/RunAndFix.txt +0 -0
  83. {1bcoder-0.1.14 → 1bcoder-0.1.15}/_bcoder_data/scripts/SQLiteSchema.txt +0 -0
  84. {1bcoder-0.1.14 → 1bcoder-0.1.15}/_bcoder_data/scripts/Translate.txt +0 -0
  85. {1bcoder-0.1.14 → 1bcoder-0.1.15}/_bcoder_data/scripts/WikiPage.txt +0 -0
  86. {1bcoder-0.1.14 → 1bcoder-0.1.15}/_bcoder_data/scripts/WikiSearch.txt +0 -0
  87. {1bcoder-0.1.14 → 1bcoder-0.1.15}/_bcoder_data/scripts/auto-bkup.txt +0 -0
  88. {1bcoder-0.1.14 → 1bcoder-0.1.15}/_bcoder_data/scripts/edit-control.txt +0 -0
  89. {1bcoder-0.1.14 → 1bcoder-0.1.15}/_bcoder_data/scripts/parallel_call.txt +0 -0
  90. {1bcoder-0.1.14 → 1bcoder-0.1.15}/_bcoder_data/scripts/personal/content/create-regular-content.txt +0 -0
  91. {1bcoder-0.1.14 → 1bcoder-0.1.15}/_bcoder_data/scripts/personal/content/plan.txt +0 -0
  92. {1bcoder-0.1.14 → 1bcoder-0.1.15}/_bcoder_data/scripts/personal/test/collect-data-from-test-environment.txt +0 -0
  93. {1bcoder-0.1.14 → 1bcoder-0.1.15}/_bcoder_data/scripts/plan.txt +0 -0
  94. {1bcoder-0.1.14 → 1bcoder-0.1.15}/_bcoder_data/scripts/remote/create-content-on-remote-server.txt +0 -0
  95. {1bcoder-0.1.14 → 1bcoder-0.1.15}/_bcoder_data/scripts/set_ctx.txt +0 -0
  96. {1bcoder-0.1.14 → 1bcoder-0.1.15}/_bcoder_data/scripts/simargl-cli_index_files.txt +0 -0
  97. {1bcoder-0.1.14 → 1bcoder-0.1.15}/_bcoder_data/scripts/simargl-cli_index_units.txt +0 -0
  98. {1bcoder-0.1.14 → 1bcoder-0.1.15}/_bcoder_data/scripts/simargl-cli_search.txt +0 -0
  99. {1bcoder-0.1.14 → 1bcoder-0.1.15}/_bcoder_data/scripts/team-map-worker.txt +0 -0
  100. {1bcoder-0.1.14 → 1bcoder-0.1.15}/_bcoder_data/scripts/team-search-worker.txt +0 -0
  101. {1bcoder-0.1.14 → 1bcoder-0.1.15}/_bcoder_data/scripts/team-summarize.txt +0 -0
  102. {1bcoder-0.1.14 → 1bcoder-0.1.15}/_bcoder_data/scripts/team-tree-worker.txt +0 -0
  103. {1bcoder-0.1.14 → 1bcoder-0.1.15}/_bcoder_data/scripts/test.txt +0 -0
  104. {1bcoder-0.1.14 → 1bcoder-0.1.15}/_bcoder_data/teams/code-analysis.yaml +0 -0
  105. {1bcoder-0.1.14 → 1bcoder-0.1.15}/map_index.py +0 -0
  106. {1bcoder-0.1.14 → 1bcoder-0.1.15}/map_query.py +0 -0
  107. {1bcoder-0.1.14 → 1bcoder-0.1.15}/setup.cfg +0 -0
  108. {1bcoder-0.1.14 → 1bcoder-0.1.15}/tests/test_utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: 1bcoder
3
- Version: 0.1.14
3
+ Version: 0.1.15
4
4
  Summary: AI coding assistant agent for 1B–7B local models (Ollama, LMStudio, llama.cpp). Terminal REPL with file editing, project map, agents, scripts, and parallel multi-model queries.
5
5
  Project-URL: Homepage, https://github.com/szholobetsky/1bcoder
6
6
  Project-URL: Repository, https://github.com/szholobetsky/1bcoder
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: 1bcoder
3
- Version: 0.1.14
3
+ Version: 0.1.15
4
4
  Summary: AI coding assistant agent for 1B–7B local models (Ollama, LMStudio, llama.cpp). Terminal REPL with file editing, project map, agents, scripts, and parallel multi-model queries.
5
5
  Project-URL: Homepage, https://github.com/szholobetsky/1bcoder
6
6
  Project-URL: Repository, https://github.com/szholobetsky/1bcoder
@@ -19,6 +19,7 @@ These are handled by 1bcoder directly and are not forwarded to the model API.
19
19
  | `ask_show` | 500 | Characters shown in terminal when output is truncated. |
20
20
  | `run_timeout` | 30 | Timeout in seconds for `/run` shell commands. Set to `0` to disable (no timeout). Useful for long-running CLI tools like `simargl search`. |
21
21
  | `log` | `false` | Print full request details before each LLM call: URL, model, message count, options. Also prints HTTP response headers on error. Useful for debugging 500 errors or unexpected model behaviour. |
22
+ | `keep_alive` | *(not set)* | **Ollama only.** How long to keep the model loaded after a response. `-1` = never unload. `"5m"` = 5 minutes (Ollama default). `"0"` = unload immediately. Set `-1` to prevent KV-cache eviction during long sessions. |
22
23
 
23
24
  ---
24
25
 
@@ -134,6 +135,9 @@ An alternative to top_p/top_k that targets a specific perplexity level.
134
135
  # Keep reasoning in context for chained agents
135
136
  /param think_exclude false
136
137
 
138
+ # Prevent Ollama from evicting KV-cache between requests (fixes slowdown after 10k+ tokens)
139
+ /param keep_alive -1
140
+
137
141
  # Reset everything
138
142
  /param clear
139
143
  ```
@@ -867,10 +867,14 @@ Output capture operators (work with any command — LLM reply, tool, proc):
867
867
 
868
868
  /clear Clear conversation context, reset params, clear /var variables, and reload model metadata.
869
869
  Use this to fully reset session state when the model starts behaving oddly.
870
+ /clear kv Evict the Ollama KV cache by unloading the model (keep_alive=0). Ollama-only.
871
+ Use before benchmarks or tests that require a completely clean inference state.
872
+ The model will be reloaded on the next request.
870
873
 
871
- /model [-sc] Switch AI model interactively (type number from list).
872
- /model <name> [-sc] Switch directly by model name (e.g. /model gemma3:1b).
874
+ /model [-sc] [-cc] Switch AI model interactively (type number from list).
875
+ /model <name> [-sc] [-cc] Switch directly by model name (e.g. /model gemma3:1b).
873
876
  -sc / save-context: keep context when switching.
877
+ -cc / clear-cache: evict KV cache of the old model before switching (Ollama only).
874
878
 
875
879
  /host <url> [-sc] Switch host and provider on the fly.
876
880
  -sc / save-context: keep context when switching.
@@ -1141,6 +1145,7 @@ Output capture operators (work with any command — LLM reply, tool, proc):
1141
1145
  /help Show full help.
1142
1146
  /help <command> Show help for one command (e.g. /help map, /help fix).
1143
1147
  /help <command> ctx Same but also inject the text into AI context.
1148
+ /help all ctx Inject the entire help reference into AI context — then ask the model anything about available commands.
1144
1149
 
1145
1150
  /doc list List documentation articles in doc/.
1146
1151
  /doc <name> Show article rendered as Markdown.
@@ -1149,6 +1154,8 @@ Output capture operators (work with any command — LLM reply, tool, proc):
1149
1154
 
1150
1155
  /exit Quit.
1151
1156
 
1157
+ /help all ctx Inject the entire help reference into AI context — then ask the model anything about available commands.
1158
+
1152
1159
  Ctrl+C - interrupt AI response mid-stream.
1153
1160
  Enter - submit message.
1154
1161
  """
@@ -2392,6 +2399,27 @@ class CoderCLI:
2392
2399
  if self._meta_ctx:
2393
2400
  self.num_ctx = self._meta_ctx
2394
2401
 
2402
+ def _evict_kv_cache(self) -> None:
2403
+ """Unload the model from Ollama to evict the KV cache.
2404
+
2405
+ Sends keep_alive=0 with no prompt — Ollama unloads the model immediately.
2406
+ The next request will reload the model with a completely clean KV cache.
2407
+ Ollama-only; prints a warning for other providers.
2408
+ """
2409
+ if self.provider != "ollama":
2410
+ print("[kv] KV eviction is Ollama-only (current provider: openai)")
2411
+ return
2412
+ try:
2413
+ resp = requests.post(
2414
+ f"{self.base_url}/api/generate",
2415
+ json={"model": self.model, "keep_alive": 0},
2416
+ timeout=10,
2417
+ )
2418
+ resp.raise_for_status()
2419
+ print(f"[kv] model '{self.model}' unloaded — KV cache cleared")
2420
+ except Exception as e:
2421
+ print(f"[kv] failed to evict: {e}")
2422
+
2395
2423
  def _short_model(self) -> str:
2396
2424
  """Truncate model name to fit a narrow terminal.
2397
2425
 
@@ -2756,13 +2784,18 @@ class CoderCLI:
2756
2784
  else:
2757
2785
  opts = {"num_ctx": self.num_ctx}
2758
2786
  opts.update(self.params)
2787
+ keep_alive = opts.pop("keep_alive", None)
2788
+ ollama_body = {"model": self.model, "messages": messages, "stream": True,
2789
+ "options": opts}
2790
+ if keep_alive is not None:
2791
+ ollama_body["keep_alive"] = keep_alive
2759
2792
  if self.log_requests:
2760
2793
  print(f" [log] POST {self.base_url}/api/chat")
2761
- print(f" [log] model={self.model} messages={len(messages)} options={opts}")
2794
+ print(f" [log] model={self.model} messages={len(messages)} options={opts}"
2795
+ + (f" keep_alive={keep_alive}" if keep_alive is not None else ""))
2762
2796
  with requests.post(
2763
2797
  f"{self.base_url}/api/chat",
2764
- json={"model": self.model, "messages": messages, "stream": True,
2765
- "options": opts},
2798
+ json=ollama_body,
2766
2799
  stream=True, timeout=self.timeout,
2767
2800
  ) as resp:
2768
2801
  resp.raise_for_status()
@@ -3014,14 +3047,18 @@ class CoderCLI:
3014
3047
  self._cmd_format(user_input)
3015
3048
  elif user_input.startswith("/param"):
3016
3049
  self._cmd_param(user_input)
3017
- elif user_input == "/clear":
3018
- self.messages.clear()
3019
- self.last_reply = ""
3020
- self.params.clear()
3021
- self._vars.clear()
3022
- self._last_proc_stdout = ""
3023
- self._load_model_meta() # re-detect num_ctx, forces Ollama model reload
3024
- print("[context cleared]")
3050
+ elif user_input in ("/clear", "/clear kv"):
3051
+ kv = user_input == "/clear kv"
3052
+ if kv:
3053
+ self._evict_kv_cache()
3054
+ else:
3055
+ self.messages.clear()
3056
+ self.last_reply = ""
3057
+ self.params.clear()
3058
+ self._vars.clear()
3059
+ self._last_proc_stdout = ""
3060
+ self._load_model_meta() # re-detect num_ctx, forces Ollama model reload
3061
+ print("[context cleared]")
3025
3062
  elif user_input.startswith("/model"):
3026
3063
  self._cmd_model(user_input)
3027
3064
  elif user_input.startswith("/host"):
@@ -3822,8 +3859,14 @@ advanced_tools =
3822
3859
 
3823
3860
  def _cmd_model(self, user_input: str = ""):
3824
3861
  tokens = user_input.split()
3825
- save_ctx = "-sc" in tokens or "save-context" in tokens
3826
- args = [t for t in tokens[1:] if t not in ("-sc", "save-context")]
3862
+ save_ctx = "-sc" in tokens or "save-context" in tokens
3863
+ clear_kv = "-cc" in tokens or "clear-cache" in tokens
3864
+ flag_strs = {"-sc", "save-context", "-cc", "clear-cache"}
3865
+ args = [t for t in tokens[1:] if t not in flag_strs]
3866
+
3867
+ # evict KV cache of the current model before switching
3868
+ if clear_kv:
3869
+ self._evict_kv_cache()
3827
3870
 
3828
3871
  # refresh model list from server
3829
3872
  try:
@@ -3845,7 +3888,8 @@ advanced_tools =
3845
3888
  print(f"[switched to {self.model}, context cleared]")
3846
3889
  else:
3847
3890
  print(f"[switched to {self.model}, context kept]")
3848
- self.cmd_history.append(f"/model {name}" + (" -sc" if save_ctx else ""))
3891
+ flags = (" -sc" if save_ctx else "") + (" -cc" if clear_kv else "")
3892
+ self.cmd_history.append(f"/model {name}{flags}")
3849
3893
  return
3850
3894
 
3851
3895
  # interactive selection by number
@@ -3866,7 +3910,8 @@ advanced_tools =
3866
3910
  print(f"[switched to {self.model}, context cleared]")
3867
3911
  else:
3868
3912
  print(f"[switched to {self.model}, context kept]")
3869
- self.cmd_history.append(f"/model {self.model}" + (" -sc" if save_ctx else ""))
3913
+ flags = (" -sc" if save_ctx else "") + (" -cc" if clear_kv else "")
3914
+ self.cmd_history.append(f"/model {self.model}{flags}")
3870
3915
  else:
3871
3916
  print("invalid choice")
3872
3917
  except ValueError:
@@ -8323,6 +8368,15 @@ Config stored in ~/.1bcoder/translate.json
8323
8368
  cmd = parts[1].lstrip('/')
8324
8369
  ctx = len(parts) > 2 and parts[2].strip() == "ctx"
8325
8370
 
8371
+ # /help all ctx — inject full help into context
8372
+ if cmd == "all":
8373
+ if ctx:
8374
+ self.messages.append({"role": "user", "content": f"[help: all commands]\n{HELP_TEXT}"})
8375
+ print(f"[help] full help injected into context ({len(HELP_TEXT):,} chars)")
8376
+ else:
8377
+ print(HELP_TEXT)
8378
+ return
8379
+
8326
8380
  # find paragraphs whose first line starts with /<cmd>
8327
8381
  paragraphs = HELP_TEXT.split('\n\n')
8328
8382
  pattern = re.compile(r'^/' + re.escape(cmd) + r'(\s|$)', re.MULTILINE)
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "1bcoder"
7
- version = "0.1.14"
7
+ version = "0.1.15"
8
8
  description = "AI coding assistant agent for 1B–7B local models (Ollama, LMStudio, llama.cpp). Terminal REPL with file editing, project map, agents, scripts, and parallel multi-model queries."
9
9
  requires-python = ">=3.10"
10
10
  readme = {file = "README.md", content-type = "text/markdown"}
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes