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.
Files changed (306) hide show
  1. endorlabs/__init__.py +202 -0
  2. endorlabs/_version.py +24 -0
  3. endorlabs/agent_knowledge/INDEX.md +116 -0
  4. endorlabs/agent_knowledge/MANIFEST.json +358 -0
  5. endorlabs/agent_knowledge/__init__.py +94 -0
  6. endorlabs/agent_knowledge/contracts/canonical-naming.md +16 -0
  7. endorlabs/agent_knowledge/contracts/dependency-metadata.md +29 -0
  8. endorlabs/agent_knowledge/contracts/errors-and-auth.md +34 -0
  9. endorlabs/agent_knowledge/contracts/list-parameters.md +57 -0
  10. endorlabs/agent_knowledge/rules/endor-changelog.md +90 -0
  11. endorlabs/agent_knowledge/rules/endor-list-query-performance.md +47 -0
  12. endorlabs/agent_knowledge/rules/endor-local-context.md +39 -0
  13. endorlabs/agent_knowledge/rules/endor-namespace-scoping.md +45 -0
  14. endorlabs/agent_knowledge/rules/endor-portable-examples.md +40 -0
  15. endorlabs/agent_knowledge/rules/endor-workflow-composition.md +69 -0
  16. endorlabs/agent_knowledge/rules/endor-workspace-layout.md +56 -0
  17. endorlabs/agent_knowledge/skills/endor-custom-sast-rules/AUTHORING.md +311 -0
  18. endorlabs/agent_knowledge/skills/endor-custom-sast-rules/IMPORT_EXPORT.md +453 -0
  19. endorlabs/agent_knowledge/skills/endor-custom-sast-rules/SEMGREP_RULE_SHAPE_GUARDRAILS.md +60 -0
  20. endorlabs/agent_knowledge/skills/endor-custom-sast-rules/SKILL.md +113 -0
  21. endorlabs/agent_knowledge/skills/endor-custom-sast-rules/SYNTAX_REFERENCE.md +411 -0
  22. endorlabs/agent_knowledge/skills/endor-custom-sast-rules/scripts/sast_rule_manager.py +1014 -0
  23. endorlabs/agent_knowledge/skills/endor-dependency-finding-provenance/SKILL.md +191 -0
  24. endorlabs/agent_knowledge/skills/endor-dependency-provenance/SKILL.md +65 -0
  25. endorlabs/agent_knowledge/skills/endor-fetch-and-search-call-graph/CALL_GRAPH_FORMAT_AND_SEARCH.md +102 -0
  26. endorlabs/agent_knowledge/skills/endor-fetch-and-search-call-graph/SKILL.md +113 -0
  27. endorlabs/agent_knowledge/skills/endor-implement-sdk-resource/SKILL.md +66 -0
  28. endorlabs/agent_knowledge/skills/endor-model-sync-drift/SKILL.md +85 -0
  29. endorlabs/agent_knowledge/skills/endor-namespace-relationship-map/SKILL.md +80 -0
  30. endorlabs/agent_knowledge/skills/endor-project-retrieval-bundle/MULTIPASS_LLM_CONTRACT.md +54 -0
  31. endorlabs/agent_knowledge/skills/endor-project-retrieval-bundle/SKILL.md +87 -0
  32. endorlabs/agent_knowledge/skills/endor-reachability-provenance/SKILL.md +169 -0
  33. endorlabs/agent_knowledge/skills/endor-reachability-provenance/examples.md +54 -0
  34. endorlabs/agent_knowledge/skills/endor-retrieve-scan-results/SKILL.md +179 -0
  35. endorlabs/agent_knowledge/skills/endor-sso-integration-validation-troubleshooting/README.md +14 -0
  36. endorlabs/agent_knowledge/skills/endor-sso-integration-validation-troubleshooting/SKILL.md +104 -0
  37. endorlabs/agent_knowledge/skills/endor-sso-integration-validation-troubleshooting/sso_access_spotcheck.py +315 -0
  38. endorlabs/agent_knowledge/skills/endor-troubleshoot-authlog/SKILL.md +68 -0
  39. endorlabs/agent_knowledge/skills/endor-troubleshoot-sdk/KNOWN_ISSUES.md +172 -0
  40. endorlabs/agent_knowledge/skills/endor-troubleshoot-sdk/SKILL.md +117 -0
  41. endorlabs/agent_knowledge/skills/endor-troubleshooting-scans/SKILL.md +180 -0
  42. endorlabs/agent_knowledge/skills/endor-validate-policy/API.md +106 -0
  43. endorlabs/agent_knowledge/skills/endor-validate-policy/ENDORCTL.md +45 -0
  44. endorlabs/agent_knowledge/skills/endor-validate-policy/SKILL.md +151 -0
  45. endorlabs/agent_knowledge/workflows/entries.json +84 -0
  46. endorlabs/agent_knowledge/workflows/index.md +16 -0
  47. endorlabs/api_client.py +1636 -0
  48. endorlabs/auth_server.py +256 -0
  49. endorlabs/client_surface.py +207 -0
  50. endorlabs/client_surface.pyi +1050 -0
  51. endorlabs/context/__init__.py +150 -0
  52. endorlabs/context/_maintainer_refresh.py +148 -0
  53. endorlabs/context/_project_context.py +22 -0
  54. endorlabs/context/_sync.py +1226 -0
  55. endorlabs/context/cli.py +148 -0
  56. endorlabs/context/models.py +66 -0
  57. endorlabs/context/paths.py +136 -0
  58. endorlabs/core/__init__.py +38 -0
  59. endorlabs/core/exceptions.py +218 -0
  60. endorlabs/core/filter.py +352 -0
  61. endorlabs/core/types.py +298 -0
  62. endorlabs/facade.py +1279 -0
  63. endorlabs/generated/README.md +42 -0
  64. endorlabs/generated/__init__.py +1 -0
  65. endorlabs/generated/create_convenience.py +602 -0
  66. endorlabs/generated/models/__init__.py +1 -0
  67. endorlabs/generated/models/a_i_sast_customer_context_service.py +479 -0
  68. endorlabs/generated/models/a_p_i_key_service.py +598 -0
  69. endorlabs/generated/models/a_p_i_key_validator_service.py +489 -0
  70. endorlabs/generated/models/artifact_signature_service.py +616 -0
  71. endorlabs/generated/models/audit_log_service.py +599 -0
  72. endorlabs/generated/models/authentication_log_service.py +465 -0
  73. endorlabs/generated/models/authentication_service.py +320 -0
  74. endorlabs/generated/models/authorization_policy_service.py +612 -0
  75. endorlabs/generated/models/batch_file_segments_service.py +550 -0
  76. endorlabs/generated/models/batch_notification_service.py +809 -0
  77. endorlabs/generated/models/call_graph_data_service.py +494 -0
  78. endorlabs/generated/models/code_owners_service.py +462 -0
  79. endorlabs/generated/models/dependency_metadata_service.py +957 -0
  80. endorlabs/generated/models/endor.py +675 -0
  81. endorlabs/generated/models/endor_ignore_entry_service.py +750 -0
  82. endorlabs/generated/models/exporter_service.py +623 -0
  83. endorlabs/generated/models/finding_log_service.py +859 -0
  84. endorlabs/generated/models/finding_service.py +6706 -0
  85. endorlabs/generated/models/hugging_face_model_service.py +618 -0
  86. endorlabs/generated/models/hugging_face_organization_service.py +420 -0
  87. endorlabs/generated/models/i_p_address_policy_service.py +463 -0
  88. endorlabs/generated/models/identity_provider_service.py +533 -0
  89. endorlabs/generated/models/installation_service.py +909 -0
  90. endorlabs/generated/models/invitation_service.py +438 -0
  91. endorlabs/generated/models/license_dependency_service.py +495 -0
  92. endorlabs/generated/models/license_notices_report_service.py +419 -0
  93. endorlabs/generated/models/license_summary_service.py +492 -0
  94. endorlabs/generated/models/linter_result_service.py +2139 -0
  95. endorlabs/generated/models/malware_service.py +3059 -0
  96. endorlabs/generated/models/metric.py +5346 -0
  97. endorlabs/generated/models/metric_service.py +5460 -0
  98. endorlabs/generated/models/namespace_service.py +490 -0
  99. endorlabs/generated/models/notification_service.py +840 -0
  100. endorlabs/generated/models/notification_target_service.py +937 -0
  101. endorlabs/generated/models/on_prem_scheduler_service.py +559 -0
  102. endorlabs/generated/models/p_r_comment_config_service.py +509 -0
  103. endorlabs/generated/models/package_firewall_log_service.py +597 -0
  104. endorlabs/generated/models/package_license_override_service.py +716 -0
  105. endorlabs/generated/models/package_license_query_service.py +676 -0
  106. endorlabs/generated/models/package_license_service.py +964 -0
  107. endorlabs/generated/models/package_manager_service.py +1023 -0
  108. endorlabs/generated/models/package_version_service.py +2894 -0
  109. endorlabs/generated/models/plugin_binary_service.py +443 -0
  110. endorlabs/generated/models/policy_service.py +1032 -0
  111. endorlabs/generated/models/policy_template_service.py +854 -0
  112. endorlabs/generated/models/project_service.py +807 -0
  113. endorlabs/generated/models/provisioning_result_service.py +1137 -0
  114. endorlabs/generated/models/query_malware_service.py +3123 -0
  115. endorlabs/generated/models/query_service.py +916 -0
  116. endorlabs/generated/models/query_similar_packages_service.py +399 -0
  117. endorlabs/generated/models/query_vulnerability_service.py +2404 -0
  118. endorlabs/generated/models/registry_ingestion_checkpoint_service.py +581 -0
  119. endorlabs/generated/models/repository_service.py +770 -0
  120. endorlabs/generated/models/repository_version_service.py +691 -0
  121. endorlabs/generated/models/rule_set_import_service.py +553 -0
  122. endorlabs/generated/models/s_b_o_m_export_service.py +420 -0
  123. endorlabs/generated/models/s_b_o_m_import_service.py +663 -0
  124. endorlabs/generated/models/s_c_m_credential_service.py +580 -0
  125. endorlabs/generated/models/saved_query_service.py +1104 -0
  126. endorlabs/generated/models/scan_log_request_service.py +442 -0
  127. endorlabs/generated/models/scan_profile_service.py +859 -0
  128. endorlabs/generated/models/scan_result_service.py +1644 -0
  129. endorlabs/generated/models/scan_workflow_result_service.py +817 -0
  130. endorlabs/generated/models/scan_workflow_service.py +694 -0
  131. endorlabs/generated/models/secret_rule_service.py +937 -0
  132. endorlabs/generated/models/semgrep_rule_service.py +796 -0
  133. endorlabs/generated/models/system_config_service.py +1016 -0
  134. endorlabs/generated/models/tenant_service.py +454 -0
  135. endorlabs/generated/models/v_e_x_export_service.py +401 -0
  136. endorlabs/generated/models/vector.py +346 -0
  137. endorlabs/generated/models/vector_store_service.py +471 -0
  138. endorlabs/generated/models/version_upgrade_service.py +7484 -0
  139. endorlabs/generated/models/vulnerability_service.py +2327 -0
  140. endorlabs/generated/registry_contract.py +3096 -0
  141. endorlabs/generated/resource_index.json +475 -0
  142. endorlabs/models/__init__.py +29 -0
  143. endorlabs/models/base.py +616 -0
  144. endorlabs/models/exception_config.py +23 -0
  145. endorlabs/models/field_aliases.py +8 -0
  146. endorlabs/models/finding_config.py +29 -0
  147. endorlabs/models/notification_config.py +31 -0
  148. endorlabs/operations/__init__.py +961 -0
  149. endorlabs/py.typed +0 -0
  150. endorlabs/registry.py +371 -0
  151. endorlabs/registry_overlay.py +73 -0
  152. endorlabs/resources/__init__.py +78 -0
  153. endorlabs/resources/api_key.py +220 -0
  154. endorlabs/resources/audit_log.py +254 -0
  155. endorlabs/resources/authentication_log.py +94 -0
  156. endorlabs/resources/authorization_policy.py +456 -0
  157. endorlabs/resources/code_owners.py +103 -0
  158. endorlabs/resources/dependency_metadata.py +63 -0
  159. endorlabs/resources/endor_license.py +137 -0
  160. endorlabs/resources/finding.py +878 -0
  161. endorlabs/resources/finding_log.py +482 -0
  162. endorlabs/resources/installation.py +511 -0
  163. endorlabs/resources/invitation.py +91 -0
  164. endorlabs/resources/linter_result.py +472 -0
  165. endorlabs/resources/malware.py +134 -0
  166. endorlabs/resources/metric.py +191 -0
  167. endorlabs/resources/namespace.py +229 -0
  168. endorlabs/resources/notification_target.py +161 -0
  169. endorlabs/resources/package_license.py +270 -0
  170. endorlabs/resources/package_version.py +515 -0
  171. endorlabs/resources/policy.py +434 -0
  172. endorlabs/resources/policy_template.py +89 -0
  173. endorlabs/resources/pr_comment_config.py +122 -0
  174. endorlabs/resources/project.py +554 -0
  175. endorlabs/resources/query_malware.py +125 -0
  176. endorlabs/resources/query_vulnerability.py +136 -0
  177. endorlabs/resources/repository.py +315 -0
  178. endorlabs/resources/repository_version.py +211 -0
  179. endorlabs/resources/scan_log_request.py +337 -0
  180. endorlabs/resources/scan_profile.py +448 -0
  181. endorlabs/resources/scan_result.py +577 -0
  182. endorlabs/resources/scan_workflow.py +68 -0
  183. endorlabs/resources/scan_workflow_result.py +61 -0
  184. endorlabs/resources/semgrep_rule.py +666 -0
  185. endorlabs/resources/vector_store.py +70 -0
  186. endorlabs/resources/vector_store_query.py +119 -0
  187. endorlabs/resources/version_upgrade.py +144 -0
  188. endorlabs/resources/vulnerability.py +148 -0
  189. endorlabs/tools/__init__.py +19 -0
  190. endorlabs/tools/dependency_explorer.py +88 -0
  191. endorlabs/tools/list_sharding.py +110 -0
  192. endorlabs/utils/__init__.py +20 -0
  193. endorlabs/utils/api_pagination.py +60 -0
  194. endorlabs/utils/artifact_io.py +36 -0
  195. endorlabs/utils/create_payload.py +158 -0
  196. endorlabs/utils/logging_config.py +87 -0
  197. endorlabs/utils/model_validation.py +345 -0
  198. endorlabs/utils/namespace.py +34 -0
  199. endorlabs/utils/parallel.py +122 -0
  200. endorlabs/utils/path_safety.py +65 -0
  201. endorlabs/utils/polling.py +54 -0
  202. endorlabs/utils/redaction.py +182 -0
  203. endorlabs/utils/schema_drift.py +136 -0
  204. endorlabs/utils/tabular.py +30 -0
  205. endorlabs/workflows/__init__.py +24 -0
  206. endorlabs/workflows/agent_context/__init__.py +57 -0
  207. endorlabs/workflows/agent_context/cli.py +14 -0
  208. endorlabs/workflows/agent_context/export.py +556 -0
  209. endorlabs/workflows/agent_context/hydration.py +388 -0
  210. endorlabs/workflows/agent_context/package_versions.py +175 -0
  211. endorlabs/workflows/agent_context/session_artifacts.py +715 -0
  212. endorlabs/workflows/callgraph/__init__.py +13 -0
  213. endorlabs/workflows/callgraph/decoded.py +51 -0
  214. endorlabs/workflows/callgraph/fetch.py +195 -0
  215. endorlabs/workflows/callgraph/proto_decode.py +461 -0
  216. endorlabs/workflows/callgraph/render.py +262 -0
  217. endorlabs/workflows/callgraph/search.py +135 -0
  218. endorlabs/workflows/callgraph/sweep.py +91 -0
  219. endorlabs/workflows/common.py +129 -0
  220. endorlabs/workflows/dependencies/__init__.py +15 -0
  221. endorlabs/workflows/dependencies/bom_graph.py +121 -0
  222. endorlabs/workflows/dependencies/coordinates.py +15 -0
  223. endorlabs/workflows/dependencies/metadata_fetch.py +84 -0
  224. endorlabs/workflows/dependencies/reports.py +141 -0
  225. endorlabs/workflows/dependencies/types.py +47 -0
  226. endorlabs/workflows/estate/__init__.py +55 -0
  227. endorlabs/workflows/estate/analyze/cardinality/columns.py +46 -0
  228. endorlabs/workflows/estate/analyze/cardinality/export.py +861 -0
  229. endorlabs/workflows/estate/analyze/cardinality/group_list.py +160 -0
  230. endorlabs/workflows/estate/analyze/cardinality/remediation.py +218 -0
  231. endorlabs/workflows/estate/analyze/cardinality/tabular.py +316 -0
  232. endorlabs/workflows/estate/analyze/cardinality/types.py +66 -0
  233. endorlabs/workflows/estate/analyze/compile_graph/community_detection.py +352 -0
  234. endorlabs/workflows/estate/analyze/compile_graph/disk_build.py +202 -0
  235. endorlabs/workflows/estate/analyze/compile_graph/enrich.py +352 -0
  236. endorlabs/workflows/estate/analyze/compile_graph/pipeline.py +578 -0
  237. endorlabs/workflows/estate/analyze/graph_metrics/analytics.py +234 -0
  238. endorlabs/workflows/estate/analyze/project_map/core.py +338 -0
  239. endorlabs/workflows/estate/analyze/project_map/map.py +115 -0
  240. endorlabs/workflows/estate/analyze/project_map/run.py +239 -0
  241. endorlabs/workflows/estate/analyze/risk/cardinality.py +502 -0
  242. endorlabs/workflows/estate/analyze/risk/consumer_counts.py +113 -0
  243. endorlabs/workflows/estate/analyze/risk/scoring.py +440 -0
  244. endorlabs/workflows/estate/analyze/workspace.py +143 -0
  245. endorlabs/workflows/estate/cli/__init__.py +7 -0
  246. endorlabs/workflows/estate/cli/main.py +294 -0
  247. endorlabs/workflows/estate/collect/__init__.py +50 -0
  248. endorlabs/workflows/estate/collect/benchmark.py +401 -0
  249. endorlabs/workflows/estate/collect/bounds.py +136 -0
  250. endorlabs/workflows/estate/collect/dependency_metadata.py +120 -0
  251. endorlabs/workflows/estate/collect/finding_loader.py +22 -0
  252. endorlabs/workflows/estate/collect/findings.py +164 -0
  253. endorlabs/workflows/estate/collect/namespaces.py +89 -0
  254. endorlabs/workflows/estate/collect/projects.py +106 -0
  255. endorlabs/workflows/estate/collect/runner.py +454 -0
  256. endorlabs/workflows/estate/collect/shards.py +24 -0
  257. endorlabs/workflows/estate/contracts/__init__.py +71 -0
  258. endorlabs/workflows/estate/contracts/ir_artifacts.py +18 -0
  259. endorlabs/workflows/estate/contracts/resources.py +72 -0
  260. endorlabs/workflows/estate/export/charts/compile_graph_viz.py +571 -0
  261. endorlabs/workflows/estate/export/charts/estate_dashboard.py +246 -0
  262. endorlabs/workflows/estate/export/summarize.py +194 -0
  263. endorlabs/workflows/estate/filters/__init__.py +23 -0
  264. endorlabs/workflows/estate/filters/main_context.py +15 -0
  265. endorlabs/workflows/estate/filters/masks.py +26 -0
  266. endorlabs/workflows/estate/workspace/__init__.py +50 -0
  267. endorlabs/workflows/estate/workspace/collect_manifest.py +420 -0
  268. endorlabs/workflows/estate/workspace/paths.py +107 -0
  269. endorlabs/workflows/findings/__init__.py +21 -0
  270. endorlabs/workflows/findings/triage.py +490 -0
  271. endorlabs/workflows/notifications/__init__.py +17 -0
  272. endorlabs/workflows/notifications/notification_setup.py +331 -0
  273. endorlabs/workflows/platform/__init__.py +25 -0
  274. endorlabs/workflows/platform/platform_setup.py +282 -0
  275. endorlabs/workflows/policies/__init__.py +21 -0
  276. endorlabs/workflows/policies/__main__.py +8 -0
  277. endorlabs/workflows/policies/validate.py +322 -0
  278. endorlabs/workflows/projects/__init__.py +7 -0
  279. endorlabs/workflows/projects/resolve.py +82 -0
  280. endorlabs/workflows/reachability/__init__.py +5 -0
  281. endorlabs/workflows/reachability/cli.py +95 -0
  282. endorlabs/workflows/reachability/context.py +395 -0
  283. endorlabs/workflows/reachability/resolve.py +91 -0
  284. endorlabs/workflows/reachability/stitch.py +93 -0
  285. endorlabs/workflows/semgrep/__init__.py +27 -0
  286. endorlabs/workflows/semgrep/inventory.py +178 -0
  287. endorlabs/workflows/semgrep/rules.py +578 -0
  288. endorlabs/workflows/troubleshooting_scans/__init__.py +29 -0
  289. endorlabs/workflows/troubleshooting_scans/common.py +501 -0
  290. endorlabs/workflows/troubleshooting_scans/diff_scans.py +145 -0
  291. endorlabs/workflows/troubleshooting_scans/fetch_scan_logs.py +131 -0
  292. endorlabs/workflows/troubleshooting_scans/fetch_scan_results.py +171 -0
  293. endorlabs/workflows/troubleshooting_scans/pull_scan_logs.py +326 -0
  294. endorlabs/workflows/troubleshooting_scans/pull_scan_results.py +148 -0
  295. endorlabs/workflows/troubleshooting_scans/resolve_projects.py +85 -0
  296. endorlabs/workflows/troubleshooting_scans/run_troubleshooting_workflow.py +147 -0
  297. endorlabs/workflows/troubleshooting_scans/scan_logs.py +118 -0
  298. endorlabs/workflows/troubleshooting_scans/search_projects.py +263 -0
  299. endorlabs/workflows/troubleshooting_scans/search_scan_errors.py +224 -0
  300. endorlabs/workflows/troubleshooting_scans/select_anomalous_scans.py +157 -0
  301. endorlabs/workflows/troubleshooting_scans/summarize_scan_triage.py +546 -0
  302. endorlabs-0.2.0.dist-info/METADATA +232 -0
  303. endorlabs-0.2.0.dist-info/RECORD +306 -0
  304. endorlabs-0.2.0.dist-info/WHEEL +4 -0
  305. endorlabs-0.2.0.dist-info/entry_points.txt +7 -0
  306. 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.