Files

366 lines
11 KiB
Python

"""Strict Agent Resources sharing existing controller/service owners.
Outer method decorators run before inherited parsing, sessions and services.
Legacy Resource authentication cannot grant this admission.
"""
# Flask-RESTX declares a mutable Resource decorator list; each subclass owns
# its own list. Tuple/ClassVar overrides conflict with that upstream contract.
from flask_restx import Resource
from controllers.inner_api import inner_api_ns
from controllers.inner_api.agent import files, llm, native_testing, tools
from controllers.inner_api.knowledge import retrieval
from controllers.inner_api.plugin import agent_config
from controllers.inner_api.wraps import AgentRuntimeRefused, agent_runtime_api_only
from libs.external_api import document_errors
@inner_api_ns.route("/agent/runtime/llm/invoke")
@inner_api_ns.doc(
security="AgentBearer",
params={
"X-Dify-Agent-Run": {
"in": "header",
"required": True,
"description": "Canonical base64url exact Run selection",
}
},
)
class AgentRuntimeLLMApi(llm.AgentLLMInvokeApi):
method_decorators = [agent_runtime_api_only("model")]
document_errors(AgentRuntimeLLMApi, AgentRuntimeRefused)
@inner_api_ns.route("/agent/runtime/tools/invoke")
@inner_api_ns.doc(
security="AgentBearer",
params={
"X-Dify-Agent-Run": {
"in": "header",
"required": True,
"description": "Canonical base64url exact Run selection",
}
},
)
class AgentRuntimeToolApi(tools.AgentToolInvokeApi):
method_decorators = [agent_runtime_api_only("core_tool")]
document_errors(AgentRuntimeToolApi, AgentRuntimeRefused)
@inner_api_ns.route("/agent/runtime/files/upload-request")
@inner_api_ns.doc(
security="AgentBearer",
params={
"X-Dify-Agent-Run": {
"in": "header",
"required": True,
"description": "Canonical base64url exact Run selection",
}
},
)
class AgentRuntimeUploadApi(files.AgentFileUploadRequestApi):
method_decorators = [agent_runtime_api_only("file_upload")]
document_errors(AgentRuntimeUploadApi, AgentRuntimeRefused)
@inner_api_ns.route("/agent/runtime/files/download-request")
@inner_api_ns.doc(
security="AgentBearer",
params={
"X-Dify-Agent-Run": {
"in": "header",
"required": True,
"description": "Canonical base64url exact Run selection",
}
},
)
class AgentRuntimeDownloadApi(files.AgentFileDownloadRequestApi):
method_decorators = [agent_runtime_api_only("file_download")]
document_errors(AgentRuntimeDownloadApi, AgentRuntimeRefused)
@inner_api_ns.route("/agent/runtime/knowledge/retrieve")
@inner_api_ns.doc(
security="AgentBearer",
params={
"X-Dify-Agent-Run": {
"in": "header",
"required": True,
"description": "Canonical base64url exact Run selection",
}
},
)
class AgentRuntimeKnowledgeApi(retrieval.InnerKnowledgeRetrieveApi):
method_decorators = [agent_runtime_api_only("knowledge")]
document_errors(AgentRuntimeKnowledgeApi, AgentRuntimeRefused)
@inner_api_ns.route("/agent/runtime/config/<string:agent_id>/manifest")
@inner_api_ns.doc(
security="AgentBearer",
params={
"X-Dify-Agent-Run": {
"in": "header",
"required": True,
"description": "Canonical base64url exact Run selection",
}
},
)
class AgentRuntimeConfigManifestApi(agent_config.AgentConfigManifestApi):
method_decorators = [agent_runtime_api_only("config")]
document_errors(AgentRuntimeConfigManifestApi, AgentRuntimeRefused)
@inner_api_ns.route("/agent/runtime/config/<string:agent_id>/download-request")
@inner_api_ns.doc(
security="AgentBearer",
params={
"X-Dify-Agent-Run": {
"in": "header",
"required": True,
"description": "Canonical base64url exact Run selection",
}
},
)
class AgentRuntimeConfigDownloadApi(agent_config.AgentConfigDownloadRequestApi):
method_decorators = [agent_runtime_api_only("config")]
document_errors(AgentRuntimeConfigDownloadApi, AgentRuntimeRefused)
@inner_api_ns.route("/agent/runtime/config/<string:agent_id>/skills/<string:name>/inspect")
@inner_api_ns.doc(
security="AgentBearer",
params={
"X-Dify-Agent-Run": {
"in": "header",
"required": True,
"description": "Canonical base64url exact Run selection",
}
},
)
class AgentRuntimeConfigSkillApi(agent_config.AgentConfigSkillInspectApi):
method_decorators = [agent_runtime_api_only("config")]
document_errors(AgentRuntimeConfigSkillApi, AgentRuntimeRefused)
@inner_api_ns.route("/agent/runtime/config/<string:agent_id>/push")
@inner_api_ns.doc(
security="AgentBearer",
params={
"X-Dify-Agent-Run": {
"in": "header",
"required": True,
"description": "Canonical base64url exact Run selection",
}
},
)
class AgentRuntimeConfigPushApi(agent_config.AgentConfigPushApi):
method_decorators = [agent_runtime_api_only("config")]
document_errors(AgentRuntimeConfigPushApi, AgentRuntimeRefused)
@inner_api_ns.route("/agent/runtime/config/<string:agent_id>/env")
@inner_api_ns.doc(
security="AgentBearer",
params={
"X-Dify-Agent-Run": {
"in": "header",
"required": True,
"description": "Canonical base64url exact Run selection",
}
},
)
class AgentRuntimeConfigEnvApi(agent_config.AgentConfigEnvApi):
method_decorators = [agent_runtime_api_only("config")]
document_errors(AgentRuntimeConfigEnvApi, AgentRuntimeRefused)
@inner_api_ns.route("/agent/runtime/config/<string:agent_id>/note")
@inner_api_ns.doc(
security="AgentBearer",
params={
"X-Dify-Agent-Run": {
"in": "header",
"required": True,
"description": "Canonical base64url exact Run selection",
}
},
)
class AgentRuntimeConfigNoteApi(agent_config.AgentConfigNoteApi):
method_decorators = [agent_runtime_api_only("config")]
document_errors(AgentRuntimeConfigNoteApi, AgentRuntimeRefused)
@inner_api_ns.route("/agent/runtime/native-testing/prepare-run")
@inner_api_ns.doc(
security="AgentBearer",
params={
"X-Dify-Agent-Run": {
"in": "header",
"required": True,
"description": "Canonical base64url exact Run selection",
}
},
)
class AgentRuntimeNativePrepareApi(native_testing.AgentNativePrepareRunApi):
method_decorators = [agent_runtime_api_only("prepare-run")]
document_errors(AgentRuntimeNativePrepareApi, AgentRuntimeRefused)
@inner_api_ns.route("/agent/runtime/native-testing/prepared-config")
@inner_api_ns.doc(
security="AgentBearer",
params={
"X-Dify-Agent-Run": {
"in": "header",
"required": True,
"description": "Canonical base64url exact Run selection",
}
},
)
class AgentRuntimeNativeConfigApi(native_testing.AgentNativePreparedConfigApi):
method_decorators = [agent_runtime_api_only("prepared-config")]
document_errors(AgentRuntimeNativeConfigApi, AgentRuntimeRefused)
@inner_api_ns.route("/agent/runtime/native-testing/before-call")
@inner_api_ns.doc(
security="AgentBearer",
params={
"X-Dify-Agent-Run": {
"in": "header",
"required": True,
"description": "Canonical base64url exact Run selection",
}
},
)
class AgentRuntimeNativeBeforeApi(native_testing.AgentNativeBeforeCallApi):
method_decorators = [agent_runtime_api_only("native-control")]
document_errors(AgentRuntimeNativeBeforeApi, AgentRuntimeRefused)
@inner_api_ns.route("/agent/runtime/native-testing/outcome")
@inner_api_ns.doc(
security="AgentBearer",
params={
"X-Dify-Agent-Run": {
"in": "header",
"required": True,
"description": "Canonical base64url exact Run selection",
}
},
)
class AgentRuntimeNativeOutcomeApi(native_testing.AgentNativeOutcomeApi):
method_decorators = [agent_runtime_api_only("native-settlement")]
document_errors(AgentRuntimeNativeOutcomeApi, AgentRuntimeRefused)
@inner_api_ns.route("/agent/runtime/native-testing/materialize")
@inner_api_ns.doc(
security="AgentBearer",
params={
"X-Dify-Agent-Run": {
"in": "header",
"required": True,
"description": "Canonical base64url exact Run selection",
}
},
)
class AgentRuntimeNativeMaterializeApi(native_testing.AgentNativeMaterializeApi):
method_decorators = [agent_runtime_api_only("native-control")]
document_errors(AgentRuntimeNativeMaterializeApi, AgentRuntimeRefused)
@inner_api_ns.route("/agent/runtime/native-testing/claim-dispatch")
@inner_api_ns.doc(
security="AgentBearer",
params={
"X-Dify-Agent-Run": {
"in": "header",
"required": True,
"description": "Canonical base64url exact Run selection",
}
},
)
class AgentRuntimeNativeClaimApi(Resource):
method_decorators = [agent_runtime_api_only("native-control")]
@inner_api_ns.expect(inner_api_ns.models[native_testing.AgentPhysicalDispatchPayload.__name__])
@inner_api_ns.response(
200, "Physical shell dispatch claimed", inner_api_ns.models[native_testing.AgentDispatchClaimResponse.__name__]
)
def post(self) -> dict[str, bool]:
"""Claim a runtime-authorized shell dispatch; refuse other operation kinds."""
from dify_agent.adapters.native_testing.client import AgentPhysicalDispatchPayload
from runtime_contracts.builder.execution import BuilderExecutionPolicyError
payload = native_testing._parse(AgentPhysicalDispatchPayload)
try:
if payload.intent.kind not in {"shell", "bootstrap"}:
raise BuilderExecutionPolicyError("native_agent_boundary_unavailable")
native_testing.agent_operations_for_ref(payload.ref).claim_shell_dispatch(envelope=payload)
except BuilderExecutionPolicyError:
raise native_testing.AgentNativeControlRefused() from None
return {"claimed": True}
document_errors(AgentRuntimeNativeClaimApi, AgentRuntimeRefused)
@inner_api_ns.route("/agent/runtime/native-testing/prepare-intent")
class AgentRuntimeNativeIntentApi(native_testing.AgentNativePrepareIntentApi):
method_decorators = [agent_runtime_api_only("native-control")]
document_errors(AgentRuntimeNativeIntentApi, AgentRuntimeRefused)
@inner_api_ns.route("/agent/runtime/native-testing/results")
class AgentRuntimeNativeStoreResultApi(native_testing.AgentNativeStoreResultApi):
method_decorators = [agent_runtime_api_only("native-settlement")]
document_errors(AgentRuntimeNativeStoreResultApi, AgentRuntimeRefused)
@inner_api_ns.route("/agent/runtime/native-testing/read-result")
class AgentRuntimeNativeReadResultApi(native_testing.AgentNativeReadResultApi):
method_decorators = [agent_runtime_api_only("native-result-read")]
document_errors(AgentRuntimeNativeReadResultApi, AgentRuntimeRefused)