endorlabs 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.
- endorlabs/__init__.py +202 -0
- endorlabs/_version.py +24 -0
- endorlabs/agent_knowledge/INDEX.md +116 -0
- endorlabs/agent_knowledge/MANIFEST.json +358 -0
- endorlabs/agent_knowledge/__init__.py +94 -0
- endorlabs/agent_knowledge/contracts/canonical-naming.md +16 -0
- endorlabs/agent_knowledge/contracts/dependency-metadata.md +29 -0
- endorlabs/agent_knowledge/contracts/errors-and-auth.md +34 -0
- endorlabs/agent_knowledge/contracts/list-parameters.md +57 -0
- endorlabs/agent_knowledge/rules/endor-changelog.md +90 -0
- endorlabs/agent_knowledge/rules/endor-list-query-performance.md +47 -0
- endorlabs/agent_knowledge/rules/endor-local-context.md +39 -0
- endorlabs/agent_knowledge/rules/endor-namespace-scoping.md +45 -0
- endorlabs/agent_knowledge/rules/endor-portable-examples.md +40 -0
- endorlabs/agent_knowledge/rules/endor-workflow-composition.md +69 -0
- endorlabs/agent_knowledge/rules/endor-workspace-layout.md +56 -0
- endorlabs/agent_knowledge/skills/endor-custom-sast-rules/AUTHORING.md +311 -0
- endorlabs/agent_knowledge/skills/endor-custom-sast-rules/IMPORT_EXPORT.md +453 -0
- endorlabs/agent_knowledge/skills/endor-custom-sast-rules/SEMGREP_RULE_SHAPE_GUARDRAILS.md +60 -0
- endorlabs/agent_knowledge/skills/endor-custom-sast-rules/SKILL.md +113 -0
- endorlabs/agent_knowledge/skills/endor-custom-sast-rules/SYNTAX_REFERENCE.md +411 -0
- endorlabs/agent_knowledge/skills/endor-custom-sast-rules/scripts/sast_rule_manager.py +1014 -0
- endorlabs/agent_knowledge/skills/endor-dependency-finding-provenance/SKILL.md +191 -0
- endorlabs/agent_knowledge/skills/endor-dependency-provenance/SKILL.md +65 -0
- endorlabs/agent_knowledge/skills/endor-fetch-and-search-call-graph/CALL_GRAPH_FORMAT_AND_SEARCH.md +102 -0
- endorlabs/agent_knowledge/skills/endor-fetch-and-search-call-graph/SKILL.md +113 -0
- endorlabs/agent_knowledge/skills/endor-implement-sdk-resource/SKILL.md +66 -0
- endorlabs/agent_knowledge/skills/endor-model-sync-drift/SKILL.md +85 -0
- endorlabs/agent_knowledge/skills/endor-namespace-relationship-map/SKILL.md +80 -0
- endorlabs/agent_knowledge/skills/endor-project-retrieval-bundle/MULTIPASS_LLM_CONTRACT.md +54 -0
- endorlabs/agent_knowledge/skills/endor-project-retrieval-bundle/SKILL.md +87 -0
- endorlabs/agent_knowledge/skills/endor-reachability-provenance/SKILL.md +169 -0
- endorlabs/agent_knowledge/skills/endor-reachability-provenance/examples.md +54 -0
- endorlabs/agent_knowledge/skills/endor-retrieve-scan-results/SKILL.md +179 -0
- endorlabs/agent_knowledge/skills/endor-sso-integration-validation-troubleshooting/README.md +14 -0
- endorlabs/agent_knowledge/skills/endor-sso-integration-validation-troubleshooting/SKILL.md +104 -0
- endorlabs/agent_knowledge/skills/endor-sso-integration-validation-troubleshooting/sso_access_spotcheck.py +315 -0
- endorlabs/agent_knowledge/skills/endor-troubleshoot-authlog/SKILL.md +68 -0
- endorlabs/agent_knowledge/skills/endor-troubleshoot-sdk/KNOWN_ISSUES.md +172 -0
- endorlabs/agent_knowledge/skills/endor-troubleshoot-sdk/SKILL.md +117 -0
- endorlabs/agent_knowledge/skills/endor-troubleshooting-scans/SKILL.md +180 -0
- endorlabs/agent_knowledge/skills/endor-validate-policy/API.md +106 -0
- endorlabs/agent_knowledge/skills/endor-validate-policy/ENDORCTL.md +45 -0
- endorlabs/agent_knowledge/skills/endor-validate-policy/SKILL.md +151 -0
- endorlabs/agent_knowledge/workflows/entries.json +84 -0
- endorlabs/agent_knowledge/workflows/index.md +16 -0
- endorlabs/api_client.py +1636 -0
- endorlabs/auth_server.py +256 -0
- endorlabs/client_surface.py +207 -0
- endorlabs/client_surface.pyi +1050 -0
- endorlabs/context/__init__.py +150 -0
- endorlabs/context/_maintainer_refresh.py +148 -0
- endorlabs/context/_project_context.py +22 -0
- endorlabs/context/_sync.py +1226 -0
- endorlabs/context/cli.py +148 -0
- endorlabs/context/models.py +66 -0
- endorlabs/context/paths.py +136 -0
- endorlabs/core/__init__.py +38 -0
- endorlabs/core/exceptions.py +218 -0
- endorlabs/core/filter.py +352 -0
- endorlabs/core/types.py +298 -0
- endorlabs/facade.py +1279 -0
- endorlabs/generated/README.md +42 -0
- endorlabs/generated/__init__.py +1 -0
- endorlabs/generated/create_convenience.py +602 -0
- endorlabs/generated/models/__init__.py +1 -0
- endorlabs/generated/models/a_i_sast_customer_context_service.py +479 -0
- endorlabs/generated/models/a_p_i_key_service.py +598 -0
- endorlabs/generated/models/a_p_i_key_validator_service.py +489 -0
- endorlabs/generated/models/artifact_signature_service.py +616 -0
- endorlabs/generated/models/audit_log_service.py +599 -0
- endorlabs/generated/models/authentication_log_service.py +465 -0
- endorlabs/generated/models/authentication_service.py +320 -0
- endorlabs/generated/models/authorization_policy_service.py +612 -0
- endorlabs/generated/models/batch_file_segments_service.py +550 -0
- endorlabs/generated/models/batch_notification_service.py +809 -0
- endorlabs/generated/models/call_graph_data_service.py +494 -0
- endorlabs/generated/models/code_owners_service.py +462 -0
- endorlabs/generated/models/dependency_metadata_service.py +957 -0
- endorlabs/generated/models/endor.py +675 -0
- endorlabs/generated/models/endor_ignore_entry_service.py +750 -0
- endorlabs/generated/models/exporter_service.py +623 -0
- endorlabs/generated/models/finding_log_service.py +859 -0
- endorlabs/generated/models/finding_service.py +6706 -0
- endorlabs/generated/models/hugging_face_model_service.py +618 -0
- endorlabs/generated/models/hugging_face_organization_service.py +420 -0
- endorlabs/generated/models/i_p_address_policy_service.py +463 -0
- endorlabs/generated/models/identity_provider_service.py +533 -0
- endorlabs/generated/models/installation_service.py +909 -0
- endorlabs/generated/models/invitation_service.py +438 -0
- endorlabs/generated/models/license_dependency_service.py +495 -0
- endorlabs/generated/models/license_notices_report_service.py +419 -0
- endorlabs/generated/models/license_summary_service.py +492 -0
- endorlabs/generated/models/linter_result_service.py +2139 -0
- endorlabs/generated/models/malware_service.py +3059 -0
- endorlabs/generated/models/metric.py +5346 -0
- endorlabs/generated/models/metric_service.py +5460 -0
- endorlabs/generated/models/namespace_service.py +490 -0
- endorlabs/generated/models/notification_service.py +840 -0
- endorlabs/generated/models/notification_target_service.py +937 -0
- endorlabs/generated/models/on_prem_scheduler_service.py +559 -0
- endorlabs/generated/models/p_r_comment_config_service.py +509 -0
- endorlabs/generated/models/package_firewall_log_service.py +597 -0
- endorlabs/generated/models/package_license_override_service.py +716 -0
- endorlabs/generated/models/package_license_query_service.py +676 -0
- endorlabs/generated/models/package_license_service.py +964 -0
- endorlabs/generated/models/package_manager_service.py +1023 -0
- endorlabs/generated/models/package_version_service.py +2894 -0
- endorlabs/generated/models/plugin_binary_service.py +443 -0
- endorlabs/generated/models/policy_service.py +1032 -0
- endorlabs/generated/models/policy_template_service.py +854 -0
- endorlabs/generated/models/project_service.py +807 -0
- endorlabs/generated/models/provisioning_result_service.py +1137 -0
- endorlabs/generated/models/query_malware_service.py +3123 -0
- endorlabs/generated/models/query_service.py +916 -0
- endorlabs/generated/models/query_similar_packages_service.py +399 -0
- endorlabs/generated/models/query_vulnerability_service.py +2404 -0
- endorlabs/generated/models/registry_ingestion_checkpoint_service.py +581 -0
- endorlabs/generated/models/repository_service.py +770 -0
- endorlabs/generated/models/repository_version_service.py +691 -0
- endorlabs/generated/models/rule_set_import_service.py +553 -0
- endorlabs/generated/models/s_b_o_m_export_service.py +420 -0
- endorlabs/generated/models/s_b_o_m_import_service.py +663 -0
- endorlabs/generated/models/s_c_m_credential_service.py +580 -0
- endorlabs/generated/models/saved_query_service.py +1104 -0
- endorlabs/generated/models/scan_log_request_service.py +442 -0
- endorlabs/generated/models/scan_profile_service.py +859 -0
- endorlabs/generated/models/scan_result_service.py +1644 -0
- endorlabs/generated/models/scan_workflow_result_service.py +817 -0
- endorlabs/generated/models/scan_workflow_service.py +694 -0
- endorlabs/generated/models/secret_rule_service.py +937 -0
- endorlabs/generated/models/semgrep_rule_service.py +796 -0
- endorlabs/generated/models/system_config_service.py +1016 -0
- endorlabs/generated/models/tenant_service.py +454 -0
- endorlabs/generated/models/v_e_x_export_service.py +401 -0
- endorlabs/generated/models/vector.py +346 -0
- endorlabs/generated/models/vector_store_service.py +471 -0
- endorlabs/generated/models/version_upgrade_service.py +7484 -0
- endorlabs/generated/models/vulnerability_service.py +2327 -0
- endorlabs/generated/registry_contract.py +3096 -0
- endorlabs/generated/resource_index.json +475 -0
- endorlabs/models/__init__.py +29 -0
- endorlabs/models/base.py +616 -0
- endorlabs/models/exception_config.py +23 -0
- endorlabs/models/field_aliases.py +8 -0
- endorlabs/models/finding_config.py +29 -0
- endorlabs/models/notification_config.py +31 -0
- endorlabs/operations/__init__.py +961 -0
- endorlabs/py.typed +0 -0
- endorlabs/registry.py +371 -0
- endorlabs/registry_overlay.py +73 -0
- endorlabs/resources/__init__.py +78 -0
- endorlabs/resources/api_key.py +220 -0
- endorlabs/resources/audit_log.py +254 -0
- endorlabs/resources/authentication_log.py +94 -0
- endorlabs/resources/authorization_policy.py +456 -0
- endorlabs/resources/code_owners.py +103 -0
- endorlabs/resources/dependency_metadata.py +63 -0
- endorlabs/resources/endor_license.py +137 -0
- endorlabs/resources/finding.py +878 -0
- endorlabs/resources/finding_log.py +482 -0
- endorlabs/resources/installation.py +511 -0
- endorlabs/resources/invitation.py +91 -0
- endorlabs/resources/linter_result.py +472 -0
- endorlabs/resources/malware.py +134 -0
- endorlabs/resources/metric.py +191 -0
- endorlabs/resources/namespace.py +229 -0
- endorlabs/resources/notification_target.py +161 -0
- endorlabs/resources/package_license.py +270 -0
- endorlabs/resources/package_version.py +515 -0
- endorlabs/resources/policy.py +434 -0
- endorlabs/resources/policy_template.py +89 -0
- endorlabs/resources/pr_comment_config.py +122 -0
- endorlabs/resources/project.py +554 -0
- endorlabs/resources/query_malware.py +125 -0
- endorlabs/resources/query_vulnerability.py +136 -0
- endorlabs/resources/repository.py +315 -0
- endorlabs/resources/repository_version.py +211 -0
- endorlabs/resources/scan_log_request.py +337 -0
- endorlabs/resources/scan_profile.py +448 -0
- endorlabs/resources/scan_result.py +577 -0
- endorlabs/resources/scan_workflow.py +68 -0
- endorlabs/resources/scan_workflow_result.py +61 -0
- endorlabs/resources/semgrep_rule.py +666 -0
- endorlabs/resources/vector_store.py +70 -0
- endorlabs/resources/vector_store_query.py +119 -0
- endorlabs/resources/version_upgrade.py +144 -0
- endorlabs/resources/vulnerability.py +148 -0
- endorlabs/tools/__init__.py +19 -0
- endorlabs/tools/dependency_explorer.py +88 -0
- endorlabs/tools/list_sharding.py +110 -0
- endorlabs/utils/__init__.py +20 -0
- endorlabs/utils/api_pagination.py +60 -0
- endorlabs/utils/artifact_io.py +36 -0
- endorlabs/utils/create_payload.py +158 -0
- endorlabs/utils/logging_config.py +87 -0
- endorlabs/utils/model_validation.py +345 -0
- endorlabs/utils/namespace.py +34 -0
- endorlabs/utils/parallel.py +122 -0
- endorlabs/utils/path_safety.py +65 -0
- endorlabs/utils/polling.py +54 -0
- endorlabs/utils/redaction.py +182 -0
- endorlabs/utils/schema_drift.py +136 -0
- endorlabs/utils/tabular.py +30 -0
- endorlabs/workflows/__init__.py +24 -0
- endorlabs/workflows/agent_context/__init__.py +57 -0
- endorlabs/workflows/agent_context/cli.py +14 -0
- endorlabs/workflows/agent_context/export.py +556 -0
- endorlabs/workflows/agent_context/hydration.py +388 -0
- endorlabs/workflows/agent_context/package_versions.py +175 -0
- endorlabs/workflows/agent_context/session_artifacts.py +715 -0
- endorlabs/workflows/callgraph/__init__.py +13 -0
- endorlabs/workflows/callgraph/decoded.py +51 -0
- endorlabs/workflows/callgraph/fetch.py +195 -0
- endorlabs/workflows/callgraph/proto_decode.py +461 -0
- endorlabs/workflows/callgraph/render.py +262 -0
- endorlabs/workflows/callgraph/search.py +135 -0
- endorlabs/workflows/callgraph/sweep.py +91 -0
- endorlabs/workflows/common.py +129 -0
- endorlabs/workflows/dependencies/__init__.py +15 -0
- endorlabs/workflows/dependencies/bom_graph.py +121 -0
- endorlabs/workflows/dependencies/coordinates.py +15 -0
- endorlabs/workflows/dependencies/metadata_fetch.py +84 -0
- endorlabs/workflows/dependencies/reports.py +141 -0
- endorlabs/workflows/dependencies/types.py +47 -0
- endorlabs/workflows/estate/__init__.py +55 -0
- endorlabs/workflows/estate/analyze/cardinality/columns.py +46 -0
- endorlabs/workflows/estate/analyze/cardinality/export.py +861 -0
- endorlabs/workflows/estate/analyze/cardinality/group_list.py +160 -0
- endorlabs/workflows/estate/analyze/cardinality/remediation.py +218 -0
- endorlabs/workflows/estate/analyze/cardinality/tabular.py +316 -0
- endorlabs/workflows/estate/analyze/cardinality/types.py +66 -0
- endorlabs/workflows/estate/analyze/compile_graph/community_detection.py +352 -0
- endorlabs/workflows/estate/analyze/compile_graph/disk_build.py +202 -0
- endorlabs/workflows/estate/analyze/compile_graph/enrich.py +352 -0
- endorlabs/workflows/estate/analyze/compile_graph/pipeline.py +578 -0
- endorlabs/workflows/estate/analyze/graph_metrics/analytics.py +234 -0
- endorlabs/workflows/estate/analyze/project_map/core.py +338 -0
- endorlabs/workflows/estate/analyze/project_map/map.py +115 -0
- endorlabs/workflows/estate/analyze/project_map/run.py +239 -0
- endorlabs/workflows/estate/analyze/risk/cardinality.py +502 -0
- endorlabs/workflows/estate/analyze/risk/consumer_counts.py +113 -0
- endorlabs/workflows/estate/analyze/risk/scoring.py +440 -0
- endorlabs/workflows/estate/analyze/workspace.py +143 -0
- endorlabs/workflows/estate/cli/__init__.py +7 -0
- endorlabs/workflows/estate/cli/main.py +294 -0
- endorlabs/workflows/estate/collect/__init__.py +50 -0
- endorlabs/workflows/estate/collect/benchmark.py +401 -0
- endorlabs/workflows/estate/collect/bounds.py +136 -0
- endorlabs/workflows/estate/collect/dependency_metadata.py +120 -0
- endorlabs/workflows/estate/collect/finding_loader.py +22 -0
- endorlabs/workflows/estate/collect/findings.py +164 -0
- endorlabs/workflows/estate/collect/namespaces.py +89 -0
- endorlabs/workflows/estate/collect/projects.py +106 -0
- endorlabs/workflows/estate/collect/runner.py +454 -0
- endorlabs/workflows/estate/collect/shards.py +24 -0
- endorlabs/workflows/estate/contracts/__init__.py +71 -0
- endorlabs/workflows/estate/contracts/ir_artifacts.py +18 -0
- endorlabs/workflows/estate/contracts/resources.py +72 -0
- endorlabs/workflows/estate/export/charts/compile_graph_viz.py +571 -0
- endorlabs/workflows/estate/export/charts/estate_dashboard.py +246 -0
- endorlabs/workflows/estate/export/summarize.py +194 -0
- endorlabs/workflows/estate/filters/__init__.py +23 -0
- endorlabs/workflows/estate/filters/main_context.py +15 -0
- endorlabs/workflows/estate/filters/masks.py +26 -0
- endorlabs/workflows/estate/workspace/__init__.py +50 -0
- endorlabs/workflows/estate/workspace/collect_manifest.py +420 -0
- endorlabs/workflows/estate/workspace/paths.py +107 -0
- endorlabs/workflows/findings/__init__.py +21 -0
- endorlabs/workflows/findings/triage.py +490 -0
- endorlabs/workflows/notifications/__init__.py +17 -0
- endorlabs/workflows/notifications/notification_setup.py +331 -0
- endorlabs/workflows/platform/__init__.py +25 -0
- endorlabs/workflows/platform/platform_setup.py +282 -0
- endorlabs/workflows/policies/__init__.py +21 -0
- endorlabs/workflows/policies/__main__.py +8 -0
- endorlabs/workflows/policies/validate.py +322 -0
- endorlabs/workflows/projects/__init__.py +7 -0
- endorlabs/workflows/projects/resolve.py +82 -0
- endorlabs/workflows/reachability/__init__.py +5 -0
- endorlabs/workflows/reachability/cli.py +95 -0
- endorlabs/workflows/reachability/context.py +395 -0
- endorlabs/workflows/reachability/resolve.py +91 -0
- endorlabs/workflows/reachability/stitch.py +93 -0
- endorlabs/workflows/semgrep/__init__.py +27 -0
- endorlabs/workflows/semgrep/inventory.py +178 -0
- endorlabs/workflows/semgrep/rules.py +578 -0
- endorlabs/workflows/troubleshooting_scans/__init__.py +29 -0
- endorlabs/workflows/troubleshooting_scans/common.py +501 -0
- endorlabs/workflows/troubleshooting_scans/diff_scans.py +145 -0
- endorlabs/workflows/troubleshooting_scans/fetch_scan_logs.py +131 -0
- endorlabs/workflows/troubleshooting_scans/fetch_scan_results.py +171 -0
- endorlabs/workflows/troubleshooting_scans/pull_scan_logs.py +326 -0
- endorlabs/workflows/troubleshooting_scans/pull_scan_results.py +148 -0
- endorlabs/workflows/troubleshooting_scans/resolve_projects.py +85 -0
- endorlabs/workflows/troubleshooting_scans/run_troubleshooting_workflow.py +147 -0
- endorlabs/workflows/troubleshooting_scans/scan_logs.py +118 -0
- endorlabs/workflows/troubleshooting_scans/search_projects.py +263 -0
- endorlabs/workflows/troubleshooting_scans/search_scan_errors.py +224 -0
- endorlabs/workflows/troubleshooting_scans/select_anomalous_scans.py +157 -0
- endorlabs/workflows/troubleshooting_scans/summarize_scan_triage.py +546 -0
- endorlabs-0.2.0.dist-info/METADATA +232 -0
- endorlabs-0.2.0.dist-info/RECORD +306 -0
- endorlabs-0.2.0.dist-info/WHEEL +4 -0
- endorlabs-0.2.0.dist-info/entry_points.txt +7 -0
- endorlabs-0.2.0.dist-info/licenses/LICENSE +21 -0
endorlabs/__init__.py
ADDED
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
"""Endor Labs SDK.
|
|
2
|
+
|
|
3
|
+
A Python SDK for the Endor Labs platform.
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
from __future__ import annotations
|
|
7
|
+
|
|
8
|
+
from pathlib import Path
|
|
9
|
+
from typing import TYPE_CHECKING, Any, Literal
|
|
10
|
+
|
|
11
|
+
from .api_client import APIClient
|
|
12
|
+
from .client_surface import Client
|
|
13
|
+
from .core.exceptions import (
|
|
14
|
+
AmbiguousError,
|
|
15
|
+
ConflictError,
|
|
16
|
+
EndorAPIError,
|
|
17
|
+
MethodNotSupportedError,
|
|
18
|
+
NotFoundError,
|
|
19
|
+
PermissionDeniedError,
|
|
20
|
+
RateLimitError,
|
|
21
|
+
ServerError,
|
|
22
|
+
UnauthorizedError,
|
|
23
|
+
ValidationError,
|
|
24
|
+
map_status_code_to_exception,
|
|
25
|
+
)
|
|
26
|
+
from .core.filter import F, FilterExpression
|
|
27
|
+
from .resources import (
|
|
28
|
+
dependency_metadata,
|
|
29
|
+
finding,
|
|
30
|
+
installation,
|
|
31
|
+
linter_result,
|
|
32
|
+
malware,
|
|
33
|
+
metric,
|
|
34
|
+
namespace,
|
|
35
|
+
package_version,
|
|
36
|
+
policy,
|
|
37
|
+
project,
|
|
38
|
+
query_malware,
|
|
39
|
+
query_vulnerability,
|
|
40
|
+
repository,
|
|
41
|
+
repository_version,
|
|
42
|
+
vulnerability,
|
|
43
|
+
)
|
|
44
|
+
|
|
45
|
+
if TYPE_CHECKING:
|
|
46
|
+
from .context.models import InitStatus
|
|
47
|
+
|
|
48
|
+
try:
|
|
49
|
+
from endorlabs._version import __version__ # generated by hatch-vcs
|
|
50
|
+
except ImportError: # editable install or no build
|
|
51
|
+
__version__ = "0.0.0.dev0"
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
def agent_knowledge_dir() -> Path:
|
|
55
|
+
"""Return site-packages path to the shipped agent knowledge package."""
|
|
56
|
+
from .agent_knowledge import agent_knowledge_dir as _agent_knowledge_dir
|
|
57
|
+
|
|
58
|
+
return _agent_knowledge_dir()
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
def agent_knowledge_index_path() -> Path:
|
|
62
|
+
"""Return path to Tier-0 INDEX.md in the shipped agent knowledge package."""
|
|
63
|
+
from .agent_knowledge import (
|
|
64
|
+
agent_knowledge_index_path as _agent_knowledge_index_path,
|
|
65
|
+
)
|
|
66
|
+
|
|
67
|
+
return _agent_knowledge_index_path()
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
def agent_knowledge_manifest() -> dict[str, Any]:
|
|
71
|
+
"""Parse MANIFEST.json from the shipped agent knowledge package."""
|
|
72
|
+
from .agent_knowledge import agent_knowledge_manifest as _agent_knowledge_manifest
|
|
73
|
+
|
|
74
|
+
return _agent_knowledge_manifest()
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
def agent_knowledge_rule_ids() -> list[str]:
|
|
78
|
+
"""Return bootstrap rule ids from the shipped agent knowledge manifest."""
|
|
79
|
+
from .agent_knowledge import agent_knowledge_rule_ids as _agent_knowledge_rule_ids
|
|
80
|
+
|
|
81
|
+
return _agent_knowledge_rule_ids()
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
def agent_knowledge_bootstrap_paths() -> list[Path]:
|
|
85
|
+
"""Return INDEX.md and bootstrap rule paths for harness injection."""
|
|
86
|
+
from .agent_knowledge import (
|
|
87
|
+
agent_knowledge_bootstrap_paths as _agent_knowledge_bootstrap_paths,
|
|
88
|
+
)
|
|
89
|
+
|
|
90
|
+
return _agent_knowledge_bootstrap_paths()
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
def init(
|
|
94
|
+
output_dir: str | Path = ".endorlabs-context",
|
|
95
|
+
include_openapi: bool = False,
|
|
96
|
+
include_user_docs: bool = False,
|
|
97
|
+
include_agent_knowledge: bool = True,
|
|
98
|
+
max_pages: int | None = None,
|
|
99
|
+
force: bool = False,
|
|
100
|
+
sync_skills: Literal["none", "cursor", "claude", "both"] = "none",
|
|
101
|
+
client: APIClient | None = None,
|
|
102
|
+
) -> InitStatus:
|
|
103
|
+
"""Bootstrap Endor Labs context for agentic workflows.
|
|
104
|
+
|
|
105
|
+
By default, ``init()`` materializes agent knowledge under ``sdk/``. Pass explicit
|
|
106
|
+
flags to download platform context or mirror skills.
|
|
107
|
+
|
|
108
|
+
Args:
|
|
109
|
+
output_dir: Directory to save context files (default: .endorlabs-context).
|
|
110
|
+
include_openapi: Download OpenAPI spec (default: False).
|
|
111
|
+
include_user_docs: Download user documentation (default: False).
|
|
112
|
+
include_agent_knowledge: Materialize agent knowledge to sdk/ (default: True).
|
|
113
|
+
max_pages: Maximum number of user doc pages to download (default: all).
|
|
114
|
+
force: Force re-download even if files exist (default: False).
|
|
115
|
+
sync_skills: Mirror skills into runtime discovery directories.
|
|
116
|
+
client: Optional APIClient instance for OpenAPI download.
|
|
117
|
+
|
|
118
|
+
Returns:
|
|
119
|
+
InitStatus with paths to materialized and downloaded files.
|
|
120
|
+
|
|
121
|
+
Raises:
|
|
122
|
+
UnauthorizedError: If OpenAPI authentication fails.
|
|
123
|
+
ImportError: If context dependencies are not installed (for user docs).
|
|
124
|
+
Install with: pip install endorlabs[docs]
|
|
125
|
+
|
|
126
|
+
Example::
|
|
127
|
+
|
|
128
|
+
>>> import endorlabs
|
|
129
|
+
>>> status = endorlabs.init()
|
|
130
|
+
>>> print(status.agent_knowledge_path)
|
|
131
|
+
.endorlabs-context/sdk
|
|
132
|
+
|
|
133
|
+
"""
|
|
134
|
+
from .context import _sync
|
|
135
|
+
|
|
136
|
+
return _sync.init(
|
|
137
|
+
output_dir=output_dir,
|
|
138
|
+
include_openapi=include_openapi,
|
|
139
|
+
include_user_docs=include_user_docs,
|
|
140
|
+
include_agent_knowledge=include_agent_knowledge,
|
|
141
|
+
max_pages=max_pages,
|
|
142
|
+
force=force,
|
|
143
|
+
sync_skills=sync_skills,
|
|
144
|
+
client=client,
|
|
145
|
+
)
|
|
146
|
+
|
|
147
|
+
|
|
148
|
+
def sync_agent_skills(
|
|
149
|
+
*,
|
|
150
|
+
repo_root: str | Path = ".",
|
|
151
|
+
target: Literal["none", "cursor", "claude", "both"] = "none",
|
|
152
|
+
source_dir: str | Path | None = None,
|
|
153
|
+
) -> dict[str, Path]:
|
|
154
|
+
"""Mirror ``endor-*`` skills into runtime discovery directories."""
|
|
155
|
+
from .context import _sync
|
|
156
|
+
|
|
157
|
+
return _sync.sync_agent_skills(
|
|
158
|
+
repo_root=repo_root,
|
|
159
|
+
target=target,
|
|
160
|
+
source_dir=source_dir,
|
|
161
|
+
)
|
|
162
|
+
|
|
163
|
+
|
|
164
|
+
__all__ = [
|
|
165
|
+
"APIClient",
|
|
166
|
+
"AmbiguousError",
|
|
167
|
+
"Client",
|
|
168
|
+
"ConflictError",
|
|
169
|
+
"EndorAPIError",
|
|
170
|
+
"F",
|
|
171
|
+
"FilterExpression",
|
|
172
|
+
"MethodNotSupportedError",
|
|
173
|
+
"NotFoundError",
|
|
174
|
+
"PermissionDeniedError",
|
|
175
|
+
"RateLimitError",
|
|
176
|
+
"ServerError",
|
|
177
|
+
"UnauthorizedError",
|
|
178
|
+
"ValidationError",
|
|
179
|
+
"agent_knowledge_bootstrap_paths",
|
|
180
|
+
"agent_knowledge_dir",
|
|
181
|
+
"agent_knowledge_index_path",
|
|
182
|
+
"agent_knowledge_manifest",
|
|
183
|
+
"agent_knowledge_rule_ids",
|
|
184
|
+
"dependency_metadata",
|
|
185
|
+
"finding",
|
|
186
|
+
"init",
|
|
187
|
+
"installation",
|
|
188
|
+
"linter_result",
|
|
189
|
+
"malware",
|
|
190
|
+
"map_status_code_to_exception",
|
|
191
|
+
"metric",
|
|
192
|
+
"namespace",
|
|
193
|
+
"package_version",
|
|
194
|
+
"policy",
|
|
195
|
+
"project",
|
|
196
|
+
"query_malware",
|
|
197
|
+
"query_vulnerability",
|
|
198
|
+
"repository",
|
|
199
|
+
"repository_version",
|
|
200
|
+
"sync_agent_skills",
|
|
201
|
+
"vulnerability",
|
|
202
|
+
]
|
endorlabs/_version.py
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# file generated by vcs-versioning
|
|
2
|
+
# don't change, don't track in version control
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
__all__ = [
|
|
6
|
+
"__version__",
|
|
7
|
+
"__version_tuple__",
|
|
8
|
+
"version",
|
|
9
|
+
"version_tuple",
|
|
10
|
+
"__commit_id__",
|
|
11
|
+
"commit_id",
|
|
12
|
+
]
|
|
13
|
+
|
|
14
|
+
version: str
|
|
15
|
+
__version__: str
|
|
16
|
+
__version_tuple__: tuple[int | str, ...]
|
|
17
|
+
version_tuple: tuple[int | str, ...]
|
|
18
|
+
commit_id: str | None
|
|
19
|
+
__commit_id__: str | None
|
|
20
|
+
|
|
21
|
+
__version__ = version = '0.2.0'
|
|
22
|
+
__version_tuple__ = version_tuple = (0, 2, 0)
|
|
23
|
+
|
|
24
|
+
__commit_id__ = commit_id = None
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
# Endor Labs SDK — Agent Index (Tier 0)
|
|
2
|
+
|
|
3
|
+
Shipped with `endorlabs` inside the wheel. **`endorlabs.init()` is optional** — use
|
|
4
|
+
`agent_knowledge_index_path()` to read this file from site-packages, or materialize under
|
|
5
|
+
`.endorlabs-context/sdk/` when a cwd-relative tree is needed.
|
|
6
|
+
|
|
7
|
+
## Quick start
|
|
8
|
+
|
|
9
|
+
**Wheel-only** (no disk materialization):
|
|
10
|
+
|
|
11
|
+
```python
|
|
12
|
+
import endorlabs
|
|
13
|
+
|
|
14
|
+
print(endorlabs.agent_knowledge_index_path())
|
|
15
|
+
manifest = endorlabs.agent_knowledge_manifest()
|
|
16
|
+
paths = endorlabs.agent_knowledge_bootstrap_paths() # INDEX + bootstrap rules
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
**Minimal bootstrap** (rules, contracts, skills; no auth):
|
|
20
|
+
|
|
21
|
+
```python
|
|
22
|
+
import endorlabs
|
|
23
|
+
|
|
24
|
+
status = endorlabs.init(include_openapi=False, include_user_docs=False)
|
|
25
|
+
# Read: status.agent_knowledge_index_path → .endorlabs-context/sdk/INDEX.md
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
**Full bootstrap** (agent knowledge + platform OpenAPI/user docs):
|
|
29
|
+
|
|
30
|
+
```python
|
|
31
|
+
pip install 'endorlabs[docs]'
|
|
32
|
+
import endorlabs
|
|
33
|
+
|
|
34
|
+
status = endorlabs.init(include_openapi=True, include_user_docs=True)
|
|
35
|
+
# Read: status.agent_knowledge_index_path
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## Authentication
|
|
39
|
+
|
|
40
|
+
Set credentials via environment (never commit secrets):
|
|
41
|
+
|
|
42
|
+
- `ENDOR_API_CREDENTIALS_KEY` + `ENDOR_API_CREDENTIALS_SECRET`, or
|
|
43
|
+
- `ENDOR_TOKEN` (browser refresh via maintainer tooling writes this only)
|
|
44
|
+
- Optional default namespace: `ENDOR_NAMESPACE`
|
|
45
|
+
|
|
46
|
+
Verify: `endorlabs.Client().whoami()`.
|
|
47
|
+
|
|
48
|
+
## Client basics
|
|
49
|
+
|
|
50
|
+
```python
|
|
51
|
+
import endorlabs
|
|
52
|
+
client = endorlabs.Client(tenant="tenant.namespace")
|
|
53
|
+
projects = client.Project.list(traverse=True, max_pages=2)
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
- Resource facades use **PascalCase**: `client.Project`, `client.Finding`, …
|
|
57
|
+
- Match `endorctl api … --resource <Kind>` vocabulary.
|
|
58
|
+
- `.get()` / `.lookup()` return typed models; `.list()` returns models unless `mask=` is set.
|
|
59
|
+
|
|
60
|
+
## Critical footguns
|
|
61
|
+
|
|
62
|
+
Read **`rules/`** (Tier 1 bootstrap) before project-scoped RCA.
|
|
63
|
+
|
|
64
|
+
1. **Ambiguous project URL:** `Project.lookup(name=…)` may raise `AmbiguousError`. Use
|
|
65
|
+
`Project.list(traverse=True)`, pass explicit namespace, or use project UUID.
|
|
66
|
+
2. **Project-scoped list namespace (MUST):** With `Client(tenant=<estate_root>)` and default
|
|
67
|
+
`traverse=False`, lists hit only that path segment—not child namespaces where projects live.
|
|
68
|
+
Resolve `Project` first, then pass **`namespace=project.namespace`** on `Finding`, `ScanResult`,
|
|
69
|
+
`PackageVersion`, `DependencyMetadata`, … Empty rows often mean wrong namespace, not missing data.
|
|
70
|
+
3. **Finding branch refs:** `spec.source_code_version.ref` may be a short branch label, not
|
|
71
|
+
`refs/heads/main`. List findings without branch filter first; narrow after inspecting stored refs.
|
|
72
|
+
4. **Tenant-wide scan cost:** `fetch_scan_results --all-projects` is O(projects × scans). Prefer
|
|
73
|
+
project-scoped RCA.
|
|
74
|
+
5. **List masks:** Non-empty `mask=` on `.list()` returns `dict` rows, not Pydantic models.
|
|
75
|
+
`lookup()` raises if mask is active—use `.list()` for masked rows.
|
|
76
|
+
6. **DependencyMetadata wire path:** List/group uses the **customer tenant namespace**, not the
|
|
77
|
+
literal `oss` plane. Field `spec.dependency_data.namespace == "oss"` is data semantics only.
|
|
78
|
+
7. **Workflow composition:** Extend workflow JSON/manifests before re-listing the API; escalate
|
|
79
|
+
CLI → library → `Client` → session script (see `rules/endor-workflow-composition.md`).
|
|
80
|
+
8. **Portable examples:** Use placeholders in docs; never commit customer estate identifiers
|
|
81
|
+
(`rules/endor-portable-examples.md`).
|
|
82
|
+
|
|
83
|
+
## Bootstrap (load for Endor SDK work)
|
|
84
|
+
|
|
85
|
+
Harnesses should prepend `agent_knowledge_bootstrap_paths()` (or read these rules first). In Cursor, `endor-namespace-scoping` and `endor-list-query-performance` are **always-on**; other bootstrap `endor-*.mdc` rules attach when path **globs** match (`src/endorlabs/**`, Python, `.endorlabs-context/`, etc.).
|
|
86
|
+
|
|
87
|
+
| Rule | Summary |
|
|
88
|
+
|------|---------|
|
|
89
|
+
| `endor-namespace-scoping` | Resolve Project; pass `namespace=project.namespace` on project-scoped lists |
|
|
90
|
+
| `endor-workspace-layout` | Session artifacts under `workspace/sessions/<user>/` |
|
|
91
|
+
| `endor-workflow-composition` | CLI → library → Client → session script; artifact-first |
|
|
92
|
+
| `endor-list-query-performance` | Do not set `page_size` unless asked |
|
|
93
|
+
| `endor-local-context` | Check gitignored `.endorlabs-context/` paths explicitly |
|
|
94
|
+
| `endor-portable-examples` | Placeholders only; no committed tenant/project UUID literals |
|
|
95
|
+
|
|
96
|
+
See `MANIFEST.json` → `bootstrap.rule_ids` for the machine-readable list.
|
|
97
|
+
|
|
98
|
+
## Workspace outputs
|
|
99
|
+
|
|
100
|
+
Session/triage debugging artifacts and temporary probe scripts belong under
|
|
101
|
+
`.endorlabs-context/workspace/sessions/<user>/` (not repo-root `.tmp/`). Project
|
|
102
|
+
bundles go under `workspace/projects/<uuid>/`. See `rules/endor-workspace-layout.md`.
|
|
103
|
+
|
|
104
|
+
## Read order
|
|
105
|
+
|
|
106
|
+
1. This file (Tier 0)
|
|
107
|
+
2. `MANIFEST.json` — rules, contracts, skills, workflow CLI index, `bootstrap` block
|
|
108
|
+
3. **`rules/*.md`** — harness bootstrap (always load)
|
|
109
|
+
4. **`contracts/*.md`** — normative SDK semantics on demand
|
|
110
|
+
5. **`skills/*/SKILL.md`** — task playbooks
|
|
111
|
+
6. `../platform/openapi/` and `../platform/user-docs/` — product/API reference (after `init()`)
|
|
112
|
+
7. `../workspace/` — your run outputs
|
|
113
|
+
|
|
114
|
+
## Maintainer docs (not shipped)
|
|
115
|
+
|
|
116
|
+
Repo-only: `CONTRIBUTORS.md`, `docs/contributing/`, `devtools/`. Clone the GitHub repo for those.
|