autoforge-ai 0.1.11 → 0.1.12
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.
- package/.env.example +8 -1
- package/client.py +13 -2
- package/package.json +1 -1
- package/parallel_orchestrator.py +5 -3
- package/registry.py +12 -0
- package/ui/dist/assets/{index-Cfs3AM7o.js → index-Dbvdx_Pa.js} +22 -22
- package/ui/dist/assets/index-DnMjA6om.css +1 -0
- package/ui/dist/index.html +2 -2
- package/ui/dist/assets/index-1cpzK3R3.css +0 -1
package/.env.example
CHANGED
|
@@ -30,11 +30,18 @@
|
|
|
30
30
|
# ANTHROPIC_DEFAULT_HAIKU_MODEL=claude-3-5-haiku@20241022
|
|
31
31
|
|
|
32
32
|
# ===================
|
|
33
|
-
# Alternative API Providers (GLM, Ollama, Kimi, Custom)
|
|
33
|
+
# Alternative API Providers (Azure, GLM, Ollama, Kimi, Custom)
|
|
34
34
|
# ===================
|
|
35
35
|
# Configure via Settings UI (recommended) or set env vars below.
|
|
36
36
|
# When both are set, env vars take precedence.
|
|
37
37
|
#
|
|
38
|
+
# Azure Anthropic (Claude):
|
|
39
|
+
# ANTHROPIC_BASE_URL=https://your-resource.services.ai.azure.com/anthropic
|
|
40
|
+
# ANTHROPIC_API_KEY=your-azure-api-key
|
|
41
|
+
# ANTHROPIC_DEFAULT_OPUS_MODEL=claude-opus-4-6
|
|
42
|
+
# ANTHROPIC_DEFAULT_SONNET_MODEL=claude-sonnet-4-5
|
|
43
|
+
# ANTHROPIC_DEFAULT_HAIKU_MODEL=claude-haiku-4-5
|
|
44
|
+
#
|
|
38
45
|
# GLM (Zhipu AI):
|
|
39
46
|
# ANTHROPIC_BASE_URL=https://api.z.ai/api/anthropic
|
|
40
47
|
# ANTHROPIC_AUTH_TOKEN=your-glm-api-key
|
package/client.py
CHANGED
|
@@ -141,7 +141,6 @@ def get_extra_read_paths() -> list[Path]:
|
|
|
141
141
|
# overhead and preventing agents from calling tools meant for other roles.
|
|
142
142
|
#
|
|
143
143
|
# Tools intentionally omitted from ALL agent lists (UI/orchestrator only):
|
|
144
|
-
# feature_get_ready, feature_get_blocked, feature_get_graph,
|
|
145
144
|
# feature_remove_dependency
|
|
146
145
|
#
|
|
147
146
|
# The ghost tool "feature_release_testing" was removed entirely -- it was
|
|
@@ -151,6 +150,9 @@ CODING_AGENT_TOOLS = [
|
|
|
151
150
|
"mcp__features__feature_get_stats",
|
|
152
151
|
"mcp__features__feature_get_by_id",
|
|
153
152
|
"mcp__features__feature_get_summary",
|
|
153
|
+
"mcp__features__feature_get_ready",
|
|
154
|
+
"mcp__features__feature_get_blocked",
|
|
155
|
+
"mcp__features__feature_get_graph",
|
|
154
156
|
"mcp__features__feature_claim_and_get",
|
|
155
157
|
"mcp__features__feature_mark_in_progress",
|
|
156
158
|
"mcp__features__feature_mark_passing",
|
|
@@ -163,12 +165,18 @@ TESTING_AGENT_TOOLS = [
|
|
|
163
165
|
"mcp__features__feature_get_stats",
|
|
164
166
|
"mcp__features__feature_get_by_id",
|
|
165
167
|
"mcp__features__feature_get_summary",
|
|
168
|
+
"mcp__features__feature_get_ready",
|
|
169
|
+
"mcp__features__feature_get_blocked",
|
|
170
|
+
"mcp__features__feature_get_graph",
|
|
166
171
|
"mcp__features__feature_mark_passing",
|
|
167
172
|
"mcp__features__feature_mark_failing",
|
|
168
173
|
]
|
|
169
174
|
|
|
170
175
|
INITIALIZER_AGENT_TOOLS = [
|
|
171
176
|
"mcp__features__feature_get_stats",
|
|
177
|
+
"mcp__features__feature_get_ready",
|
|
178
|
+
"mcp__features__feature_get_blocked",
|
|
179
|
+
"mcp__features__feature_get_graph",
|
|
172
180
|
"mcp__features__feature_create_bulk",
|
|
173
181
|
"mcp__features__feature_create",
|
|
174
182
|
"mcp__features__feature_add_dependency",
|
|
@@ -342,6 +350,7 @@ def create_client(
|
|
|
342
350
|
is_vertex = sdk_env.get("CLAUDE_CODE_USE_VERTEX") == "1"
|
|
343
351
|
is_alternative_api = bool(base_url) or is_vertex
|
|
344
352
|
is_ollama = "localhost:11434" in base_url or "127.0.0.1:11434" in base_url
|
|
353
|
+
is_azure = "services.ai.azure.com" in base_url
|
|
345
354
|
model = convert_model_for_vertex(model)
|
|
346
355
|
if sdk_env:
|
|
347
356
|
print(f" - API overrides: {', '.join(sdk_env.keys())}")
|
|
@@ -351,8 +360,10 @@ def create_client(
|
|
|
351
360
|
print(f" - Vertex AI Mode: Using GCP project '{project_id}' with model '{model}' in region '{region}'")
|
|
352
361
|
elif is_ollama:
|
|
353
362
|
print(" - Ollama Mode: Using local models")
|
|
363
|
+
elif is_azure:
|
|
364
|
+
print(f" - Azure Mode: Using {base_url}")
|
|
354
365
|
elif "ANTHROPIC_BASE_URL" in sdk_env:
|
|
355
|
-
print(f" -
|
|
366
|
+
print(f" - Alternative API: Using {sdk_env['ANTHROPIC_BASE_URL']}")
|
|
356
367
|
|
|
357
368
|
# Create a wrapper for bash_security_hook that passes project_dir via context
|
|
358
369
|
async def bash_hook_with_context(input_data, tool_use_id=None, context=None):
|
package/package.json
CHANGED
package/parallel_orchestrator.py
CHANGED
|
@@ -194,6 +194,7 @@ class ParallelOrchestrator:
|
|
|
194
194
|
# Legacy alias for backward compatibility
|
|
195
195
|
self.running_agents = self.running_coding_agents
|
|
196
196
|
self.abort_events: dict[int, threading.Event] = {}
|
|
197
|
+
self._testing_session_counter = 0
|
|
197
198
|
self.is_running = False
|
|
198
199
|
|
|
199
200
|
# Track feature failures to prevent infinite retry loops
|
|
@@ -846,7 +847,7 @@ class ParallelOrchestrator:
|
|
|
846
847
|
"encoding": "utf-8",
|
|
847
848
|
"errors": "replace",
|
|
848
849
|
"cwd": str(self.project_dir), # Run from project dir so CLI creates .claude/ in project
|
|
849
|
-
"env": {**os.environ, "PYTHONUNBUFFERED": "1", "NODE_COMPILE_CACHE": ""},
|
|
850
|
+
"env": {**os.environ, "PYTHONUNBUFFERED": "1", "NODE_COMPILE_CACHE": "", "PLAYWRIGHT_CLI_SESSION": f"coding-{feature_id}"},
|
|
850
851
|
}
|
|
851
852
|
if sys.platform == "win32":
|
|
852
853
|
popen_kwargs["creationflags"] = subprocess.CREATE_NO_WINDOW
|
|
@@ -909,7 +910,7 @@ class ParallelOrchestrator:
|
|
|
909
910
|
"encoding": "utf-8",
|
|
910
911
|
"errors": "replace",
|
|
911
912
|
"cwd": str(self.project_dir), # Run from project dir so CLI creates .claude/ in project
|
|
912
|
-
"env": {**os.environ, "PYTHONUNBUFFERED": "1", "NODE_COMPILE_CACHE": ""},
|
|
913
|
+
"env": {**os.environ, "PYTHONUNBUFFERED": "1", "NODE_COMPILE_CACHE": "", "PLAYWRIGHT_CLI_SESSION": f"coding-{primary_id}"},
|
|
913
914
|
}
|
|
914
915
|
if sys.platform == "win32":
|
|
915
916
|
popen_kwargs["creationflags"] = subprocess.CREATE_NO_WINDOW
|
|
@@ -1013,8 +1014,9 @@ class ParallelOrchestrator:
|
|
|
1013
1014
|
"encoding": "utf-8",
|
|
1014
1015
|
"errors": "replace",
|
|
1015
1016
|
"cwd": str(self.project_dir), # Run from project dir so CLI creates .claude/ in project
|
|
1016
|
-
"env": {**os.environ, "PYTHONUNBUFFERED": "1", "NODE_COMPILE_CACHE": ""},
|
|
1017
|
+
"env": {**os.environ, "PYTHONUNBUFFERED": "1", "NODE_COMPILE_CACHE": "", "PLAYWRIGHT_CLI_SESSION": f"testing-{self._testing_session_counter}"},
|
|
1017
1018
|
}
|
|
1019
|
+
self._testing_session_counter += 1
|
|
1018
1020
|
if sys.platform == "win32":
|
|
1019
1021
|
popen_kwargs["creationflags"] = subprocess.CREATE_NO_WINDOW
|
|
1020
1022
|
|
package/registry.py
CHANGED
|
@@ -676,6 +676,18 @@ API_PROVIDERS: dict[str, dict[str, Any]] = {
|
|
|
676
676
|
],
|
|
677
677
|
"default_model": "glm-4.7",
|
|
678
678
|
},
|
|
679
|
+
"azure": {
|
|
680
|
+
"name": "Azure Anthropic (Claude)",
|
|
681
|
+
"base_url": "",
|
|
682
|
+
"requires_auth": True,
|
|
683
|
+
"auth_env_var": "ANTHROPIC_API_KEY",
|
|
684
|
+
"models": [
|
|
685
|
+
{"id": "claude-opus-4-6", "name": "Claude Opus"},
|
|
686
|
+
{"id": "claude-sonnet-4-5", "name": "Claude Sonnet"},
|
|
687
|
+
{"id": "claude-haiku-4-5", "name": "Claude Haiku"},
|
|
688
|
+
],
|
|
689
|
+
"default_model": "claude-opus-4-6",
|
|
690
|
+
},
|
|
679
691
|
"ollama": {
|
|
680
692
|
"name": "Ollama (Local)",
|
|
681
693
|
"base_url": "http://localhost:11434",
|