foundry-mcp 0.3.3__py3-none-any.whl → 0.7.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.
- foundry_mcp/__init__.py +7 -1
- foundry_mcp/cli/commands/plan.py +10 -3
- foundry_mcp/cli/commands/review.py +19 -4
- foundry_mcp/cli/commands/specs.py +38 -208
- foundry_mcp/cli/output.py +3 -3
- foundry_mcp/config.py +235 -5
- foundry_mcp/core/ai_consultation.py +146 -9
- foundry_mcp/core/discovery.py +6 -6
- foundry_mcp/core/error_store.py +2 -2
- foundry_mcp/core/intake.py +933 -0
- foundry_mcp/core/llm_config.py +20 -2
- foundry_mcp/core/metrics_store.py +2 -2
- foundry_mcp/core/progress.py +70 -0
- foundry_mcp/core/prompts/fidelity_review.py +149 -4
- foundry_mcp/core/prompts/markdown_plan_review.py +5 -1
- foundry_mcp/core/prompts/plan_review.py +5 -1
- foundry_mcp/core/providers/claude.py +6 -47
- foundry_mcp/core/providers/codex.py +6 -57
- foundry_mcp/core/providers/cursor_agent.py +3 -44
- foundry_mcp/core/providers/gemini.py +6 -57
- foundry_mcp/core/providers/opencode.py +35 -5
- foundry_mcp/core/research/__init__.py +68 -0
- foundry_mcp/core/research/memory.py +425 -0
- foundry_mcp/core/research/models.py +437 -0
- foundry_mcp/core/research/workflows/__init__.py +22 -0
- foundry_mcp/core/research/workflows/base.py +204 -0
- foundry_mcp/core/research/workflows/chat.py +271 -0
- foundry_mcp/core/research/workflows/consensus.py +396 -0
- foundry_mcp/core/research/workflows/ideate.py +682 -0
- foundry_mcp/core/research/workflows/thinkdeep.py +405 -0
- foundry_mcp/core/responses.py +450 -0
- foundry_mcp/core/spec.py +2438 -236
- foundry_mcp/core/task.py +1064 -19
- foundry_mcp/core/testing.py +512 -123
- foundry_mcp/core/validation.py +313 -42
- foundry_mcp/dashboard/components/charts.py +0 -57
- foundry_mcp/dashboard/launcher.py +11 -0
- foundry_mcp/dashboard/views/metrics.py +25 -35
- foundry_mcp/dashboard/views/overview.py +1 -65
- foundry_mcp/resources/specs.py +25 -25
- foundry_mcp/schemas/intake-schema.json +89 -0
- foundry_mcp/schemas/sdd-spec-schema.json +33 -5
- foundry_mcp/server.py +38 -0
- foundry_mcp/tools/unified/__init__.py +4 -2
- foundry_mcp/tools/unified/authoring.py +2423 -267
- foundry_mcp/tools/unified/documentation_helpers.py +69 -6
- foundry_mcp/tools/unified/environment.py +235 -6
- foundry_mcp/tools/unified/error.py +18 -1
- foundry_mcp/tools/unified/lifecycle.py +8 -0
- foundry_mcp/tools/unified/plan.py +113 -1
- foundry_mcp/tools/unified/research.py +658 -0
- foundry_mcp/tools/unified/review.py +370 -16
- foundry_mcp/tools/unified/spec.py +367 -0
- foundry_mcp/tools/unified/task.py +1163 -48
- foundry_mcp/tools/unified/test.py +69 -8
- {foundry_mcp-0.3.3.dist-info → foundry_mcp-0.7.0.dist-info}/METADATA +7 -1
- {foundry_mcp-0.3.3.dist-info → foundry_mcp-0.7.0.dist-info}/RECORD +60 -48
- {foundry_mcp-0.3.3.dist-info → foundry_mcp-0.7.0.dist-info}/WHEEL +0 -0
- {foundry_mcp-0.3.3.dist-info → foundry_mcp-0.7.0.dist-info}/entry_points.txt +0 -0
- {foundry_mcp-0.3.3.dist-info → foundry_mcp-0.7.0.dist-info}/licenses/LICENSE +0 -0
|
@@ -23,7 +23,12 @@ from foundry_mcp.core.responses import (
|
|
|
23
23
|
error_response,
|
|
24
24
|
success_response,
|
|
25
25
|
)
|
|
26
|
-
from foundry_mcp.core.testing import
|
|
26
|
+
from foundry_mcp.core.testing import (
|
|
27
|
+
TestRunner,
|
|
28
|
+
get_presets,
|
|
29
|
+
get_runner,
|
|
30
|
+
get_available_runners,
|
|
31
|
+
)
|
|
27
32
|
from foundry_mcp.tools.unified.router import (
|
|
28
33
|
ActionDefinition,
|
|
29
34
|
ActionRouter,
|
|
@@ -42,13 +47,31 @@ def _metric(action: str) -> str:
|
|
|
42
47
|
return f"unified_tools.test.{action.replace('-', '_')}"
|
|
43
48
|
|
|
44
49
|
|
|
45
|
-
def
|
|
50
|
+
def _get_test_runner(
|
|
51
|
+
config: ServerConfig,
|
|
52
|
+
workspace: Optional[str],
|
|
53
|
+
runner_name: Optional[str] = None,
|
|
54
|
+
) -> TestRunner:
|
|
55
|
+
"""Get a TestRunner with the appropriate backend.
|
|
56
|
+
|
|
57
|
+
Args:
|
|
58
|
+
config: Server configuration
|
|
59
|
+
workspace: Workspace path override
|
|
60
|
+
runner_name: Name of the test runner backend to use
|
|
61
|
+
|
|
62
|
+
Returns:
|
|
63
|
+
TestRunner configured with the appropriate backend
|
|
64
|
+
"""
|
|
46
65
|
ws: Optional[Path] = None
|
|
47
66
|
if workspace:
|
|
48
67
|
ws = Path(workspace)
|
|
49
68
|
elif config.specs_dir is not None:
|
|
50
69
|
ws = config.specs_dir.parent
|
|
51
|
-
|
|
70
|
+
|
|
71
|
+
# Get the runner backend from config or defaults
|
|
72
|
+
runner_backend = get_runner(runner_name, config.test)
|
|
73
|
+
|
|
74
|
+
return TestRunner(workspace=ws, runner=runner_backend)
|
|
52
75
|
|
|
53
76
|
|
|
54
77
|
def _validation_error(
|
|
@@ -68,6 +91,24 @@ def _validation_error(
|
|
|
68
91
|
def _handle_run(*, config: ServerConfig, payload: Dict[str, Any]) -> dict:
|
|
69
92
|
request_id = _request_id()
|
|
70
93
|
|
|
94
|
+
# Validate runner parameter
|
|
95
|
+
runner_name = payload.get("runner")
|
|
96
|
+
if runner_name is not None and not isinstance(runner_name, str):
|
|
97
|
+
return _validation_error(
|
|
98
|
+
message="runner must be a string",
|
|
99
|
+
request_id=request_id,
|
|
100
|
+
remediation="Use runner=pytest|go|npm|jest|make or a custom runner name",
|
|
101
|
+
)
|
|
102
|
+
|
|
103
|
+
if isinstance(runner_name, str):
|
|
104
|
+
available_runners = get_available_runners(config.test)
|
|
105
|
+
if runner_name not in available_runners:
|
|
106
|
+
return _validation_error(
|
|
107
|
+
message=f"Unknown runner: {runner_name}",
|
|
108
|
+
request_id=request_id,
|
|
109
|
+
remediation=f"Use one of: {', '.join(sorted(available_runners))}",
|
|
110
|
+
)
|
|
111
|
+
|
|
71
112
|
preset = payload.get("preset")
|
|
72
113
|
if preset is not None and not isinstance(preset, str):
|
|
73
114
|
return _validation_error(
|
|
@@ -90,7 +131,7 @@ def _handle_run(*, config: ServerConfig, payload: Dict[str, Any]) -> dict:
|
|
|
90
131
|
return _validation_error(
|
|
91
132
|
message="target must be a string",
|
|
92
133
|
request_id=request_id,
|
|
93
|
-
remediation="Provide a
|
|
134
|
+
remediation="Provide a test target like tests/unit or tests/test_file.py",
|
|
94
135
|
)
|
|
95
136
|
|
|
96
137
|
timeout = payload.get("timeout", 300)
|
|
@@ -155,7 +196,7 @@ def _handle_run(*, config: ServerConfig, payload: Dict[str, Any]) -> dict:
|
|
|
155
196
|
include_passed_value if isinstance(include_passed_value, bool) else False
|
|
156
197
|
)
|
|
157
198
|
|
|
158
|
-
runner =
|
|
199
|
+
runner = _get_test_runner(config, workspace, runner_name)
|
|
159
200
|
|
|
160
201
|
start = time.perf_counter()
|
|
161
202
|
result = runner.run_tests(
|
|
@@ -223,6 +264,24 @@ def _handle_run(*, config: ServerConfig, payload: Dict[str, Any]) -> dict:
|
|
|
223
264
|
def _handle_discover(*, config: ServerConfig, payload: Dict[str, Any]) -> dict:
|
|
224
265
|
request_id = _request_id()
|
|
225
266
|
|
|
267
|
+
# Validate runner parameter
|
|
268
|
+
runner_name = payload.get("runner")
|
|
269
|
+
if runner_name is not None and not isinstance(runner_name, str):
|
|
270
|
+
return _validation_error(
|
|
271
|
+
message="runner must be a string",
|
|
272
|
+
request_id=request_id,
|
|
273
|
+
remediation="Use runner=pytest|go|npm|jest|make or a custom runner name",
|
|
274
|
+
)
|
|
275
|
+
|
|
276
|
+
if isinstance(runner_name, str):
|
|
277
|
+
available_runners = get_available_runners(config.test)
|
|
278
|
+
if runner_name not in available_runners:
|
|
279
|
+
return _validation_error(
|
|
280
|
+
message=f"Unknown runner: {runner_name}",
|
|
281
|
+
request_id=request_id,
|
|
282
|
+
remediation=f"Use one of: {', '.join(sorted(available_runners))}",
|
|
283
|
+
)
|
|
284
|
+
|
|
226
285
|
target = payload.get("target")
|
|
227
286
|
if target is not None and not isinstance(target, str):
|
|
228
287
|
return _validation_error(
|
|
@@ -247,7 +306,7 @@ def _handle_discover(*, config: ServerConfig, payload: Dict[str, Any]) -> dict:
|
|
|
247
306
|
remediation="Provide an absolute path to the workspace",
|
|
248
307
|
)
|
|
249
308
|
|
|
250
|
-
runner =
|
|
309
|
+
runner = _get_test_runner(config, workspace, runner_name)
|
|
251
310
|
|
|
252
311
|
start = time.perf_counter()
|
|
253
312
|
result = runner.discover_tests(target=target, pattern=pattern)
|
|
@@ -291,8 +350,8 @@ def _handle_discover(*, config: ServerConfig, payload: Dict[str, Any]) -> dict:
|
|
|
291
350
|
|
|
292
351
|
|
|
293
352
|
_ACTION_SUMMARY = {
|
|
294
|
-
"run": "Execute
|
|
295
|
-
"discover": "Discover
|
|
353
|
+
"run": "Execute tests using the specified runner (pytest, go, npm, jest, make).",
|
|
354
|
+
"discover": "Discover tests without executing using the specified runner.",
|
|
296
355
|
}
|
|
297
356
|
|
|
298
357
|
|
|
@@ -341,6 +400,7 @@ def register_unified_test_tool(mcp: FastMCP, config: ServerConfig) -> None:
|
|
|
341
400
|
action: str,
|
|
342
401
|
target: Optional[str] = None,
|
|
343
402
|
preset: Optional[str] = None,
|
|
403
|
+
runner: Optional[str] = None,
|
|
344
404
|
timeout: int = 300,
|
|
345
405
|
verbose: bool = True,
|
|
346
406
|
fail_fast: bool = False,
|
|
@@ -352,6 +412,7 @@ def register_unified_test_tool(mcp: FastMCP, config: ServerConfig) -> None:
|
|
|
352
412
|
payload: Dict[str, Any] = {
|
|
353
413
|
"target": target,
|
|
354
414
|
"preset": preset,
|
|
415
|
+
"runner": runner,
|
|
355
416
|
"timeout": timeout,
|
|
356
417
|
"verbose": verbose,
|
|
357
418
|
"fail_fast": fail_fast,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: foundry-mcp
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.7.0
|
|
4
4
|
Summary: MCP server for SDD toolkit spec management
|
|
5
5
|
Project-URL: Homepage, https://github.com/tylerburleigh/foundry-mcp
|
|
6
6
|
Project-URL: Repository, https://github.com/tylerburleigh/foundry-mcp
|
|
@@ -125,6 +125,11 @@ specs/
|
|
|
125
125
|
- `plan(action=create|list|review)` supports lightweight planning and review flows.
|
|
126
126
|
- Notifications and sampling channels surface phase completions to MCP clients.
|
|
127
127
|
|
|
128
|
+
### Batch metadata utilities
|
|
129
|
+
|
|
130
|
+
- `task(action=metadata-batch)` — Apply metadata updates (e.g., `file_path`, `estimated_hours`) to multiple nodes at once. Supports flexible AND-based filtering by `node_type`, `phase_id`, or `pattern` regex. Includes `dry_run` mode for previewing changes.
|
|
131
|
+
- `task(action=fix-verification-types)` — Auto-fix invalid or missing `verification_type` on verify nodes. Supports legacy mappings (`test` → `run-tests`, `auto` → `run-tests`) and defaults unknown types to `manual`. Includes `dry_run` mode for previewing fixes.
|
|
132
|
+
|
|
128
133
|
### Code, docs, and testing intelligence
|
|
129
134
|
|
|
130
135
|
- Code navigation tools via `code(action=...)` support symbol lookup and call-graph tracing.
|
|
@@ -199,6 +204,7 @@ All MCP tools emit the standardized envelope defined in `docs/codebase_standards
|
|
|
199
204
|
| `FOUNDRY_MCP_API_KEYS` | Comma-separated API keys required for tool access | Disabled |
|
|
200
205
|
| `FOUNDRY_MCP_FEATURE_FLAGS` | Additional feature flags to enable (e.g., `planning_tools`) | Based on spec rollout |
|
|
201
206
|
| `FOUNDRY_MCP_RESPONSE_CONTRACT` | Force response contract version (`v2`) | Auto-negotiated |
|
|
207
|
+
| `FOUNDRY_MODE` | Server mode: `full` (16 tools) or `minimal` (1 wake tool) | `full` |
|
|
202
208
|
| `OPENAI_API_KEY` / `ANTHROPIC_API_KEY` | LLM provider credentials | Not set |
|
|
203
209
|
|
|
204
210
|
### TOML configuration
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
foundry_mcp/__init__.py,sha256
|
|
2
|
-
foundry_mcp/config.py,sha256
|
|
3
|
-
foundry_mcp/server.py,sha256=
|
|
1
|
+
foundry_mcp/__init__.py,sha256=r2Q-D1qsSPgSgUM53YV2Se_yyIZRwYKluJJKCEjEAKQ,404
|
|
2
|
+
foundry_mcp/config.py,sha256=-7IZ2mzAfEIJnnf5bHZ4Sxd72lB1dmxQbBP0IJTKDeo,39560
|
|
3
|
+
foundry_mcp/server.py,sha256=UjP8ghtU3d91C0HteJ0jbwSzx9dtE7m41r4otiC-TLI,6983
|
|
4
4
|
foundry_mcp/cli/__init__.py,sha256=tHj_9cQK1yBsqY0wxsn2eg5OHPyW6wN3oRJ-w-eBvuc,1887
|
|
5
5
|
foundry_mcp/cli/__main__.py,sha256=wPwlid-SomQl5oGxtM319jjN4OSE-KWZtsdHctp4juU,167
|
|
6
6
|
foundry_mcp/cli/agent.py,sha256=QPuoZkLeNwmvjqCb2a3CPXJx9YWNJmd8s4a9iRbENIM,2855
|
|
@@ -9,7 +9,7 @@ foundry_mcp/cli/context.py,sha256=PUBwWqzvxW-qOibu3yedPNeWJcbANEsalUjl45i6jwo,89
|
|
|
9
9
|
foundry_mcp/cli/flags.py,sha256=_9W-xj1VhTtAT5cSp3Ch7zoAhhoC_HRcjztmHRq24lw,8137
|
|
10
10
|
foundry_mcp/cli/logging.py,sha256=z-O-qQSIfndcIOiCkKr8TJ78Pldn0jNXWtjrCk8t1Ho,5974
|
|
11
11
|
foundry_mcp/cli/main.py,sha256=0BPbEbbNzZtS1rDjTqQlLZw2cGL4jaOdHtSk5ov9NWU,1088
|
|
12
|
-
foundry_mcp/cli/output.py,sha256=
|
|
12
|
+
foundry_mcp/cli/output.py,sha256=ZH3cHMoNo39hEXlXO2hcdX21SZdg5ewXyV7YGjl1txs,3986
|
|
13
13
|
foundry_mcp/cli/registry.py,sha256=25yV3o-q7VgnfqjDvqVQHyphe9BQF6y2y70zY52jWLM,2816
|
|
14
14
|
foundry_mcp/cli/resilience.py,sha256=o4flW5JN9nOPq5RVYvRf88cEb4KbqgI3kg2rfkcxv6g,5248
|
|
15
15
|
foundry_mcp/cli/transcript.py,sha256=DbusgsUCipi9l8YVHY20U5rbE13dM76PQbUokGocgV4,7227
|
|
@@ -20,116 +20,128 @@ foundry_mcp/cli/commands/dev.py,sha256=kBtZacvf-lXyGpmdNuZIZZrdZdtMEtxsQqP6HtUR5
|
|
|
20
20
|
foundry_mcp/cli/commands/journal.py,sha256=T7SGvZrdnV0iN1TgHibqBoZSVSMWaye7FiFED3duYik,10936
|
|
21
21
|
foundry_mcp/cli/commands/lifecycle.py,sha256=vtmNyw4QL1igwEeQMoyM0lD-blCvY-3qlYF6sZHc4Z8,8301
|
|
22
22
|
foundry_mcp/cli/commands/modify.py,sha256=Loe5J-P093E9rFJJDZyRFnQB6ez6OkWlZ_eF1bVmiC0,21936
|
|
23
|
-
foundry_mcp/cli/commands/plan.py,sha256=
|
|
23
|
+
foundry_mcp/cli/commands/plan.py,sha256=T5V2Kb0GUcypBpAHrVCzvfp9QrGyn3UAwQ3IeP3OZg4,18017
|
|
24
24
|
foundry_mcp/cli/commands/pr.py,sha256=4PnLJrsB7op6RIP7Z1cDvrcSGMfknRRfBJrDd8aXBpw,11035
|
|
25
|
-
foundry_mcp/cli/commands/review.py,sha256=
|
|
25
|
+
foundry_mcp/cli/commands/review.py,sha256=2AblIo2NgXHEghlKLFGYeMRnj27mw_mTvjxRUpjHyBo,21174
|
|
26
26
|
foundry_mcp/cli/commands/session.py,sha256=IIZIEGk8ME7Z2DB_DTJLt9GYGIhFe2E4olxuymyBiN0,15970
|
|
27
|
-
foundry_mcp/cli/commands/specs.py,sha256=
|
|
27
|
+
foundry_mcp/cli/commands/specs.py,sha256=awVhJ1hUvDai4IibjEjDDUcB_FOmSTo-yLh7yROF6h8,20644
|
|
28
28
|
foundry_mcp/cli/commands/tasks.py,sha256=TToK6pcwlAqF1zYQ2mKB36Esw9C3htAyvx6Qc8-nOQE,25246
|
|
29
29
|
foundry_mcp/cli/commands/testing.py,sha256=5ZtZ2XJ79V9FmsnvgQ1Z47qGGKMVeFuCOf7GivntMkI,20317
|
|
30
30
|
foundry_mcp/cli/commands/validate.py,sha256=Y_dJmx0WgdxYQkIa8y6H0HSHtQBhXYaqFMv62wEwuD8,30630
|
|
31
31
|
foundry_mcp/core/__init__.py,sha256=LgBtknZIRhvDQT2c8D07TeymkSmDZonrCxWZUZOgeSM,3025
|
|
32
|
-
foundry_mcp/core/ai_consultation.py,sha256=
|
|
32
|
+
foundry_mcp/core/ai_consultation.py,sha256=wAtIUuCHIGy84Bbv6WIC4nEg91x5VqjOH1w58y7zTeA,62861
|
|
33
33
|
foundry_mcp/core/cache.py,sha256=7eM1-J_CXgQUid1JTTRS0aRxOZK9HgTRLEzX-k534po,5443
|
|
34
34
|
foundry_mcp/core/capabilities.py,sha256=Zq6QJ7bvHL4GIOxjQNjmUGLFBeEjvVNj4XP2RLswebE,13144
|
|
35
35
|
foundry_mcp/core/concurrency.py,sha256=qOlfYmlSDYU-deqnqa0r5ccGwey-MIM5QiDag_K6xzk,26571
|
|
36
36
|
foundry_mcp/core/context.py,sha256=2M77uy-1KW-EzVxT2bdWPUFc6mWbANK1iYsCNFhMOls,16292
|
|
37
|
-
foundry_mcp/core/discovery.py,sha256=
|
|
37
|
+
foundry_mcp/core/discovery.py,sha256=hgfo_wpMjPxHLImo_-jl0Xdv_eQA2pY3KIWw5JH0AjQ,53897
|
|
38
38
|
foundry_mcp/core/error_collection.py,sha256=MjpYU0OrTpQRIg8ND-EQzd-H-vM4LKtRHUNuveQFvp8,25069
|
|
39
|
-
foundry_mcp/core/error_store.py,sha256=
|
|
39
|
+
foundry_mcp/core/error_store.py,sha256=P5irmUJIXh9BNyg_Mh7HYoKqtSjwHpj9vhUcwtqh4V8,20725
|
|
40
40
|
foundry_mcp/core/feature_flags.py,sha256=Pv4E4vFBe1bfLHRG3xRqfWmyVRhrw0GLcoZnYKA_DBo,19599
|
|
41
41
|
foundry_mcp/core/health.py,sha256=GcpLnHDSF5W_nf0k7-5icGeZmrKw-sUU_67ddMe8Kt4,25115
|
|
42
|
+
foundry_mcp/core/intake.py,sha256=qjmX5gk9Ae5HjSVLvwmQmPSloJFMsho1SsyUboNhkx8,32722
|
|
42
43
|
foundry_mcp/core/journal.py,sha256=f1q52bjVOOLqMevd4hmdii2vCeLRT-sQhEwaUj0s9Bk,19124
|
|
43
44
|
foundry_mcp/core/lifecycle.py,sha256=LALbkljjUrXtGe0No8eux9vAr-AIlDDltn9jz1HToHY,10959
|
|
44
|
-
foundry_mcp/core/llm_config.py,sha256=
|
|
45
|
+
foundry_mcp/core/llm_config.py,sha256=xk9zGSLBZBoJZxbvwvpYuGonOQwmQnvxkGcVVGft3BQ,48194
|
|
45
46
|
foundry_mcp/core/llm_patterns.py,sha256=1ZCuCkZ6ov2abk4Wt6T35a2Fg0Dp-0ALV5sdm5N9gXE,15336
|
|
46
47
|
foundry_mcp/core/llm_provider.py,sha256=VG4lJn5gIF8QNbAV81ysyEPkbg3XehCdw5m2KDtae9c,52595
|
|
47
48
|
foundry_mcp/core/logging_config.py,sha256=Dlo6lL5eollUXk9U43PviuvU9d6jW_AREEQK63vE2IE,10960
|
|
48
49
|
foundry_mcp/core/metrics_persistence.py,sha256=rvcNsaGXC811feicjLu7nq7ayUX_aTD7tyHcDGPYO8w,18231
|
|
49
50
|
foundry_mcp/core/metrics_registry.py,sha256=TpOkaFXpPMDagV537IbNPW4InZH1IaQT8v0pLZyBXJc,10438
|
|
50
|
-
foundry_mcp/core/metrics_store.py,sha256=
|
|
51
|
+
foundry_mcp/core/metrics_store.py,sha256=ctBgaedVkSmeyQlQmkrnJEg9jAAxw6sZNfCW2xt2a6o,22482
|
|
51
52
|
foundry_mcp/core/modifications.py,sha256=g6nnXunEhqjXyr5HrV3dPoMMmMjML-3tYWKjlmxt1GY,6343
|
|
52
53
|
foundry_mcp/core/naming.py,sha256=3ru58LJC68wcrfvxlsVwE9Sey7fo5OSWfOAd3u1NNFc,4094
|
|
53
54
|
foundry_mcp/core/observability.py,sha256=Y7f9ws8Glml4ThoMynj4G0vkhZEAw2rHtglw9uap7Vo,41477
|
|
54
55
|
foundry_mcp/core/otel.py,sha256=BVb4rgyo11GMUnJuGSji_0mjvTNyO8f5E1LNCoyVe08,13516
|
|
55
56
|
foundry_mcp/core/otel_stubs.py,sha256=lVWL7qQHo7QRj9NvvyqNvvxzjGvLFiDEdJQDqpc5XcE,6834
|
|
56
57
|
foundry_mcp/core/pagination.py,sha256=S_iTmZYmLda1to-__LLMM0sQI1xJMvAzjW0NAHLKx6A,7243
|
|
57
|
-
foundry_mcp/core/progress.py,sha256=
|
|
58
|
+
foundry_mcp/core/progress.py,sha256=ZFBVzxFY_YTQPKOM1zOA_ylQG-tJishht3h41xhWz2I,11978
|
|
58
59
|
foundry_mcp/core/prometheus.py,sha256=4sE58NzWzK5FTp3qGJ27r9Sd_aOa0ogh2mSKtOrhu3Q,17814
|
|
59
60
|
foundry_mcp/core/rate_limit.py,sha256=6Hrx60Az4z8lxXW0DeEx1hrGQPXRwbhhRVI1PA72BKQ,13395
|
|
60
61
|
foundry_mcp/core/resilience.py,sha256=DrH6fbMYXjRmjKDukT8zLL49JEKsgza2LGsgBow4usQ,18831
|
|
61
|
-
foundry_mcp/core/responses.py,sha256=
|
|
62
|
+
foundry_mcp/core/responses.py,sha256=67Ll_LaSbLbgqDiXjcG7Cvw2C0y1IXKOaV6oiNv0fwE,45750
|
|
62
63
|
foundry_mcp/core/review.py,sha256=DkiNG1DWgmm5PCuZrGstYI6mcd7ub9sXQpPARbk-HWM,11183
|
|
63
64
|
foundry_mcp/core/security.py,sha256=4ABOhWBzu7P9gMuC8gTXr3PrjEmEp_eSAgrFZG2sjyI,15444
|
|
64
|
-
foundry_mcp/core/spec.py,sha256=
|
|
65
|
-
foundry_mcp/core/task.py,sha256=
|
|
66
|
-
foundry_mcp/core/testing.py,sha256
|
|
67
|
-
foundry_mcp/core/validation.py,sha256=
|
|
65
|
+
foundry_mcp/core/spec.py,sha256=tySACz0HqN-Ju1wdF4DlDrwZVdbI3R9YFLmbODMkCo4,129357
|
|
66
|
+
foundry_mcp/core/task.py,sha256=IK1rdFO9gDFQLQdQTjbmAaMlaoEY7ze5emZOI0s-OdA,80685
|
|
67
|
+
foundry_mcp/core/testing.py,sha256=roee_ZddoB7xNxRk1pz89-4eOb6Sc2X6vKk0VLzd3Cg,24930
|
|
68
|
+
foundry_mcp/core/validation.py,sha256=OTI3WsiUE-NDk3znrGrhgVq_ukGpibEw6R4RDcnDmcM,80633
|
|
68
69
|
foundry_mcp/core/prompts/__init__.py,sha256=0rx9sX-D_Zgfah-gPoUPYxW5GnhjxZmCVNzvurMOk8s,14316
|
|
69
|
-
foundry_mcp/core/prompts/fidelity_review.py,sha256=
|
|
70
|
-
foundry_mcp/core/prompts/markdown_plan_review.py,sha256=
|
|
71
|
-
foundry_mcp/core/prompts/plan_review.py,sha256=
|
|
70
|
+
foundry_mcp/core/prompts/fidelity_review.py,sha256=mmuWuDW5Ljj1IUYy3yGY7MjuOguLhytz5tYY9y0SqOI,22360
|
|
71
|
+
foundry_mcp/core/prompts/markdown_plan_review.py,sha256=WXH0N-QwC31Bo4i2lrCGWfIjviyi0ZkPS5kAuNOYsZ0,18256
|
|
72
|
+
foundry_mcp/core/prompts/plan_review.py,sha256=m4N5p_EQFrtvhYxt5PVtU9KcSr9sDBGboF-9ZvR40Cg,21992
|
|
72
73
|
foundry_mcp/core/providers/__init__.py,sha256=wWP2_G6EMJuwl-enLoyVBXhl558gOI89lxlM7kLIPz0,5914
|
|
73
74
|
foundry_mcp/core/providers/base.py,sha256=LG4e6sPqRlssniaLR4j0x8T-ftfbFMLYw_veKlnPCUE,16584
|
|
74
|
-
foundry_mcp/core/providers/claude.py,sha256=
|
|
75
|
-
foundry_mcp/core/providers/codex.py,sha256=
|
|
76
|
-
foundry_mcp/core/providers/cursor_agent.py,sha256=
|
|
75
|
+
foundry_mcp/core/providers/claude.py,sha256=1tyanVmQ1wqVheoe81qzl1ewmog1OJuWYp9EeFhswmU,13572
|
|
76
|
+
foundry_mcp/core/providers/codex.py,sha256=x8Kf_aKVmbIAR8nEQDgyTHxuVPzLyQ81Yl33rBQBVs8,19041
|
|
77
|
+
foundry_mcp/core/providers/cursor_agent.py,sha256=Rc_jax7xY2nejricOHJZBwzvEOkGrV5rcMRUj3KtPbU,21108
|
|
77
78
|
foundry_mcp/core/providers/detectors.py,sha256=cFt-FMcOQpbMNsOLlTXqLFACnYyvF66GIPDA_CMSUeU,15398
|
|
78
|
-
foundry_mcp/core/providers/gemini.py,sha256=
|
|
79
|
-
foundry_mcp/core/providers/opencode.py,sha256=
|
|
79
|
+
foundry_mcp/core/providers/gemini.py,sha256=Jd6KHORmgMYbIZCf08Hhv6onPFRw1eMb0LRJiDxVoYk,11804
|
|
80
|
+
foundry_mcp/core/providers/opencode.py,sha256=GCKoScwTicJJYDb_dq50clXGvi0c7kky4T-AktCZh2M,22976
|
|
80
81
|
foundry_mcp/core/providers/opencode_wrapper.js,sha256=m7zHGmXwYGM8SQn29Wq3o8rVUa-gOLXq_haPwXHDI4w,7521
|
|
81
82
|
foundry_mcp/core/providers/package-lock.json,sha256=NaVOX26YlJlKw6suq_Vg9MWES_B_pEIkRiVIxXcthss,646
|
|
82
83
|
foundry_mcp/core/providers/package.json,sha256=qQ80lM53NDZYEt7sUYLAydzUAnNJBUE6a-NLyFLnxNo,511
|
|
83
84
|
foundry_mcp/core/providers/registry.py,sha256=uAVJ0dvE_lTtTM6lE_RV9QCvGjP33gYxxXYCy_68Y8c,19147
|
|
84
85
|
foundry_mcp/core/providers/test_provider.py,sha256=7RlAkc8H-2uBd25tmKs_Cu7Fl6EUpBB5eXKTx7G1Esk,5213
|
|
85
86
|
foundry_mcp/core/providers/validation.py,sha256=ik82u5Uiclnb2AWVe337M2kIKq-lhPwuhtOtq5-Vf6o,21767
|
|
87
|
+
foundry_mcp/core/research/__init__.py,sha256=fEBsDm4Oz5qVgEN3etuEEx27jnDV3PkxndTlhOQwcCY,1478
|
|
88
|
+
foundry_mcp/core/research/memory.py,sha256=AogMwndqc2MFofTvbZ9FYBKavs7ewWwEZ7hopKHNflI,13808
|
|
89
|
+
foundry_mcp/core/research/models.py,sha256=t1gUSmH4pXwUql73tULCe_6d1QLh54ohBJ4j8x78HIQ,17232
|
|
90
|
+
foundry_mcp/core/research/workflows/__init__.py,sha256=zmbDubDVaseFF57KxB7SAwSHx9X98og_3eDpWIcN_Oc,877
|
|
91
|
+
foundry_mcp/core/research/workflows/base.py,sha256=ETyY3qNls_Ya622iehkQffno5TIfxocvZhm9gWJkuVw,6546
|
|
92
|
+
foundry_mcp/core/research/workflows/chat.py,sha256=mrMRh2dyYWjxwc2yFNJL-hrqnb4na0yZuovSPz1c_7o,8313
|
|
93
|
+
foundry_mcp/core/research/workflows/consensus.py,sha256=DyTfMcGpvT_4lpl7oM7CuQKQPGTPpQA7n-Yy27CmYKc,13891
|
|
94
|
+
foundry_mcp/core/research/workflows/ideate.py,sha256=SiV9RTIX4hsjmMDNSNRvD77OVYfbV_LGx-8SLmLyggc,22271
|
|
95
|
+
foundry_mcp/core/research/workflows/thinkdeep.py,sha256=5yWhDstcoxPSkxdyblPniXoB6GRqdFNOY-cjtAL-XaQ,14029
|
|
86
96
|
foundry_mcp/dashboard/__init__.py,sha256=3XUgs6JJbcrx37ABvZPosgNzd5oFqdDm7raNDqWkmFs,811
|
|
87
97
|
foundry_mcp/dashboard/app.py,sha256=Ktv0o6nBjtkXF08g2Oq15daR_hgV22vs1DlUZ55kJGI,3004
|
|
88
|
-
foundry_mcp/dashboard/launcher.py,sha256=
|
|
98
|
+
foundry_mcp/dashboard/launcher.py,sha256=budmYi7UkJc_bCITfKOCTL9kOO6MdkV87NreNaJTJ8o,8357
|
|
89
99
|
foundry_mcp/dashboard/components/__init__.py,sha256=etYzKPHwfZdYvm9u7s2CPR0VPnBmWHl8FyJ2YoE7mEI,352
|
|
90
100
|
foundry_mcp/dashboard/components/cards.py,sha256=QQTa4dlLyHwAUVe6zBwPoATmyIMXq24kTVRC0Uyvqno,2414
|
|
91
|
-
foundry_mcp/dashboard/components/charts.py,sha256=
|
|
101
|
+
foundry_mcp/dashboard/components/charts.py,sha256=5iy7916wy9_jD2adePUB1KObUbcyRdMl-ZOwxxtsWsk,3978
|
|
92
102
|
foundry_mcp/dashboard/components/filters.py,sha256=uN7rFrBvZk6oacPcOiexET02BExNM5olWepjCXDrTf8,3061
|
|
93
103
|
foundry_mcp/dashboard/components/tables.py,sha256=WVq_BMbWBGyaIxuvy3qUrH6tBWsJABC5wfulojJNEK0,4873
|
|
94
104
|
foundry_mcp/dashboard/data/__init__.py,sha256=CFz07CIZhmD12kx77Mr2LG0J--b9DTvyu3uaHDJusvI,261
|
|
95
105
|
foundry_mcp/dashboard/data/stores.py,sha256=-2193Vdz1q4Ls2qmP1aQZ7cF1DWRxeCItq4LxJi6UnA,12391
|
|
96
106
|
foundry_mcp/dashboard/views/__init__.py,sha256=12fUzf3TkGMs0dJHfA6Y856qJEO7lOS_hs6msP3xYRs,208
|
|
97
107
|
foundry_mcp/dashboard/views/errors.py,sha256=suDaoQQsnyr2sYOWhN2nNNWIuIBZPkVIHGMlVvYsgr8,7305
|
|
98
|
-
foundry_mcp/dashboard/views/metrics.py,sha256=
|
|
99
|
-
foundry_mcp/dashboard/views/overview.py,sha256=
|
|
108
|
+
foundry_mcp/dashboard/views/metrics.py,sha256=88Blo0iObfV_2mvhJV1RuqW7K278mn6vVoejonkTiuY,5725
|
|
109
|
+
foundry_mcp/dashboard/views/overview.py,sha256=BqtUVRC44PNXTd_Vu_PxVPZc3kThbytxANNGs3cmOhI,3369
|
|
100
110
|
foundry_mcp/dashboard/views/providers.py,sha256=sFCh-F8xIhLRQQzgjd_dwZz_S6AgolWSmP3iqczxxYE,2819
|
|
101
111
|
foundry_mcp/dashboard/views/sdd_workflow.py,sha256=lKvh8Ru6WBg5nE8vCcNZibemtRvhMoB3P5boK5Sd68M,8281
|
|
102
112
|
foundry_mcp/dashboard/views/tool_usage.py,sha256=-SD9VwhDJ1SRpHkYXDPINenSaLrQAiXRFEvRrp3-HbA,4760
|
|
103
113
|
foundry_mcp/prompts/__init__.py,sha256=AeAFELo1TTBdw4MVg4VoeDWsGGvzFTmdRtHHOBxwVzA,200
|
|
104
114
|
foundry_mcp/prompts/workflows.py,sha256=1bg43V6lEGeGuGX37G49UYGtDjZ6SZqsXguKb_zZQss,18369
|
|
105
115
|
foundry_mcp/resources/__init__.py,sha256=rnxmkQKsDcL-p-NyVlZtEh9Ie2BQn0nzQ_16NuCLBPY,201
|
|
106
|
-
foundry_mcp/resources/specs.py,sha256=
|
|
116
|
+
foundry_mcp/resources/specs.py,sha256=HcXxZFJt8eDFTQpshwxC9PLdtYPbOttVGFbT8mLRO5A,19828
|
|
107
117
|
foundry_mcp/schemas/__init__.py,sha256=iKHwedYPusMeg-Ozdeq-gHDT5nhmqEPP-a9jXi8VyOM,1140
|
|
108
|
-
foundry_mcp/schemas/
|
|
118
|
+
foundry_mcp/schemas/intake-schema.json,sha256=YisuGVRpMhg66lm-_vSs8SMVwjbsyWfXPSv0u4dI5UI,2691
|
|
119
|
+
foundry_mcp/schemas/sdd-spec-schema.json,sha256=VAmeihOuDHldgk-evwjZLPmoRt4o4mVZ1vCZkhWuh74,12480
|
|
109
120
|
foundry_mcp/tools/__init__.py,sha256=yNmGFFGNp-OMA758oAMxB4z7cvXb_6KPxm-ZyHbi-9I,199
|
|
110
|
-
foundry_mcp/tools/unified/__init__.py,sha256=
|
|
111
|
-
foundry_mcp/tools/unified/authoring.py,sha256=
|
|
121
|
+
foundry_mcp/tools/unified/__init__.py,sha256=UrO3_jStMwck1_SRy3yXX8mPjUc4Kr7f25xGDZS_I6M,2745
|
|
122
|
+
foundry_mcp/tools/unified/authoring.py,sha256=_oLgy68r-7Ppj0V9oA4z6Ri9Lz6s-LhvLgd0xEHzTVM,127790
|
|
112
123
|
foundry_mcp/tools/unified/context_helpers.py,sha256=JcaEdn1nVgaZ4GfTktRdZ7oD4pHkU9TH6O8WfWJ9lr0,3056
|
|
113
|
-
foundry_mcp/tools/unified/documentation_helpers.py,sha256=
|
|
114
|
-
foundry_mcp/tools/unified/environment.py,sha256=
|
|
115
|
-
foundry_mcp/tools/unified/error.py,sha256=
|
|
124
|
+
foundry_mcp/tools/unified/documentation_helpers.py,sha256=7kAt17bQiZ_WJ8BG2qDqZzdVGjBnIILlG5rzvJ4bfH4,10005
|
|
125
|
+
foundry_mcp/tools/unified/environment.py,sha256=DnjxuTSHtiHYjU3L_nzAt7-0YkaTnZFsj6fp7zWiHpo,39403
|
|
126
|
+
foundry_mcp/tools/unified/error.py,sha256=qzkI6GoFs4bfN79-x0fMpS1ogAn3lkdgzGGymUWEmE8,14452
|
|
116
127
|
foundry_mcp/tools/unified/health.py,sha256=8oo61HeTfuyxTYyuKQPLMHvvYh54ju33invxIGFi5s4,6833
|
|
117
128
|
foundry_mcp/tools/unified/journal.py,sha256=mbVivCiJymd6QFq2u1stVkqhLMM7odrpSyU6X9nRnak,23262
|
|
118
|
-
foundry_mcp/tools/unified/lifecycle.py,sha256=
|
|
129
|
+
foundry_mcp/tools/unified/lifecycle.py,sha256=RKESL2wEaEHagDl61eRX0y0AivUoaPn8ibcdHunohmw,20436
|
|
119
130
|
foundry_mcp/tools/unified/metrics.py,sha256=Q1vIXLpQnTfHnpFxXKWwqQpNDc2_iuGIr48Bg7EM47c,22600
|
|
120
|
-
foundry_mcp/tools/unified/plan.py,sha256=
|
|
131
|
+
foundry_mcp/tools/unified/plan.py,sha256=Ph8XjDDZz0dXHcB0-oTnWud-Oa_SSBpjk56NX0Z7On4,29320
|
|
121
132
|
foundry_mcp/tools/unified/pr.py,sha256=L_Gk9oVP-8PgmbdULFr_BwXBPaLRib_55H8MyHuZ_34,9786
|
|
122
133
|
foundry_mcp/tools/unified/provider.py,sha256=6v4eihUts59eoBVkxA7ZuM12v360jD0LbLvq2e8Jl_A,21770
|
|
123
|
-
foundry_mcp/tools/unified/
|
|
134
|
+
foundry_mcp/tools/unified/research.py,sha256=OMdV7zpJb2Xr95z3ZX59vYzO-deXmsnZqwQg1bcek7o,21537
|
|
135
|
+
foundry_mcp/tools/unified/review.py,sha256=ym0WsErBgXLJH69q0rYIDJGiKL-E2jo1pf5ieK83W-s,37464
|
|
124
136
|
foundry_mcp/tools/unified/review_helpers.py,sha256=k1_zJXMOGSgp7AP6_swEQdDLwcduOb_iy0D7wUX4YVk,9463
|
|
125
137
|
foundry_mcp/tools/unified/router.py,sha256=sWqAaey9yhiAoxyrnL8lr2reMWyPgmyIPlwrNgZZmRI,3489
|
|
126
138
|
foundry_mcp/tools/unified/server.py,sha256=2QiID5O4cHVSWkakcDH1qwhJM7IHjJ5LdenffbzXmEY,19812
|
|
127
|
-
foundry_mcp/tools/unified/spec.py,sha256=
|
|
128
|
-
foundry_mcp/tools/unified/task.py,sha256=
|
|
129
|
-
foundry_mcp/tools/unified/test.py,sha256=
|
|
139
|
+
foundry_mcp/tools/unified/spec.py,sha256=R2Fp8RjgqRUkCYMFafuIiuLpykvtqZ1IVZscFThnYaA,38792
|
|
140
|
+
foundry_mcp/tools/unified/task.py,sha256=LcLf3T5q7dfCAxxpbJCiYS-Wm-1mpVCy_ufaz4SU8H8,115966
|
|
141
|
+
foundry_mcp/tools/unified/test.py,sha256=7H2UObajxz0vHZ_1HUne4E7hlkVGnigT70SnDlkPlfk,13894
|
|
130
142
|
foundry_mcp/tools/unified/verification.py,sha256=Kq3BJ7-Rnp2R35dHoFSTdwHPjEf60nce8vWMIKOA32s,16945
|
|
131
|
-
foundry_mcp-0.
|
|
132
|
-
foundry_mcp-0.
|
|
133
|
-
foundry_mcp-0.
|
|
134
|
-
foundry_mcp-0.
|
|
135
|
-
foundry_mcp-0.
|
|
143
|
+
foundry_mcp-0.7.0.dist-info/METADATA,sha256=_oRr_aCZSSJAtUldtjvOajhVBaisfUV2UJapfNO-1rM,13868
|
|
144
|
+
foundry_mcp-0.7.0.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
|
|
145
|
+
foundry_mcp-0.7.0.dist-info/entry_points.txt,sha256=EBy4TVvlciNngt9ErVIyNjTImjczKa2FkoZRtIEw6aU,95
|
|
146
|
+
foundry_mcp-0.7.0.dist-info/licenses/LICENSE,sha256=8dabQwxo8HuixKsQaXcVaIHLLQWvPPLuKQFZLAIXL4w,1071
|
|
147
|
+
foundry_mcp-0.7.0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|