locus-sdk 0.2.0b1__tar.gz

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 (422) hide show
  1. locus_sdk-0.2.0b1/.gitignore +265 -0
  2. locus_sdk-0.2.0b1/LICENSE +28 -0
  3. locus_sdk-0.2.0b1/LICENSE.txt +28 -0
  4. locus_sdk-0.2.0b1/PKG-INFO +443 -0
  5. locus_sdk-0.2.0b1/README.md +316 -0
  6. locus_sdk-0.2.0b1/THIRD_PARTY_LICENSES.txt +278 -0
  7. locus_sdk-0.2.0b1/pyproject.toml +631 -0
  8. locus_sdk-0.2.0b1/src/locus/__init__.py +241 -0
  9. locus_sdk-0.2.0b1/src/locus/a2a/__init__.py +99 -0
  10. locus_sdk-0.2.0b1/src/locus/a2a/protocol.py +1038 -0
  11. locus_sdk-0.2.0b1/src/locus/a2a/spec.py +402 -0
  12. locus_sdk-0.2.0b1/src/locus/agent/__init__.py +37 -0
  13. locus_sdk-0.2.0b1/src/locus/agent/agent.py +535 -0
  14. locus_sdk-0.2.0b1/src/locus/agent/composition.py +352 -0
  15. locus_sdk-0.2.0b1/src/locus/agent/config.py +578 -0
  16. locus_sdk-0.2.0b1/src/locus/agent/hook_orchestrator.py +151 -0
  17. locus_sdk-0.2.0b1/src/locus/agent/initializer.py +250 -0
  18. locus_sdk-0.2.0b1/src/locus/agent/result.py +339 -0
  19. locus_sdk-0.2.0b1/src/locus/agent/runtime_loop.py +1668 -0
  20. locus_sdk-0.2.0b1/src/locus/core/__init__.py +178 -0
  21. locus_sdk-0.2.0b1/src/locus/core/command.py +260 -0
  22. locus_sdk-0.2.0b1/src/locus/core/config.py +176 -0
  23. locus_sdk-0.2.0b1/src/locus/core/errors.py +207 -0
  24. locus_sdk-0.2.0b1/src/locus/core/events.py +259 -0
  25. locus_sdk-0.2.0b1/src/locus/core/interrupt.py +404 -0
  26. locus_sdk-0.2.0b1/src/locus/core/messages.py +151 -0
  27. locus_sdk-0.2.0b1/src/locus/core/protocols.py +348 -0
  28. locus_sdk-0.2.0b1/src/locus/core/reducers.py +466 -0
  29. locus_sdk-0.2.0b1/src/locus/core/send.py +325 -0
  30. locus_sdk-0.2.0b1/src/locus/core/state.py +379 -0
  31. locus_sdk-0.2.0b1/src/locus/core/structured.py +432 -0
  32. locus_sdk-0.2.0b1/src/locus/core/termination.py +237 -0
  33. locus_sdk-0.2.0b1/src/locus/core/warnings.py +41 -0
  34. locus_sdk-0.2.0b1/src/locus/deepagent/__init__.py +137 -0
  35. locus_sdk-0.2.0b1/src/locus/deepagent/backends/__init__.py +37 -0
  36. locus_sdk-0.2.0b1/src/locus/deepagent/backends/filesystem.py +243 -0
  37. locus_sdk-0.2.0b1/src/locus/deepagent/backends/protocol.py +123 -0
  38. locus_sdk-0.2.0b1/src/locus/deepagent/backends/state.py +225 -0
  39. locus_sdk-0.2.0b1/src/locus/deepagent/factory.py +219 -0
  40. locus_sdk-0.2.0b1/src/locus/deepagent/memory.py +48 -0
  41. locus_sdk-0.2.0b1/src/locus/deepagent/protocol.py +127 -0
  42. locus_sdk-0.2.0b1/src/locus/deepagent/subagent.py +153 -0
  43. locus_sdk-0.2.0b1/src/locus/deepagent/todos.py +122 -0
  44. locus_sdk-0.2.0b1/src/locus/deepagent/tools/__init__.py +16 -0
  45. locus_sdk-0.2.0b1/src/locus/deepagent/tools/filesystem.py +160 -0
  46. locus_sdk-0.2.0b1/src/locus/deepagent/workflow.py +642 -0
  47. locus_sdk-0.2.0b1/src/locus/evaluation/__init__.py +26 -0
  48. locus_sdk-0.2.0b1/src/locus/evaluation/framework.py +226 -0
  49. locus_sdk-0.2.0b1/src/locus/hooks/__init__.py +65 -0
  50. locus_sdk-0.2.0b1/src/locus/hooks/builtin/__init__.py +64 -0
  51. locus_sdk-0.2.0b1/src/locus/hooks/builtin/guardrails.py +765 -0
  52. locus_sdk-0.2.0b1/src/locus/hooks/builtin/logging.py +279 -0
  53. locus_sdk-0.2.0b1/src/locus/hooks/builtin/retry.py +130 -0
  54. locus_sdk-0.2.0b1/src/locus/hooks/builtin/steering.py +248 -0
  55. locus_sdk-0.2.0b1/src/locus/hooks/builtin/telemetry.py +393 -0
  56. locus_sdk-0.2.0b1/src/locus/hooks/events.py +86 -0
  57. locus_sdk-0.2.0b1/src/locus/hooks/plugin.py +137 -0
  58. locus_sdk-0.2.0b1/src/locus/hooks/provider.py +383 -0
  59. locus_sdk-0.2.0b1/src/locus/hooks/registry.py +387 -0
  60. locus_sdk-0.2.0b1/src/locus/integrations/__init__.py +18 -0
  61. locus_sdk-0.2.0b1/src/locus/integrations/fastmcp.py +723 -0
  62. locus_sdk-0.2.0b1/src/locus/integrations/osv.py +194 -0
  63. locus_sdk-0.2.0b1/src/locus/loop/__init__.py +54 -0
  64. locus_sdk-0.2.0b1/src/locus/loop/nodes.py +363 -0
  65. locus_sdk-0.2.0b1/src/locus/loop/react.py +279 -0
  66. locus_sdk-0.2.0b1/src/locus/loop/router.py +241 -0
  67. locus_sdk-0.2.0b1/src/locus/loop/runner.py +307 -0
  68. locus_sdk-0.2.0b1/src/locus/memory/__init__.py +115 -0
  69. locus_sdk-0.2.0b1/src/locus/memory/backends/__init__.py +81 -0
  70. locus_sdk-0.2.0b1/src/locus/memory/backends/adapters.py +649 -0
  71. locus_sdk-0.2.0b1/src/locus/memory/backends/file.py +288 -0
  72. locus_sdk-0.2.0b1/src/locus/memory/backends/http.py +301 -0
  73. locus_sdk-0.2.0b1/src/locus/memory/backends/memory.py +247 -0
  74. locus_sdk-0.2.0b1/src/locus/memory/backends/oci_bucket.py +607 -0
  75. locus_sdk-0.2.0b1/src/locus/memory/backends/opensearch.py +301 -0
  76. locus_sdk-0.2.0b1/src/locus/memory/backends/oracle.py +565 -0
  77. locus_sdk-0.2.0b1/src/locus/memory/backends/postgresql.py +454 -0
  78. locus_sdk-0.2.0b1/src/locus/memory/backends/redis.py +127 -0
  79. locus_sdk-0.2.0b1/src/locus/memory/backends/sqlite.py +206 -0
  80. locus_sdk-0.2.0b1/src/locus/memory/checkpointer.py +335 -0
  81. locus_sdk-0.2.0b1/src/locus/memory/compactor.py +329 -0
  82. locus_sdk-0.2.0b1/src/locus/memory/conversation.py +325 -0
  83. locus_sdk-0.2.0b1/src/locus/memory/delta.py +546 -0
  84. locus_sdk-0.2.0b1/src/locus/memory/manager.py +584 -0
  85. locus_sdk-0.2.0b1/src/locus/memory/registry.py +221 -0
  86. locus_sdk-0.2.0b1/src/locus/memory/store.py +935 -0
  87. locus_sdk-0.2.0b1/src/locus/models/__init__.py +99 -0
  88. locus_sdk-0.2.0b1/src/locus/models/auxiliary.py +56 -0
  89. locus_sdk-0.2.0b1/src/locus/models/base.py +114 -0
  90. locus_sdk-0.2.0b1/src/locus/models/caching.py +85 -0
  91. locus_sdk-0.2.0b1/src/locus/models/credentials.py +212 -0
  92. locus_sdk-0.2.0b1/src/locus/models/failover.py +787 -0
  93. locus_sdk-0.2.0b1/src/locus/models/metadata.py +357 -0
  94. locus_sdk-0.2.0b1/src/locus/models/native/__init__.py +22 -0
  95. locus_sdk-0.2.0b1/src/locus/models/native/anthropic.py +388 -0
  96. locus_sdk-0.2.0b1/src/locus/models/native/ollama.py +222 -0
  97. locus_sdk-0.2.0b1/src/locus/models/native/openai.py +487 -0
  98. locus_sdk-0.2.0b1/src/locus/models/pooled.py +212 -0
  99. locus_sdk-0.2.0b1/src/locus/models/providers/__init__.py +18 -0
  100. locus_sdk-0.2.0b1/src/locus/models/providers/oci/__init__.py +397 -0
  101. locus_sdk-0.2.0b1/src/locus/models/providers/oci/_signing.py +137 -0
  102. locus_sdk-0.2.0b1/src/locus/models/providers/oci/base.py +130 -0
  103. locus_sdk-0.2.0b1/src/locus/models/providers/oci/client.py +271 -0
  104. locus_sdk-0.2.0b1/src/locus/models/providers/oci/models/__init__.py +14 -0
  105. locus_sdk-0.2.0b1/src/locus/models/providers/oci/models/cohere.py +263 -0
  106. locus_sdk-0.2.0b1/src/locus/models/providers/oci/models/generic.py +315 -0
  107. locus_sdk-0.2.0b1/src/locus/models/providers/oci/openai_compat.py +376 -0
  108. locus_sdk-0.2.0b1/src/locus/models/rate_limits.py +237 -0
  109. locus_sdk-0.2.0b1/src/locus/models/registry.py +154 -0
  110. locus_sdk-0.2.0b1/src/locus/multiagent/__init__.py +134 -0
  111. locus_sdk-0.2.0b1/src/locus/multiagent/functional.py +234 -0
  112. locus_sdk-0.2.0b1/src/locus/multiagent/graph.py +1551 -0
  113. locus_sdk-0.2.0b1/src/locus/multiagent/handoff.py +618 -0
  114. locus_sdk-0.2.0b1/src/locus/multiagent/orchestrator.py +467 -0
  115. locus_sdk-0.2.0b1/src/locus/multiagent/specialist.py +495 -0
  116. locus_sdk-0.2.0b1/src/locus/multiagent/swarm.py +686 -0
  117. locus_sdk-0.2.0b1/src/locus/multiagent/visualize.py +139 -0
  118. locus_sdk-0.2.0b1/src/locus/observability/__init__.py +67 -0
  119. locus_sdk-0.2.0b1/src/locus/observability/agent_bridge.py +171 -0
  120. locus_sdk-0.2.0b1/src/locus/observability/bus_hook.py +175 -0
  121. locus_sdk-0.2.0b1/src/locus/observability/context.py +137 -0
  122. locus_sdk-0.2.0b1/src/locus/observability/emit.py +216 -0
  123. locus_sdk-0.2.0b1/src/locus/observability/event_bus.py +369 -0
  124. locus_sdk-0.2.0b1/src/locus/observability/router_events.py +188 -0
  125. locus_sdk-0.2.0b1/src/locus/playbooks/__init__.py +45 -0
  126. locus_sdk-0.2.0b1/src/locus/playbooks/enforcer.py +403 -0
  127. locus_sdk-0.2.0b1/src/locus/playbooks/hook.py +161 -0
  128. locus_sdk-0.2.0b1/src/locus/playbooks/loader.py +271 -0
  129. locus_sdk-0.2.0b1/src/locus/playbooks/models.py +202 -0
  130. locus_sdk-0.2.0b1/src/locus/providers/__init__.py +63 -0
  131. locus_sdk-0.2.0b1/src/locus/providers/image.py +113 -0
  132. locus_sdk-0.2.0b1/src/locus/providers/speech.py +171 -0
  133. locus_sdk-0.2.0b1/src/locus/providers/tools.py +217 -0
  134. locus_sdk-0.2.0b1/src/locus/providers/types.py +42 -0
  135. locus_sdk-0.2.0b1/src/locus/providers/web_fetch.py +194 -0
  136. locus_sdk-0.2.0b1/src/locus/providers/web_search.py +129 -0
  137. locus_sdk-0.2.0b1/src/locus/py.typed +0 -0
  138. locus_sdk-0.2.0b1/src/locus/rag/__init__.py +163 -0
  139. locus_sdk-0.2.0b1/src/locus/rag/embeddings/__init__.py +47 -0
  140. locus_sdk-0.2.0b1/src/locus/rag/embeddings/base.py +219 -0
  141. locus_sdk-0.2.0b1/src/locus/rag/embeddings/oci.py +397 -0
  142. locus_sdk-0.2.0b1/src/locus/rag/embeddings/openai.py +207 -0
  143. locus_sdk-0.2.0b1/src/locus/rag/multimodal.py +586 -0
  144. locus_sdk-0.2.0b1/src/locus/rag/retriever.py +562 -0
  145. locus_sdk-0.2.0b1/src/locus/rag/stores/__init__.py +84 -0
  146. locus_sdk-0.2.0b1/src/locus/rag/stores/base.py +266 -0
  147. locus_sdk-0.2.0b1/src/locus/rag/stores/chroma.py +428 -0
  148. locus_sdk-0.2.0b1/src/locus/rag/stores/memory.py +155 -0
  149. locus_sdk-0.2.0b1/src/locus/rag/stores/opensearch.py +396 -0
  150. locus_sdk-0.2.0b1/src/locus/rag/stores/oracle.py +533 -0
  151. locus_sdk-0.2.0b1/src/locus/rag/stores/pgvector.py +608 -0
  152. locus_sdk-0.2.0b1/src/locus/rag/stores/pinecone.py +405 -0
  153. locus_sdk-0.2.0b1/src/locus/rag/stores/qdrant.py +459 -0
  154. locus_sdk-0.2.0b1/src/locus/rag/tools.py +265 -0
  155. locus_sdk-0.2.0b1/src/locus/reasoning/__init__.py +79 -0
  156. locus_sdk-0.2.0b1/src/locus/reasoning/causal.py +727 -0
  157. locus_sdk-0.2.0b1/src/locus/reasoning/grounding.py +677 -0
  158. locus_sdk-0.2.0b1/src/locus/reasoning/gsar.py +392 -0
  159. locus_sdk-0.2.0b1/src/locus/reasoning/gsar_evaluator.py +262 -0
  160. locus_sdk-0.2.0b1/src/locus/reasoning/gsar_judge.py +336 -0
  161. locus_sdk-0.2.0b1/src/locus/reasoning/reflexion.py +515 -0
  162. locus_sdk-0.2.0b1/src/locus/router/__init__.py +111 -0
  163. locus_sdk-0.2.0b1/src/locus/router/capability.py +133 -0
  164. locus_sdk-0.2.0b1/src/locus/router/compiler.py +181 -0
  165. locus_sdk-0.2.0b1/src/locus/router/goal_frame.py +145 -0
  166. locus_sdk-0.2.0b1/src/locus/router/policy.py +103 -0
  167. locus_sdk-0.2.0b1/src/locus/router/protocol.py +646 -0
  168. locus_sdk-0.2.0b1/src/locus/router/runnable.py +234 -0
  169. locus_sdk-0.2.0b1/src/locus/router/runtime.py +129 -0
  170. locus_sdk-0.2.0b1/src/locus/router/skill_index.py +80 -0
  171. locus_sdk-0.2.0b1/src/locus/server/__init__.py +26 -0
  172. locus_sdk-0.2.0b1/src/locus/server/app.py +436 -0
  173. locus_sdk-0.2.0b1/src/locus/skills/__init__.py +37 -0
  174. locus_sdk-0.2.0b1/src/locus/skills/models.py +255 -0
  175. locus_sdk-0.2.0b1/src/locus/skills/plugin.py +207 -0
  176. locus_sdk-0.2.0b1/src/locus/streaming/__init__.py +49 -0
  177. locus_sdk-0.2.0b1/src/locus/streaming/console.py +373 -0
  178. locus_sdk-0.2.0b1/src/locus/streaming/handler.py +284 -0
  179. locus_sdk-0.2.0b1/src/locus/streaming/sse.py +443 -0
  180. locus_sdk-0.2.0b1/src/locus/streaming/structured.py +144 -0
  181. locus_sdk-0.2.0b1/src/locus/tools/__init__.py +25 -0
  182. locus_sdk-0.2.0b1/src/locus/tools/builtins.py +57 -0
  183. locus_sdk-0.2.0b1/src/locus/tools/context.py +69 -0
  184. locus_sdk-0.2.0b1/src/locus/tools/decorator.py +189 -0
  185. locus_sdk-0.2.0b1/src/locus/tools/executor.py +419 -0
  186. locus_sdk-0.2.0b1/src/locus/tools/path_safety.py +99 -0
  187. locus_sdk-0.2.0b1/src/locus/tools/registry.py +87 -0
  188. locus_sdk-0.2.0b1/src/locus/tools/result_storage.py +183 -0
  189. locus_sdk-0.2.0b1/src/locus/tools/schema.py +206 -0
  190. locus_sdk-0.2.0b1/src/locus/tools/url_safety.py +193 -0
  191. locus_sdk-0.2.0b1/src/locus/tools/watcher.py +304 -0
  192. locus_sdk-0.2.0b1/tests/__init__.py +5 -0
  193. locus_sdk-0.2.0b1/tests/_safe_math.py +56 -0
  194. locus_sdk-0.2.0b1/tests/integration/__init__.py +5 -0
  195. locus_sdk-0.2.0b1/tests/integration/conftest.py +369 -0
  196. locus_sdk-0.2.0b1/tests/integration/rag/__init__.py +5 -0
  197. locus_sdk-0.2.0b1/tests/integration/rag/conftest.py +146 -0
  198. locus_sdk-0.2.0b1/tests/integration/rag/test_oci_embeddings.py +185 -0
  199. locus_sdk-0.2.0b1/tests/integration/rag/test_opensearch_store.py +227 -0
  200. locus_sdk-0.2.0b1/tests/integration/rag/test_qdrant_store.py +254 -0
  201. locus_sdk-0.2.0b1/tests/integration/rag/test_rag_e2e.py +308 -0
  202. locus_sdk-0.2.0b1/tests/integration/test_a2a_live.py +260 -0
  203. locus_sdk-0.2.0b1/tests/integration/test_agent_gsar_live.py +117 -0
  204. locus_sdk-0.2.0b1/tests/integration/test_agent_integration.py +2135 -0
  205. locus_sdk-0.2.0b1/tests/integration/test_auxiliary_model_live.py +94 -0
  206. locus_sdk-0.2.0b1/tests/integration/test_checkpoint_backends.py +605 -0
  207. locus_sdk-0.2.0b1/tests/integration/test_checkpointer_adapters.py +627 -0
  208. locus_sdk-0.2.0b1/tests/integration/test_complex_agent.py +341 -0
  209. locus_sdk-0.2.0b1/tests/integration/test_comprehensive_agent.py +520 -0
  210. locus_sdk-0.2.0b1/tests/integration/test_fastmcp_integration.py +231 -0
  211. locus_sdk-0.2.0b1/tests/integration/test_gsar_live.py +570 -0
  212. locus_sdk-0.2.0b1/tests/integration/test_hermes_compactor_e2e.py +176 -0
  213. locus_sdk-0.2.0b1/tests/integration/test_hook_exports_live.py +99 -0
  214. locus_sdk-0.2.0b1/tests/integration/test_idempotent_models.py +201 -0
  215. locus_sdk-0.2.0b1/tests/integration/test_memory_manager_live.py +264 -0
  216. locus_sdk-0.2.0b1/tests/integration/test_models_integration.py +242 -0
  217. locus_sdk-0.2.0b1/tests/integration/test_new_vector_stores.py +218 -0
  218. locus_sdk-0.2.0b1/tests/integration/test_observability_emission_points.py +279 -0
  219. locus_sdk-0.2.0b1/tests/integration/test_observability_full_coverage.py +382 -0
  220. locus_sdk-0.2.0b1/tests/integration/test_observability_router_events.py +229 -0
  221. locus_sdk-0.2.0b1/tests/integration/test_oci_dac_live.py +146 -0
  222. locus_sdk-0.2.0b1/tests/integration/test_oci_graph_integration.py +524 -0
  223. locus_sdk-0.2.0b1/tests/integration/test_oci_integration.py +333 -0
  224. locus_sdk-0.2.0b1/tests/integration/test_oci_openai_compat_integration.py +144 -0
  225. locus_sdk-0.2.0b1/tests/integration/test_openai_anthropic_native.py +312 -0
  226. locus_sdk-0.2.0b1/tests/integration/test_oracle_rag.py +428 -0
  227. locus_sdk-0.2.0b1/tests/integration/test_playbook_enforcer_live.py +169 -0
  228. locus_sdk-0.2.0b1/tests/integration/test_providers_live.py +189 -0
  229. locus_sdk-0.2.0b1/tests/integration/test_rag_agent_e2e.py +284 -0
  230. locus_sdk-0.2.0b1/tests/integration/test_router_benchmark.py +944 -0
  231. locus_sdk-0.2.0b1/tests/integration/test_router_e2e.py +513 -0
  232. locus_sdk-0.2.0b1/tests/integration/test_security_hardening_integration.py +164 -0
  233. locus_sdk-0.2.0b1/tests/integration/test_server_threads_live.py +136 -0
  234. locus_sdk-0.2.0b1/tests/integration/test_structured_output_models.py +220 -0
  235. locus_sdk-0.2.0b1/tests/integration/test_structured_stream_live.py +137 -0
  236. locus_sdk-0.2.0b1/tests/integration/test_termination_models.py +281 -0
  237. locus_sdk-0.2.0b1/tests/integration/test_tutorials_13_21.py +893 -0
  238. locus_sdk-0.2.0b1/tests/integration/test_tutorials_22_24.py +523 -0
  239. locus_sdk-0.2.0b1/tests/integration/test_tutorials_all_live.py +104 -0
  240. locus_sdk-0.2.0b1/tests/integration/test_workbench_categories.py +156 -0
  241. locus_sdk-0.2.0b1/tests/integration/test_workbench_router_endpoints.py +233 -0
  242. locus_sdk-0.2.0b1/tests/integration/test_workbench_sse_stream.py +338 -0
  243. locus_sdk-0.2.0b1/tests/unit/__init__.py +5 -0
  244. locus_sdk-0.2.0b1/tests/unit/memory/__init__.py +0 -0
  245. locus_sdk-0.2.0b1/tests/unit/memory/test_memory_manager.py +468 -0
  246. locus_sdk-0.2.0b1/tests/unit/rag/__init__.py +5 -0
  247. locus_sdk-0.2.0b1/tests/unit/rag/test_embeddings.py +161 -0
  248. locus_sdk-0.2.0b1/tests/unit/rag/test_multimodal.py +254 -0
  249. locus_sdk-0.2.0b1/tests/unit/rag/test_retriever.py +254 -0
  250. locus_sdk-0.2.0b1/tests/unit/rag/test_stores.py +321 -0
  251. locus_sdk-0.2.0b1/tests/unit/test_a2a_protocol.py +635 -0
  252. locus_sdk-0.2.0b1/tests/unit/test_agent.py +4838 -0
  253. locus_sdk-0.2.0b1/tests/unit/test_agent_auxiliary_model.py +181 -0
  254. locus_sdk-0.2.0b1/tests/unit/test_agent_config.py +297 -0
  255. locus_sdk-0.2.0b1/tests/unit/test_agent_facade_extended.py +115 -0
  256. locus_sdk-0.2.0b1/tests/unit/test_agent_gsar.py +380 -0
  257. locus_sdk-0.2.0b1/tests/unit/test_agent_idempotent.py +160 -0
  258. locus_sdk-0.2.0b1/tests/unit/test_agent_result.py +276 -0
  259. locus_sdk-0.2.0b1/tests/unit/test_agent_structured_output.py +241 -0
  260. locus_sdk-0.2.0b1/tests/unit/test_agent_termination.py +268 -0
  261. locus_sdk-0.2.0b1/tests/unit/test_agent_tool_result_store.py +176 -0
  262. locus_sdk-0.2.0b1/tests/unit/test_anthropic_full.py +439 -0
  263. locus_sdk-0.2.0b1/tests/unit/test_anthropic_prompt_caching.py +200 -0
  264. locus_sdk-0.2.0b1/tests/unit/test_auxiliary_model.py +66 -0
  265. locus_sdk-0.2.0b1/tests/unit/test_base_checkpointer.py +224 -0
  266. locus_sdk-0.2.0b1/tests/unit/test_checkpointer_registry.py +371 -0
  267. locus_sdk-0.2.0b1/tests/unit/test_command.py +205 -0
  268. locus_sdk-0.2.0b1/tests/unit/test_compactor.py +207 -0
  269. locus_sdk-0.2.0b1/tests/unit/test_console_handler.py +340 -0
  270. locus_sdk-0.2.0b1/tests/unit/test_conversation.py +128 -0
  271. locus_sdk-0.2.0b1/tests/unit/test_core_config.py +234 -0
  272. locus_sdk-0.2.0b1/tests/unit/test_core_warnings.py +60 -0
  273. locus_sdk-0.2.0b1/tests/unit/test_credential_pool.py +226 -0
  274. locus_sdk-0.2.0b1/tests/unit/test_deepagent.py +182 -0
  275. locus_sdk-0.2.0b1/tests/unit/test_deepagent_filesystem.py +388 -0
  276. locus_sdk-0.2.0b1/tests/unit/test_deepagent_filesystem_backend.py +234 -0
  277. locus_sdk-0.2.0b1/tests/unit/test_deepagent_slice2.py +219 -0
  278. locus_sdk-0.2.0b1/tests/unit/test_deepagent_slice3.py +198 -0
  279. locus_sdk-0.2.0b1/tests/unit/test_delta_checkpointer.py +394 -0
  280. locus_sdk-0.2.0b1/tests/unit/test_deploy_helm_chart.py +166 -0
  281. locus_sdk-0.2.0b1/tests/unit/test_embedding_capabilities.py +91 -0
  282. locus_sdk-0.2.0b1/tests/unit/test_enforcer.py +370 -0
  283. locus_sdk-0.2.0b1/tests/unit/test_errors.py +91 -0
  284. locus_sdk-0.2.0b1/tests/unit/test_failover.py +360 -0
  285. locus_sdk-0.2.0b1/tests/unit/test_failover_extended.py +411 -0
  286. locus_sdk-0.2.0b1/tests/unit/test_fastmcp.py +936 -0
  287. locus_sdk-0.2.0b1/tests/unit/test_fastmcp_extended.py +302 -0
  288. locus_sdk-0.2.0b1/tests/unit/test_file_checkpointer.py +380 -0
  289. locus_sdk-0.2.0b1/tests/unit/test_graph.py +1339 -0
  290. locus_sdk-0.2.0b1/tests/unit/test_graph_extended.py +450 -0
  291. locus_sdk-0.2.0b1/tests/unit/test_grounding.py +501 -0
  292. locus_sdk-0.2.0b1/tests/unit/test_gsar.py +498 -0
  293. locus_sdk-0.2.0b1/tests/unit/test_gsar_evaluator.py +330 -0
  294. locus_sdk-0.2.0b1/tests/unit/test_gsar_judge.py +235 -0
  295. locus_sdk-0.2.0b1/tests/unit/test_guardrails.py +646 -0
  296. locus_sdk-0.2.0b1/tests/unit/test_guardrails_output_filter.py +103 -0
  297. locus_sdk-0.2.0b1/tests/unit/test_handoff.py +504 -0
  298. locus_sdk-0.2.0b1/tests/unit/test_hermes_caching_e2e.py +74 -0
  299. locus_sdk-0.2.0b1/tests/unit/test_hermes_failover_pool.py +216 -0
  300. locus_sdk-0.2.0b1/tests/unit/test_hermes_full_e2e.py +573 -0
  301. locus_sdk-0.2.0b1/tests/unit/test_hermes_osv_e2e.py +70 -0
  302. locus_sdk-0.2.0b1/tests/unit/test_hermes_path_safety_e2e.py +114 -0
  303. locus_sdk-0.2.0b1/tests/unit/test_hermes_redaction_e2e.py +143 -0
  304. locus_sdk-0.2.0b1/tests/unit/test_hermes_result_storage.py +141 -0
  305. locus_sdk-0.2.0b1/tests/unit/test_hermes_url_safety_e2e.py +133 -0
  306. locus_sdk-0.2.0b1/tests/unit/test_hook_orchestrator.py +169 -0
  307. locus_sdk-0.2.0b1/tests/unit/test_hooks.py +522 -0
  308. locus_sdk-0.2.0b1/tests/unit/test_hooks_builtin.py +194 -0
  309. locus_sdk-0.2.0b1/tests/unit/test_hooks_builtin_retry.py +152 -0
  310. locus_sdk-0.2.0b1/tests/unit/test_hooks_builtin_steering.py +285 -0
  311. locus_sdk-0.2.0b1/tests/unit/test_hooks_logging.py +204 -0
  312. locus_sdk-0.2.0b1/tests/unit/test_hooks_plugin.py +145 -0
  313. locus_sdk-0.2.0b1/tests/unit/test_hooks_registry.py +261 -0
  314. locus_sdk-0.2.0b1/tests/unit/test_http_checkpointer.py +729 -0
  315. locus_sdk-0.2.0b1/tests/unit/test_idempotent_tools.py +185 -0
  316. locus_sdk-0.2.0b1/tests/unit/test_integrations_fastmcp.py +317 -0
  317. locus_sdk-0.2.0b1/tests/unit/test_integrations_fastmcp_full.py +379 -0
  318. locus_sdk-0.2.0b1/tests/unit/test_interrupt.py +216 -0
  319. locus_sdk-0.2.0b1/tests/unit/test_locus_init.py +174 -0
  320. locus_sdk-0.2.0b1/tests/unit/test_loop.py +1118 -0
  321. locus_sdk-0.2.0b1/tests/unit/test_loop_runner.py +255 -0
  322. locus_sdk-0.2.0b1/tests/unit/test_loop_runner_extended.py +294 -0
  323. locus_sdk-0.2.0b1/tests/unit/test_memory.py +893 -0
  324. locus_sdk-0.2.0b1/tests/unit/test_memory_backends.py +207 -0
  325. locus_sdk-0.2.0b1/tests/unit/test_memory_backends_adapters.py +494 -0
  326. locus_sdk-0.2.0b1/tests/unit/test_memory_backends_postgresql.py +463 -0
  327. locus_sdk-0.2.0b1/tests/unit/test_memory_checkpointer.py +358 -0
  328. locus_sdk-0.2.0b1/tests/unit/test_memory_registry.py +645 -0
  329. locus_sdk-0.2.0b1/tests/unit/test_memory_registry_factories.py +131 -0
  330. locus_sdk-0.2.0b1/tests/unit/test_memory_store.py +780 -0
  331. locus_sdk-0.2.0b1/tests/unit/test_memory_store_namespaced_and_context.py +234 -0
  332. locus_sdk-0.2.0b1/tests/unit/test_memory_vector_store.py +363 -0
  333. locus_sdk-0.2.0b1/tests/unit/test_messages.py +162 -0
  334. locus_sdk-0.2.0b1/tests/unit/test_model_metadata.py +177 -0
  335. locus_sdk-0.2.0b1/tests/unit/test_model_registry.py +96 -0
  336. locus_sdk-0.2.0b1/tests/unit/test_models.py +490 -0
  337. locus_sdk-0.2.0b1/tests/unit/test_models_init.py +199 -0
  338. locus_sdk-0.2.0b1/tests/unit/test_models_native_ollama.py +322 -0
  339. locus_sdk-0.2.0b1/tests/unit/test_models_native_openai.py +638 -0
  340. locus_sdk-0.2.0b1/tests/unit/test_multiagent.py +1111 -0
  341. locus_sdk-0.2.0b1/tests/unit/test_multiagent_functional.py +265 -0
  342. locus_sdk-0.2.0b1/tests/unit/test_multiagent_visualize.py +259 -0
  343. locus_sdk-0.2.0b1/tests/unit/test_multimodal.py +571 -0
  344. locus_sdk-0.2.0b1/tests/unit/test_multiturn_checkpointer.py +137 -0
  345. locus_sdk-0.2.0b1/tests/unit/test_native_structured_output.py +132 -0
  346. locus_sdk-0.2.0b1/tests/unit/test_observability_bus_hook.py +290 -0
  347. locus_sdk-0.2.0b1/tests/unit/test_observability_context_and_emit.py +307 -0
  348. locus_sdk-0.2.0b1/tests/unit/test_observability_event_bus.py +281 -0
  349. locus_sdk-0.2.0b1/tests/unit/test_oci_base_provider.py +129 -0
  350. locus_sdk-0.2.0b1/tests/unit/test_oci_bucket_retry.py +102 -0
  351. locus_sdk-0.2.0b1/tests/unit/test_oci_client.py +307 -0
  352. locus_sdk-0.2.0b1/tests/unit/test_oci_cohere.py +364 -0
  353. locus_sdk-0.2.0b1/tests/unit/test_oci_dac.py +248 -0
  354. locus_sdk-0.2.0b1/tests/unit/test_oci_generic.py +509 -0
  355. locus_sdk-0.2.0b1/tests/unit/test_oci_model.py +324 -0
  356. locus_sdk-0.2.0b1/tests/unit/test_oci_openai_compat.py +335 -0
  357. locus_sdk-0.2.0b1/tests/unit/test_oci_openai_compat_helpers.py +160 -0
  358. locus_sdk-0.2.0b1/tests/unit/test_oci_signing.py +235 -0
  359. locus_sdk-0.2.0b1/tests/unit/test_openai_model.py +475 -0
  360. locus_sdk-0.2.0b1/tests/unit/test_orchestrator_parallel.py +177 -0
  361. locus_sdk-0.2.0b1/tests/unit/test_osv_check.py +226 -0
  362. locus_sdk-0.2.0b1/tests/unit/test_path_safety.py +123 -0
  363. locus_sdk-0.2.0b1/tests/unit/test_playbook_enforcer_hook.py +229 -0
  364. locus_sdk-0.2.0b1/tests/unit/test_playbook_loader.py +358 -0
  365. locus_sdk-0.2.0b1/tests/unit/test_playbook_models.py +315 -0
  366. locus_sdk-0.2.0b1/tests/unit/test_playbooks.py +206 -0
  367. locus_sdk-0.2.0b1/tests/unit/test_pooled_model.py +281 -0
  368. locus_sdk-0.2.0b1/tests/unit/test_prompt_caching.py +59 -0
  369. locus_sdk-0.2.0b1/tests/unit/test_providers.py +459 -0
  370. locus_sdk-0.2.0b1/tests/unit/test_providers_image_and_speech.py +178 -0
  371. locus_sdk-0.2.0b1/tests/unit/test_providers_tools.py +289 -0
  372. locus_sdk-0.2.0b1/tests/unit/test_providers_web.py +285 -0
  373. locus_sdk-0.2.0b1/tests/unit/test_public_imports.py +110 -0
  374. locus_sdk-0.2.0b1/tests/unit/test_rag_embeddings_init.py +54 -0
  375. locus_sdk-0.2.0b1/tests/unit/test_rag_embeddings_oci.py +346 -0
  376. locus_sdk-0.2.0b1/tests/unit/test_rag_init.py +140 -0
  377. locus_sdk-0.2.0b1/tests/unit/test_rag_multimodal.py +833 -0
  378. locus_sdk-0.2.0b1/tests/unit/test_rag_multimodal_full.py +526 -0
  379. locus_sdk-0.2.0b1/tests/unit/test_rag_retriever.py +905 -0
  380. locus_sdk-0.2.0b1/tests/unit/test_rag_stores_base.py +333 -0
  381. locus_sdk-0.2.0b1/tests/unit/test_rag_stores_chroma.py +661 -0
  382. locus_sdk-0.2.0b1/tests/unit/test_rag_stores_init.py +135 -0
  383. locus_sdk-0.2.0b1/tests/unit/test_rag_tools.py +254 -0
  384. locus_sdk-0.2.0b1/tests/unit/test_rate_limits.py +275 -0
  385. locus_sdk-0.2.0b1/tests/unit/test_reasoning.py +1147 -0
  386. locus_sdk-0.2.0b1/tests/unit/test_reasoning_extended.py +416 -0
  387. locus_sdk-0.2.0b1/tests/unit/test_redaction.py +207 -0
  388. locus_sdk-0.2.0b1/tests/unit/test_reducers.py +566 -0
  389. locus_sdk-0.2.0b1/tests/unit/test_research_workflow.py +652 -0
  390. locus_sdk-0.2.0b1/tests/unit/test_result_storage.py +172 -0
  391. locus_sdk-0.2.0b1/tests/unit/test_router.py +687 -0
  392. locus_sdk-0.2.0b1/tests/unit/test_router_compiled_shape.py +679 -0
  393. locus_sdk-0.2.0b1/tests/unit/test_runtime_loop_helpers.py +62 -0
  394. locus_sdk-0.2.0b1/tests/unit/test_security_hardening.py +414 -0
  395. locus_sdk-0.2.0b1/tests/unit/test_send.py +259 -0
  396. locus_sdk-0.2.0b1/tests/unit/test_server_app_full.py +388 -0
  397. locus_sdk-0.2.0b1/tests/unit/test_server_threads.py +247 -0
  398. locus_sdk-0.2.0b1/tests/unit/test_skills_models.py +267 -0
  399. locus_sdk-0.2.0b1/tests/unit/test_skills_plugin.py +273 -0
  400. locus_sdk-0.2.0b1/tests/unit/test_specialist.py +702 -0
  401. locus_sdk-0.2.0b1/tests/unit/test_sqlite_backend.py +236 -0
  402. locus_sdk-0.2.0b1/tests/unit/test_state.py +481 -0
  403. locus_sdk-0.2.0b1/tests/unit/test_stategraph_streaming.py +222 -0
  404. locus_sdk-0.2.0b1/tests/unit/test_storage_adapters.py +424 -0
  405. locus_sdk-0.2.0b1/tests/unit/test_storage_backend_adapter.py +627 -0
  406. locus_sdk-0.2.0b1/tests/unit/test_store.py +323 -0
  407. locus_sdk-0.2.0b1/tests/unit/test_streaming.py +912 -0
  408. locus_sdk-0.2.0b1/tests/unit/test_streaming_console.py +525 -0
  409. locus_sdk-0.2.0b1/tests/unit/test_streaming_extended.py +180 -0
  410. locus_sdk-0.2.0b1/tests/unit/test_structured.py +280 -0
  411. locus_sdk-0.2.0b1/tests/unit/test_structured_partial.py +230 -0
  412. locus_sdk-0.2.0b1/tests/unit/test_swarm.py +676 -0
  413. locus_sdk-0.2.0b1/tests/unit/test_swarm_capabilities.py +111 -0
  414. locus_sdk-0.2.0b1/tests/unit/test_telemetry_hook.py +322 -0
  415. locus_sdk-0.2.0b1/tests/unit/test_termination_extended.py +162 -0
  416. locus_sdk-0.2.0b1/tests/unit/test_tools.py +373 -0
  417. locus_sdk-0.2.0b1/tests/unit/test_tools_context.py +135 -0
  418. locus_sdk-0.2.0b1/tests/unit/test_tools_executor.py +382 -0
  419. locus_sdk-0.2.0b1/tests/unit/test_tools_schema.py +304 -0
  420. locus_sdk-0.2.0b1/tests/unit/test_tools_watcher.py +295 -0
  421. locus_sdk-0.2.0b1/tests/unit/test_url_safety.py +229 -0
  422. locus_sdk-0.2.0b1/tests/unit/test_vector_stores.py +208 -0
