gemcode 0.4.4__py3-none-any.whl → 0.4.6__py3-none-any.whl
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/agent.py +5 -0
- gemcode/org.py +19 -0
- gemcode/repl_slash.py +21 -1
- gemcode/tool_synthesis.py +1 -1
- {gemcode-0.4.4.dist-info → gemcode-0.4.6.dist-info}/METADATA +1 -1
- {gemcode-0.4.4.dist-info → gemcode-0.4.6.dist-info}/RECORD +10 -10
- {gemcode-0.4.4.dist-info → gemcode-0.4.6.dist-info}/WHEEL +0 -0
- {gemcode-0.4.4.dist-info → gemcode-0.4.6.dist-info}/entry_points.txt +0 -0
- {gemcode-0.4.4.dist-info → gemcode-0.4.6.dist-info}/licenses/LICENSE +0 -0
- {gemcode-0.4.4.dist-info → gemcode-0.4.6.dist-info}/top_level.txt +0 -0
gemcode/agent.py
CHANGED
|
@@ -1292,7 +1292,12 @@ def build_root_agent(
|
|
|
1292
1292
|
fleet_root = resolve_fleet_root(cfg.project_root)
|
|
1293
1293
|
members = list_members(fleet_root)
|
|
1294
1294
|
|
|
1295
|
+
# Deduplicate by name — ADK requires unique sub-agent names
|
|
1296
|
+
seen_names: set[str] = set()
|
|
1295
1297
|
for m in members:
|
|
1298
|
+
if m.name in seen_names:
|
|
1299
|
+
continue
|
|
1300
|
+
seen_names.add(m.name)
|
|
1296
1301
|
# Build a specialized sub-agent for each org member
|
|
1297
1302
|
member_tools = build_function_tools(cfg, include_subtask=False)
|
|
1298
1303
|
|
gemcode/org.py
CHANGED
|
@@ -336,6 +336,25 @@ def hire_member(
|
|
|
336
336
|
root = resolve_fleet_root(project_root)
|
|
337
337
|
org = load_org(root)
|
|
338
338
|
members = list(org.get("members") or [])
|
|
339
|
+
|
|
340
|
+
# Prevent duplicate names — ADK sub_agents require unique names
|
|
341
|
+
clean_name = name.strip().lower()
|
|
342
|
+
for existing in members:
|
|
343
|
+
if str(existing.get("name", "")).strip().lower() == clean_name:
|
|
344
|
+
# Return the existing member instead of creating a duplicate
|
|
345
|
+
return OrgMember(
|
|
346
|
+
id=str(existing.get("id") or ""),
|
|
347
|
+
name=str(existing.get("name") or ""),
|
|
348
|
+
title=str(existing.get("title") or title),
|
|
349
|
+
kind=str(existing.get("kind") or kind),
|
|
350
|
+
address=str(existing.get("address") or ""),
|
|
351
|
+
workspace_rel=str(existing.get("workspace_rel") or ""),
|
|
352
|
+
reports_to=str(existing.get("reports_to") or ""),
|
|
353
|
+
skill_name=str(existing.get("skill_name") or ""),
|
|
354
|
+
description=str(existing.get("description") or description),
|
|
355
|
+
created_ms=int(existing.get("created_ms") or 0),
|
|
356
|
+
)
|
|
357
|
+
|
|
339
358
|
now = _now_ms()
|
|
340
359
|
mid = f"m_{uuid.uuid4().hex[:10]}"
|
|
341
360
|
m = OrgMember(
|
gemcode/repl_slash.py
CHANGED
|
@@ -2964,7 +2964,27 @@ async def process_repl_slash(
|
|
|
2964
2964
|
out()
|
|
2965
2965
|
return ReplSlashResult(skip_model_turn=True)
|
|
2966
2966
|
except Exception as e:
|
|
2967
|
-
|
|
2967
|
+
# Fallback: use the mesh to run the prompt for this agent
|
|
2968
|
+
out(f"[agent] runtime not reachable, using mesh fallback")
|
|
2969
|
+
try:
|
|
2970
|
+
from gemcode.tools.org_tools import make_org_tools
|
|
2971
|
+
org_delegate = None
|
|
2972
|
+
for t in make_org_tools(cfg):
|
|
2973
|
+
if getattr(t, "__name__", "") == "org_delegate":
|
|
2974
|
+
org_delegate = t
|
|
2975
|
+
break
|
|
2976
|
+
if org_delegate is not None:
|
|
2977
|
+
d = await org_delegate(member=m.name, task=prompt, context="")
|
|
2978
|
+
if isinstance(d, dict) and d.get("ok"):
|
|
2979
|
+
out(f"[agent] delegated via mesh: member={m.name}")
|
|
2980
|
+
if d.get("result"):
|
|
2981
|
+
out(str(d.get("result"))[:2000])
|
|
2982
|
+
else:
|
|
2983
|
+
out(f"[agent] mesh delegation failed: {d.get('error') if isinstance(d, dict) else d}")
|
|
2984
|
+
else:
|
|
2985
|
+
out("[agent] org_delegate tool not available")
|
|
2986
|
+
except Exception as e2:
|
|
2987
|
+
out(f"[agent] fallback failed: {type(e2).__name__}: {e2}")
|
|
2968
2988
|
out()
|
|
2969
2989
|
return ReplSlashResult(skip_model_turn=True)
|
|
2970
2990
|
|
gemcode/tool_synthesis.py
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
gemcode/__init__.py,sha256=l0DCRYqK7KM7Fb7u49fqh-5_SlpeIL7r3LjMeJWMgSg,112
|
|
2
2
|
gemcode/__main__.py,sha256=EX2s1hxq2Yvli_-tnBN3w5Qv4bOjsBBbjyISF0pDIQw,37
|
|
3
3
|
gemcode/a2a_bridge.py,sha256=Od0C_mbOrOSRnO1OckPr9FY19l-y6f-m8xP_qjvbrhQ,7720
|
|
4
|
-
gemcode/agent.py,sha256=
|
|
4
|
+
gemcode/agent.py,sha256=gdKPFjC-v8WqQxTz2rjmlyEQp6YBcsk_cQuuJ9yfbnE,70879
|
|
5
5
|
gemcode/agent_habits.py,sha256=UdJqvFqFl3gA4Ic_0J6CgjxGy4paVQxFbnx0BrE-2RA,13306
|
|
6
6
|
gemcode/agent_intelligence.py,sha256=QGr44logwyOJyWtyyHXh259PN0TbNFzUJmmMRHeyDao,20284
|
|
7
7
|
gemcode/agent_mesh.py,sha256=6YFLbzLzQsjUSq4kAPmTDtDn_ttJ_2QCmvuEqjSqHSk,21737
|
|
@@ -46,7 +46,7 @@ gemcode/model_errors.py,sha256=1G2UgS9agbyl0vfaQ2a3JF9Mk9Tv9QLg1zBhPVE29Wc,4945
|
|
|
46
46
|
gemcode/model_routing.py,sha256=0B0rZuIrmRShSSOaBg0vHb6I39Shy5LBRO_IyDbaoWs,5926
|
|
47
47
|
gemcode/multimodal_input.py,sha256=eLFNj_yAykvoTMyiv0hGUXMgb6xlN4pyZ6X--swhnw0,5015
|
|
48
48
|
gemcode/openapi_loader.py,sha256=g_NZD8YL9_9iIJJ9qykhdbBrylJ1195A4FyHGC0mroc,4157
|
|
49
|
-
gemcode/org.py,sha256=
|
|
49
|
+
gemcode/org.py,sha256=7mGWCrst_5iZsy9SF1l7Owx3QVEmBpxNItoiwv2XW9E,16421
|
|
50
50
|
gemcode/output_styles.py,sha256=6ZgbEsEM5qbdGDZMuRFRHAmHCoKpi53SqPqXZ2sfbS4,2189
|
|
51
51
|
gemcode/paths.py,sha256=UQp4R4sUBv7HsM2OVoGlPxyOIOQZE5wpY53G6nHpB5Q,2671
|
|
52
52
|
gemcode/permissions.py,sha256=QqaWxSv9oYtGOV0xxftPces7MUgHlGQ2z4DcwlQANEc,6892
|
|
@@ -56,7 +56,7 @@ gemcode/prompt_suggestions.py,sha256=RNEclxtoorRqu-wUlzuyUJ7OLFVOOryGOZBpbaCducI
|
|
|
56
56
|
gemcode/query_sanitizer.py,sha256=KqXo5U7igNSgOAH4YpyANlgS--1WnZEdpO4AU4SNQUs,2746
|
|
57
57
|
gemcode/refine.py,sha256=BijEZ4Z32wGa9aK_WottyAhZF-j0xEqRg5UpjedNv2A,7653
|
|
58
58
|
gemcode/repl_commands.py,sha256=eW3FAlzZF7XZ00Et23L_tcwjOgo8wXiYCA-wx6EOuxY,21100
|
|
59
|
-
gemcode/repl_slash.py,sha256=
|
|
59
|
+
gemcode/repl_slash.py,sha256=5lvOyQhRfj2FcsejvWfNHzC3Sk6-1BWCkPqloFfIAGs,141146
|
|
60
60
|
gemcode/review_agent.py,sha256=4t7_5-aE60b4-EheJ_eSB_H2eQYf9GppKoui6jw0TME,5264
|
|
61
61
|
gemcode/rules.py,sha256=Itg02VpifOo6jqGj5xwna_ahaPPb0OVtaeR2cNI0pLE,3018
|
|
62
62
|
gemcode/self_healing.py,sha256=GthgEEgKLwPHNbwFl9EA_uCLkKLTXWloMMCPmNqBuvc,9955
|
|
@@ -69,7 +69,7 @@ gemcode/thinking.py,sha256=-1TVkOMG-7CSQN0Mc18EqINkUxWOMBgeTlF7CX9zYL4,4641
|
|
|
69
69
|
gemcode/tool_prompt_manifest.py,sha256=AXwyv09YzzAd6KKWS5ppG3QjVBBen6SfKvZDNixkCDI,10393
|
|
70
70
|
gemcode/tool_registry.py,sha256=wYfGojTxmLH_gVYh8Sqpr8bNO-CDaMOJLyaFLqxDv6A,2207
|
|
71
71
|
gemcode/tool_result_store.py,sha256=50ufSP03F1D8mWFX7HFimTVh-fMWpshOtw4AP-qf-cU,6351
|
|
72
|
-
gemcode/tool_synthesis.py,sha256=
|
|
72
|
+
gemcode/tool_synthesis.py,sha256=F3RacXy6bjTFowPBUnYPE337l70k5Mjo_crCqJ-iYoM,7080
|
|
73
73
|
gemcode/tools_inspector.py,sha256=ZAuD1oVIsZvyD_vrzaWBws2ezpFT6cIsU_w4yc_1PPA,4086
|
|
74
74
|
gemcode/trust.py,sha256=kZi1dll1T8RUZtSY42WbsEh-ZIkMRup_IZPfYlJMbw4,1457
|
|
75
75
|
gemcode/veomem_bridge.py,sha256=gOOJY2k7CNNSqygg6XcOK57yVUKkXVIyDxze_1ZGDxY,3356
|
|
@@ -126,9 +126,9 @@ gemcode/web/__init__.py,sha256=EysmUAWs6g-lmMk4VFljKfaHVrEgb_FiIzwQmBdORJc,40
|
|
|
126
126
|
gemcode/web/sse_adapter.py,sha256=fXhKxn_bdJJUGqlmvkxLNSYL-ZiIZDaLHtQCF_BheRc,7108
|
|
127
127
|
gemcode/web/terminal_repl.py,sha256=fQt895g0qcr6VBhXfv_5b_bsC5zHT5-MO0ysBdgi2Fg,3886
|
|
128
128
|
gemcode/web/web_sse_compat.py,sha256=9A2s-GI7El7AotJqhO263FrLwppCXXkdydZ5EiOQbao,504
|
|
129
|
-
gemcode-0.4.
|
|
130
|
-
gemcode-0.4.
|
|
131
|
-
gemcode-0.4.
|
|
132
|
-
gemcode-0.4.
|
|
133
|
-
gemcode-0.4.
|
|
134
|
-
gemcode-0.4.
|
|
129
|
+
gemcode-0.4.6.dist-info/licenses/LICENSE,sha256=TD4524qn-W8Z07GTDnag-9jJPFutFZNB0a1WbMHPC54,8388
|
|
130
|
+
gemcode-0.4.6.dist-info/METADATA,sha256=xkFq4jfAT09qJDAR2OYTWcJYpRym3gslIxx5GsqfDeo,24814
|
|
131
|
+
gemcode-0.4.6.dist-info/WHEEL,sha256=aeYiig01lYGDzBgS8HxWXOg3uV61G9ijOsup-k9o1sk,91
|
|
132
|
+
gemcode-0.4.6.dist-info/entry_points.txt,sha256=cZdLTLDiHbks7OSUCuxCh66dCWeQdpLR8BozoqfEjV4,45
|
|
133
|
+
gemcode-0.4.6.dist-info/top_level.txt,sha256=UYrjULLBY2bcgK6KI6flomJWmsbDXu7n0rvW2SWFrbo,8
|
|
134
|
+
gemcode-0.4.6.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|