multi-forge 0.2.0__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.
- forge/__init__.py +3 -0
- forge/_extensions/agents/.gitkeep +0 -0
- forge/_extensions/commands/.gitkeep +0 -0
- forge/_extensions/skills/analyze/SKILL.md +87 -0
- forge/_extensions/skills/challenge/SKILL.md +91 -0
- forge/_extensions/skills/consensus/SKILL.md +120 -0
- forge/_extensions/skills/consensus/resources/code_consensus_evaluation.md +94 -0
- forge/_extensions/skills/consensus/resources/consensus_evaluation.md +70 -0
- forge/_extensions/skills/consensus/resources/synthesis.md +101 -0
- forge/_extensions/skills/debate/SKILL.md +116 -0
- forge/_extensions/skills/debate/resources/code_debate_evaluation.md +101 -0
- forge/_extensions/skills/debate/resources/debate_evaluation.md +90 -0
- forge/_extensions/skills/panel/SKILL.md +141 -0
- forge/_extensions/skills/panel/resources/synthesis.md +103 -0
- forge/_extensions/skills/qa/SKILL.md +704 -0
- forge/_extensions/skills/qa/resources/checklist/0-enable.md +78 -0
- forge/_extensions/skills/qa/resources/checklist/1-preflight.md +24 -0
- forge/_extensions/skills/qa/resources/checklist/10-resume.md +143 -0
- forge/_extensions/skills/qa/resources/checklist/11-config.md +150 -0
- forge/_extensions/skills/qa/resources/checklist/12-search.md +58 -0
- forge/_extensions/skills/qa/resources/checklist/13-guard.md +237 -0
- forge/_extensions/skills/qa/resources/checklist/14-workflow.md +305 -0
- forge/_extensions/skills/qa/resources/checklist/15-skills.md +155 -0
- forge/_extensions/skills/qa/resources/checklist/16-handoff.md +224 -0
- forge/_extensions/skills/qa/resources/checklist/17-info.md +50 -0
- forge/_extensions/skills/qa/resources/checklist/18-disable.md +84 -0
- forge/_extensions/skills/qa/resources/checklist/19-uninstall.md +146 -0
- forge/_extensions/skills/qa/resources/checklist/2-extensions.md +188 -0
- forge/_extensions/skills/qa/resources/checklist/20-cleanup.md +36 -0
- forge/_extensions/skills/qa/resources/checklist/3-auth.md +234 -0
- forge/_extensions/skills/qa/resources/checklist/4-proxy.md +481 -0
- forge/_extensions/skills/qa/resources/checklist/5-session.md +541 -0
- forge/_extensions/skills/qa/resources/checklist/6-hooks.md +275 -0
- forge/_extensions/skills/qa/resources/checklist/7-costs.md +309 -0
- forge/_extensions/skills/qa/resources/checklist/8-status-line.md +174 -0
- forge/_extensions/skills/qa/resources/checklist/9-direct-commands.md +146 -0
- forge/_extensions/skills/qa/resources/checklist.md +103 -0
- forge/_extensions/skills/qa/resources/report-template.md +62 -0
- forge/_extensions/skills/qa/scripts/start-container.sh +529 -0
- forge/_extensions/skills/qa/scripts/walkthrough-state.py +1137 -0
- forge/_extensions/skills/review/SKILL.md +125 -0
- forge/_extensions/skills/review/references/claude-4.6.md +474 -0
- forge/_extensions/skills/review/references/claude-4.7.md +710 -0
- forge/_extensions/skills/review/references/gemini-3.1.md +546 -0
- forge/_extensions/skills/review/references/gpt-5.5.md +490 -0
- forge/_extensions/skills/review/references/skills-writing-guide.md +1588 -0
- forge/_extensions/skills/review/resources/code-anthropic.md +160 -0
- forge/_extensions/skills/review/resources/code-gemini.md +184 -0
- forge/_extensions/skills/review/resources/code-openai.md +203 -0
- forge/_extensions/skills/review/resources/code.md +160 -0
- forge/_extensions/skills/review-docs/SKILL.md +121 -0
- forge/_extensions/skills/review-docs/resources/docs-anthropic.md +170 -0
- forge/_extensions/skills/review-docs/resources/docs-gemini.md +204 -0
- forge/_extensions/skills/review-docs/resources/docs-openai.md +231 -0
- forge/_extensions/skills/review-docs/resources/docs.md +170 -0
- forge/_extensions/skills/smoke-test/SKILL.md +27 -0
- forge/_extensions/skills/smoke-test/scripts/smoke-test.sh +118 -0
- forge/_extensions/skills/understand/SKILL.md +148 -0
- forge/_extensions/skills/understand/resources/code-anthropic.md +163 -0
- forge/_extensions/skills/understand/resources/code-gemini.md +194 -0
- forge/_extensions/skills/understand/resources/code-openai.md +181 -0
- forge/_extensions/skills/understand/resources/code.md +163 -0
- forge/_extensions/skills/understand/resources/docs-anthropic.md +177 -0
- forge/_extensions/skills/understand/resources/docs-gemini.md +202 -0
- forge/_extensions/skills/understand/resources/docs-openai.md +191 -0
- forge/_extensions/skills/understand/resources/docs.md +177 -0
- forge/_extensions/skills/walkthrough/SKILL.md +599 -0
- forge/_extensions/skills/walkthrough/resources/checklist.md +765 -0
- forge/_extensions/skills/walkthrough/scripts/run-in-repo.sh +118 -0
- forge/_extensions/skills/walkthrough/scripts/setup-test-repo.sh +198 -0
- forge/_extensions/skills/walkthrough/scripts/walkthrough-state.py +1137 -0
- forge/backend/__init__.py +174 -0
- forge/backend/adapters/__init__.py +38 -0
- forge/backend/adapters/litellm.py +158 -0
- forge/backend/creation.py +89 -0
- forge/backend/registry.py +178 -0
- forge/cli/__init__.py +16 -0
- forge/cli/auth.py +483 -0
- forge/cli/backend.py +298 -0
- forge/cli/claude.py +411 -0
- forge/cli/config_cmd.py +303 -0
- forge/cli/extensions.py +1001 -0
- forge/cli/gc.py +165 -0
- forge/cli/guard.py +1018 -0
- forge/cli/guards.py +106 -0
- forge/cli/handoff.py +110 -0
- forge/cli/hooks/__init__.py +36 -0
- forge/cli/hooks/_group.py +20 -0
- forge/cli/hooks/_helpers.py +149 -0
- forge/cli/hooks/commands.py +1677 -0
- forge/cli/hooks/direct_commands.py +1304 -0
- forge/cli/hooks/install.py +232 -0
- forge/cli/hooks/policy.py +151 -0
- forge/cli/hooks/read_hygiene.py +74 -0
- forge/cli/hooks/verification.py +370 -0
- forge/cli/logs.py +406 -0
- forge/cli/main.py +292 -0
- forge/cli/proxy.py +1821 -0
- forge/cli/proxy_costs.py +313 -0
- forge/cli/search.py +416 -0
- forge/cli/session.py +892 -0
- forge/cli/session_addendum.py +81 -0
- forge/cli/session_fork.py +750 -0
- forge/cli/session_handoff.py +141 -0
- forge/cli/session_lifecycle.py +2053 -0
- forge/cli/session_manage.py +1336 -0
- forge/cli/session_memory.py +201 -0
- forge/cli/status_line.py +1398 -0
- forge/cli/workflow.py +1964 -0
- forge/config/__init__.py +110 -0
- forge/config/dataclass_utils.py +88 -0
- forge/config/defaults/__init__.py +0 -0
- forge/config/defaults/backends/__init__.py +0 -0
- forge/config/defaults/backends/litellm.yaml +196 -0
- forge/config/defaults/templates/__init__.py +0 -0
- forge/config/defaults/templates/litellm-anthropic-local.yaml +33 -0
- forge/config/defaults/templates/litellm-anthropic.yaml +24 -0
- forge/config/defaults/templates/litellm-gemini-flash-local.yaml +37 -0
- forge/config/defaults/templates/litellm-gemini-local.yaml +32 -0
- forge/config/defaults/templates/litellm-gemini-test.yaml +34 -0
- forge/config/defaults/templates/litellm-gemini.yaml +21 -0
- forge/config/defaults/templates/litellm-openai-codex-local.yaml +36 -0
- forge/config/defaults/templates/litellm-openai-local.yaml +38 -0
- forge/config/defaults/templates/litellm-openai.yaml +28 -0
- forge/config/defaults/templates/openrouter-anthropic.yaml +23 -0
- forge/config/defaults/templates/openrouter-deepseek.yaml +26 -0
- forge/config/defaults/templates/openrouter-gemini-flash.yaml +26 -0
- forge/config/defaults/templates/openrouter-gemini.yaml +23 -0
- forge/config/defaults/templates/openrouter-glm.yaml +23 -0
- forge/config/defaults/templates/openrouter-kimi.yaml +30 -0
- forge/config/defaults/templates/openrouter-minimax.yaml +26 -0
- forge/config/defaults/templates/openrouter-openai-codex.yaml +23 -0
- forge/config/defaults/templates/openrouter-openai.yaml +28 -0
- forge/config/defaults/templates/openrouter-qwen.yaml +25 -0
- forge/config/loader.py +675 -0
- forge/config/schema.py +448 -0
- forge/core/__init__.py +5 -0
- forge/core/auth/__init__.py +67 -0
- forge/core/auth/capabilities.py +219 -0
- forge/core/auth/credentials_file.py +244 -0
- forge/core/auth/protocols.py +18 -0
- forge/core/auth/secrets.py +243 -0
- forge/core/auth/template_secrets.py +112 -0
- forge/core/data/__init__.py +5 -0
- forge/core/data/model_catalog.yaml +1522 -0
- forge/core/data/pricing.yaml +140 -0
- forge/core/data/system_prompt_addendums/__init__.py +0 -0
- forge/core/data/system_prompt_addendums/gemini.md +330 -0
- forge/core/data/system_prompt_addendums/openai.md +328 -0
- forge/core/llm/__init__.py +231 -0
- forge/core/llm/clients/__init__.py +14 -0
- forge/core/llm/clients/base.py +115 -0
- forge/core/llm/clients/litellm.py +619 -0
- forge/core/llm/clients/openai_compat.py +244 -0
- forge/core/llm/clients/openrouter.py +234 -0
- forge/core/llm/credentials.py +439 -0
- forge/core/llm/detection.py +86 -0
- forge/core/llm/errors.py +44 -0
- forge/core/llm/protocols.py +80 -0
- forge/core/llm/types.py +176 -0
- forge/core/logging.py +146 -0
- forge/core/models/__init__.py +91 -0
- forge/core/models/catalog.py +467 -0
- forge/core/models/pricing.py +165 -0
- forge/core/models/types.py +167 -0
- forge/core/naming.py +212 -0
- forge/core/ops/__init__.py +73 -0
- forge/core/ops/context.py +141 -0
- forge/core/ops/gc.py +802 -0
- forge/core/ops/proxy.py +146 -0
- forge/core/ops/resolution.py +135 -0
- forge/core/ops/session.py +344 -0
- forge/core/ops/session_context.py +548 -0
- forge/core/paths.py +38 -0
- forge/core/process.py +54 -0
- forge/core/reactive/__init__.py +38 -0
- forge/core/reactive/cost_tracking.py +300 -0
- forge/core/reactive/env.py +180 -0
- forge/core/reactive/proxy.py +78 -0
- forge/core/reactive/routing.py +622 -0
- forge/core/reactive/session_runner.py +185 -0
- forge/core/reactive/structured_output.py +62 -0
- forge/core/reactive/tagger.py +94 -0
- forge/core/reactive/throttle.py +132 -0
- forge/core/state/__init__.py +59 -0
- forge/core/state/exceptions.py +59 -0
- forge/core/state/io.py +140 -0
- forge/core/state/lock.py +99 -0
- forge/core/state/timestamps.py +60 -0
- forge/core/transcript.py +78 -0
- forge/core/typing_helpers.py +24 -0
- forge/core/workqueue/__init__.py +67 -0
- forge/core/workqueue/queue.py +552 -0
- forge/core/workqueue/types.py +63 -0
- forge/guard/__init__.py +26 -0
- forge/guard/deterministic/__init__.py +26 -0
- forge/guard/deterministic/base.py +158 -0
- forge/guard/deterministic/coding_standards.py +256 -0
- forge/guard/deterministic/registry.py +148 -0
- forge/guard/deterministic/tdd.py +171 -0
- forge/guard/engine.py +216 -0
- forge/guard/protocols.py +91 -0
- forge/guard/queries.py +96 -0
- forge/guard/semantic/__init__.py +34 -0
- forge/guard/semantic/promotion.py +18 -0
- forge/guard/semantic/supervisor.py +813 -0
- forge/guard/semantic/verdict.py +183 -0
- forge/guard/store.py +124 -0
- forge/guard/team/__init__.py +6 -0
- forge/guard/team/config.py +24 -0
- forge/guard/team/handlers.py +209 -0
- forge/guard/team/prompts.py +41 -0
- forge/guard/types.py +125 -0
- forge/guard/workflow/__init__.py +17 -0
- forge/guard/workflow/branches.py +67 -0
- forge/guard/workflow/config.py +63 -0
- forge/guard/workflow/divergence.py +113 -0
- forge/guard/workflow/policy.py +87 -0
- forge/guard/workflow/stages.py +205 -0
- forge/install/__init__.py +55 -0
- forge/install/cli.py +281 -0
- forge/install/exceptions.py +163 -0
- forge/install/hooks.py +109 -0
- forge/install/installer.py +1037 -0
- forge/install/models.py +321 -0
- forge/install/preset.py +272 -0
- forge/install/settings_merge.py +831 -0
- forge/install/tracking.py +238 -0
- forge/install/version.py +141 -0
- forge/proxy/__init__.py +0 -0
- forge/proxy/base_client.py +181 -0
- forge/proxy/client_adapter.py +476 -0
- forge/proxy/client_factory.py +531 -0
- forge/proxy/converters.py +1206 -0
- forge/proxy/cost_logger.py +132 -0
- forge/proxy/cost_tracker.py +242 -0
- forge/proxy/data_models.py +338 -0
- forge/proxy/error_hints.py +92 -0
- forge/proxy/metrics.py +222 -0
- forge/proxy/model_spec.py +158 -0
- forge/proxy/proxies.py +333 -0
- forge/proxy/proxy_identity.py +134 -0
- forge/proxy/proxy_orchestrator.py +1018 -0
- forge/proxy/proxy_startup.py +54 -0
- forge/proxy/server.py +1561 -0
- forge/proxy/utils.py +537 -0
- forge/review/__init__.py +6 -0
- forge/review/adversarial.py +111 -0
- forge/review/consensus.py +236 -0
- forge/review/engine.py +356 -0
- forge/review/models.py +437 -0
- forge/review/resources/__init__.py +5 -0
- forge/review/resources/codereview-performance.md +85 -0
- forge/review/resources/codereview-quick.md +75 -0
- forge/review/resources/codereview-security.md +92 -0
- forge/review/resources/codereview.md +85 -0
- forge/review/resources/docreview-quick.md +75 -0
- forge/review/resources/docreview.md +86 -0
- forge/review/resources/thinkdeep.md +89 -0
- forge/review/routing.py +368 -0
- forge/review/synthesis.py +73 -0
- forge/runtime_config.py +438 -0
- forge/search/__init__.py +55 -0
- forge/search/bm25_store.py +264 -0
- forge/search/content_store.py +197 -0
- forge/search/engine.py +352 -0
- forge/search/exceptions.py +51 -0
- forge/search/extractor.py +234 -0
- forge/search/index_state.py +295 -0
- forge/search/store.py +215 -0
- forge/search/tokenizer.py +24 -0
- forge/session/__init__.py +130 -0
- forge/session/active.py +339 -0
- forge/session/artifacts.py +202 -0
- forge/session/claude/__init__.py +50 -0
- forge/session/claude/cleanup.py +105 -0
- forge/session/claude/invoke.py +236 -0
- forge/session/claude/paths.py +200 -0
- forge/session/cleanup.py +216 -0
- forge/session/config.py +34 -0
- forge/session/direct_model.py +107 -0
- forge/session/effective.py +169 -0
- forge/session/exceptions.py +255 -0
- forge/session/handoff.py +881 -0
- forge/session/handoff_agent.py +544 -0
- forge/session/hooks/__init__.py +35 -0
- forge/session/hooks/models.py +73 -0
- forge/session/hooks/session_start.py +507 -0
- forge/session/identity.py +84 -0
- forge/session/index.py +553 -0
- forge/session/manager.py +1506 -0
- forge/session/models.py +572 -0
- forge/session/overrides.py +344 -0
- forge/session/plan_resolution.py +286 -0
- forge/session/prev_sessions.py +128 -0
- forge/session/store.py +431 -0
- forge/session/validation.py +47 -0
- forge/session/worktree/__init__.py +65 -0
- forge/session/worktree/cleanup.py +262 -0
- forge/session/worktree/config_copy.py +203 -0
- forge/session/worktree/create.py +332 -0
- forge/sidecar/__init__.py +29 -0
- forge/sidecar/container.py +161 -0
- forge/sidecar/docker.py +86 -0
- forge/sidecar/secrets.py +19 -0
- multi_forge-0.2.0.dist-info/METADATA +242 -0
- multi_forge-0.2.0.dist-info/RECORD +311 -0
- multi_forge-0.2.0.dist-info/WHEEL +4 -0
- multi_forge-0.2.0.dist-info/entry_points.txt +2 -0
- multi_forge-0.2.0.dist-info/licenses/LICENSE +203 -0
- multi_forge-0.2.0.dist-info/licenses/NOTICE +14 -0
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: multi-forge
|
|
3
|
+
Version: 0.2.0
|
|
4
|
+
Summary: Multi-runtime agent toolkit: proxy routing, cost control, session management, policy enforcement, and workflow orchestration
|
|
5
|
+
Project-URL: Homepage, https://github.com/hapa1i/multi-forge
|
|
6
|
+
Project-URL: Repository, https://github.com/hapa1i/multi-forge
|
|
7
|
+
Project-URL: Issues, https://github.com/hapa1i/multi-forge/issues
|
|
8
|
+
Project-URL: Documentation, https://github.com/hapa1i/multi-forge/tree/main/docs
|
|
9
|
+
Author-email: Habib Farr <hapali@pm.me>
|
|
10
|
+
License-Expression: Apache-2.0
|
|
11
|
+
License-File: LICENSE
|
|
12
|
+
License-File: NOTICE
|
|
13
|
+
Classifier: Development Status :: 4 - Beta
|
|
14
|
+
Classifier: Intended Audience :: Developers
|
|
15
|
+
Classifier: License :: OSI Approved :: Apache Software License
|
|
16
|
+
Classifier: Operating System :: MacOS
|
|
17
|
+
Classifier: Operating System :: POSIX :: Linux
|
|
18
|
+
Classifier: Programming Language :: Python :: 3
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
22
|
+
Classifier: Topic :: Software Development
|
|
23
|
+
Requires-Python: <3.14,>=3.11
|
|
24
|
+
Requires-Dist: click>=8.3.1
|
|
25
|
+
Requires-Dist: coolname<6,>=5.0.0
|
|
26
|
+
Requires-Dist: dacite>=1.8.0
|
|
27
|
+
Requires-Dist: fastapi>=0.115.11
|
|
28
|
+
Requires-Dist: httpx>=0.25.0
|
|
29
|
+
Requires-Dist: litellm[proxy]>=1.84.0
|
|
30
|
+
Requires-Dist: openai>=1.0.0
|
|
31
|
+
Requires-Dist: packaging>=21.0
|
|
32
|
+
Requires-Dist: pydantic>=2.0.0
|
|
33
|
+
Requires-Dist: python-dotenv>=1.2.2
|
|
34
|
+
Requires-Dist: pyyaml>=6.0.0
|
|
35
|
+
Requires-Dist: rich>=13.0.0
|
|
36
|
+
Requires-Dist: ruamel-yaml>=0.18.0
|
|
37
|
+
Requires-Dist: tenacity>=8.0.0
|
|
38
|
+
Requires-Dist: uvicorn>=0.31.1
|
|
39
|
+
Requires-Dist: watchfiles>=0.20
|
|
40
|
+
Description-Content-Type: text/markdown
|
|
41
|
+
|
|
42
|
+
# Multi-Forge
|
|
43
|
+
|
|
44
|
+
[](LICENSE)
|
|
45
|
+
[](https://github.com/hapa1i/multi-forge)
|
|
46
|
+
|
|
47
|
+
> [!WARNING]
|
|
48
|
+
> **Research Preview** -- Forge is under active development. APIs, commands, and file formats may change without notice
|
|
49
|
+
> between releases. Not recommended for production use.
|
|
50
|
+
|
|
51
|
+
**Multi-runtime agent toolkit: proxy routing, cost control, session management, and policy enforcement for coding
|
|
52
|
+
agents.**
|
|
53
|
+
|
|
54
|
+
Forge sits between you and your coding agent (Claude Code today, Codex and Gemini next), adding persistent sessions,
|
|
55
|
+
multi-provider model routing, cost visibility with spend caps, and autonomous verification. You run
|
|
56
|
+
`forge session start` instead of `claude`, and Forge handles the rest -- routing to your chosen model provider, tracking
|
|
57
|
+
state across sessions, and enforcing policies.
|
|
58
|
+
|
|
59
|
+
```bash
|
|
60
|
+
# Use Claude with session tracking (no proxy needed)
|
|
61
|
+
forge session start
|
|
62
|
+
|
|
63
|
+
# Or route through different model providers (after creating proxies -- see Quick Start)
|
|
64
|
+
forge session start planner --proxy openrouter-openai # GPT for planning
|
|
65
|
+
forge session start --proxy openrouter-gemini # Gemini for review
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
## Why Forge?
|
|
69
|
+
|
|
70
|
+
Claude Code talks to Anthropic and tracks conversations. Forge adds an operational layer on top:
|
|
71
|
+
|
|
72
|
+
- **Session Tracking** -- Named sessions that persist artifacts, plans, and transcripts. Works with or without a proxy.
|
|
73
|
+
- **Multi-Model Routing** -- Route to GPT, Gemini, or any model via OpenRouter or LiteLLM through a local proxy.
|
|
74
|
+
- **Cost Control** -- Proxy cost logs and spend caps keep metered API and multi-model workflow usage predictable.
|
|
75
|
+
- **Context Compatibility** -- When routing to models with different context windows, Forge sets the native
|
|
76
|
+
`CLAUDE_CODE_AUTO_COMPACT_WINDOW` so compaction timing matches the routed model.
|
|
77
|
+
- **Autonomous Loops** -- Verification policies that keep Claude working until tests pass.
|
|
78
|
+
- **Session Resume** -- When context fills up, hand off to a fresh session with structured or AI-curated history.
|
|
79
|
+
- **Policy Engine** -- TDD enforcement, coding standards, and semantic alignment checks.
|
|
80
|
+
- **Multi-Model Review** -- Fan out code reviews to multiple models, get adversarial consensus.
|
|
81
|
+
|
|
82
|
+
### Why launch through Forge?
|
|
83
|
+
|
|
84
|
+
Running `claude` directly bypasses session tracking. When you launch through Forge (`forge session start`), you get:
|
|
85
|
+
|
|
86
|
+
| Feature | `claude` directly | `forge session start` |
|
|
87
|
+
| ---------------------- | ----------------- | --------------------------------------------- |
|
|
88
|
+
| Session tracking | No | Yes -- named sessions, artifacts, transcripts |
|
|
89
|
+
| Session resume | No | Yes -- editable handoff to fresh context |
|
|
90
|
+
| Status line | No | Yes -- proxy, session, policy info |
|
|
91
|
+
| Hook-driven artifacts | No | Yes -- plan snapshots, transcript capture |
|
|
92
|
+
| Policy enforcement | No | Yes -- TDD, coding standards, supervisor |
|
|
93
|
+
| Search across sessions | No | Yes -- `forge search` indexes transcripts |
|
|
94
|
+
| Handoff agent | No | Yes -- auto-updates project docs on exit |
|
|
95
|
+
|
|
96
|
+
Even without a proxy, `forge session start` gives you session tracking, hooks, and the status line (direct mode is the
|
|
97
|
+
default). The proxy adds multi-model routing on top. (`forge claude start` is also available as a bare launcher with
|
|
98
|
+
proxy routing only, no session state.)
|
|
99
|
+
|
|
100
|
+
## How it Works
|
|
101
|
+
|
|
102
|
+
Forge runs a local proxy that translates Claude Code's Anthropic API calls into requests for any LLM provider. Claude
|
|
103
|
+
Code connects to this proxy (via `ANTHROPIC_BASE_URL`), and Forge handles model selection, session state, and policy
|
|
104
|
+
enforcement.
|
|
105
|
+
|
|
106
|
+
```
|
|
107
|
+
Claude Code --> Forge Proxy (local) --> OpenRouter / LiteLLM --> Any LLM provider
|
|
108
|
+
|
|
|
109
|
+
Session state, policies, artifacts
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
**OpenRouter** templates call the OpenRouter API directly -- no LiteLLM needed. One API key gives access to Anthropic,
|
|
113
|
+
OpenAI, Google, Meta, and other models. **LiteLLM** templates route through a
|
|
114
|
+
[LiteLLM](https://github.com/BerriAI/litellm) proxy (remote or local subprocess).
|
|
115
|
+
|
|
116
|
+
**Direct mode** (the default) skips the proxy and talks to Anthropic directly. `forge session start` gives you session
|
|
117
|
+
tracking, hooks, and all Forge features except multi-model routing. Use `--proxy` to add routing.
|
|
118
|
+
|
|
119
|
+
## Requirements
|
|
120
|
+
|
|
121
|
+
- **Platform**: macOS or Linux
|
|
122
|
+
- **Python**: 3.11–3.13 (3.14 blocked on upstream `uvloop` wheels — see #1)
|
|
123
|
+
- **Claude Code**: installed and on PATH
|
|
124
|
+
- **Provider auth**: Claude Code login is enough for direct interactive sessions. Proxies and headless workflows need a
|
|
125
|
+
supported API or gateway credential such as `OPENROUTER_API_KEY`, `ANTHROPIC_API_KEY`, `GEMINI_API_KEY`,
|
|
126
|
+
`OPENAI_API_KEY`, or LiteLLM auth.
|
|
127
|
+
|
|
128
|
+
## Quick Start
|
|
129
|
+
|
|
130
|
+
```bash
|
|
131
|
+
# Install Forge
|
|
132
|
+
pip install multi-forge
|
|
133
|
+
|
|
134
|
+
# Or for development (editable install from local clone):
|
|
135
|
+
git clone https://github.com/hapa1i/multi-forge.git
|
|
136
|
+
cd multi-forge && pip install -e .
|
|
137
|
+
|
|
138
|
+
# Install extensions (hooks, skills, status line) into Claude Code
|
|
139
|
+
forge extension enable
|
|
140
|
+
|
|
141
|
+
# Launch Claude with session tracking (no proxy needed)
|
|
142
|
+
forge session start
|
|
143
|
+
|
|
144
|
+
# Or with multi-model routing via OpenRouter (easiest, no LiteLLM):
|
|
145
|
+
forge auth login -c openrouter # Store OPENROUTER_API_KEY
|
|
146
|
+
forge proxy create openrouter-anthropic # Create and start a Claude-family proxy
|
|
147
|
+
forge session start --proxy openrouter-anthropic
|
|
148
|
+
|
|
149
|
+
# Optional: create default workflow proxies for GPT/Gemini review workers
|
|
150
|
+
forge proxy create openrouter-openai
|
|
151
|
+
forge proxy create openrouter-gemini
|
|
152
|
+
|
|
153
|
+
# Alternative: LiteLLM-based routing (shared/internal or local):
|
|
154
|
+
# forge auth login -c litellm-remote # Store API key + base URL
|
|
155
|
+
# forge proxy create litellm-openai # Connects to shared/internal LiteLLM
|
|
156
|
+
# forge proxy create litellm-openai-local # Or start local LiteLLM
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
Once running, try `/forge:walkthrough` inside Claude Code for a guided tour in a sandboxed test environment.
|
|
160
|
+
|
|
161
|
+
### Upgrading from Pre-OSS Forge
|
|
162
|
+
|
|
163
|
+
Existing pre-OSS Forge installs are not supported in-place. If upgrading:
|
|
164
|
+
|
|
165
|
+
1. If Claude Code was previously patched, run `claude update` or reinstall Claude Code for a pristine binary.
|
|
166
|
+
2. Remove stale Forge state: `rm ~/.forge/installed.json`
|
|
167
|
+
3. Re-enable extensions: `forge extension enable`
|
|
168
|
+
4. If you had `FORGE_CONTEXT_LIMIT` in your shell config, remove it. Use `CLAUDE_CODE_AUTO_COMPACT_WINDOW` for native
|
|
169
|
+
Claude Code behavior, or `forge config set context_limit=N` for Forge proxy fallback.
|
|
170
|
+
|
|
171
|
+
### Example Workflow: Plan, Execute, Review
|
|
172
|
+
|
|
173
|
+
With proxies configured, a typical feature workflow looks like:
|
|
174
|
+
|
|
175
|
+
```bash
|
|
176
|
+
# 1. Start a planning session with a high-reasoning model
|
|
177
|
+
forge session start planner --proxy openrouter-openai
|
|
178
|
+
# ... Claude creates a plan, you approve it, /exit
|
|
179
|
+
|
|
180
|
+
# 2. Fork the planner into a worktree with plan supervision
|
|
181
|
+
forge session fork planner --name executor --worktree --supervise
|
|
182
|
+
# ... Claude implements the plan; supervisor auto-checks every Write/Edit
|
|
183
|
+
|
|
184
|
+
# 3. Context fills up? Resume with AI-curated history (supervisor config carries over)
|
|
185
|
+
forge session resume executor --fresh --strategy ai-curated
|
|
186
|
+
# ... keeps working with fresh context
|
|
187
|
+
|
|
188
|
+
# 4. Fork the planner into the executor's worktree to review
|
|
189
|
+
forge session fork planner --into ../executor-worktree # Path to executor's worktree
|
|
190
|
+
# ... reviews with full plan context, suggests fixes
|
|
191
|
+
|
|
192
|
+
# 5. Push and create a PR for human review
|
|
193
|
+
git push origin feature-branch
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
Each step uses the best model for the job. The `--supervise` flag wires the planner as a semantic supervisor -- every
|
|
197
|
+
code change is checked against the approved plan. Sessions track artifacts and transcripts automatically, so context
|
|
198
|
+
flows across forks and resumes. See the [end-user guide](docs/end-user/) for the full tour, or run `/forge:walkthrough`
|
|
199
|
+
inside Claude Code for an interactive walkthrough.
|
|
200
|
+
|
|
201
|
+
## CLI Overview
|
|
202
|
+
|
|
203
|
+
| Command Group | Purpose |
|
|
204
|
+
| ---------------------- | -------------------------------------------- |
|
|
205
|
+
| `forge claude` | Bare launch, settings preset management |
|
|
206
|
+
| `forge session` | Named sessions, worktrees, resume, fork |
|
|
207
|
+
| `forge proxy` | Model routing, templates, tier mappings |
|
|
208
|
+
| `forge authentication` | Credential management (`credentials.yaml`) |
|
|
209
|
+
| `forge guard` | Policy enforcement, plan supervision |
|
|
210
|
+
| `forge workflow` | Workflow runners (panel, analyze, debate) |
|
|
211
|
+
| `forge search` | Transcript search across sessions |
|
|
212
|
+
| `forge config` | Runtime preferences (`~/.forge/config.yaml`) |
|
|
213
|
+
| `forge extension` | Enable/sync/disable extensions |
|
|
214
|
+
| `forge info` | System health and installation info |
|
|
215
|
+
|
|
216
|
+
Run `forge <command> --help` for details on any command.
|
|
217
|
+
|
|
218
|
+
## Documentation
|
|
219
|
+
|
|
220
|
+
| Audience | Location | Contents |
|
|
221
|
+
| ---------------- | ---------------------------------- | ------------------------------------------------- |
|
|
222
|
+
| **Users** | [docs/end-user/](docs/end-user/) | Tour, guides for sessions, proxies, policies, ... |
|
|
223
|
+
| **Developers** | [docs/developer/](docs/developer/) | Setup, coding standards, testing guidelines |
|
|
224
|
+
| **Architecture** | [docs/design.md](docs/design.md) | System narrative, data flow, invariants |
|
|
225
|
+
|
|
226
|
+
## Contributing
|
|
227
|
+
|
|
228
|
+
See [CONTRIBUTING.md](CONTRIBUTING.md) for development setup and PR guidelines.
|
|
229
|
+
|
|
230
|
+
## Uninstall
|
|
231
|
+
|
|
232
|
+
```bash
|
|
233
|
+
forge extension disable
|
|
234
|
+
pip uninstall multi-forge
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
## License
|
|
238
|
+
|
|
239
|
+
Apache 2.0 -- see [LICENSE](LICENSE).
|
|
240
|
+
|
|
241
|
+
Originally developed as Claude Forge at [Thomson Reuters](https://github.com/thomsonreuters/claude-forge) and
|
|
242
|
+
open-sourced under Apache 2.0. Continued as Multi-Forge by the original author.
|
|
@@ -0,0 +1,311 @@
|
|
|
1
|
+
forge/__init__.py,sha256=n2vtu71SDWpqXl3rS38QkdknrNHUtDGxVP1NMGUgdbk,72
|
|
2
|
+
forge/runtime_config.py,sha256=JYJ1_Njw9Ju-N0sLsvv0ITKjOs8mb7XtF9VVTFEjkoE,16612
|
|
3
|
+
forge/backend/__init__.py,sha256=RkXjcdPD-pHXtbCJq9VTk2i9p9mRjcULx8-kcmOJDf4,5103
|
|
4
|
+
forge/backend/creation.py,sha256=_FQcSQPGNGsGMyaIfIXkTREDRYRgg20jtRuh2A2CtsY,2885
|
|
5
|
+
forge/backend/registry.py,sha256=5qt_p9V65KPTQBmNseypgJ4L5hUUqnjngGfNeBS3Obw,5602
|
|
6
|
+
forge/backend/adapters/__init__.py,sha256=o1Xvu6OuWvrEgyoF9aiEt6DIuvjgBSE-bzTKfnlvC7A,1063
|
|
7
|
+
forge/backend/adapters/litellm.py,sha256=SQA67YNwmuzY_-MEwI9cjZxcqcIqOzbc_nOQPPeVBnc,5612
|
|
8
|
+
forge/cli/__init__.py,sha256=qWqxpnvquz_XqNaeKBh60ha4jJOtb_eel0fWD8cV49k,497
|
|
9
|
+
forge/cli/auth.py,sha256=MbUUFhfIjuSmAoE7jxGy0UZY5y2m6NkDIRkH6CMqOqY,15378
|
|
10
|
+
forge/cli/backend.py,sha256=8Lmh8FvGDkwA69QFTSLlp-p4rSNckPujRYLQsNkvS5E,10855
|
|
11
|
+
forge/cli/claude.py,sha256=eW3iiL92eL6x6sWD5O5XCNyG7WJnPWNw-ASU8aAh5vs,13205
|
|
12
|
+
forge/cli/config_cmd.py,sha256=p3NAAroSejOMyqgtfojSyA5VFb38f1sTbrt1iBGv9cE,9482
|
|
13
|
+
forge/cli/extensions.py,sha256=uQgLy8EQVQ_yCXaxbdKpDGjcN51LizQAOGq77YyT8FY,36934
|
|
14
|
+
forge/cli/gc.py,sha256=gOSXCmtaixzV-O7s6JPlvjiV-Upys69UenQyIZx2Bfo,5496
|
|
15
|
+
forge/cli/guard.py,sha256=fN7UbM4f7C_kBMSGbzHalBu-jBXQk_A07QGZsboy_s4,37540
|
|
16
|
+
forge/cli/guards.py,sha256=NX1Sk35afrCA3g54Hyi8hHJgG8o1y3ojOuY4mj14bHs,3499
|
|
17
|
+
forge/cli/handoff.py,sha256=qpNRfbepJa67Bs9lgoUm6ZHyJonipjW17Hj4d2Sn_28,3659
|
|
18
|
+
forge/cli/logs.py,sha256=zLsMSipPuFqM0pMSaVUbRfcjL_9MYrSn0Ek1lGLe9ZY,13872
|
|
19
|
+
forge/cli/main.py,sha256=x-MGuiMuXNRfB63gVbvy_azcASuTaBJzrDfy9l9A7Bk,10975
|
|
20
|
+
forge/cli/proxy.py,sha256=Humh6BRQfFA3Txw-DdV9jXkv9Ng3y89-1gVJXs-xhmE,65774
|
|
21
|
+
forge/cli/proxy_costs.py,sha256=3TO5Gf8VtJi5ZkWNJySrB2IKKigVnmPLGkoiKyd_ZfU,11038
|
|
22
|
+
forge/cli/search.py,sha256=3PWzGtPZGAb0olfDyet2mqD_EpLIIsZJb64kUDiqzHM,13618
|
|
23
|
+
forge/cli/session.py,sha256=pNOjPkl0IxbWhOkNQYSRI0q-sYnJimbGJE9OVkWUD_s,31614
|
|
24
|
+
forge/cli/session_addendum.py,sha256=aAwDAZcqeaSae8OKEH1AXwNXmc8RwLCZJ17TlUCPMqU,3010
|
|
25
|
+
forge/cli/session_fork.py,sha256=eYkQFW-Ryakz_g4Iocf6wcQc6bHS1hA0sQAu6LA3ApU,30989
|
|
26
|
+
forge/cli/session_handoff.py,sha256=y-gjrnthTowdP5q_AdDCldS_mHNNV5HK8AdtTVTXdY8,5619
|
|
27
|
+
forge/cli/session_lifecycle.py,sha256=oVCLfsIObY-3KVmiWVwbMdDlz0fWZeeyV-4NG3tUtWI,77896
|
|
28
|
+
forge/cli/session_manage.py,sha256=5PimYXhfhqudbxjhluLitTgCVq6g_GHja0AkACspBbY,49046
|
|
29
|
+
forge/cli/session_memory.py,sha256=bpftFQST4EodnRNJKjYOxRYJ_GEInzpaokK9HXFcMX4,7713
|
|
30
|
+
forge/cli/status_line.py,sha256=Fed-htFvHoAS5qY_UUdo9aWZ0DP4tLIbUFKy_I9DAms,49160
|
|
31
|
+
forge/cli/workflow.py,sha256=FhdFwGnHYts_x7lpTgfc7hIt_5IZZ7H3fH1WaU0HZk8,63979
|
|
32
|
+
forge/cli/hooks/__init__.py,sha256=VPayrqex7ebZhf3-gv6jtvCQs3nmRFCGE7O3aGEae6o,1159
|
|
33
|
+
forge/cli/hooks/_group.py,sha256=Zz5KJt6FjFaaVsBWZ5srSSF5Z6BlZIx2nIj03jW442M,602
|
|
34
|
+
forge/cli/hooks/_helpers.py,sha256=TDSuOUCGG2bOs7SPsbsas_22w9hJ9JL0sCrnhuIAbPE,4280
|
|
35
|
+
forge/cli/hooks/commands.py,sha256=xViY9Cj7BosQ7ZKvNwPK3uskQhg3WPFc2wEZlzpMELw,59240
|
|
36
|
+
forge/cli/hooks/direct_commands.py,sha256=8XpYC8RPbh6a7IxYlZow9S85iQ-Vznx5Wk9DBjf0EU4,45738
|
|
37
|
+
forge/cli/hooks/install.py,sha256=TfSXC8QFzAvk6hvTl_hqNs6V3faHXiZ2JmJDU6dxhvA,7401
|
|
38
|
+
forge/cli/hooks/policy.py,sha256=oRxjy3r3pbnVG_pyOpwqLYhcAOSmBuhpzeF3CVUGj3Q,4899
|
|
39
|
+
forge/cli/hooks/read_hygiene.py,sha256=2lgkpcU-gzLUfHivnLwonH9L1LR8FjKzdR5F9avXvJk,2376
|
|
40
|
+
forge/cli/hooks/verification.py,sha256=b3j3mHbFQ96b6sZRPyxIthpqwfj-EyaqfCQarftBu3k,13161
|
|
41
|
+
forge/config/__init__.py,sha256=qZxnXE_qVGYXKKOk6P1zyszwfR21BeAwkqNdxpmzeU8,3007
|
|
42
|
+
forge/config/dataclass_utils.py,sha256=UHXKpsSArqI--cLgg-XGiTIOifq7OVQzAYYbTnnJ-Rc,2728
|
|
43
|
+
forge/config/loader.py,sha256=ccZ44BAN3htHWCTEHMBaqNM13GmrrZKlZJEwDJ6qaMc,22874
|
|
44
|
+
forge/config/schema.py,sha256=GgzS0yUskmVfMFKoG2VrpaRQDVgl23jV-zBJG4ynMeg,15281
|
|
45
|
+
forge/config/defaults/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
46
|
+
forge/config/defaults/backends/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
47
|
+
forge/config/defaults/backends/litellm.yaml,sha256=dlNkX5RdT37d7snxcUGKDHyQBnCUXCyNwI2qKeJmlRI,5810
|
|
48
|
+
forge/config/defaults/templates/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
49
|
+
forge/config/defaults/templates/litellm-anthropic-local.yaml,sha256=SLTIHcHevrXN_L17nF80lhvPRvGqZqBt1wvpirYW8xs,855
|
|
50
|
+
forge/config/defaults/templates/litellm-anthropic.yaml,sha256=jSS1V7fB2KcNKZLOohF-FyRB2HYEMARHH1hB5A2WySI,738
|
|
51
|
+
forge/config/defaults/templates/litellm-gemini-flash-local.yaml,sha256=deStnQaCZc0frrH9kL1fAzyFJg7KugviF8pIPbpdLaM,998
|
|
52
|
+
forge/config/defaults/templates/litellm-gemini-local.yaml,sha256=SZobj_UbQFlsNjBbyXyUKBdFGjeRhcVEBQa75SM2NB8,842
|
|
53
|
+
forge/config/defaults/templates/litellm-gemini-test.yaml,sha256=C4AteC4wklmsmMf1_w6f6iHLSAViWBkJw1i3t96wmvw,923
|
|
54
|
+
forge/config/defaults/templates/litellm-gemini.yaml,sha256=XWD_prZH1RiJ9WFMiR6GPW3Ap-z7popRyVE4Rh4xLxk,557
|
|
55
|
+
forge/config/defaults/templates/litellm-openai-codex-local.yaml,sha256=UTm6we6rcHepgEtPVECG9F7uAIGM1OL0tgjNVqjAOAk,871
|
|
56
|
+
forge/config/defaults/templates/litellm-openai-local.yaml,sha256=JgpxU9hJT3txzB-uOmpBvkVbFmI9l9wGht_Zo8Asu_o,947
|
|
57
|
+
forge/config/defaults/templates/litellm-openai.yaml,sha256=ms1doG6TgrGnlK-Hnv9Nxh_eq8sUCU5SULry-WYC-Dc,719
|
|
58
|
+
forge/config/defaults/templates/openrouter-anthropic.yaml,sha256=OBNbnMLLCYG6FGwxEymd_qOIrX7gJNB-7o6Az43AZxQ,674
|
|
59
|
+
forge/config/defaults/templates/openrouter-deepseek.yaml,sha256=c-apeLteL-V-cXV46moZ76DFsWB0xhHJ2E4Q1FQllmI,748
|
|
60
|
+
forge/config/defaults/templates/openrouter-gemini-flash.yaml,sha256=Z33ZqjNED99KlZdLKFSZXFRe8DCJYAwtRzoJ631T_84,654
|
|
61
|
+
forge/config/defaults/templates/openrouter-gemini.yaml,sha256=9u39OSdo24Hd5AvHp1UEUSQtw09sgNQ5lPlHyMjeRkU,590
|
|
62
|
+
forge/config/defaults/templates/openrouter-glm.yaml,sha256=l7vN1agQwu30llz6FutsfFBo2ilk6tYoVmZh8Xg2icc,555
|
|
63
|
+
forge/config/defaults/templates/openrouter-kimi.yaml,sha256=FKmTEE_82y07R63o6CcCCHlq7N9shYrCtBkzMIzYbW0,858
|
|
64
|
+
forge/config/defaults/templates/openrouter-minimax.yaml,sha256=E7g_JxDKlEaJHJ0pMjtW_GYs9Soe-6lvlF9NTp9UBAc,756
|
|
65
|
+
forge/config/defaults/templates/openrouter-openai-codex.yaml,sha256=eBYog28g_cbU0CS2BtD_82Y4O4CF3DkXHOZF0GNA6aw,559
|
|
66
|
+
forge/config/defaults/templates/openrouter-openai.yaml,sha256=Q8lVpb2C-Fmqu6YB3v6A0Tb-rM_T0rIsIxB9vhk0Ksg,729
|
|
67
|
+
forge/config/defaults/templates/openrouter-qwen.yaml,sha256=oykszPwze3CSVOXyr0XnlMqHYzji4IY7yC_iq_tifQs,760
|
|
68
|
+
forge/core/__init__.py,sha256=QX-jy_j3HUYoe60oRObjrF69dGuDI6-99Q8pYizqsEg,139
|
|
69
|
+
forge/core/logging.py,sha256=CKsalUF9rjej11y_fTuraqd0ebeRDYhtAWu6JFEoi34,4653
|
|
70
|
+
forge/core/naming.py,sha256=GIwRAgQCAci1fIoOkPcgG1jZr-mjaZoKNHUc5G8NVMw,5262
|
|
71
|
+
forge/core/paths.py,sha256=_3mrwTt1Y2y4uQc4ViRPUqkValx65OZ4AjYyubAcXIY,1078
|
|
72
|
+
forge/core/process.py,sha256=pWwUkNznocV7s5jrExIqWt19pJkMG-WOoI06jU-VezI,1544
|
|
73
|
+
forge/core/transcript.py,sha256=iWa5hmfJkryuGv0_l07sz1tEmFgFW9Y_AjzW-BVnwnI,2401
|
|
74
|
+
forge/core/typing_helpers.py,sha256=44frx6MoPFzMAX4AceaLzmz7m51bE9dI2qhj39MPdGo,608
|
|
75
|
+
forge/core/auth/__init__.py,sha256=oFz_B5EC1cmQHaFLudWS7bHX58RWF0uuiGNP4Szh2D8,1846
|
|
76
|
+
forge/core/auth/capabilities.py,sha256=2hz43hdImOVNZVkh1kZXzjZIXegju5DMR-s50HhmAoY,7354
|
|
77
|
+
forge/core/auth/credentials_file.py,sha256=xNGzDrQLgXx91kPzte-ZF_zMsLQeH5ryPpfs0I0K13U,7269
|
|
78
|
+
forge/core/auth/protocols.py,sha256=82IwEACV-HODJKkD6SVW9sl8Dl8uAUhUXjL_N-qiLSw,542
|
|
79
|
+
forge/core/auth/secrets.py,sha256=DuA_NpGUMGK7rdQe1yjdqOudTPLLi-PRA0gG0lenhwA,8310
|
|
80
|
+
forge/core/auth/template_secrets.py,sha256=vK7psfvJUUp1hfVBdoE7a0wrDTv1f-6HST4ZhN98AAc,3880
|
|
81
|
+
forge/core/data/__init__.py,sha256=At62ByfaR_2CNb4UNTNl_Buh5YkOii3Pz61bgV0q3ak,159
|
|
82
|
+
forge/core/data/model_catalog.yaml,sha256=rzLxvI8e3VDD3UceAzZKbffQUvUG7khhxzuAJfzvMbk,47428
|
|
83
|
+
forge/core/data/pricing.yaml,sha256=l-3Ql5dDFZySoHzEo2-RhzsEgGkKtyecXllACNSsmIk,2766
|
|
84
|
+
forge/core/data/system_prompt_addendums/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
85
|
+
forge/core/data/system_prompt_addendums/gemini.md,sha256=hzlJ0i5eOEOz1kdqVB5OHawRwWfTrkAB7V9w5Dzxih0,7944
|
|
86
|
+
forge/core/data/system_prompt_addendums/openai.md,sha256=Rnl2DQvgdHhcus4t9y4daECv1Tra_ocXmNJgw8rCIh4,7715
|
|
87
|
+
forge/core/llm/__init__.py,sha256=pcCXR2TjYcQ-FyJ_eca6Cift-yqxD90auy4FeMqZ6Q0,6901
|
|
88
|
+
forge/core/llm/credentials.py,sha256=4c27iFyOE-ngTsIerkXarF9ufOOuo5aluqGsNh-X-SY,15045
|
|
89
|
+
forge/core/llm/detection.py,sha256=fnYd665e338r0yFzQChEaOgO4sMMh7wuVSAyHmjzdwY,2854
|
|
90
|
+
forge/core/llm/errors.py,sha256=y5SmWg0MMV_cDWxgSMw5trprO2c3GMBSkriNNpFruC0,1380
|
|
91
|
+
forge/core/llm/protocols.py,sha256=H9qKVYLvXQ9IZECzDRbog5v-qCudItGXzo_m1L43eBw,2480
|
|
92
|
+
forge/core/llm/types.py,sha256=TPzYY59PdFG9cvVF_MSf2UG9NHipWWiiov1Y20iyTbw,6859
|
|
93
|
+
forge/core/llm/clients/__init__.py,sha256=c-wZlCA2zQeESknwkDySXBYcRA8Ece-HMFB6YceN1mk,389
|
|
94
|
+
forge/core/llm/clients/base.py,sha256=bCcSrIloNJoRogI_x4J25eNPbJGMwJyud4cz35_FuP4,3567
|
|
95
|
+
forge/core/llm/clients/litellm.py,sha256=BIa4Yr9Eb_-VsqEvDCZzTMGulJYHXD_b8VWX1KU5iTw,24232
|
|
96
|
+
forge/core/llm/clients/openai_compat.py,sha256=923FOM6va_Vx9Chb5FcA4mi7gwlKjHnGYeapHFNNKxU,7757
|
|
97
|
+
forge/core/llm/clients/openrouter.py,sha256=XwwFRiHnFYyh3FOjv3OCJ-oqI6X17HjHsYJttFXOTqM,8451
|
|
98
|
+
forge/core/models/__init__.py,sha256=IyHj7TbWa08R4ppSl4elDPVESJR0thkiRgI_2NpoHsU,2234
|
|
99
|
+
forge/core/models/catalog.py,sha256=KvMLXJGuERkR_SZqJYtYrG9NSeVFRy-jimqNtvL8qUk,16364
|
|
100
|
+
forge/core/models/pricing.py,sha256=3YhvdxjNKclGx5nR-ipi9DVci5XhuBUZ6Ip6EFLgIaM,4956
|
|
101
|
+
forge/core/models/types.py,sha256=k5J-DTFUK7u_woIKShjzgWpv6q62Gh9Fja3FNKJGlaM,5980
|
|
102
|
+
forge/core/ops/__init__.py,sha256=1SEkVErwrDyeLxMFwXIvbkI_TUXpIKS46LQo0el2QXo,1577
|
|
103
|
+
forge/core/ops/context.py,sha256=85tI3xERUzh7DYJ2k06YYM8V5IG8D6xDW9VmYAnQ9-Y,4685
|
|
104
|
+
forge/core/ops/gc.py,sha256=H5avDc4iJcu4z9Qd-ux8qg-mxPhdoliTJB4DH88pVMI,28441
|
|
105
|
+
forge/core/ops/proxy.py,sha256=G_K_q2x7fUKkaQqXn76c44HK6gm3nLhH6KHiPj6sC6E,4261
|
|
106
|
+
forge/core/ops/resolution.py,sha256=ADMwGw-5Ymui40oTcMJETngcWsCgsjX8Ea58rhiJDS4,4421
|
|
107
|
+
forge/core/ops/session.py,sha256=-6uaX_kNsibznxzH0dYOvfTfKSOHaAbvo_WvymJBMVI,10701
|
|
108
|
+
forge/core/ops/session_context.py,sha256=1GhUqVmumpHUpqmMn8DuyQk30ok4GG5XV2xC5qDTW-0,18272
|
|
109
|
+
forge/core/reactive/__init__.py,sha256=qYbLmGj_SJfTaxo4jGBL-geFuSnk9govDkCsuWdJAbs,1170
|
|
110
|
+
forge/core/reactive/cost_tracking.py,sha256=hO2L2sfddFhzZkz_WxDu1cyqQaIYnCXWOBe8t7WDwDA,10119
|
|
111
|
+
forge/core/reactive/env.py,sha256=UExu3MNFjPEeY9h54vgX2pDOh_V8O64NDGnN0ggHJUM,6826
|
|
112
|
+
forge/core/reactive/proxy.py,sha256=S4Be7E87JiwyRsSNhZUZsISaxFkYoQP5tYcGoOjW4hM,2699
|
|
113
|
+
forge/core/reactive/routing.py,sha256=J-GLIzBzSeGQcvu2KFm49rLV5CMP8P739fQpxFuf5Mc,21953
|
|
114
|
+
forge/core/reactive/session_runner.py,sha256=BJlZLNRo_MuykQFjbG6WY5-6wJfbNMLHlpXimbk2u0w,6429
|
|
115
|
+
forge/core/reactive/structured_output.py,sha256=ia06ksVnBN-IxBf9rOQOlzBsBq5tvqoZhJuhFDVoChU,1819
|
|
116
|
+
forge/core/reactive/tagger.py,sha256=lCsw8wGtGCHFwHlE6M6YY_-cAGIefoxYI9bCie2J8UE,2568
|
|
117
|
+
forge/core/reactive/throttle.py,sha256=M1CWr0Kl-FydMKH7xZgztjP71hKBV18NZ3tfPBe-InM,4233
|
|
118
|
+
forge/core/state/__init__.py,sha256=b6A-JKiFxj3WWBG-ha4xoh1nbQgvUcLskVSQ8AcKqwo,1431
|
|
119
|
+
forge/core/state/exceptions.py,sha256=ZFleF2rZ730w6ljBrBS8rbG4E5fxG78lHZerpPUXRIg,1711
|
|
120
|
+
forge/core/state/io.py,sha256=2WxcMHPlnujnSvC87RLmlbjZ8lbQhFe4Fj-rQK8QMtA,4241
|
|
121
|
+
forge/core/state/lock.py,sha256=G_U2i02yinfyvCjzOyQPKmNfpczhZPhB1MM8kA_U2Fk,3270
|
|
122
|
+
forge/core/state/timestamps.py,sha256=phQmrr1BzbD8CWK3ZNwZp5KoeLE6Kpq5MRFOsMCgNAA,1587
|
|
123
|
+
forge/core/workqueue/__init__.py,sha256=QFm-oT_3LnJqSEs00tGg9Ww3rz0akqbU6wpAWaaoQ0A,1669
|
|
124
|
+
forge/core/workqueue/queue.py,sha256=lsWXSIAejYQ3vlefoHSrPG5N02JNZ-d2YYT5xkolSzk,18117
|
|
125
|
+
forge/core/workqueue/types.py,sha256=Da1PFy5tcyj8AdY1M_vtz2FMSPr0VPa5MeyerS9mF44,1620
|
|
126
|
+
forge/guard/__init__.py,sha256=lLuNf-Mb8Sdmexld7YSoQdQq-3lMmayrJCYWmb881As,539
|
|
127
|
+
forge/guard/engine.py,sha256=DhcrWsY4tPHyIWzo378MYl39iqbmiSi9hnii3TguGrY,7751
|
|
128
|
+
forge/guard/protocols.py,sha256=I34bS3pqqy8rnfjG0utVBkVontzlOIw4UwKJQgpUkF8,2982
|
|
129
|
+
forge/guard/queries.py,sha256=iBkwRG5l1mmjh2Zn8ooxGNyF9vY3yGBMqMDUeJfIPyk,3357
|
|
130
|
+
forge/guard/store.py,sha256=bdTKHHZJX5m2EsTuKRXapwYAM-C2fDxxAAgFQ0LGFcA,4318
|
|
131
|
+
forge/guard/types.py,sha256=PT8cKzK6KsExzAW0_HkunWEVvO6_EnIxSs9fRX8vLno,4476
|
|
132
|
+
forge/guard/deterministic/__init__.py,sha256=9Y-mhJDvAHEjrbLVJPrsUGPmLPKaNoYreY9pWDULhe0,727
|
|
133
|
+
forge/guard/deterministic/base.py,sha256=H2Zsc5iLA8fdwTxuUov6u8mpETLXZGE9iRpVHkviwCk,4995
|
|
134
|
+
forge/guard/deterministic/coding_standards.py,sha256=naVY0bIf-NQ04dPKkQUdWkx83-L8tLVuYTDd0acczn0,8756
|
|
135
|
+
forge/guard/deterministic/registry.py,sha256=DF6BXgH765djUu67rnTxH23vTfJkLXTXDd1mvZ9cesQ,4754
|
|
136
|
+
forge/guard/deterministic/tdd.py,sha256=e0C9ed9OMLQKHqCuZ3vaMJfe2Xm-hg_WqF5YOb7516A,5723
|
|
137
|
+
forge/guard/semantic/__init__.py,sha256=1y5pLk7xHo7uaHBH9AsKHYpQLuOFh6mnn2hxcnzIWCQ,1074
|
|
138
|
+
forge/guard/semantic/promotion.py,sha256=SjBJCrhVdvjaPpHXBFo_4RoON1NH_VRUvADmyzkCObg,826
|
|
139
|
+
forge/guard/semantic/supervisor.py,sha256=ovRHCjdkBB9i4TtKofiehO3eLlwR1qtzuCRjbmxRmGE,29967
|
|
140
|
+
forge/guard/semantic/verdict.py,sha256=rxedURpA-BAWpgHrxy-1mqrTQG9WHkXMgh5AhyUzNb4,6147
|
|
141
|
+
forge/guard/team/__init__.py,sha256=UICvCa-doOuvj4yC2q0uEW8Y5-Bm4L90CrTdE4qrKlk,212
|
|
142
|
+
forge/guard/team/config.py,sha256=YK9C1WxOzSX-W7LGPcXkgCxKQqQ1RFx75PlsK9v872w,629
|
|
143
|
+
forge/guard/team/handlers.py,sha256=W30ps2IuCUdfHda7EzSuQ6SufcOV26zI8p8AjSjYh7Y,6742
|
|
144
|
+
forge/guard/team/prompts.py,sha256=Wjyn1DGcNUroddleT39KkZ3VPXWvHuEfpWY-Dd4TPgg,1180
|
|
145
|
+
forge/guard/workflow/__init__.py,sha256=DV8np69vilOpbgSVZUvr5P6yHK77qQJQYGqCMUy2_gI,559
|
|
146
|
+
forge/guard/workflow/branches.py,sha256=gdJq6O8pmIp27-PdIIpop_TfNAHOa46-FTZ8OywvQxo,2362
|
|
147
|
+
forge/guard/workflow/config.py,sha256=UwrGzTk_S1HU9OR7lIAbWO5VDaz6LL5hCVflzW7WTOU,1602
|
|
148
|
+
forge/guard/workflow/divergence.py,sha256=DVjpMjFrjj6QoqitwBOpAVeRW1Q_x52rv6jd7W2YO1c,3558
|
|
149
|
+
forge/guard/workflow/policy.py,sha256=I8ecxy2f6SBCvxKLRdk3ijJoWPAr26cLegVrJdfDH_g,3020
|
|
150
|
+
forge/guard/workflow/stages.py,sha256=CxJ4pn5fgGgN4aYC-9VvKLu0RfpSjT0KPL87HAOLNpI,7492
|
|
151
|
+
forge/install/__init__.py,sha256=zieEcB9pai7e9iM28CR8ZuZgOnqbb9vhKz-Dqh5Eylk,1187
|
|
152
|
+
forge/install/cli.py,sha256=abewmuEhxaeHWw_M6vKhrWT5BZQfrJJTO22m7J1PNlg,8755
|
|
153
|
+
forge/install/exceptions.py,sha256=yF866XVjlqwCRAKhE7rqcRFaonrN6-ny-6vQwLlFw0k,5227
|
|
154
|
+
forge/install/hooks.py,sha256=LhQdDg5BEhCjdY-6xgfC5LwZWj0yR7dwuZdx9YuyUto,4025
|
|
155
|
+
forge/install/installer.py,sha256=0AE-6X5AEuK_CKUvAtuo5np8FdQ1S2cXUwZSYxepCdk,38574
|
|
156
|
+
forge/install/models.py,sha256=0ydJ7OppwNBBYF_J6ncVXovSQPM01b49GR23b20Bf1o,9303
|
|
157
|
+
forge/install/preset.py,sha256=Ve3CMSLDl2InBMSSHWwAA-qaLv0HCXcwTUNgVWIlm1k,8534
|
|
158
|
+
forge/install/settings_merge.py,sha256=gAouzYJiNi9rsPEGvWYVFzgwtH4hz7DDZbrPQQxu40U,25813
|
|
159
|
+
forge/install/tracking.py,sha256=iJvds8DuHYbgmkAqd9ThCig_r6xrIHjdf3OX1JFY0CA,8324
|
|
160
|
+
forge/install/version.py,sha256=97p29yvT7w5EOdRmqo_4WeyCBsLeJGvUh3eP9Hcsd4c,4367
|
|
161
|
+
forge/proxy/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
162
|
+
forge/proxy/base_client.py,sha256=5i6rU8TZD9AtlVfNu5iugSF40KZAnJ5tsV15baMD8rg,6112
|
|
163
|
+
forge/proxy/client_adapter.py,sha256=U1CcWc5CVwZpBZC2F0db1RxhQQ6UZWGKGr_sIb8ykWg,19158
|
|
164
|
+
forge/proxy/client_factory.py,sha256=2QKWdYGMZ-p59ycEL_-abNDPEZsVbV8n94cE0xOE__w,20690
|
|
165
|
+
forge/proxy/converters.py,sha256=kyHN8bQUqt469yFMDp8jTEN1iXVsiQ_eMCaZOKiJ964,54264
|
|
166
|
+
forge/proxy/cost_logger.py,sha256=3-HBMP-2m7CdzEfn6i_NwKIfj6lHFAmbnKYeelwMTDk,3805
|
|
167
|
+
forge/proxy/cost_tracker.py,sha256=UyE7efLo9WZzM11kk7uqSTy2omkWTKI-qfz22z8vMbQ,8891
|
|
168
|
+
forge/proxy/data_models.py,sha256=1D3I089G06EghyzUfCskW0X4LLPylTmN8LhICNTgmCo,11175
|
|
169
|
+
forge/proxy/error_hints.py,sha256=aVc28XEFPKAt9OM2Z58k0P2YjB7hlZ86QXecvp1Bg2Y,3164
|
|
170
|
+
forge/proxy/metrics.py,sha256=IbgLmxQWoww6KfX-vXl7KnupBjSSZTJPkfn7vLBnE0I,8496
|
|
171
|
+
forge/proxy/model_spec.py,sha256=WiimU2PVUpRci7SMyYqmTpdB5rouYLwQwPVo2LNWLJQ,5138
|
|
172
|
+
forge/proxy/proxies.py,sha256=gTqDbhwhm-fQEB9x3rYmGqQ7GxP0x3oVkt7k2uBMFyk,11464
|
|
173
|
+
forge/proxy/proxy_identity.py,sha256=TV_i1cyoetJ3x0IAMGZPu2vkMFcuwAj2Nph3oVsNjQ8,4768
|
|
174
|
+
forge/proxy/proxy_orchestrator.py,sha256=sX3bEnOjOefmZj37LyM5ck9l2qhdhCfGDEC0aPV6nJU,35627
|
|
175
|
+
forge/proxy/proxy_startup.py,sha256=2FvE_wy-qM-anpk6aimIi59NpCERb584xLQ78HuHBBo,1693
|
|
176
|
+
forge/proxy/server.py,sha256=iaxtSuMv7ajBl8GF61U8ki2YWTou6fX26CFxfGC8Erg,62917
|
|
177
|
+
forge/proxy/utils.py,sha256=6aucmpUJp-T8oMQMXrjWyg9dqsOp_wi3ltUtQNgnbIM,18357
|
|
178
|
+
forge/review/__init__.py,sha256=E6envYu01GothyoWLtlvQAtkvNYVTfNDDp3wRBv9SXc,202
|
|
179
|
+
forge/review/adversarial.py,sha256=6WQmYNyHyBXnslQk3NvC-NozuKIDx1QCLN5-P1ktchc,3750
|
|
180
|
+
forge/review/consensus.py,sha256=GK0HQyVZKYRb1R7-4plksgfwGsuyp4TzyqLnEu_OVaU,8710
|
|
181
|
+
forge/review/engine.py,sha256=9gddA4wLqmcLwA08ytOGaCFZbVn9ufXSz9_zldB2qus,12505
|
|
182
|
+
forge/review/models.py,sha256=2eC9dcWnD2Z3VU7Y5w0Nv5wHnNkTOEFYcOa_KwT8yLQ,15886
|
|
183
|
+
forge/review/routing.py,sha256=wcfUezh484zf7XCfRX1SvYbswBRQRvHt6iEZeuyv6K4,12159
|
|
184
|
+
forge/review/synthesis.py,sha256=EwB-nJxz4bX1X2CJnmIkIKmN5O7tuzE4Jrm7Ie0S2rs,2194
|
|
185
|
+
forge/review/resources/__init__.py,sha256=LtIigaj-tWlQdaiuiTLjR694Y5j9sQeAazE_q_zcTDE,172
|
|
186
|
+
forge/review/resources/codereview-performance.md,sha256=N0OX0UkvE6jjfSB2-54B5WVPVrB6lsDU787SnM9xsmE,2524
|
|
187
|
+
forge/review/resources/codereview-quick.md,sha256=2zR_tJAC_8LVa9sX6EBulGQNmi_RuEK3qRzX2Rq2Lvw,1732
|
|
188
|
+
forge/review/resources/codereview-security.md,sha256=vCeTdO8F7CRfUiQhij8o11TEu_OyXjax2j77_MAzNcs,2800
|
|
189
|
+
forge/review/resources/codereview.md,sha256=1LmAGq95THqlJWiCrEtw4AZTQwRtxucWm8O6oscqnLg,2191
|
|
190
|
+
forge/review/resources/docreview-quick.md,sha256=GxvcNRrHsxrBa5XySj_1IQTq4NXoJ_VStBg1Xt2hyQ4,1825
|
|
191
|
+
forge/review/resources/docreview.md,sha256=vQZed_rBTV3CWzZ4hkoIMQU3e41c5XUNttttr4w54lQ,2559
|
|
192
|
+
forge/review/resources/thinkdeep.md,sha256=H2hhB75X38A4e7UdetmGFbtJYbC83Z2hZ1uWWgYwXKM,2181
|
|
193
|
+
forge/search/__init__.py,sha256=0Z2vaMvUthPd6vEbXrpg6FYghnK2RIHpP6TXCpNk_sk,1539
|
|
194
|
+
forge/search/bm25_store.py,sha256=4ecZtysahUdFh032rV-Jh0BINyzt9en5U5oHZ796e28,8542
|
|
195
|
+
forge/search/content_store.py,sha256=_DNBRZbwkDbrtD7K96WvA4TO6ZdlfkCDQeHQ0vSO8co,6392
|
|
196
|
+
forge/search/engine.py,sha256=MgGOwi_02wDPlVjdfZ0YGFYhP9z81jDlOW95i1v_ln4,11471
|
|
197
|
+
forge/search/exceptions.py,sha256=uovFXWwuHsgv2aH8mOYpJ_73XAt24_2fj83BjNEkXa8,1289
|
|
198
|
+
forge/search/extractor.py,sha256=Acw1xU1gYIDCTYVawklNaec-4lLn4YPZUXDzsEAzxXQ,7284
|
|
199
|
+
forge/search/index_state.py,sha256=MK-2T48kF_KM8dEmbnd-EYaENQK1tpthTxcUGjLZs_s,9566
|
|
200
|
+
forge/search/store.py,sha256=ABRBrsfdoWsl1SBd9Bc222NtlXnL0kjNoIz-g2Z2Fh8,7637
|
|
201
|
+
forge/search/tokenizer.py,sha256=fAjSFJ7AkUEcfkHfqtXDWHi9grsDrnaTrKwbZbpA5sU,720
|
|
202
|
+
forge/session/__init__.py,sha256=HZ--Vfr4keY7VzIQnZ4rW5vjOW38GrVkKgnlvD1DvCU,3445
|
|
203
|
+
forge/session/active.py,sha256=M9F_RsOI7L_KbtFgJtMTcBeGL08rOfNJGm8GciM-cAo,12246
|
|
204
|
+
forge/session/artifacts.py,sha256=Y0aOMCmL59dHibDHyTmWFA6x5nbGADubk8ckwNRFT3E,6002
|
|
205
|
+
forge/session/cleanup.py,sha256=Gs_erxRR709NI97t-5URiBFBKU4EKCnG6_aFJiQGAZA,7920
|
|
206
|
+
forge/session/config.py,sha256=gEuk0uqXWrETsijhK8J6-FrRGtlZJP0hLdxebnvNSQk,1147
|
|
207
|
+
forge/session/direct_model.py,sha256=Z-WvvZC2QQmrHsE446az5mTSyxqZ_q6wQY6DL2ZRc1o,3542
|
|
208
|
+
forge/session/effective.py,sha256=x_F2zfOoTf1-iiQk5bSqipm2_08ABOZn_wHiaAfBU-Y,5373
|
|
209
|
+
forge/session/exceptions.py,sha256=j_7Gt_aQGkPtKa7hSygKTkXX9VTiAK-h_M1NRhtfm8I,8555
|
|
210
|
+
forge/session/handoff.py,sha256=gVczPKTvhQhH7DGE-t-JaY1T9irfu2xl1rAvYrY0SOk,30290
|
|
211
|
+
forge/session/handoff_agent.py,sha256=Hz-2rsvQTBAytQf8vl5YWU04NkE3xnHl7xfw1JRHUEU,20462
|
|
212
|
+
forge/session/identity.py,sha256=31nWRfhUtKmeo4VFQqRDVO9e5EQYwfS0DzJhhLkJro0,2511
|
|
213
|
+
forge/session/index.py,sha256=ObC4-ihcSzjVG4-Djz-dPy_td0Y8VljLaJWJxoZV79c,20460
|
|
214
|
+
forge/session/manager.py,sha256=XGtuQLlVCOhbRAGs1fAXAH1s0S848rI6_6LVqCkjhTs,63235
|
|
215
|
+
forge/session/models.py,sha256=xsRZUyBsDJy4Nbo62jaUgn4nvYd2T-r9jNIDWc_UoY0,22055
|
|
216
|
+
forge/session/overrides.py,sha256=tgi-b0341typA_xmwiPaE_8Zji3PJbysZhUwdZ5mmTc,10384
|
|
217
|
+
forge/session/plan_resolution.py,sha256=s_PyCwXg9PgOB8rgoYo-ymVNa-EBTZ-V1x4fTsEcWHw,11079
|
|
218
|
+
forge/session/prev_sessions.py,sha256=gGuHcmJLktPKfUoZc3lU6ye2b5KRhr_8Hgcbh2huDwE,4440
|
|
219
|
+
forge/session/store.py,sha256=W8m2VmObHNHXuY3050IlhaPEwhgfJcyxyvMST49zCms,16006
|
|
220
|
+
forge/session/validation.py,sha256=QKZYm5ddp2SErVs_PxSDSUFQF-txcgD3JK6_rtA-I7Q,1427
|
|
221
|
+
forge/session/claude/__init__.py,sha256=bkzAs_0b1FNgmnrbR-lPxYqeKB_-szdWj5bfo3v8ngY,1051
|
|
222
|
+
forge/session/claude/cleanup.py,sha256=_eDI4h42kKNEHuDtsljRyR0Ea5YulG8yPKu42YEs5to,3453
|
|
223
|
+
forge/session/claude/invoke.py,sha256=jAh8aUEVs-SsvA5j1qh7jc0y9CYtDEzawRi6n62hnC0,6414
|
|
224
|
+
forge/session/claude/paths.py,sha256=ploIeEpCCu1ZRpvuLeupJxjrnXRxua6VBZSd2sbWc5c,6299
|
|
225
|
+
forge/session/hooks/__init__.py,sha256=ISqWG_0Y7prDqOycoz84askeLyw4B3Yw4mOXOAmTuuI,827
|
|
226
|
+
forge/session/hooks/models.py,sha256=8udyblzAtdgH7hAvZHhTiJawH88WYoGzwVd90-T7UP8,2432
|
|
227
|
+
forge/session/hooks/session_start.py,sha256=ztMN1jLWJC2vEILLgX7ZIzhGANkTTqsDJZulmdNDURU,17334
|
|
228
|
+
forge/session/worktree/__init__.py,sha256=nQP_gTsUN8pl-HDnYkDoEJWXW0-XBZ_SqRH5LU2XPYs,1580
|
|
229
|
+
forge/session/worktree/cleanup.py,sha256=lFNgVC4qiV803FGKz8SXttHQubxAExARFBAADmMz0Rg,8012
|
|
230
|
+
forge/session/worktree/config_copy.py,sha256=TUHUX2NKumzWWCEFplRzMYqQyWt-pQNhHcLWeTs5P38,6569
|
|
231
|
+
forge/session/worktree/create.py,sha256=GeFX_y0s4l4R-y9QZLPdek1mni43NUP-ZmnBpC6m9G0,10283
|
|
232
|
+
forge/sidecar/__init__.py,sha256=3hfWWjs9JLwTj7PXRvCK9iQQ6km0NZ4oZXkMLC8B-dg,819
|
|
233
|
+
forge/sidecar/container.py,sha256=5r0UN92JjM-fdULLZmgl0GVxviP1sZ8DtkYcQnZCDkM,4938
|
|
234
|
+
forge/sidecar/docker.py,sha256=FvEp9ooLNdjyWFR869WkAnKQei1Xpw4AKIOST2Js9Ic,2262
|
|
235
|
+
forge/sidecar/secrets.py,sha256=D6wX1C_bzzgYdwh_67eAdRLsOWw_FbPt_-9Q8qm-igY,602
|
|
236
|
+
forge/_extensions/agents/.gitkeep,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
237
|
+
forge/_extensions/commands/.gitkeep,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
238
|
+
forge/_extensions/skills/analyze/SKILL.md,sha256=QYzu12qhBGeRwAzzokFjvnaDhP2D7W5mRiubstl0Kgg,3433
|
|
239
|
+
forge/_extensions/skills/challenge/SKILL.md,sha256=FTiibn4SVgjbCeUwYy7juKt5pru7VjCCx3YJJTi9Bis,3331
|
|
240
|
+
forge/_extensions/skills/consensus/SKILL.md,sha256=ustxI77uZyq_TLjeBRcMcjJUM8K2aAtqLZigQ7hV_CQ,5836
|
|
241
|
+
forge/_extensions/skills/consensus/resources/code_consensus_evaluation.md,sha256=LJqgdVo3ZOF_uSjK-uyXvWTZOrEqMFR3Gcs0BdJh6Bk,2524
|
|
242
|
+
forge/_extensions/skills/consensus/resources/consensus_evaluation.md,sha256=dhQlaXlq_kBytz37UbvsHbbjtBkRvTzxL2r53ckNs1g,1604
|
|
243
|
+
forge/_extensions/skills/consensus/resources/synthesis.md,sha256=LBpG7uSxwwuQqDpEkuQBHL0pPuGCJGx6-iQZ9OZCyvY,3116
|
|
244
|
+
forge/_extensions/skills/debate/SKILL.md,sha256=Pj3uyqbb5fmqvGTGJeoeJcu5EROW9ETsKakBtQ6nnwA,5435
|
|
245
|
+
forge/_extensions/skills/debate/resources/code_debate_evaluation.md,sha256=MbcuIWL_2ZC83cMSbXiSeFmxGj1eVu4_MSw4CsGgwfc,2699
|
|
246
|
+
forge/_extensions/skills/debate/resources/debate_evaluation.md,sha256=gR9DK4yJ4KbIk_bkYzmlQzxRYCQVezUN3FhlURVxk1g,2077
|
|
247
|
+
forge/_extensions/skills/panel/SKILL.md,sha256=Hjl-I_YJFqMoSHlrKOFzF5KdFKgQT62I79nNzQPF09s,6121
|
|
248
|
+
forge/_extensions/skills/panel/resources/synthesis.md,sha256=KGHlKaU4itdTGNOblcj3gM-mygXiBzN1nFu-_s2Ul74,3143
|
|
249
|
+
forge/_extensions/skills/qa/SKILL.md,sha256=mxeKErrLNmXdgbySe3-lEsP1OOUAoY0J2bKPvHH1-8M,38565
|
|
250
|
+
forge/_extensions/skills/qa/resources/checklist.md,sha256=x45wjzPFcISlSQ4rhNOLs91oO_jw3WJUxwg97AyGhz8,2588
|
|
251
|
+
forge/_extensions/skills/qa/resources/report-template.md,sha256=rfle8bzzPnr-A5N0_lEPO6Wz7aCI_dkso7acTwZZZMY,3146
|
|
252
|
+
forge/_extensions/skills/qa/resources/checklist/0-enable.md,sha256=2XK180vY0JpnnQPDJVprmUTogEzoNAJu9PQjXLb6COU,1935
|
|
253
|
+
forge/_extensions/skills/qa/resources/checklist/1-preflight.md,sha256=ygwUZXtUGt8PQ9_nmwYZHk6rDvs78AeHflmEyP3vVOM,617
|
|
254
|
+
forge/_extensions/skills/qa/resources/checklist/10-resume.md,sha256=w2u6Zpdlkhz2sfu0BU2D3o5SJ9QrhL_L9odatep3zHg,5823
|
|
255
|
+
forge/_extensions/skills/qa/resources/checklist/11-config.md,sha256=9If1b9CsC24TJMZKlUsqQEi2WnRtILmmxZOpNxPOUs8,3489
|
|
256
|
+
forge/_extensions/skills/qa/resources/checklist/12-search.md,sha256=Yvoz0oNr8KgnX4z0pG4Ngxp4G29D3ca33Z5cvpFDMN0,1041
|
|
257
|
+
forge/_extensions/skills/qa/resources/checklist/13-guard.md,sha256=uGo6nWdLNY1vccLvADWGlhPTCMagkpjRTTKcB9ERvbw,5307
|
|
258
|
+
forge/_extensions/skills/qa/resources/checklist/14-workflow.md,sha256=qN7Q42SO5eFlX783YrekNUZsJTaig21CT3QqXLbVqCI,11249
|
|
259
|
+
forge/_extensions/skills/qa/resources/checklist/15-skills.md,sha256=tL6Sttj_4Ef_DGPUpvaAbUvROSqV-I-wM-LVyRGoA0g,4947
|
|
260
|
+
forge/_extensions/skills/qa/resources/checklist/16-handoff.md,sha256=h360KRpwA1rytIwAEqsX2YF2uC-_DLdxdGxXQFLRKuM,9257
|
|
261
|
+
forge/_extensions/skills/qa/resources/checklist/17-info.md,sha256=vR7LQ8ATDijNrASfn9E9l9UntjO7-u_zucxi9sK1tmo,1175
|
|
262
|
+
forge/_extensions/skills/qa/resources/checklist/18-disable.md,sha256=kwwbEUykOLcesMyDY65YQqyBxuce-jWpxER6wrFuCqQ,2257
|
|
263
|
+
forge/_extensions/skills/qa/resources/checklist/19-uninstall.md,sha256=g41M8pPOKACan-U7IiwJBISZZg_fYvZcFJ3vpf4xgJ8,4240
|
|
264
|
+
forge/_extensions/skills/qa/resources/checklist/2-extensions.md,sha256=wpYeSbyTv8rofb6GMesDXfx7UUyZ-8KSV8Z72rbx77A,5247
|
|
265
|
+
forge/_extensions/skills/qa/resources/checklist/20-cleanup.md,sha256=oqya-WumlhABy9OKka5BUVWnQHvpi01E8Y6FX5ah0pc,1223
|
|
266
|
+
forge/_extensions/skills/qa/resources/checklist/3-auth.md,sha256=8KEwoUPtMDVVvnIePfwLo0NNHyHyWqCQ00aHioJ1Drk,7131
|
|
267
|
+
forge/_extensions/skills/qa/resources/checklist/4-proxy.md,sha256=WOHj7WeZO16MDT5duySoUXcs2JVZnd_PnV-GozRHMXE,15942
|
|
268
|
+
forge/_extensions/skills/qa/resources/checklist/5-session.md,sha256=GNMOJd6YaJ2QqcbV1J0EMk_ye1DMeB6cG8sq0kDAvcY,21231
|
|
269
|
+
forge/_extensions/skills/qa/resources/checklist/6-hooks.md,sha256=uPCj7z1V5MTjydV5iJl3aTJJtIObNaE0ZMAZLMpNjl4,9904
|
|
270
|
+
forge/_extensions/skills/qa/resources/checklist/7-costs.md,sha256=2DkmHAp9DrepZmUNt0Nt5x9D6VQFz_Vhkpo8wTwGHxU,13375
|
|
271
|
+
forge/_extensions/skills/qa/resources/checklist/8-status-line.md,sha256=mAoGcdTJIAmzbRppYHY9ioJPu3l7VCxPUCrrO0vPx3c,7488
|
|
272
|
+
forge/_extensions/skills/qa/resources/checklist/9-direct-commands.md,sha256=1qLkk5VQMhxGna7dl5l9TXZXXa_KMZB21_M8tY3B80o,4105
|
|
273
|
+
forge/_extensions/skills/qa/scripts/start-container.sh,sha256=Q55iVZfSCFU-XgHAaGy9ZgNBPc7f1gb3feYqbhzc1SE,18322
|
|
274
|
+
forge/_extensions/skills/qa/scripts/walkthrough-state.py,sha256=kCR9kgr3tbd5muYryn69j9RAL038qitcVw0DTs8Ijas,40238
|
|
275
|
+
forge/_extensions/skills/review/SKILL.md,sha256=_aF5yMf55Z6sPBRArEiM4r2pOtJsgc8EKEMi5QS2F94,4967
|
|
276
|
+
forge/_extensions/skills/review/references/claude-4.6.md,sha256=JDUmTrHEKWYV0lIQaaLBeHT8xa0TU7ok_HEsHygGnFg,21068
|
|
277
|
+
forge/_extensions/skills/review/references/claude-4.7.md,sha256=Pa-0qJ9eyB_pS_PRgBLFocUUzuyP7EjbNBGatWklL0A,34513
|
|
278
|
+
forge/_extensions/skills/review/references/gemini-3.1.md,sha256=jWLYIWyM7n1Enif2UBejN4XoT9dhcuoPMj-bkiMkris,20400
|
|
279
|
+
forge/_extensions/skills/review/references/gpt-5.5.md,sha256=OdokqJrdNKai_CvoXirZgUwuHp_rpVhZHx1H5mK-e_A,21237
|
|
280
|
+
forge/_extensions/skills/review/references/skills-writing-guide.md,sha256=NxAd7UlvVFDysqAHufO1T0OnCoFV8GmYisxDLxUHsPo,57693
|
|
281
|
+
forge/_extensions/skills/review/resources/code-anthropic.md,sha256=WBXUtVI3SmBgVdIG4uSFhkOLtf97FRR9Pi43Ig0PGqU,4148
|
|
282
|
+
forge/_extensions/skills/review/resources/code-gemini.md,sha256=0ZkkxkCHy7mCTFBqyKK3OC054u2qAUo-p_jpkKElEhs,5178
|
|
283
|
+
forge/_extensions/skills/review/resources/code-openai.md,sha256=LUA5mdFaShE2nRa2zANUGwmHm7BXA-cg_bf_Ku-ktNg,5723
|
|
284
|
+
forge/_extensions/skills/review/resources/code.md,sha256=WBXUtVI3SmBgVdIG4uSFhkOLtf97FRR9Pi43Ig0PGqU,4148
|
|
285
|
+
forge/_extensions/skills/review-docs/SKILL.md,sha256=aJN3NoQeZfaP4vhbWZ9AixPKFviZbXQuxdqJn4Gqa7w,4732
|
|
286
|
+
forge/_extensions/skills/review-docs/resources/docs-anthropic.md,sha256=8lix19p8JKLiNPeNCuY5Gunk-QgBOlbdSpdcRCU4FN8,4343
|
|
287
|
+
forge/_extensions/skills/review-docs/resources/docs-gemini.md,sha256=bEU1QUQYcUm96y2C877ivYFv3Bdrn0SzU0n5s7rPJTw,5534
|
|
288
|
+
forge/_extensions/skills/review-docs/resources/docs-openai.md,sha256=0IyNyyCVBEMs1ELQaWr4j0EZ0B4SddIcgycFW_i-kOA,6219
|
|
289
|
+
forge/_extensions/skills/review-docs/resources/docs.md,sha256=8lix19p8JKLiNPeNCuY5Gunk-QgBOlbdSpdcRCU4FN8,4343
|
|
290
|
+
forge/_extensions/skills/smoke-test/SKILL.md,sha256=KZ73dJg5C8FY1Lfsctg2OfJegIfn6HOXQiUES5s10kA,926
|
|
291
|
+
forge/_extensions/skills/smoke-test/scripts/smoke-test.sh,sha256=yRgiu-AW1m4tGXfdqGw1r_-cS77ZsiSvrrIctemTna8,3656
|
|
292
|
+
forge/_extensions/skills/understand/SKILL.md,sha256=snXwYlI_RdxYP4VSx7oErMowWjKkwPIUTgRFVxoSMbI,6594
|
|
293
|
+
forge/_extensions/skills/understand/resources/code-anthropic.md,sha256=7tKPFTBOs56s2YIJkNQl4RLo4X0sgUpTAu0FA1qqI_Q,4217
|
|
294
|
+
forge/_extensions/skills/understand/resources/code-gemini.md,sha256=XCoK1XOlBnhCW58Lya9QL6U7zA0EPuxPK7Na_DM3F7g,4913
|
|
295
|
+
forge/_extensions/skills/understand/resources/code-openai.md,sha256=Gy48R6hbtqJyX40GVPPKBSWSi8YT8Jo0pGZetPgn320,4607
|
|
296
|
+
forge/_extensions/skills/understand/resources/code.md,sha256=7tKPFTBOs56s2YIJkNQl4RLo4X0sgUpTAu0FA1qqI_Q,4217
|
|
297
|
+
forge/_extensions/skills/understand/resources/docs-anthropic.md,sha256=RLic1VnATi-WKraTTB-dSGtcXNvUVEomJyNytkDPUSk,5183
|
|
298
|
+
forge/_extensions/skills/understand/resources/docs-gemini.md,sha256=Ky-GkCICV_OugqVQYg4LvfXunocm7lw_1rwIFfW1yyQ,5845
|
|
299
|
+
forge/_extensions/skills/understand/resources/docs-openai.md,sha256=KCju2VBs6p8gn_rpzB1DzElfBPkQgvzum_gCB8gpaTs,5770
|
|
300
|
+
forge/_extensions/skills/understand/resources/docs.md,sha256=RLic1VnATi-WKraTTB-dSGtcXNvUVEomJyNytkDPUSk,5183
|
|
301
|
+
forge/_extensions/skills/walkthrough/SKILL.md,sha256=8d69t9w9IlF5oK4yA2PtnzpK7vDt1W9oGBDAqMYKmwM,30780
|
|
302
|
+
forge/_extensions/skills/walkthrough/resources/checklist.md,sha256=w7t_Wvtojz1EB8Uu1zU6zwtodVEahJreD5e3Gj9Q9sU,18819
|
|
303
|
+
forge/_extensions/skills/walkthrough/scripts/run-in-repo.sh,sha256=NK6umRjB74B3_xCLCTPs-yKfg4ySukWQnD5mTwaDBsQ,4073
|
|
304
|
+
forge/_extensions/skills/walkthrough/scripts/setup-test-repo.sh,sha256=zNd56bVtPV2V9zgtc9tEZruIOSgS5uGP7XprdHAfwDw,6357
|
|
305
|
+
forge/_extensions/skills/walkthrough/scripts/walkthrough-state.py,sha256=kCR9kgr3tbd5muYryn69j9RAL038qitcVw0DTs8Ijas,40238
|
|
306
|
+
multi_forge-0.2.0.dist-info/METADATA,sha256=6PftBXdoM--OBWf22DRq-Bqc9nCcyy9PdpmRE7K9U9U,11634
|
|
307
|
+
multi_forge-0.2.0.dist-info/WHEEL,sha256=QccIxa26bgl1E6uMy58deGWi-0aeIkkangHcxk2kWfw,87
|
|
308
|
+
multi_forge-0.2.0.dist-info/entry_points.txt,sha256=f2SVrl4dCWYj85Q3sy5Z5POnjyzoS-_ozjp45lEBph4,46
|
|
309
|
+
multi_forge-0.2.0.dist-info/licenses/LICENSE,sha256=bvuyTvIRd28PQZvFAPkRtX_rBsy2pJXGl4kq5rcbpWg,11375
|
|
310
|
+
multi_forge-0.2.0.dist-info/licenses/NOTICE,sha256=qoQJhfzAf-LSevXtgYQzM9NGjVl3FmHX-ruFFmRGW5w,400
|
|
311
|
+
multi_forge-0.2.0.dist-info/RECORD,,
|