@@ -0,0 +1,265 @@
1
+ # =============================================================================
2
+ # Local Testing (contains credentials - never commit)
3
+ # =============================================================================
4
+ TESTING_LOCAL.md
5
+ DEPENDENCY_VERSIONS.md
6
+
7
+ # =============================================================================
8
+ # Python
9
+ # =============================================================================
10
+
11
+ # Byte-compiled / optimized / DLL files
12
+ __pycache__/
13
+ *.py[cod]
14
+ *$py.class
15
+
16
+ # C extensions
17
+ *.so
18
+
19
+ # Distribution / packaging
20
+ .Python
21
+ build/
22
+ develop-eggs/
23
+ dist/
24
+ downloads/
25
+ eggs/
26
+ .eggs/
27
+ lib/
28
+ lib64/
29
+ parts/
30
+ sdist/
31
+ var/
32
+ wheels/
33
+ share/python-wheels/
34
+ *.egg-info/
35
+ .installed.cfg
36
+ *.egg
37
+ MANIFEST
38
+
39
+ # PyInstaller
40
+ *.manifest
41
+ *.spec
42
+
43
+ # Installer logs
44
+ pip-log.txt
45
+ pip-delete-this-directory.txt
46
+
47
+ # Unit test / coverage reports
48
+ htmlcov/
49
+ .tox/
50
+ .nox/
51
+ .coverage
52
+ .coverage.*
53
+ .cache
54
+ nosetests.xml
55
+ coverage.xml
56
+ coverage.json
57
+ *.cover
58
+ *.py,cover
59
+ .hypothesis/
60
+ .pytest_cache/
61
+ cover/
62
+
63
+ # Translations
64
+ *.mo
65
+ *.pot
66
+
67
+ # Environments
68
+ .env
69
+ .env.*
70
+ !.env.example
71
+ .venv
72
+ env/
73
+ venv/
74
+ ENV/
75
+ env.bak/
76
+ venv.bak/
77
+
78
+ # Spyder project settings
79
+ .spyderproject
80
+ .spyproject
81
+
82
+ # Rope project settings
83
+ .ropeproject
84
+
85
+ # mkdocs documentation
86
+ /site
87
+
88
+ # mypy
89
+ .mypy_cache/
90
+ .dmypy.json
91
+ dmypy.json
92
+
93
+ # Pyre type checker
94
+ .pyre/
95
+
96
+ # pytype static type analyzer
97
+ .pytype/
98
+
99
+ # Cython debug symbols
100
+ cython_debug/
101
+
102
+ # =============================================================================
103
+ # Hatch
104
+ # =============================================================================
105
+ .hatch/
106
+
107
+ # =============================================================================
108
+ # IDE / Editors
109
+ # =============================================================================
110
+
111
+ # VS Code
112
+ .vscode/
113
+ *.code-workspace
114
+
115
+ # PyCharm / IntelliJ
116
+ .idea/
117
+ *.iml
118
+ *.ipr
119
+ *.iws
120
+ out/
121
+
122
+ # Sublime Text
123
+ *.sublime-project
124
+ *.sublime-workspace
125
+
126
+ # Vim
127
+ *.swp
128
+ *.swo
129
+ *~
130
+ .vim/
131
+
132
+ # Emacs
133
+ *~
134
+ \#*\#
135
+ /.emacs.desktop
136
+ /.emacs.desktop.lock
137
+ *.elc
138
+ auto-save-list
139
+ tramp
140
+ .\#*
141
+
142
+ # =============================================================================
143
+ # OS Generated
144
+ # =============================================================================
145
+
146
+ # macOS
147
+ .DS_Store
148
+ .AppleDouble
149
+ .LSOverride
150
+ Icon
151
+ ._*
152
+ .DocumentRevisions-V100
153
+ .fseventsd
154
+ .Spotlight-V100
155
+ .TemporaryItems
156
+ .Trashes
157
+ .VolumeIcon.icns
158
+ .com.apple.timemachine.donotpresent
159
+ .AppleDB
160
+ .AppleDesktop
161
+ Network Trash Folder
162
+ Temporary Items
163
+ .apdisk
164
+
165
+ # Windows
166
+ Thumbs.db
167
+ Thumbs.db:encryptable
168
+ ehthumbs.db
169
+ ehthumbs_vista.db
170
+ *.stackdump
171
+ [Dd]esktop.ini
172
+ $RECYCLE.BIN/
173
+ *.cab
174
+ *.msi
175
+ *.msix
176
+ *.msm
177
+ *.msp
178
+ *.lnk
179
+
180
+ # Linux
181
+ *~
182
+ .fuse_hidden*
183
+ .directory
184
+ .Trash-*
185
+ .nfs*
186
+
187
+ # =============================================================================
188
+ # Project Specific
189
+ # =============================================================================
190
+
191
+ # Local configuration
192
+ *.local.yaml
193
+ *.local.json
194
+ config.local.*
195
+ .secrets/
196
+ secrets/
197
+
198
+ # Logs
199
+ logs/
200
+ *.log
201
+
202
+ # Temporary files
203
+ tmp/
204
+ temp/
205
+ *.tmp
206
+ *.temp
207
+
208
+ # Data files (potentially large)
209
+ data/
210
+ *.db
211
+ *.sqlite
212
+ *.sqlite3
213
+
214
+ # Notebooks checkpoints
215
+ .ipynb_checkpoints/
216
+
217
+ # Documentation build
218
+ docs/_build/
219
+
220
+ # Benchmarks
221
+ .benchmarks/
222
+
223
+ # Profiling
224
+ *.prof
225
+ *.lprof
226
+
227
+ # Debug
228
+ .debug/
229
+
230
+ # Local config
231
+ .env
232
+ .env.local
233
+ config.local.yaml
234
+ config.local.yml
235
+
236
+ # Oracle wallet files
237
+ **/oracle_wallet/
238
+ *.wallet
239
+ cwallet.sso
240
+ ewallet.p12
241
+ ewallet.pem
242
+ tnsnames.ora
243
+ sqlnet.ora
244
+ ojdbc.properties
245
+ *.jks
246
+
247
+ # Local development scripts (not tracked)
248
+ scripts/local/
249
+ scripts/test_*.sh
250
+
251
+ # Development test files (not user-facing examples)
252
+ examples/test_*.py
253
+ examples/mcp_test_*.py
254
+ examples/start_and_test.sh
255
+
256
+ # Old tutorials directory (superseded by examples/tutorial_*.py)
257
+ /tutorials/
258
+ site/
259
+ .claude/
260
+
261
+ # Tutorial 49 audio output (regenerated each run).
262
+ examples/tutorial_49_response.mp3
263
+ examples/tutorial_50_question.wav
264
+ examples/tutorial_50_answer.wav
265
+ examples/tutorial_50_answer.mp3
@@ -0,0 +1,28 @@
1
+ Copyright (c) 2025, 2026 Oracle and/or its affiliates.
2
+
3
+ The Universal Permissive License (UPL), Version 1.0
4
+
5
+ Subject to the condition set forth below, permission is hereby granted to any
6
+ person obtaining a copy of this software, associated documentation and/or data
7
+ (collectively the "Software"), free of charge and under any and all copyright
8
+ rights in the Software, and any and all patent rights owned or freely
9
+ licensable by each licensor hereunder covering either (i) the unmodified
10
+ Software as contributed to or provided by such licensor, or (ii) the Coverage
11
+ Obligations or modifications of such Software as made by anyone (collectively
12
+ the "Covered Obligations"), to deal in the Software without restriction,
13
+ including without limitation the rights to use, copy, modify, merge, publish,
14
+ distribute, sublicense, and/or sell copies of the Software, and to permit
15
+ persons to whom the Software is furnished to do so, subject to the following
16
+ condition:
17
+
18
+ The above copyright notice and either this complete permission notice or at a
19
+ minimum a reference to the UPL must be included in all copies or substantial
20
+ portions of the Software.
21
+
22
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
23
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
24
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
25
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
26
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
27
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
28
+ SOFTWARE.
@@ -0,0 +1,28 @@
1
+ Copyright (c) 2025, 2026 Oracle and/or its affiliates.
2
+
3
+ The Universal Permissive License (UPL), Version 1.0
4
+
5
+ Subject to the condition set forth below, permission is hereby granted to any
6
+ person obtaining a copy of this software, associated documentation and/or data
7
+ (collectively the "Software"), free of charge and under any and all copyright
8
+ rights in the Software, and any and all patent rights owned or freely
9
+ licensable by each licensor hereunder covering either (i) the unmodified
10
+ Software as contributed to or provided by such licensor, or (ii) the Coverage
11
+ Obligations or modifications of such Software as made by anyone (collectively
12
+ the "Covered Obligations"), to deal in the Software without restriction,
13
+ including without limitation the rights to use, copy, modify, merge, publish,
14
+ distribute, sublicense, and/or sell copies of the Software, and to permit
15
+ persons to whom the Software is furnished to do so, subject to the following
16
+ condition:
17
+
18
+ The above copyright notice and either this complete permission notice or at a
19
+ minimum a reference to the UPL must be included in all copies or substantial
20
+ portions of the Software.
21
+
22
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
23
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
24
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
25
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
26
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
27
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
28
+ SOFTWARE.