nucleus-mcp 1.0.7 → 1.2.0
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/package.json +2 -4
- package/.github/workflows/ci.yml +0 -72
- package/.smithery/shttp/module.js +0 -3
- package/.smithery/shttp/module.js.map +0 -7
- package/.smithery/stdio/index.cjs +0 -74
- package/.smithery/stdio/index.cjs.map +0 -7
- package/CHANGELOG.md +0 -65
- package/CODE_OF_CONDUCT.md +0 -34
- package/COMPARISON.md +0 -20
- package/CONTRIBUTING.md +0 -137
- package/DEVELOPMENT.md +0 -109
- package/LICENSE +0 -21
- package/README.md +0 -319
- package/ROADMAP.md +0 -24
- package/SECURITY.md +0 -88
- package/docs/COMMUNITY_FAQ.md +0 -48
- package/docs/COMPETITIVE_ANALYSIS.md +0 -90
- package/docs/DEMO_SCRIPT.md +0 -86
- package/docs/ENTERPRISE.md +0 -169
- package/docs/FAQ.md +0 -228
- package/docs/QUICK_START.md +0 -155
- package/docs/README.md +0 -67
- package/docs/RECURSIVE_SNAP_DEMO.gif +0 -0
- package/docs/social-preview-hq.png +0 -0
- package/docs/social-preview.png +0 -0
- package/examples/basic_usage.py +0 -84
- package/package.json.real +0 -24
- package/pyproject.toml +0 -50
- package/registry-server.json +0 -20
- package/scripts/demo_governance.py +0 -109
- package/scripts/sse_bridge.py +0 -87
- package/scripts/verify_windows_paths.py +0 -48
- package/server.json +0 -20
- package/src/mcp_server_nucleus/__init__.py +0 -8583
- package/src/mcp_server_nucleus/__main__.py +0 -9
- package/src/mcp_server_nucleus/cli.py +0 -1225
- package/src/mcp_server_nucleus/commitment_core.py +0 -146
- package/src/mcp_server_nucleus/commitment_ledger.py +0 -841
- package/src/mcp_server_nucleus/core/__init__.py +0 -6
- package/src/mcp_server_nucleus/core/orchestrator.py +0 -9
- package/src/mcp_server_nucleus/core/tool_registration_impl.py +0 -99
- package/src/mcp_server_nucleus/daemon/safety/lock.py +0 -121
- package/src/mcp_server_nucleus/deployment/render_integration.py +0 -4
- package/src/mcp_server_nucleus/hypervisor/__init__.py +0 -0
- package/src/mcp_server_nucleus/hypervisor/injector.py +0 -83
- package/src/mcp_server_nucleus/hypervisor/locker.py +0 -130
- package/src/mcp_server_nucleus/hypervisor/watchdog.py +0 -71
- package/src/mcp_server_nucleus/runtime/__init__.py +0 -58
- package/src/mcp_server_nucleus/runtime/agent.py +0 -517
- package/src/mcp_server_nucleus/runtime/agent_pool.py +0 -797
- package/src/mcp_server_nucleus/runtime/agents/base.py +0 -34
- package/src/mcp_server_nucleus/runtime/agents/oracle/manifest.json +0 -28
- package/src/mcp_server_nucleus/runtime/auth.py +0 -98
- package/src/mcp_server_nucleus/runtime/autopilot.py +0 -1057
- package/src/mcp_server_nucleus/runtime/broker.py +0 -126
- package/src/mcp_server_nucleus/runtime/budget.py +0 -153
- package/src/mcp_server_nucleus/runtime/capabilities/base.py +0 -20
- package/src/mcp_server_nucleus/runtime/capabilities/brain_ops.py +0 -253
- package/src/mcp_server_nucleus/runtime/capabilities/code_ops.py +0 -192
- package/src/mcp_server_nucleus/runtime/capabilities/depth_tracker.py +0 -81
- package/src/mcp_server_nucleus/runtime/capabilities/feature_map.py +0 -274
- package/src/mcp_server_nucleus/runtime/capabilities/marketing_engine.py +0 -205
- package/src/mcp_server_nucleus/runtime/capabilities/memory_ops.py +0 -79
- package/src/mcp_server_nucleus/runtime/capabilities/proof_system.py +0 -127
- package/src/mcp_server_nucleus/runtime/capabilities/render_ops.py +0 -80
- package/src/mcp_server_nucleus/runtime/capabilities/render_poller_cap.py +0 -266
- package/src/mcp_server_nucleus/runtime/capabilities/self_healing.py +0 -110
- package/src/mcp_server_nucleus/runtime/capabilities/strategy.py +0 -138
- package/src/mcp_server_nucleus/runtime/capabilities/synthesizer.py +0 -134
- package/src/mcp_server_nucleus/runtime/capabilities/web_ops.py +0 -94
- package/src/mcp_server_nucleus/runtime/common.py +0 -134
- package/src/mcp_server_nucleus/runtime/context_manager.py +0 -342
- package/src/mcp_server_nucleus/runtime/context_rules.json +0 -86
- package/src/mcp_server_nucleus/runtime/crdt_task_store.py +0 -349
- package/src/mcp_server_nucleus/runtime/critic.py +0 -150
- package/src/mcp_server_nucleus/runtime/daemon.py +0 -142
- package/src/mcp_server_nucleus/runtime/dashboard.py +0 -1087
- package/src/mcp_server_nucleus/runtime/depth_ops.py +0 -339
- package/src/mcp_server_nucleus/runtime/event_ops.py +0 -103
- package/src/mcp_server_nucleus/runtime/event_stream.py +0 -213
- package/src/mcp_server_nucleus/runtime/export.py +0 -64
- package/src/mcp_server_nucleus/runtime/factory.py +0 -594
- package/src/mcp_server_nucleus/runtime/federation.py +0 -1040
- package/src/mcp_server_nucleus/runtime/fetcher.py +0 -92
- package/src/mcp_server_nucleus/runtime/file_monitor.py +0 -208
- package/src/mcp_server_nucleus/runtime/firestore_bridge.py +0 -91
- package/src/mcp_server_nucleus/runtime/gcloud_ops.py +0 -186
- package/src/mcp_server_nucleus/runtime/hooks.py +0 -246
- package/src/mcp_server_nucleus/runtime/identity/gatekeeper.py +0 -106
- package/src/mcp_server_nucleus/runtime/identity/keygen.py +0 -147
- package/src/mcp_server_nucleus/runtime/identity/manifest.py +0 -62
- package/src/mcp_server_nucleus/runtime/identity/trust.py +0 -27
- package/src/mcp_server_nucleus/runtime/inspector.py +0 -74
- package/src/mcp_server_nucleus/runtime/installer.py +0 -81
- package/src/mcp_server_nucleus/runtime/ipc_auth.py +0 -377
- package/src/mcp_server_nucleus/runtime/lifecycle.py +0 -129
- package/src/mcp_server_nucleus/runtime/llm_client.py +0 -408
- package/src/mcp_server_nucleus/runtime/llm_tiers.json +0 -88
- package/src/mcp_server_nucleus/runtime/locking.py +0 -228
- package/src/mcp_server_nucleus/runtime/loops/fixer.py +0 -110
- package/src/mcp_server_nucleus/runtime/memory.py +0 -158
- package/src/mcp_server_nucleus/runtime/mounter.py +0 -210
- package/src/mcp_server_nucleus/runtime/mounter_ops.py +0 -250
- package/src/mcp_server_nucleus/runtime/nuke_protocol.py +0 -147
- package/src/mcp_server_nucleus/runtime/orchestrator.py +0 -370
- package/src/mcp_server_nucleus/runtime/orchestrator_unified.py +0 -263
- package/src/mcp_server_nucleus/runtime/orchestrator_v3.py +0 -617
- package/src/mcp_server_nucleus/runtime/plugin_loader.py +0 -84
- package/src/mcp_server_nucleus/runtime/policy.py +0 -117
- package/src/mcp_server_nucleus/runtime/profiling.py +0 -219
- package/src/mcp_server_nucleus/runtime/prometheus.py +0 -286
- package/src/mcp_server_nucleus/runtime/proposals.py +0 -101
- package/src/mcp_server_nucleus/runtime/publisher.py +0 -109
- package/src/mcp_server_nucleus/runtime/pulse.py +0 -516
- package/src/mcp_server_nucleus/runtime/registry.py +0 -82
- package/src/mcp_server_nucleus/runtime/render_ops.py +0 -83
- package/src/mcp_server_nucleus/runtime/schema_gen.py +0 -140
- package/src/mcp_server_nucleus/runtime/session_ops.py +0 -224
- package/src/mcp_server_nucleus/runtime/stdio_server.py +0 -633
- package/src/mcp_server_nucleus/runtime/storage.py +0 -83
- package/src/mcp_server_nucleus/runtime/strategy.py +0 -91
- package/src/mcp_server_nucleus/runtime/swarm.py +0 -170
- package/src/mcp_server_nucleus/runtime/sync_ops.py +0 -878
- package/src/mcp_server_nucleus/runtime/task_ingestion.py +0 -1020
- package/src/mcp_server_nucleus/runtime/task_ops.py +0 -449
- package/src/mcp_server_nucleus/runtime/task_scheduler.py +0 -488
- package/src/mcp_server_nucleus/runtime/team.py +0 -59
- package/src/mcp_server_nucleus/runtime/triggers.py +0 -237
- package/src/mcp_server_nucleus/runtime/vector_store.py +0 -125
- package/src/mcp_server_nucleus/runtime/watcher.py +0 -112
- package/src/mcp_server_nucleus/tool_tiers.py +0 -243
- package/tests/__init__.py +0 -1
- package/tests/conftest.py +0 -42
- package/tests/test_core.py +0 -235
- package/tests/test_search.py +0 -69
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
from typing import List, Any, Optional
|
|
2
|
-
from pydantic import BaseModel, Field
|
|
3
|
-
|
|
4
|
-
class TrustProfile(BaseModel):
|
|
5
|
-
"""
|
|
6
|
-
Security and Trust metadata for an Agent.
|
|
7
|
-
Defines what the agent is allowed to do and who verified it.
|
|
8
|
-
"""
|
|
9
|
-
tier: str = Field(default="genesis", description="Trust Tier: genesis, verified, community, untrusted")
|
|
10
|
-
verification_hash: Optional[str] = Field(None, description="Cryptographic hash of the agent's code")
|
|
11
|
-
capabilities: List[str] = Field(default_factory=list, description="High-level capability grants (e.g. 'fs_read', 'net_out')")
|
|
12
|
-
maintainer: str = Field(default="@nucleus-core", description="Entity responsible for this agent")
|
|
13
|
-
|
|
14
|
-
class SovereignAgent(BaseModel):
|
|
15
|
-
"""
|
|
16
|
-
Base class for all Nucleus Sovereign Agents.
|
|
17
|
-
Wraps existing MCP capabilities into a standardized Agent interface.
|
|
18
|
-
"""
|
|
19
|
-
name: str = Field(..., description="The unique handle of the agent (e.g., @nucleus/librarian)")
|
|
20
|
-
description: str = Field(..., description="Human-readable description of the agent's purpose")
|
|
21
|
-
instructions: str = Field(..., description="System prompt or behavioral instructions for the agent")
|
|
22
|
-
tools: List[Any] = Field(default_factory=list, description="List of MCP tools exposed by this agent")
|
|
23
|
-
trust: TrustProfile = Field(default_factory=TrustProfile, description="Security profile for the agent")
|
|
24
|
-
|
|
25
|
-
def run(self, input_text: str) -> str:
|
|
26
|
-
"""
|
|
27
|
-
Syntactic sugar for 'running' the agent.
|
|
28
|
-
In reality, Agents are tool containers, but this allows for simple testing.
|
|
29
|
-
"""
|
|
30
|
-
return f"Agent {self.name} received: {input_text}"
|
|
31
|
-
|
|
32
|
-
class Config:
|
|
33
|
-
arbitrary_types_allowed = True
|
|
34
|
-
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"manifest_version": "1.0.0",
|
|
3
|
-
"agent": {
|
|
4
|
-
"id": "nucleus.core.oracle",
|
|
5
|
-
"name": "The Oracle",
|
|
6
|
-
"version": "1.0.0",
|
|
7
|
-
"description": "The Antifragile Co-Founder. Governance Entity responsible for strategic simulation and protocol evolution.",
|
|
8
|
-
"author": "Nucleus Genesis",
|
|
9
|
-
"license": "MIT"
|
|
10
|
-
},
|
|
11
|
-
"capabilities": [
|
|
12
|
-
{
|
|
13
|
-
"scope": "strategy",
|
|
14
|
-
"reason": "Required to read protocols, run simulations, and evolve the master strategy.",
|
|
15
|
-
"paths": [
|
|
16
|
-
"${BRAIN_PATH}/strategy",
|
|
17
|
-
"${BRAIN_PATH}/PROTOCOL_THE_ORACLE.md",
|
|
18
|
-
"${BRAIN_PATH}/IMPLEMENTATION_PLAN_PHASE61.md",
|
|
19
|
-
"${BRAIN_PATH}/decisions"
|
|
20
|
-
],
|
|
21
|
-
"mode": "read_write"
|
|
22
|
-
}
|
|
23
|
-
],
|
|
24
|
-
"lifecycle": {
|
|
25
|
-
"persistence": "immortal",
|
|
26
|
-
"cleanup": "none"
|
|
27
|
-
}
|
|
28
|
-
}
|
|
@@ -1,98 +0,0 @@
|
|
|
1
|
-
"""
|
|
2
|
-
AuthManager: The Keyring.
|
|
3
|
-
Manages access to Private Repositories via Environment Variables.
|
|
4
|
-
|
|
5
|
-
Strategic Role:
|
|
6
|
-
- EXTERNAL CONFIG: Never stores secrets in Brain. Only maps URLs to Env Vars.
|
|
7
|
-
- INJECTION: Dynamically adds credentials to Git URLs for the Fetcher.
|
|
8
|
-
- SCOPING: defaults to 'oauth2' username for GitHub PATs.
|
|
9
|
-
"""
|
|
10
|
-
|
|
11
|
-
import os
|
|
12
|
-
import json
|
|
13
|
-
import logging
|
|
14
|
-
from typing import List, Optional
|
|
15
|
-
from pathlib import Path
|
|
16
|
-
from pydantic import BaseModel, Field
|
|
17
|
-
from urllib.parse import urlparse, urlunparse
|
|
18
|
-
|
|
19
|
-
logger = logging.getLogger("AUTH")
|
|
20
|
-
|
|
21
|
-
class PrivateSource(BaseModel):
|
|
22
|
-
domain: str = Field(..., description="Git Domain (e.g. github.com)")
|
|
23
|
-
org: Optional[str] = Field(None, description="Optional Organization Scope")
|
|
24
|
-
token_env: str = Field(..., description="Name of Env Var holding the Token")
|
|
25
|
-
username: str = Field("oauth2", description="Username for HTTP Basic Auth")
|
|
26
|
-
|
|
27
|
-
class Credentials(BaseModel):
|
|
28
|
-
username: str
|
|
29
|
-
token: str
|
|
30
|
-
|
|
31
|
-
class AuthManager:
|
|
32
|
-
def __init__(self, brain_path: Path):
|
|
33
|
-
self.brain_path = brain_path
|
|
34
|
-
self.config_path = brain_path / "config" / "auth.json"
|
|
35
|
-
|
|
36
|
-
self.sources: List[PrivateSource] = []
|
|
37
|
-
self._load_config()
|
|
38
|
-
|
|
39
|
-
def _load_config(self):
|
|
40
|
-
if self.config_path.exists():
|
|
41
|
-
try:
|
|
42
|
-
data = json.loads(self.config_path.read_text())
|
|
43
|
-
for item in data.get("sources", []):
|
|
44
|
-
self.sources.append(PrivateSource(**item))
|
|
45
|
-
except Exception as e:
|
|
46
|
-
logger.error(f"Failed to load auth config: {e}")
|
|
47
|
-
|
|
48
|
-
def get_credentials(self, repo_url: str) -> Optional[Credentials]:
|
|
49
|
-
"""
|
|
50
|
-
Match URL against configured sources to find credentials.
|
|
51
|
-
"""
|
|
52
|
-
parsed = urlparse(repo_url)
|
|
53
|
-
domain = parsed.netloc
|
|
54
|
-
path = parsed.path.strip("/")
|
|
55
|
-
|
|
56
|
-
# Find best match
|
|
57
|
-
# 1. Match Domain + Org
|
|
58
|
-
for source in self.sources:
|
|
59
|
-
if source.domain == domain and source.org:
|
|
60
|
-
if path.startswith(source.org + "/"):
|
|
61
|
-
return self._resolve_env(source)
|
|
62
|
-
|
|
63
|
-
# 2. Match Domain Only
|
|
64
|
-
for source in self.sources:
|
|
65
|
-
if source.domain == domain and not source.org:
|
|
66
|
-
return self._resolve_env(source)
|
|
67
|
-
|
|
68
|
-
return None
|
|
69
|
-
|
|
70
|
-
def _resolve_env(self, source: PrivateSource) -> Optional[Credentials]:
|
|
71
|
-
token = os.environ.get(source.token_env)
|
|
72
|
-
if token:
|
|
73
|
-
return Credentials(username=source.username, token=token)
|
|
74
|
-
logger.warning(f"Auth configured for {source.domain} but {source.token_env} is missing.")
|
|
75
|
-
return None
|
|
76
|
-
|
|
77
|
-
def inject_credentials(self, repo_url: str) -> str:
|
|
78
|
-
"""
|
|
79
|
-
If credentials exist for this URL, inject them into the URL string.
|
|
80
|
-
Returns original URL if no creds found.
|
|
81
|
-
"""
|
|
82
|
-
creds = self.get_credentials(repo_url)
|
|
83
|
-
if not creds:
|
|
84
|
-
return repo_url
|
|
85
|
-
|
|
86
|
-
parsed = urlparse(repo_url)
|
|
87
|
-
|
|
88
|
-
# Reconstruct with auth
|
|
89
|
-
# netloc = username:password@hostname
|
|
90
|
-
netloc = f"{creds.username}:{creds.token}@{parsed.hostname}"
|
|
91
|
-
|
|
92
|
-
# Handle port if present
|
|
93
|
-
if parsed.port:
|
|
94
|
-
netloc += f":{parsed.port}"
|
|
95
|
-
|
|
96
|
-
# Replace netloc
|
|
97
|
-
new_parsed = parsed._replace(netloc=netloc)
|
|
98
|
-
return urlunparse(new_parsed)
|