forrasdk 0.3.9__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 (274) hide show
  1. forrasdk/__init__.py +25 -0
  2. forrasdk/__init__.pyi +78 -0
  3. forrasdk/py.typed +0 -0
  4. forrasdk-0.3.9.dist-info/METADATA +74 -0
  5. forrasdk-0.3.9.dist-info/RECORD +274 -0
  6. forrasdk-0.3.9.dist-info/WHEEL +5 -0
  7. forrasdk-0.3.9.dist-info/entry_points.txt +3 -0
  8. forrasdk-0.3.9.dist-info/top_level.txt +4 -0
  9. scoutmcp/__init__.py +10 -0
  10. scoutmcp/__main__.py +58 -0
  11. scoutmcp/config.py +9 -0
  12. scoutmcp/exceptions.py +23 -0
  13. scoutmcp/native_mcp_server.py +159 -0
  14. scoutsdk/__init__.py +110 -0
  15. scoutsdk/__init__.pyi +78 -0
  16. scoutsdk/agents/__init__.py +0 -0
  17. scoutsdk/agents/scout_agent.py +27 -0
  18. scoutsdk/agents/scout_agent_runner.py +102 -0
  19. scoutsdk/api/__init__.py +147 -0
  20. scoutsdk/api/api.py +1175 -0
  21. scoutsdk/api/assistants.py +755 -0
  22. scoutsdk/api/audio.py +248 -0
  23. scoutsdk/api/auth.py +125 -0
  24. scoutsdk/api/automations.py +231 -0
  25. scoutsdk/api/base_content_metadata.py +12 -0
  26. scoutsdk/api/chat.py +564 -0
  27. scoutsdk/api/chat_tools_helper.py +311 -0
  28. scoutsdk/api/constants.py +1 -0
  29. scoutsdk/api/conversations.py +241 -0
  30. scoutsdk/api/current_assistant.py +269 -0
  31. scoutsdk/api/deprecated.py +65 -0
  32. scoutsdk/api/external_services.py +36 -0
  33. scoutsdk/api/function_progress.py +135 -0
  34. scoutsdk/api/groups.py +107 -0
  35. scoutsdk/api/image.py +238 -0
  36. scoutsdk/api/memories.py +197 -0
  37. scoutsdk/api/project_helpers.py +508 -0
  38. scoutsdk/api/projects.py +89 -0
  39. scoutsdk/api/protected.py +118 -0
  40. scoutsdk/api/py.typed +0 -0
  41. scoutsdk/api/request_utils.py +217 -0
  42. scoutsdk/api/retry_config.py +150 -0
  43. scoutsdk/api/search.py +74 -0
  44. scoutsdk/api/skills.py +359 -0
  45. scoutsdk/api/types/__init__.py +1 -0
  46. scoutsdk/api/types/assistants.py +11 -0
  47. scoutsdk/api/types/chat.py +36 -0
  48. scoutsdk/api/types/images.py +47 -0
  49. scoutsdk/api/users.py +191 -0
  50. scoutsdk/api/utils.py +296 -0
  51. scoutsdk/api/video.py +217 -0
  52. scoutsdk/api/vision.py +69 -0
  53. scoutsdk/cli/__init__.py +5 -0
  54. scoutsdk/cli/__main__.py +6 -0
  55. scoutsdk/cli/cli.py +74 -0
  56. scoutsdk/cli/config.py +21 -0
  57. scoutsdk/cli/error_handler.py +103 -0
  58. scoutsdk/cli/modules/__init__.py +0 -0
  59. scoutsdk/cli/modules/apps_module.py +140 -0
  60. scoutsdk/cli/modules/assistants_module.py +486 -0
  61. scoutsdk/cli/modules/base_module.py +25 -0
  62. scoutsdk/cli/modules/chat_completion_module.py +116 -0
  63. scoutsdk/cli/modules/functions_module.py +362 -0
  64. scoutsdk/cli/modules/mcp_module.py +75 -0
  65. scoutsdk/cli/modules/pkg_module.py +237 -0
  66. scoutsdk/cli/modules/skills_module.py +300 -0
  67. scoutsdk/cli/modules/skills_sync_module.py +394 -0
  68. scoutsdk/cli/modules/sync_module.py +823 -0
  69. scoutsdk/cli/py.typed +0 -0
  70. scoutsdk/cli/types.py +11 -0
  71. scoutsdk/cli/utils.py +64 -0
  72. scoutsdk/crawlers/__init__.py +0 -0
  73. scoutsdk/crawlers/crawlers.py +264 -0
  74. scoutsdk/crawlers/crawlers_impl/__init__.py +0 -0
  75. scoutsdk/crawlers/crawlers_impl/sharepoint_crawler.py +247 -0
  76. scoutsdk/crawlers/indexers.py +156 -0
  77. scoutsdk/crawlers/indexers_impl/__init__.py +0 -0
  78. scoutsdk/crawlers/indexers_impl/document_indexer.py +83 -0
  79. scoutsdk/crawlers/indexers_impl/spreadsheet_indexer.py +62 -0
  80. scoutsdk/crawlers/indexers_impl/summary_indexer.py +35 -0
  81. scoutsdk/crawlers/indexers_impl/utils/__init__.py +0 -0
  82. scoutsdk/crawlers/indexers_impl/utils/assistant_data_utils.py +78 -0
  83. scoutsdk/crawlers/indexers_impl/utils/content_extractor.py +95 -0
  84. scoutsdk/crawlers/indexers_impl/utils/embedding_utils.py +41 -0
  85. scoutsdk/crawlers/models.py +43 -0
  86. scoutsdk/data/.env.template +1 -0
  87. scoutsdk/data/__init__.py +5 -0
  88. scoutsdk/data/assistants/README.md +230 -0
  89. scoutsdk/data/assistants/__init__.py +5 -0
  90. scoutsdk/data/assistants/advanced/README.md +213 -0
  91. scoutsdk/data/assistants/advanced/assistants_template.json +28 -0
  92. scoutsdk/data/assistants/advanced/avatar.jpeg +0 -0
  93. scoutsdk/data/assistants/advanced/conversation_starters.md +1 -0
  94. scoutsdk/data/assistants/advanced/data.txt +1 -0
  95. scoutsdk/data/assistants/advanced/system_prompt.md +25 -0
  96. scoutsdk/data/assistants/assistants.json +36 -0
  97. scoutsdk/data/assistants/avatar.jpeg +0 -0
  98. scoutsdk/data/assistants/basic/assistants_template.json +19 -0
  99. scoutsdk/data/assistants/basic/avatar.jpeg +0 -0
  100. scoutsdk/data/assistants/data.txt +1 -0
  101. scoutsdk/data/assistants/instructions.md +1 -0
  102. scoutsdk/data/assistants/starter_prompt.md +1 -0
  103. scoutsdk/data/assistants/with-function/assistants_template.json +23 -0
  104. scoutsdk/data/assistants/with-function/avatar.jpeg +0 -0
  105. scoutsdk/data/assistants/with-micro-app/assistants_template.json +20 -0
  106. scoutsdk/data/assistants/with-micro-app/avatar.jpeg +0 -0
  107. scoutsdk/data/assistants/with-micro-app-and-function/assistants_template.json +29 -0
  108. scoutsdk/data/assistants/with-micro-app-and-function/avatar.jpeg +0 -0
  109. scoutsdk/data/functions/.pkgignore +7 -0
  110. scoutsdk/data/functions/CLAUDE.md +3 -0
  111. scoutsdk/data/functions/Makefile +55 -0
  112. scoutsdk/data/functions/README.md +347 -0
  113. scoutsdk/data/functions/__init__.py +5 -0
  114. scoutsdk/data/functions/custom_function_working_with_micro_app.py +117 -0
  115. scoutsdk/data/functions/document_chunker_template.py +42 -0
  116. scoutsdk/data/functions/function_template.py +21 -0
  117. scoutsdk/data/functions/main.py +6 -0
  118. scoutsdk/data/functions/mise.toml +11 -0
  119. scoutsdk/data/functions/pyproject.toml +14 -0
  120. scoutsdk/data/functions/requirements.txt +1 -0
  121. scoutsdk/data/functions/uv.lock +578 -0
  122. scoutsdk/data/functions/webhook_template.py +22 -0
  123. scoutsdk/data/micro-apps/CLAUDE.md +110 -0
  124. scoutsdk/data/micro-apps/advanced/.eslintignore +4 -0
  125. scoutsdk/data/micro-apps/advanced/.eslintrc.cjs +28 -0
  126. scoutsdk/data/micro-apps/advanced/.prettierignore +16 -0
  127. scoutsdk/data/micro-apps/advanced/.prettierrc +10 -0
  128. scoutsdk/data/micro-apps/advanced/.tool-versions +1 -0
  129. scoutsdk/data/micro-apps/advanced/Makefile +53 -0
  130. scoutsdk/data/micro-apps/advanced/bun.lock +1840 -0
  131. scoutsdk/data/micro-apps/advanced/index.html +13 -0
  132. scoutsdk/data/micro-apps/advanced/package.json +41 -0
  133. scoutsdk/data/micro-apps/advanced/prettier.config.cjs +12 -0
  134. scoutsdk/data/micro-apps/advanced/src/App.css +60 -0
  135. scoutsdk/data/micro-apps/advanced/src/App.tsx +174 -0
  136. scoutsdk/data/micro-apps/advanced/src/assets/app.svg +6 -0
  137. scoutsdk/data/micro-apps/advanced/src/constants/index.ts +3 -0
  138. scoutsdk/data/micro-apps/advanced/src/hooks/use-scout-translation.ts +36 -0
  139. scoutsdk/data/micro-apps/advanced/src/hooks/useFileHandling.ts +139 -0
  140. scoutsdk/data/micro-apps/advanced/src/index.css +29 -0
  141. scoutsdk/data/micro-apps/advanced/src/locales/strings.json +22 -0
  142. scoutsdk/data/micro-apps/advanced/src/main.tsx +13 -0
  143. scoutsdk/data/micro-apps/advanced/src/types.ts +15 -0
  144. scoutsdk/data/micro-apps/advanced/src/utils/file.ts +14 -0
  145. scoutsdk/data/micro-apps/advanced/src/vite-env.d.ts +2 -0
  146. scoutsdk/data/micro-apps/advanced/tsconfig.json +41 -0
  147. scoutsdk/data/micro-apps/advanced/vite.config.ts +15 -0
  148. scoutsdk/data/micro-apps/basic/.eslintignore +4 -0
  149. scoutsdk/data/micro-apps/basic/.eslintrc.cjs +28 -0
  150. scoutsdk/data/micro-apps/basic/.prettierignore +16 -0
  151. scoutsdk/data/micro-apps/basic/.prettierrc +10 -0
  152. scoutsdk/data/micro-apps/basic/.tool-versions +1 -0
  153. scoutsdk/data/micro-apps/basic/Makefile +53 -0
  154. scoutsdk/data/micro-apps/basic/index.html +13 -0
  155. scoutsdk/data/micro-apps/basic/package.json +41 -0
  156. scoutsdk/data/micro-apps/basic/prettier.config.cjs +12 -0
  157. scoutsdk/data/micro-apps/basic/src/App.tsx +59 -0
  158. scoutsdk/data/micro-apps/basic/src/hooks/use-scout-translation.ts +36 -0
  159. scoutsdk/data/micro-apps/basic/src/index.css +24 -0
  160. scoutsdk/data/micro-apps/basic/src/locales/strings.json +10 -0
  161. scoutsdk/data/micro-apps/basic/src/main.tsx +13 -0
  162. scoutsdk/data/micro-apps/basic/src/vite-env.d.ts +2 -0
  163. scoutsdk/data/micro-apps/basic/tsconfig.json +41 -0
  164. scoutsdk/data/micro-apps/basic/vite.config.ts +15 -0
  165. scoutsdk/data/skills/skills_mcp_template.json +29 -0
  166. scoutsdk/data/skills/skills_template.json +14 -0
  167. scoutsdk/opencode/__init__.py +3 -0
  168. scoutsdk/opencode/opencode.py +69 -0
  169. scoutsdk/py.typed +0 -0
  170. scoutsdk/shared/__init__.py +0 -0
  171. scoutsdk/shared/assistants_types.py +24 -0
  172. scoutsdk/shared/audio_types.py +6 -0
  173. scoutsdk/shared/conversations_types.py +24 -0
  174. scoutsdk/shared/defines.py +19 -0
  175. scoutsdk/shared/document_chunker_types.py +53 -0
  176. scoutsdk/shared/protected_types.py +5 -0
  177. scoutsdk/shared/upload_files.py +64 -0
  178. scouttypes/__init__.py +178 -0
  179. scouttypes/api/__init__.py +1 -0
  180. scouttypes/api/async_job_response.py +8 -0
  181. scouttypes/assistants/__init__.py +69 -0
  182. scouttypes/assistants/allowed_avatar_content_types_response.py +10 -0
  183. scouttypes/assistants/assistant_custom_function.py +13 -0
  184. scouttypes/assistants/assistant_custom_functions_response.py +9 -0
  185. scouttypes/assistants/assistant_data.py +12 -0
  186. scouttypes/assistants/assistant_data_list.py +11 -0
  187. scouttypes/assistants/assistant_data_response.py +12 -0
  188. scouttypes/assistants/assistant_data_response_item.py +11 -0
  189. scouttypes/assistants/assistant_data_update_response.py +9 -0
  190. scouttypes/assistants/assistant_delete_response.py +9 -0
  191. scouttypes/assistants/assistant_file.py +16 -0
  192. scouttypes/assistants/assistant_file_edit_response.py +9 -0
  193. scouttypes/assistants/assistant_file_upload_response.py +11 -0
  194. scouttypes/assistants/assistant_function_execution_response.py +10 -0
  195. scouttypes/assistants/assistant_info_response.py +30 -0
  196. scouttypes/assistants/assistant_public_response.py +22 -0
  197. scouttypes/assistants/assistant_response.py +10 -0
  198. scouttypes/assistants/assistant_search_data_response.py +16 -0
  199. scouttypes/assistants/assistant_upload_image_response.py +10 -0
  200. scouttypes/assistants/assistant_user_token_response.py +13 -0
  201. scouttypes/assistants/content_retrieving_strategy.py +13 -0
  202. scouttypes/assistants/create_assistant_data_response.py +11 -0
  203. scouttypes/assistants/delegation_request.py +12 -0
  204. scouttypes/assistants/delete_assistant_data_response.py +9 -0
  205. scouttypes/assistants/file_types.py +13 -0
  206. scouttypes/assistants/generate_assistant_avatar_response.py +9 -0
  207. scouttypes/assistants/link_request.py +12 -0
  208. scouttypes/assistants/model_visibility.py +17 -0
  209. scouttypes/assistants/query_assistant_data_response.py +10 -0
  210. scouttypes/assistants/shared_group.py +10 -0
  211. scouttypes/assistants/shared_user.py +13 -0
  212. scouttypes/assistants/skill_response.py +31 -0
  213. scouttypes/assistants/update_assistant_request.py +28 -0
  214. scouttypes/audio/__init__.py +9 -0
  215. scouttypes/audio/audio_object.py +11 -0
  216. scouttypes/audio/audio_transcription_request.py +14 -0
  217. scouttypes/audio/audio_transcription_response.py +10 -0
  218. scouttypes/automations/__init__.py +33 -0
  219. scouttypes/automations/automation.py +60 -0
  220. scouttypes/automations/automation_run.py +47 -0
  221. scouttypes/chat/__init__.py +3 -0
  222. scouttypes/chat/chat_completion_request.py +18 -0
  223. scouttypes/chat/chat_completion_response.py +12 -0
  224. scouttypes/chat/llm_model.py +21 -0
  225. scouttypes/constants/__init__.py +11 -0
  226. scouttypes/constants/brand_variables.py +29 -0
  227. scouttypes/constants/content_types.py +3 -0
  228. scouttypes/constants/variable_names.py +36 -0
  229. scouttypes/conversations/__init__.py +48 -0
  230. scouttypes/conversations/conversation_message.py +22 -0
  231. scouttypes/conversations/conversation_message_content_part.py +35 -0
  232. scouttypes/conversations/conversation_message_content_part_image_param.py +15 -0
  233. scouttypes/conversations/conversation_message_content_part_image_ref_param.py +12 -0
  234. scouttypes/conversations/conversation_message_content_part_input_audio_param.py +12 -0
  235. scouttypes/conversations/conversation_message_content_part_input_audio_ref_param.py +12 -0
  236. scouttypes/conversations/conversation_message_content_part_pdf_param.py +12 -0
  237. scouttypes/conversations/conversation_message_content_part_pdf_ref_param.py +12 -0
  238. scouttypes/conversations/conversation_message_content_part_text_param.py +11 -0
  239. scouttypes/conversations/conversation_response.py +18 -0
  240. scouttypes/conversations/create_conversation_request.py +16 -0
  241. scouttypes/conversations/delete_conversation_response.py +9 -0
  242. scouttypes/conversations/message_metadata.py +15 -0
  243. scouttypes/conversations/message_reasoning.py +12 -0
  244. scouttypes/conversations/message_role.py +13 -0
  245. scouttypes/conversations/message_tool_call.py +12 -0
  246. scouttypes/conversations/metadata_file.py +10 -0
  247. scouttypes/conversations/metadata_tool_call.py +12 -0
  248. scouttypes/conversations/signed_upload_url_response.py +23 -0
  249. scouttypes/conversations/stream_error.py +11 -0
  250. scouttypes/conversations/stream_finish_reason.py +11 -0
  251. scouttypes/conversations/stream_tool_call.py +15 -0
  252. scouttypes/conversations/stream_tool_call_status.py +9 -0
  253. scouttypes/conversations/tool_call_function.py +10 -0
  254. scouttypes/conversations/upload_mode.py +9 -0
  255. scouttypes/document_chunker/__init__.py +6 -0
  256. scouttypes/document_chunker/abstract_document_chunker.py +32 -0
  257. scouttypes/document_chunker/chunk.py +14 -0
  258. scouttypes/document_chunker/chunk_metadata.py +16 -0
  259. scouttypes/document_chunker/document_chunks.py +13 -0
  260. scouttypes/images/__init__.py +7 -0
  261. scouttypes/images/image_aspect_ratio.py +10 -0
  262. scouttypes/images/image_background.py +11 -0
  263. scouttypes/images/image_file_object.py +6 -0
  264. scouttypes/images/image_quality.py +11 -0
  265. scouttypes/images/image_request.py +23 -0
  266. scouttypes/images/image_resolution.py +10 -0
  267. scouttypes/images/image_response.py +14 -0
  268. scouttypes/protected/__init__.py +5 -0
  269. scouttypes/protected/signed_url_response.py +9 -0
  270. scouttypes/py.typed +0 -0
  271. scouttypes/skills/__init__.py +2 -0
  272. scouttypes/skills/build_skill_request.py +14 -0
  273. scouttypes/skills/build_skill_response.py +11 -0
  274. scouttypes/upload_files.py +71 -0
forrasdk/__init__.py ADDED
@@ -0,0 +1,25 @@
1
+ """Forra SDK - Python client library for Forra."""
2
+
3
+ from typing import Any
4
+
5
+ import scoutsdk
6
+
7
+ _ALIASES = {
8
+ "ForraAPI": "ScoutAPI",
9
+ "ForraCLI": "ScoutCLI",
10
+ "ForraAgent": "ScoutAgent",
11
+ "ForraAgentRunner": "ScoutAgentRunner",
12
+ "forra": "scout",
13
+ }
14
+
15
+
16
+ def __getattr__(name: str) -> Any:
17
+ target = _ALIASES.get(name, name)
18
+ return getattr(scoutsdk, target)
19
+
20
+
21
+ def __dir__() -> list[str]:
22
+ return sorted(set(scoutsdk.__all__) | set(_ALIASES))
23
+
24
+
25
+ __all__ = [*scoutsdk.__all__, *_ALIASES.keys()]
forrasdk/__init__.pyi ADDED
@@ -0,0 +1,78 @@
1
+ from scoutsdk import (
2
+ ScoutAPI as ScoutAPI,
3
+ ScoutCLI as ScoutCLI,
4
+ ScoutAgent as ScoutAgent,
5
+ ScoutAgentRunner as ScoutAgentRunner,
6
+ scout as scout,
7
+ forra as forra,
8
+ AssistantFile as AssistantFile,
9
+ AssistantResponse as AssistantResponse,
10
+ SCOUT_CUSTOM_FUNCTION_CONTENT_TYPE as SCOUT_CUSTOM_FUNCTION_CONTENT_TYPE,
11
+ SignedUploadUrlResponse as SignedUploadUrlResponse,
12
+ VariableNames as VariableNames,
13
+ AutomationResponse as AutomationResponse,
14
+ AutomationRunResponse as AutomationRunResponse,
15
+ AutomationPayload as AutomationPayload,
16
+ AutomationPayloadType as AutomationPayloadType,
17
+ AutomationRunStatus as AutomationRunStatus,
18
+ ChunkMetadata as ChunkMetadata,
19
+ Chunk as Chunk,
20
+ DocumentChunks as DocumentChunks,
21
+ AbstractDocumentChunker as AbstractDocumentChunker,
22
+ AudioTranscriptionResponse as AudioTranscriptionResponse,
23
+ SignedUrlResponse as SignedUrlResponse,
24
+ indexers as indexers,
25
+ Indexer as Indexer,
26
+ crawlers as crawlers,
27
+ Crawler as Crawler,
28
+ CrawlerConfiguration as CrawlerConfiguration,
29
+ Document as Document,
30
+ opencode as opencode,
31
+ HtmlFunctionProgress as HtmlFunctionProgress,
32
+ StepsFunctionProgress as StepsFunctionProgress,
33
+ StepStatus as StepStatus,
34
+ )
35
+
36
+ ForraAPI = ScoutAPI
37
+ ForraCLI = ScoutCLI
38
+ ForraAgent = ScoutAgent
39
+ ForraAgentRunner = ScoutAgentRunner
40
+
41
+ __all__ = [
42
+ "ForraAPI",
43
+ "ForraCLI",
44
+ "ForraAgent",
45
+ "ForraAgentRunner",
46
+ "forra",
47
+ "ScoutAPI",
48
+ "ScoutCLI",
49
+ "ScoutAgent",
50
+ "ScoutAgentRunner",
51
+ "scout",
52
+ "AssistantResponse",
53
+ "SCOUT_CUSTOM_FUNCTION_CONTENT_TYPE",
54
+ "AssistantFile",
55
+ "SignedUploadUrlResponse",
56
+ "VariableNames",
57
+ "AutomationResponse",
58
+ "AutomationRunResponse",
59
+ "AutomationPayload",
60
+ "AutomationPayloadType",
61
+ "AutomationRunStatus",
62
+ "ChunkMetadata",
63
+ "Chunk",
64
+ "DocumentChunks",
65
+ "AbstractDocumentChunker",
66
+ "AudioTranscriptionResponse",
67
+ "SignedUrlResponse",
68
+ "indexers",
69
+ "Indexer",
70
+ "crawlers",
71
+ "Crawler",
72
+ "CrawlerConfiguration",
73
+ "Document",
74
+ "opencode",
75
+ "HtmlFunctionProgress",
76
+ "StepsFunctionProgress",
77
+ "StepStatus",
78
+ ]
forrasdk/py.typed ADDED
File without changes
@@ -0,0 +1,74 @@
1
+ Metadata-Version: 2.4
2
+ Name: forrasdk
3
+ Version: 0.3.9
4
+ Summary: Python package for forrasdk
5
+ Author-email: Mirego <info@mirego.com>
6
+ Requires-Python: >=3.11
7
+ Description-Content-Type: text/markdown
8
+ Requires-Dist: requests>=2.32.2
9
+ Requires-Dist: pydantic>=2.11.7
10
+ Requires-Dist: python-dotenv>=1.0.1
11
+ Requires-Dist: jsonschema>=4.23.0
12
+ Requires-Dist: tenacity>=9.0.0
13
+ Requires-Dist: ansi2html>=1.9.2
14
+ Provides-Extra: dev
15
+ Requires-Dist: build>=1.2.2.post1; extra == "dev"
16
+ Requires-Dist: pytest; extra == "dev"
17
+ Requires-Dist: mypy; extra == "dev"
18
+ Requires-Dist: ruff; extra == "dev"
19
+ Requires-Dist: types-requests; extra == "dev"
20
+ Requires-Dist: types-jsonschema; extra == "dev"
21
+ Provides-Extra: mcp
22
+ Requires-Dist: mcp>=1.13.1; extra == "mcp"
23
+
24
+ # Forra SDK Package
25
+
26
+ Helper python package to interact with the Forra platform.
27
+
28
+ ## Installation
29
+
30
+ ```bash
31
+ pip install forrasdk
32
+ ```
33
+
34
+ ## Usage
35
+
36
+ ```python
37
+ from forrasdk import ForraAPI
38
+
39
+ forra = ForraAPI(base_url="your_forra_base_url", api_access_token="you_api_access_token")
40
+ ```
41
+
42
+ ## Retry Logic
43
+
44
+ The SDK automatically retries failed API requests with exponential backoff to handle transient failures. This improves reliability when dealing with network issues or temporary server problems.
45
+
46
+ ### Default Behavior
47
+
48
+ - **Max attempts**: 3 (initial request + 2 retries)
49
+ - **Wait time**: Exponential backoff with multiplier=1, min=4s, max=10s
50
+ - **Retry on**:
51
+ - Rate limiting (429)
52
+ - Server errors (500, 502, 503, 504)
53
+ - Network errors (ConnectionError, Timeout)
54
+ - **Does NOT retry on**:
55
+ - Client errors (400, 401, 403, 404, etc.)
56
+ - Successful responses
57
+
58
+ ### How It Works
59
+
60
+ All HTTP methods (GET, POST, PUT, DELETE, PATCH) in the SDK automatically retry on transient failures:
61
+
62
+ ```python
63
+ from forrasdk import ForraAPI
64
+
65
+ forra = ForraAPI(base_url="your_url", api_access_token="your_token")
66
+
67
+ # This request will automatically retry up to 3 times on 5xx errors
68
+ response = forra.chat.completion(messages="Hello!")
69
+ ```
70
+
71
+ The retry logic is transparent - you don't need to change your code. If a request fails with a retryable error, the SDK will:
72
+ 1. Wait with exponential backoff (4s, then 8s, then 10s max)
73
+ 2. Retry the request
74
+ 3. Return the result if successful, or raise the exception after exhausting retries
@@ -0,0 +1,274 @@
1
+ forrasdk/__init__.py,sha256=qbneJXqf8csUTRXPFc-Pyaxel7e4J5PYXb5VVABLu-0,511
2
+ forrasdk/__init__.pyi,sha256=SbaS9wVFCjt6LsBiC-0AG7pUzX85g2l5ZJlRPr32N7M,2180
3
+ forrasdk/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
+ scoutmcp/__init__.py,sha256=NiKo_kyGk-mqfyFDXb_P-4pilKklC5frFV_h2WSnNGA,245
5
+ scoutmcp/__main__.py,sha256=1LXPR2FmThTEVnotfjin5DZ7Xjk-a-iuzvU6y6prmsE,1723
6
+ scoutmcp/config.py,sha256=4WmkhC9rjTpMRiI1-DcVV-hRM7G9HdLC2Q8HNIVrxm8,309
7
+ scoutmcp/exceptions.py,sha256=aYE_WPh-kvtJDG1SDRdwh-hKLVu6gAdto9vRWnOPAyA,656
8
+ scoutmcp/native_mcp_server.py,sha256=HHgdnFjd_R4AYnwOkAHJUW2yz0v3tXTaE3JqHcDlQ78,6042
9
+ scoutsdk/__init__.py,sha256=MFMgxhd7gAqQJFjwCIMCuDnPdMd11pIm8CXDe1NmvlQ,3346
10
+ scoutsdk/__init__.pyi,sha256=cF88MvER5r3oRge1HB1L_RBopK_J4Jyj_nBPIeNRZBA,2473
11
+ scoutsdk/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
12
+ scoutsdk/agents/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
13
+ scoutsdk/agents/scout_agent.py,sha256=oKqtFJunR3yuDo7Av9j38O0m0lZozxIJQ3Cn_THhuPI,973
14
+ scoutsdk/agents/scout_agent_runner.py,sha256=fu8WzS6Qr8P1ghezvh8NNeUu4gjUdAqn-wWZzK5PwhQ,3680
15
+ scoutsdk/api/__init__.py,sha256=j5Oi3pVA14DZNl1sdOHCJQZIiKN7vZouOoIerX4mmMQ,3532
16
+ scoutsdk/api/api.py,sha256=ZdbPsWQ3alwjbC_4vWscaj4eUI32EDWrb0Z1fKT5HpM,43115
17
+ scoutsdk/api/assistants.py,sha256=S6_kOMYZbXSxG0RxVwsey6ktmGiloyVFnhIHzCvK-fY,29479
18
+ scoutsdk/api/audio.py,sha256=uMpii_LcBjClZsFN1LefltLILZJkjKjBsMUOkGQRJ1I,9202
19
+ scoutsdk/api/auth.py,sha256=hXq7ey9De22-Sc56GgVPE0gRv0DsyE1U3y8PBonEk2Y,4408
20
+ scoutsdk/api/automations.py,sha256=G-j5LdbiXC5SAwM2ymVckEAKIInW_piKYhTBKU7SKq8,7879
21
+ scoutsdk/api/base_content_metadata.py,sha256=C_j1O3UQbnWvF8IfrT-0vCL--ChAqIMFgHs8SEyTIDE,280
22
+ scoutsdk/api/chat.py,sha256=98bE1v8aLaPEotvLaoYj1QRJINlp7cCVp-8jTXIZJiQ,22652
23
+ scoutsdk/api/chat_tools_helper.py,sha256=tuxTA9fI-o_F8SENE7uky8Lv3-2p6YOHXNO11rCmLPM,12691
24
+ scoutsdk/api/constants.py,sha256=t6-vU5JJiT-MmmvNzOkjqFPzjkpRy5V_8xDmgTSNfX8,61
25
+ scoutsdk/api/conversations.py,sha256=02puWtlsUh5LuTLobPiST5itFvXfiwqRt6OClB94fvI,8591
26
+ scoutsdk/api/current_assistant.py,sha256=q1mUlEdaSKEVzbyAxyx7aop9_FvtIMwruOfBT_wzheY,8658
27
+ scoutsdk/api/deprecated.py,sha256=sy8_T6VzIRqC50pa8qu8VesSG9NAr2legB8QnEfbezg,1988
28
+ scoutsdk/api/external_services.py,sha256=-fKS3oqteCfudVdYVl7rKC-BhhW_9RyHSyjpK5UIqaY,1276
29
+ scoutsdk/api/function_progress.py,sha256=-48CkWVv_MDyDQwQbSiRJ7gH1PTVEGFMkJIJ8uHNG3o,4305
30
+ scoutsdk/api/groups.py,sha256=gyrwTWeTU_MJCbFB3567f0u_3UthGnReQ2wfOHcqRAE,3833
31
+ scoutsdk/api/image.py,sha256=Ykp5Y6EFxlILPXDWS7VdxXMeBtvzKWgEHO3HzUH3HTA,8949
32
+ scoutsdk/api/memories.py,sha256=xrONJnZ5_S5BeqzTc8eRVVne6nGr4_8VTQhA-BPQ2Ns,6304
33
+ scoutsdk/api/project_helpers.py,sha256=q3sNloEmnk-wnVvfAZ2yJl_zPvc0PILLb1OYzt7G1Aw,20158
34
+ scoutsdk/api/projects.py,sha256=fzyuKKbAGIyGgbojn-KgpvjbH-YW_NxZvy4ZZNKYu_4,3295
35
+ scoutsdk/api/protected.py,sha256=PhexfoO3KTW-Pleg3vdke655VeSPxkXgR-ece8h8qME,3886
36
+ scoutsdk/api/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
37
+ scoutsdk/api/request_utils.py,sha256=5KEERwGPYGGO9FKPoiYu3JMYzj4O0_4h5NcLXLmZQ4I,7580
38
+ scoutsdk/api/retry_config.py,sha256=VVTtoDxh_kRj8Zt-UpDgFlGrGN7HkJ2C1jTzRoxHt1g,4653
39
+ scoutsdk/api/search.py,sha256=odCJgQoj86ibJt1eYXembjkijYzxiMpNBe8lvhp22-M,2232
40
+ scoutsdk/api/skills.py,sha256=1b7Fc5Vym9HhwvwzztCgigFpjAqD6E8sJIpV7h7ytJI,13995
41
+ scoutsdk/api/users.py,sha256=xIaPPllpwpisNg3t4WmROYU3jqTzLxn3mUNJi4J7iK0,6731
42
+ scoutsdk/api/utils.py,sha256=23zvPsUzOBjnB-pSFyM9LOU07umPOcEiFU-iml5Fztg,11141
43
+ scoutsdk/api/video.py,sha256=IVAPvNTSulyKar6oFSkgVUouUP-v5QtrRDez2qt91jk,7504
44
+ scoutsdk/api/vision.py,sha256=Hfc7eaN2bbaNc7jrxhKsRC92pLWbzPZ1hNoA5aJCYDk,2146
45
+ scoutsdk/api/types/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
46
+ scoutsdk/api/types/assistants.py,sha256=8KOAgILPIykTsrUrrc_8Bh2w6dqjzmEwBXXqmVWtJ1s,248
47
+ scoutsdk/api/types/chat.py,sha256=LdqeH0o-iQDorqGYU-1LeSAv3lPQXYvoxLJzmAqRBpo,920
48
+ scoutsdk/api/types/images.py,sha256=LQBFb7e5vQ3zOavJs1-Mg-WlbL-HMyvhYm8493MZEfA,1084
49
+ scoutsdk/cli/__init__.py,sha256=Y_6kABMAP0SCImm7FMBDaEculfY6wK2NbKnmR3i4DQ4,101
50
+ scoutsdk/cli/__main__.py,sha256=5larFc46Fx66u_pocle_LSmFSaAIu059bboe5-8hzZs,104
51
+ scoutsdk/cli/cli.py,sha256=MWDyQ7dOH_s-RsH6M-CxGWG0I0iM1VGl5brCTTeCNvg,2495
52
+ scoutsdk/cli/config.py,sha256=SUkF9WHZIPRDWng8Rz5X7Hmy8TEPi8h3Z-u5MAASyb8,660
53
+ scoutsdk/cli/error_handler.py,sha256=42i3lXhwInKs_cV7-Ei6-uh8RZzxFWTHPzoMZop3BbQ,2559
54
+ scoutsdk/cli/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
55
+ scoutsdk/cli/types.py,sha256=NukAiUQSJ5ShjiWTXXtnyLjKmgNKGmXEBlEzaIj3UGg,184
56
+ scoutsdk/cli/utils.py,sha256=fKzjmdpg0AjYF7ErDiVXlN72qTotz2lFO5RV9fzZuw8,1887
57
+ scoutsdk/cli/modules/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
58
+ scoutsdk/cli/modules/apps_module.py,sha256=zvPaNMxKgtyl_PEVWTmCes5hIsLNtW0w6fLhvZfZITs,5079
59
+ scoutsdk/cli/modules/assistants_module.py,sha256=croECRSmlvs0wWdaEbN2SHaPtL26TcPU-3C0sCVxkjQ,18352
60
+ scoutsdk/cli/modules/base_module.py,sha256=uKp5cwpggfTOEh0QRduvFYF6E0ePQ9Qk0k2oVv6hh20,739
61
+ scoutsdk/cli/modules/chat_completion_module.py,sha256=UcXn-0l39wS0DV5QqFlZGGUIAg0yOeEnrVuMH42Wt9Y,4203
62
+ scoutsdk/cli/modules/functions_module.py,sha256=HNCIy7X-88PK_E_rGc-1Tp8fvJ1VVfOuz0D55AI4bXc,13126
63
+ scoutsdk/cli/modules/mcp_module.py,sha256=cTAT3vF-ihZ7WPbKFldGjOTcfsVCbfh2y1SqwEw00MA,2270
64
+ scoutsdk/cli/modules/pkg_module.py,sha256=5iD5ESM0hMcs0ZcYKEUjrh6ryJTOpnDVwVR7hdunQr4,8814
65
+ scoutsdk/cli/modules/skills_module.py,sha256=zOlybhtp6xM7vaMzWbj3RCD9Yg6r4koEWd8aDwAiTAk,11321
66
+ scoutsdk/cli/modules/skills_sync_module.py,sha256=gt4occkA0s8Iv1F4fL4hn7pwkQ3t_yIA1oiBSQvNhHQ,14260
67
+ scoutsdk/cli/modules/sync_module.py,sha256=i-ypfAnPsCdWQdIR1OaL2QJMX8nxAFWug1zG0UnL5DQ,30889
68
+ scoutsdk/crawlers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
69
+ scoutsdk/crawlers/crawlers.py,sha256=9NRFFsMYNGF1NRjkMPdexfhBpNwKPFOXOR6fj-4LdHE,9318
70
+ scoutsdk/crawlers/indexers.py,sha256=Dr7sNdj22YoPMwTlovpsiPkcyPjDhBR3up9vrJxAlyM,5472
71
+ scoutsdk/crawlers/models.py,sha256=sFJnj-ilIlVVqvyGigA75zIykaqiUgT9jgCFj6RAmZg,1044
72
+ scoutsdk/crawlers/crawlers_impl/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
73
+ scoutsdk/crawlers/crawlers_impl/sharepoint_crawler.py,sha256=fbueN7pizgxAx97XPJ2zcsc1a0ZSyDAFkWOQAhcZm6A,8507
74
+ scoutsdk/crawlers/indexers_impl/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
75
+ scoutsdk/crawlers/indexers_impl/document_indexer.py,sha256=8gGWiE_P6CPDoJJHxUbvfsYR8MxLTj8-3iX8EuI9rPo,3108
76
+ scoutsdk/crawlers/indexers_impl/spreadsheet_indexer.py,sha256=NBo7FQWAodfGh_T25ju_-zoc6pTVwtWdz1EB0JLCe_k,2411
77
+ scoutsdk/crawlers/indexers_impl/summary_indexer.py,sha256=QoglCcxCFlHQX5kL4AgN3hhd3T5crowZvhadnu4vsOg,1134
78
+ scoutsdk/crawlers/indexers_impl/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
79
+ scoutsdk/crawlers/indexers_impl/utils/assistant_data_utils.py,sha256=3T24Khd3gf3eCfO5kmFvNi9McuZN_ufo6Bfal6XE-B0,2593
80
+ scoutsdk/crawlers/indexers_impl/utils/content_extractor.py,sha256=6wzBMfZLEAmrFRBCGsJQ8zONHyPN9AuKbO2cnf9l1jk,5408
81
+ scoutsdk/crawlers/indexers_impl/utils/embedding_utils.py,sha256=bM0IvDPG3JvBUVLunenG2edTePMnN7AYdMWQcuIVArA,1282
82
+ scoutsdk/data/.env.template,sha256=6zbrg-3WbiwcivhDV-QFaBbJvKSNDzz2Wo-0f_n54XQ,215
83
+ scoutsdk/data/__init__.py,sha256=Xh4I_znaBaaknv-SH5I_cIFkVcJ9Epmazvu8pA2QOrg,93
84
+ scoutsdk/data/assistants/README.md,sha256=5ti84EGSrD-_qW_PEoREDAtKgejUVVujyt3ePp9rXbo,8382
85
+ scoutsdk/data/assistants/__init__.py,sha256=Xh4I_znaBaaknv-SH5I_cIFkVcJ9Epmazvu8pA2QOrg,93
86
+ scoutsdk/data/assistants/assistants.json,sha256=z0Tn1Vli3AHWpwMJNGSxgreR1v7UsFY_toj1HuQGrOM,1439
87
+ scoutsdk/data/assistants/avatar.jpeg,sha256=owyEHXVhpitz2pyCEfJhMW5HaR-MwV2A-RFMbO7MpZU,31209
88
+ scoutsdk/data/assistants/data.txt,sha256=RJYg0zaTkkOYy0jcvuJPEbeuagRhGIzx7T1mOqWDNyo,28
89
+ scoutsdk/data/assistants/instructions.md,sha256=m9fuLOxno90YC05RHBfidzPsXTRIVLCPoziik_uQQdk,45
90
+ scoutsdk/data/assistants/starter_prompt.md,sha256=xxTPf74_KROMmNcPQNaMXfsREgNvxKcbx98SSdQ6pkg,38
91
+ scoutsdk/data/assistants/advanced/README.md,sha256=zIzfZeG38ZNaUXzi75gJ6T9Nt-5aZcRIA5ONGcsRQtw,7906
92
+ scoutsdk/data/assistants/advanced/assistants_template.json,sha256=8bf4gYRf4L29AdejDnxSLffJRB9hLaCFwNXGDjqOyks,788
93
+ scoutsdk/data/assistants/advanced/avatar.jpeg,sha256=owyEHXVhpitz2pyCEfJhMW5HaR-MwV2A-RFMbO7MpZU,31209
94
+ scoutsdk/data/assistants/advanced/conversation_starters.md,sha256=xxTPf74_KROMmNcPQNaMXfsREgNvxKcbx98SSdQ6pkg,38
95
+ scoutsdk/data/assistants/advanced/data.txt,sha256=RJYg0zaTkkOYy0jcvuJPEbeuagRhGIzx7T1mOqWDNyo,28
96
+ scoutsdk/data/assistants/advanced/system_prompt.md,sha256=s1mL9WnmntnMYuP1CnPfK5B4VW1F2y68atrvDMUW9d4,912
97
+ scoutsdk/data/assistants/basic/assistants_template.json,sha256=Gs8Sq9iR7M8ig2f0rg1YpkFt6qRoCB1K-UFRfTbUaEI,580
98
+ scoutsdk/data/assistants/basic/avatar.jpeg,sha256=owyEHXVhpitz2pyCEfJhMW5HaR-MwV2A-RFMbO7MpZU,31209
99
+ scoutsdk/data/assistants/with-function/assistants_template.json,sha256=-UVUeIiCZ6VOJdNLRjmJDAK9D-UJA5glaF1wotm4drI,805
100
+ scoutsdk/data/assistants/with-function/avatar.jpeg,sha256=owyEHXVhpitz2pyCEfJhMW5HaR-MwV2A-RFMbO7MpZU,31209
101
+ scoutsdk/data/assistants/with-micro-app/assistants_template.json,sha256=zpEhIzynawqjW_MfVwONKLFXtuTs-1IO774Eq6vaYqs,568
102
+ scoutsdk/data/assistants/with-micro-app/avatar.jpeg,sha256=owyEHXVhpitz2pyCEfJhMW5HaR-MwV2A-RFMbO7MpZU,31209
103
+ scoutsdk/data/assistants/with-micro-app-and-function/assistants_template.json,sha256=9kWxjkSWgKKgTPbg-l5iQ9HqP-ZTuwknG3kUgKAlL1k,1037
104
+ scoutsdk/data/assistants/with-micro-app-and-function/avatar.jpeg,sha256=owyEHXVhpitz2pyCEfJhMW5HaR-MwV2A-RFMbO7MpZU,31209
105
+ scoutsdk/data/functions/.pkgignore,sha256=NC5IEnWAWKV2BbC0xCZNN02kZFCFLJ55_EQOni2oxME,60
106
+ scoutsdk/data/functions/CLAUDE.md,sha256=LGAPI5BsRubt5B3QXtW3Bc5eYoJYOKV6q8Xor61lP1w,99
107
+ scoutsdk/data/functions/Makefile,sha256=c0NruKlOjNyWmyE0SaQXWWV17OfjA0g0CGzmdeEkEkA,1531
108
+ scoutsdk/data/functions/README.md,sha256=OPU8hLjGpuE4lHpryN-gNKClqR_W_lC5FdSlNg4gWrc,9964
109
+ scoutsdk/data/functions/__init__.py,sha256=Xh4I_znaBaaknv-SH5I_cIFkVcJ9Epmazvu8pA2QOrg,93
110
+ scoutsdk/data/functions/custom_function_working_with_micro_app.py,sha256=GwNdikqujBWxN93_g16V9aTFumb9Et9wSmJHxNbuQX0,3541
111
+ scoutsdk/data/functions/document_chunker_template.py,sha256=8DpQCOWkT5gAoeaze1_v-YvQ6zLQ-aUzv0Gcn0dnMJg,1648
112
+ scoutsdk/data/functions/function_template.py,sha256=6TbND6o-NQTBMeeY305Kd1k0-IrzJWvGE_xg5KUc4RA,857
113
+ scoutsdk/data/functions/main.py,sha256=dBttpb6-c7t4_8GSN7YBX0h-9vH3DfeZcov0p0JFvFw,196
114
+ scoutsdk/data/functions/mise.toml,sha256=1WL28g9GQwB0rc14Xyt41OWz9JipGuMuTVXDdSO2AQQ,148
115
+ scoutsdk/data/functions/pyproject.toml,sha256=dZYkCLoL2poRLVu13Q3CV507yQLc235TlMNCsg41tKU,226
116
+ scoutsdk/data/functions/requirements.txt,sha256=rUDTw9PI2zpHmH9lHgyob24wRhYz_0a5EENyHswgxKg,16
117
+ scoutsdk/data/functions/uv.lock,sha256=5-0G-Nj4849wjvxtuHf6bF6sRboMSgwSLk7qDJPqY9Y,112999
118
+ scoutsdk/data/functions/webhook_template.py,sha256=ssWNypTOlecY5aDbu0imchv9QDZwNWuHePQnfgdFqjI,753
119
+ scoutsdk/data/micro-apps/CLAUDE.md,sha256=VIGUS2seVmhl8xTkKFY43KDeo52mamizZkTZakCQ7vE,3116
120
+ scoutsdk/data/micro-apps/advanced/.eslintignore,sha256=Xo7kOtnXujgmFSjRx5T--MsK8UKAwGqkqxg7hc344Tw,39
121
+ scoutsdk/data/micro-apps/advanced/.eslintrc.cjs,sha256=2UouaPTyXFiTXJ01hcnUeQSS3Deg7o_RXKRtYuLG0qA,776
122
+ scoutsdk/data/micro-apps/advanced/.prettierignore,sha256=dWwCyrTbJIaKG2X-DYpskznVOqCowAovcHU6DCMdUd8,160
123
+ scoutsdk/data/micro-apps/advanced/.prettierrc,sha256=iK3ZwJGK7gqNFak8gw09pm3UAWL1hTI_7FFxxMjo50w,209
124
+ scoutsdk/data/micro-apps/advanced/.tool-versions,sha256=Zijcp5pA61j7wwzdZSadgLPNPP7XR6cCpoodsjdDAxI,9
125
+ scoutsdk/data/micro-apps/advanced/Makefile,sha256=CZyu9gA1j3aymEFru2Uw8s5FSBO8FzisEXAFvILRaVI,1458
126
+ scoutsdk/data/micro-apps/advanced/bun.lock,sha256=qhqAciywb-Lia0LExJCoSp8MMYoJKoDwwKCHScdiHiU,249154
127
+ scoutsdk/data/micro-apps/advanced/index.html,sha256=0oZEOcVrd7XjHlJvlOXUf53dxloxoThG1ZsKIL8PL3Y,364
128
+ scoutsdk/data/micro-apps/advanced/package.json,sha256=yljaWYM4cEPsVo2fpu7jlaWDKfWbB8EdGFwsNkWQ5cU,1334
129
+ scoutsdk/data/micro-apps/advanced/prettier.config.cjs,sha256=l1py4G7y-i8WgQi5jpF0jqw0Jkdvmra0e3HXiwuOywg,265
130
+ scoutsdk/data/micro-apps/advanced/tsconfig.json,sha256=VbGKZ9PBcmhfDz2FfVl0vV_l4aDMCL9iOLDqNu1MKJQ,788
131
+ scoutsdk/data/micro-apps/advanced/vite.config.ts,sha256=Olu6HjGZOtJ2E_fObu6eVhbvWhZ4hJojORDx9NLIdXg,520
132
+ scoutsdk/data/micro-apps/advanced/src/App.css,sha256=EUcOu_AJqScsMjwJ73kId5_PY_QgV2duEx6LPNxIyN8,880
133
+ scoutsdk/data/micro-apps/advanced/src/App.tsx,sha256=iQI99BSpogwrBc1X_xvZ4K_dUz3e1KXqSZbfDFNNGbo,5665
134
+ scoutsdk/data/micro-apps/advanced/src/index.css,sha256=VuUV6FhF9rFr_UB-mxY-ww65CSmdL8FjTkZc0dsiWvk,546
135
+ scoutsdk/data/micro-apps/advanced/src/main.tsx,sha256=_MJ33FFgd8nhCPoRe7BvdLvnnVnKXhF1tb2J1xl08gY,314
136
+ scoutsdk/data/micro-apps/advanced/src/types.ts,sha256=yxyBX52WdnJkoIeSGQQCWQ4Lfv6nSc_K_0gnsUTxzwY,408
137
+ scoutsdk/data/micro-apps/advanced/src/vite-env.d.ts,sha256=hmDTUT6nksktoagDBWzVZ_2x7O2Mqx8QHIxZyoMS0is,88
138
+ scoutsdk/data/micro-apps/advanced/src/assets/app.svg,sha256=IruOfosNq7Z0o5dMG1YEBsU-FBtvSM36d8E4CZfpihY,590
139
+ scoutsdk/data/micro-apps/advanced/src/constants/index.ts,sha256=qIOFL2JAiqa12u9akHk0ldT0nEPuiMkflAR6W6wIK5s,104
140
+ scoutsdk/data/micro-apps/advanced/src/hooks/use-scout-translation.ts,sha256=_KXjrzlJpiDjrR9Juib_op0C9o7Bxpwq2Sf6VGJEd68,996
141
+ scoutsdk/data/micro-apps/advanced/src/hooks/useFileHandling.ts,sha256=9DAFgTtLMIVsGtp3W5BO0-29P6UXho0Oey7zqE9hxEY,4251
142
+ scoutsdk/data/micro-apps/advanced/src/locales/strings.json,sha256=3i_BPL-B3pcuN8AYcAlGS0HZbY-0nOu3QeCzkVoxO_Y,568
143
+ scoutsdk/data/micro-apps/advanced/src/utils/file.ts,sha256=-vAcHuEUBl5NIB_4zRXVW6DzihIRqzLIgXjlfEy09z8,415
144
+ scoutsdk/data/micro-apps/basic/.eslintignore,sha256=Xo7kOtnXujgmFSjRx5T--MsK8UKAwGqkqxg7hc344Tw,39
145
+ scoutsdk/data/micro-apps/basic/.eslintrc.cjs,sha256=2UouaPTyXFiTXJ01hcnUeQSS3Deg7o_RXKRtYuLG0qA,776
146
+ scoutsdk/data/micro-apps/basic/.prettierignore,sha256=dWwCyrTbJIaKG2X-DYpskznVOqCowAovcHU6DCMdUd8,160
147
+ scoutsdk/data/micro-apps/basic/.prettierrc,sha256=iK3ZwJGK7gqNFak8gw09pm3UAWL1hTI_7FFxxMjo50w,209
148
+ scoutsdk/data/micro-apps/basic/.tool-versions,sha256=Zijcp5pA61j7wwzdZSadgLPNPP7XR6cCpoodsjdDAxI,9
149
+ scoutsdk/data/micro-apps/basic/Makefile,sha256=CZyu9gA1j3aymEFru2Uw8s5FSBO8FzisEXAFvILRaVI,1458
150
+ scoutsdk/data/micro-apps/basic/index.html,sha256=0oZEOcVrd7XjHlJvlOXUf53dxloxoThG1ZsKIL8PL3Y,364
151
+ scoutsdk/data/micro-apps/basic/package.json,sha256=yljaWYM4cEPsVo2fpu7jlaWDKfWbB8EdGFwsNkWQ5cU,1334
152
+ scoutsdk/data/micro-apps/basic/prettier.config.cjs,sha256=l1py4G7y-i8WgQi5jpF0jqw0Jkdvmra0e3HXiwuOywg,265
153
+ scoutsdk/data/micro-apps/basic/tsconfig.json,sha256=VbGKZ9PBcmhfDz2FfVl0vV_l4aDMCL9iOLDqNu1MKJQ,788
154
+ scoutsdk/data/micro-apps/basic/vite.config.ts,sha256=Olu6HjGZOtJ2E_fObu6eVhbvWhZ4hJojORDx9NLIdXg,520
155
+ scoutsdk/data/micro-apps/basic/src/App.tsx,sha256=wpkUU31-B2cKPaGkZoBFzvF5J3XvN9l7DqseEYNTDac,1447
156
+ scoutsdk/data/micro-apps/basic/src/index.css,sha256=iv2K8VT4WDS8FQOWhgvecAAcWTxi7Q09wPLH87vhQQg,424
157
+ scoutsdk/data/micro-apps/basic/src/main.tsx,sha256=_MJ33FFgd8nhCPoRe7BvdLvnnVnKXhF1tb2J1xl08gY,314
158
+ scoutsdk/data/micro-apps/basic/src/vite-env.d.ts,sha256=hmDTUT6nksktoagDBWzVZ_2x7O2Mqx8QHIxZyoMS0is,88
159
+ scoutsdk/data/micro-apps/basic/src/hooks/use-scout-translation.ts,sha256=_KXjrzlJpiDjrR9Juib_op0C9o7Bxpwq2Sf6VGJEd68,996
160
+ scoutsdk/data/micro-apps/basic/src/locales/strings.json,sha256=hEMbHErFL3620g2cOvupIHqC75j5rrJT3thBzNkOwuM,356
161
+ scoutsdk/data/skills/skills_mcp_template.json,sha256=TLwWsj4xeIPrsUdJEQ7X0CD4s432T4_0n6tEvWpKKCc,700
162
+ scoutsdk/data/skills/skills_template.json,sha256=JkRYktAr-iD30mC9QDxPqRrIzjPGWW4WI2nS8d_47aY,327
163
+ scoutsdk/opencode/__init__.py,sha256=zH6_EmbBxaKIeh8e0yjXe4NfdFnVq9xc0JotdhZO9Ts,55
164
+ scoutsdk/opencode/opencode.py,sha256=oJWHmErifNMPhyAwNMgJieadPC09NV0BjeQnYCWnOcw,2313
165
+ scoutsdk/shared/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
166
+ scoutsdk/shared/assistants_types.py,sha256=GsCpshxjiptJsHgVURGUSt36Vm_zsmw5CQGCxfOXKqs,496
167
+ scoutsdk/shared/audio_types.py,sha256=I7oyKL7_nos6jTmtsY2inJz9ibuhkA8A29NpUhKjj8c,113
168
+ scoutsdk/shared/conversations_types.py,sha256=FJgo4Wk9VzyywVQ3MEbPcONngF2YYz-QqP1jJrk0LRE,636
169
+ scoutsdk/shared/defines.py,sha256=Gz4xXoY2z7oSMGesQSt2f8jfdVMHFkTdntUEDybtBBc,738
170
+ scoutsdk/shared/document_chunker_types.py,sha256=NvIqVuEWSj0kEx1bhBZDW0eqYGSd8RuIa74zOZFru_0,1438
171
+ scoutsdk/shared/protected_types.py,sha256=IBiT7AHGbSS3kDCW0oG34_L5UfhJjRfJAxqYcgfz2Ak,82
172
+ scoutsdk/shared/upload_files.py,sha256=CElAueFSWbfylHgH3a19RMWVCjDq21xLcDWbTOdpGj4,1875
173
+ scouttypes/__init__.py,sha256=JirZwe_XFiqNsaW31zf2cWi8otvFsJ07E8JckXRlHb4,6019
174
+ scouttypes/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
175
+ scouttypes/upload_files.py,sha256=LqNNjCdIo83zHugVTmGklyxqDmwI0szu1suZYcTpE2I,2005
176
+ scouttypes/api/__init__.py,sha256=PhwioPPHMOU6MYVbyRRc-HDMRcRXSZk6KdjX6TLnfog,69
177
+ scouttypes/api/async_job_response.py,sha256=cSZLKonW5bAZpLBHSQ-4qIdPV7yK_Zb4UxAQ2RNjBaw,128
178
+ scouttypes/assistants/__init__.py,sha256=thqgsAzczHzw8fyW7O2cGRSUdhdEUrRo0R6rUgfbr80,3011
179
+ scouttypes/assistants/allowed_avatar_content_types_response.py,sha256=wPC0nGmCwMPlmyeAQw8-zrJxnDWvCK0Hl53izxS9HpI,253
180
+ scouttypes/assistants/assistant_custom_function.py,sha256=wOE8OcPyihtSkYxQjnGYMbcBBvZvuet3TRZE0ai0DEs,331
181
+ scouttypes/assistants/assistant_custom_functions_response.py,sha256=HlQAyhaUvCWh_JnC_HLHRl_ndVOuF6cBSL6soE5bAEk,241
182
+ scouttypes/assistants/assistant_data.py,sha256=9jnxNYgJhyIHcgcVmiyvdIH98UTdapHHpfN9G2fu1pk,253
183
+ scouttypes/assistants/assistant_data_list.py,sha256=jGlotx1EsdkQ3qUFComsBi8PptRAv6YzfQbIdEfTYq0,233
184
+ scouttypes/assistants/assistant_data_response.py,sha256=jBoVex8e56m6gIVza6tu9K2PgaDKwrrgSeGQgKMymgY,282
185
+ scouttypes/assistants/assistant_data_response_item.py,sha256=rmTqKYlQmTqtoiSVjBU9VYHSL1p2wQRa0Ez9G0_aBlM,233
186
+ scouttypes/assistants/assistant_data_update_response.py,sha256=zyNhTxa8r1j3w3RSHWEji4aP3JSj7gXgZhxIgY_a-F8,162
187
+ scouttypes/assistants/assistant_delete_response.py,sha256=367isBVsXvo5sFGoKKLA8qh-FvRTqmxeRMQ7K3TsZuw,189
188
+ scouttypes/assistants/assistant_file.py,sha256=VdNUu9OAJBdAusnDQp1OJnawyjWAKaoCZla-at-qn38,378
189
+ scouttypes/assistants/assistant_file_edit_response.py,sha256=S0bYHqJn-Yv3JekdY341vqfRhwhzNpDZkQ0UXhq9Yhc,193
190
+ scouttypes/assistants/assistant_file_upload_response.py,sha256=MOheP4x0R-3zSYyfl_dGh8JFRSbeN95eMV2pY_iIPGA,236
191
+ scouttypes/assistants/assistant_function_execution_response.py,sha256=aJXUlGstiENVyh4gOjUMih4p4Y3vV9hUBbv9qgl6HPw,233
192
+ scouttypes/assistants/assistant_info_response.py,sha256=JQTGN__Yy7tcElBfp2IOJutgv13NH94s6jGrHvhwr-Q,919
193
+ scouttypes/assistants/assistant_public_response.py,sha256=9cQH3VEschGja43W9L61fFIsUFUBX8LNx2zrtmSVZ8s,538
194
+ scouttypes/assistants/assistant_response.py,sha256=fHP0ukvMquDW6gvqF8indB_ywiar_uMtCSqfIduUunc,199
195
+ scouttypes/assistants/assistant_search_data_response.py,sha256=xx2wXP7mGxReJAZ1T3D1zkXvd_13sLZf40vxvlDa0Tc,407
196
+ scouttypes/assistants/assistant_upload_image_response.py,sha256=y4q8qLlXtdBCtp39aGqcOiLibI3ifVRLi2tvk3C91YQ,227
197
+ scouttypes/assistants/assistant_user_token_response.py,sha256=GL21fsQXivRiQJzDPnypRsTFvRVPwQO93fxed5g-UtY,343
198
+ scouttypes/assistants/content_retrieving_strategy.py,sha256=ugBaXMRYDxuSj09ukDjesRCswECeJhdYRLXGrjwO6ss,374
199
+ scouttypes/assistants/create_assistant_data_response.py,sha256=xFPxyvXzqAGxh6ybcpvRmpIfYKI9pnt-ClWpNYDSwMI,218
200
+ scouttypes/assistants/delegation_request.py,sha256=8ThZyXSHi5IwMXOxeg4FIutoXuCx0DiwGynzRPowB-c,258
201
+ scouttypes/assistants/delete_assistant_data_response.py,sha256=6JOgjXtqLhg47dYULxs7B632B__ZwDSNe80Z1p-pW5w,162
202
+ scouttypes/assistants/file_types.py,sha256=H_q1OaTCa0n9rDpCaNYnuw2OBcHclJeIIcjWdS6-RbE,303
203
+ scouttypes/assistants/generate_assistant_avatar_response.py,sha256=jgVEZ1eIcoophZYQ8i10ZRtA78WHbUqEO5dB1YjUjOs,215
204
+ scouttypes/assistants/link_request.py,sha256=BxoB8NK6Z0NDtS1ONC8tJg3uUJsLZ5TGOnqVp_GLMZo,241
205
+ scouttypes/assistants/model_visibility.py,sha256=KU7kq7n8DGrlnNvIKTCphmg9hAGT0ExDfMcUnGCglBM,491
206
+ scouttypes/assistants/query_assistant_data_response.py,sha256=OW0RfUPbo1Dzh7HUYUgQmaLtJ-uu6pbs10gtUduP71o,255
207
+ scouttypes/assistants/shared_group.py,sha256=s-QhQyhHmNU9b5TAbCXJ8ijKXgM-E1wgktJh52BPJSM,174
208
+ scouttypes/assistants/shared_user.py,sha256=081aLipcNxq2hz-WXVQkJzYhafmf80psoEIdMUjsJH0,266
209
+ scouttypes/assistants/skill_response.py,sha256=0P15c64wsySAkALBkUD1kTXKe22vRh4YmO19LjDklcE,874
210
+ scouttypes/assistants/update_assistant_request.py,sha256=SFyk0vkO8UGgARrzIkKBZrP8MYY_LNPzyNkwndLjZaY,1033
211
+ scouttypes/audio/__init__.py,sha256=sNcDe-T4Ni0fy1eqveqOY83Ly_J9JOLU2RsnorganYo,275
212
+ scouttypes/audio/audio_object.py,sha256=yYC0md_QZvt5RIQ1DnXxCc1VZz0cPqp_CBpBfKn-_Io,210
213
+ scouttypes/audio/audio_transcription_request.py,sha256=r3d8B0b43erzZEuVbTZoPHO_Uig8enaPlJcgtSkLPKE,351
214
+ scouttypes/audio/audio_transcription_response.py,sha256=kOK1bbnX_1Ged-kGg3WBya9mSpggQWI3fEOqVKtl6gQ,213
215
+ scouttypes/automations/__init__.py,sha256=KLmmzh9dlpnKz92Vf9Kxgi2kQCjEypi0-pcKDOh-5g4,800
216
+ scouttypes/automations/automation.py,sha256=ga1Y7tL1T0GEo437IrU-UZaNQfaqoGJj1KkIU_-Qsxo,1424
217
+ scouttypes/automations/automation_run.py,sha256=FqdT1eBo24czIoonKzcGrcrOwOeiw170X9c19ao-TNI,1161
218
+ scouttypes/chat/__init__.py,sha256=XjQQ8ESjf_okyQMO2me5Ca5Fnqh6zAtOn43MG35GWPk,215
219
+ scouttypes/chat/chat_completion_request.py,sha256=o0jIUr-5IRswDV_yIW7cXGM-VxSrCe1wCo6gDofcztU,556
220
+ scouttypes/chat/chat_completion_response.py,sha256=RVaGkRcBCrx8iESBSzlia2rRaS_jbE_dOTsKsgkZN2Y,345
221
+ scouttypes/chat/llm_model.py,sha256=b1cEO-sEkXXkKeLsVrvrS7iLgsKIU6Szra1u1MnkpHo,587
222
+ scouttypes/constants/__init__.py,sha256=w94OXQqONWDkoIUuBCCkyoIaury8xcEUw5-3r8mvaKA,312
223
+ scouttypes/constants/brand_variables.py,sha256=WALzyINEsdtKkxrmTOg06jaVnL2kYsOWFn_AW-GOaUg,725
224
+ scouttypes/constants/content_types.py,sha256=wspk0NVq32OzjoPtZ5BH6XwlQtiGYa3xIadOov6H0XE,111
225
+ scouttypes/constants/variable_names.py,sha256=--5KP8Qx3kBkqYsfzVFEKt6j5XH0IpQA8BGt37mHygs,1415
226
+ scouttypes/conversations/__init__.py,sha256=sGrDMboBKJnGx4yEB0kora_xnYlgL0-ewHBDw1io8Es,2522
227
+ scouttypes/conversations/conversation_message.py,sha256=DpNlr3-9_a2Zjb5q_4VzChrYZ5sgyAWzeKboBpS3TfM,861
228
+ scouttypes/conversations/conversation_message_content_part.py,sha256=Ru6iq_wPUHl_DQF7eN4tpp3kqxjCiQcABicRtknDaHM,1247
229
+ scouttypes/conversations/conversation_message_content_part_image_param.py,sha256=Cpmi_6S77Rl0rBwAyUMqX9c5S5z3ZSOTYUVjRqAxaJw,498
230
+ scouttypes/conversations/conversation_message_content_part_image_ref_param.py,sha256=JkLORjzchVfzKBBMRn6eJkVYI3t8567PtdMiTQg1yic,327
231
+ scouttypes/conversations/conversation_message_content_part_input_audio_param.py,sha256=ZHjWkfD6Fo0m-X6N2Qflel89JPPHmfeKV-_QxqiHx3M,310
232
+ scouttypes/conversations/conversation_message_content_part_input_audio_ref_param.py,sha256=WkiZgmghwkj8zIMRLE-aJYwNUGkZu5x9EQKeb0CKFt8,331
233
+ scouttypes/conversations/conversation_message_content_part_pdf_param.py,sha256=0XiHfL-PzvP7wDn0cGmxmneqy_U_I7PsjpzlS9YWQ1w,348
234
+ scouttypes/conversations/conversation_message_content_part_pdf_ref_param.py,sha256=r5vyp-4Lx5qM26edHHGdergB82ZUIqaomdHxyfh3YQQ,315
235
+ scouttypes/conversations/conversation_message_content_part_text_param.py,sha256=Do_AqIS8QWPN_2Ez4JoQGpQBLxKW0V9rmSNvbXwKGc4,280
236
+ scouttypes/conversations/conversation_response.py,sha256=JnKl224c3jq2ZqdjhEmEylHoCX-MClfSCCz4lwVlbIA,524
237
+ scouttypes/conversations/create_conversation_request.py,sha256=mt7vQbHxJNvkblp5Y5RY07n8EKemQn6dviCw2ntYvC4,486
238
+ scouttypes/conversations/delete_conversation_response.py,sha256=syCk0SdvDqzvDmFKJsqdSU844oilwxslHun3eiP5oMs,190
239
+ scouttypes/conversations/message_metadata.py,sha256=Q7iYk80LAGE3Ii6uO_ZBqdYnWXnBVPj8_mZ__VHAJhQ,479
240
+ scouttypes/conversations/message_reasoning.py,sha256=STFnYC70ZCNdejFBloubkbbkbs1XYGnoMkSVaoxL4Fw,261
241
+ scouttypes/conversations/message_role.py,sha256=v5qo3hcibUXHhreAbRq-R1U4BHo03jlYIWRpw1Z6yrw,215
242
+ scouttypes/conversations/message_tool_call.py,sha256=F22Mzb5dSSpK2Y1xDtfllkqdem3hb0S7ttzGMY29W-A,262
243
+ scouttypes/conversations/metadata_file.py,sha256=r5QGjx5C5aQQSBOiFX8ZG2dwGMNYaHektwJbC47eMK4,186
244
+ scouttypes/conversations/metadata_tool_call.py,sha256=eKmZXKRM90DjOb0S-S1R-5n4uoqe_LFriL_ldm61R6U,301
245
+ scouttypes/conversations/signed_upload_url_response.py,sha256=MsYRPnqT-oCJlvtZ7EwrzTLGqKyKqaZMpyP5Snrb1Ms,677
246
+ scouttypes/conversations/stream_error.py,sha256=uI1LL2QZDiUNW8HLl0w-PJmPv93lUe8PB9NDNz-26qA,207
247
+ scouttypes/conversations/stream_finish_reason.py,sha256=CmnbR1L9CozYBxirWW4n1l-XV-LZrdt5h9FO588vr5k,215
248
+ scouttypes/conversations/stream_tool_call.py,sha256=jv_G7Pp9jnn2TocN8PDRJMclFCG4AWQEZjbCnvqT5sE,373
249
+ scouttypes/conversations/stream_tool_call_status.py,sha256=XMKugDwyeDCBpq8EJ6yolHq6OOlyktHOyqx6bzOq2Go,153
250
+ scouttypes/conversations/tool_call_function.py,sha256=UhAzq3D5Ft5Pgee4fGk_LMrXCCVb9go0hqe8NHYj350,191
251
+ scouttypes/conversations/upload_mode.py,sha256=J66idQf9ZS_4dVr3Cgwi_iRhQM84F1Ua5mRoVb6x9o8,119
252
+ scouttypes/document_chunker/__init__.py,sha256=P35sfN-uW7mRxgFib51c7pImE-d-uNXfprIpaXxME3I,254
253
+ scouttypes/document_chunker/abstract_document_chunker.py,sha256=m9RTdxIrjkkRTEK2kJsRbIidiNxrRaRh3-YZ4k_iP_g,773
254
+ scouttypes/document_chunker/chunk.py,sha256=cDR6Tp9qiffsNApbITg5JsUt5IiBbu-Ew3ZEEiNS2-g,303
255
+ scouttypes/document_chunker/chunk_metadata.py,sha256=gRIzYpSmNZNtEdbSIPuvmKGDbw4sRBXzKLBL7GBjBos,418
256
+ scouttypes/document_chunker/document_chunks.py,sha256=itMaRce8j4-jUjLCply1rURGmbyeTSd-qDiMFXZ8dI8,287
257
+ scouttypes/images/__init__.py,sha256=LetAsHUxGwzC-ZSPLBkyE4OyZbKPhTwa3gGIpMwEktQ,436
258
+ scouttypes/images/image_aspect_ratio.py,sha256=pJ2Ut__dyH-jB8wViM80aiZzNA38UrIGaaIK1i-kanY,169
259
+ scouttypes/images/image_background.py,sha256=P4Zjdsox5uo0BuW0NSx6cEeTCedmtJO9KVk7AZ8MPac,183
260
+ scouttypes/images/image_file_object.py,sha256=fnaJ0sL_Qb3qenLCGrhzdGtYSnRax7_5I2UIavRzvmo,157
261
+ scouttypes/images/image_quality.py,sha256=rXUo_RR27HVapjJ0ABDFGjKPo6hCsRJU6-XCFFrxbts,165
262
+ scouttypes/images/image_request.py,sha256=b1tolO9B9C3tRFplpLOsP6E_PV7w-nAFfuO23G_e9xM,743
263
+ scouttypes/images/image_resolution.py,sha256=LkoQzBZf9YmL6jezLwUbTo6jFFFWzQLYnxgdLhqCORs,143
264
+ scouttypes/images/image_response.py,sha256=0t2o_5QHqkvDR2NSWC-6R9zE35eyGUT_tH1wNnWGTyg,282
265
+ scouttypes/protected/__init__.py,sha256=nIF2uSyky0A7Rd8ulT1BS_DUfyoeuqX-3YJOQzfvpeg,112
266
+ scouttypes/protected/signed_url_response.py,sha256=XpNhI-GsyAiEdLu5G5OvKK9fbNR6Z54ieOI2rHrhuzI,173
267
+ scouttypes/skills/__init__.py,sha256=K4wj1VQkA6-u2c97pX2sGJx2mr1c6ERh4QjXA75QqfQ,147
268
+ scouttypes/skills/build_skill_request.py,sha256=hIXoz6XrzZOuwHaReQEUjBNq3fT1RHEKmirOyciy5uE,322
269
+ scouttypes/skills/build_skill_response.py,sha256=_Swhl2JCkcQdGCA-Uy6jSySaCWLPhJy2HReHxi3Sv00,221
270
+ forrasdk-0.3.9.dist-info/METADATA,sha256=5Bgh9Fewx1ZjNJ4iZ1cyJNHgmeu2vHzAK2cZdIgh9tU,2233
271
+ forrasdk-0.3.9.dist-info/WHEEL,sha256=zaaOINJESkSfm_4HQVc5ssNzHCPXhJm0kEUakpsEHaU,91
272
+ forrasdk-0.3.9.dist-info/entry_points.txt,sha256=xBf3ast_InKB-Jis5FwZOTiB-igMnNCnxCVEw8hPw6k,94
273
+ forrasdk-0.3.9.dist-info/top_level.txt,sha256=fCBi_oUNQg2kzzUbbkgiecQ28lLnBVfJAnYPzxMZ9TU,38
274
+ forrasdk-0.3.9.dist-info/RECORD,,
@@ -0,0 +1,5 @@
1
+ Wheel-Version: 1.0
2
+ Generator: setuptools (80.8.0)
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
5
+
@@ -0,0 +1,3 @@
1
+ [console_scripts]
2
+ forracli = scoutsdk.cli.__main__:main
3
+ scoutcli = scoutsdk.cli.__main__:main
@@ -0,0 +1,4 @@
1
+ forrasdk
2
+ scoutmcp
3
+ scoutsdk
4
+ scouttypes
scoutmcp/__init__.py ADDED
@@ -0,0 +1,10 @@
1
+ from .native_mcp_server import NativeScoutMCPServer, run_native_server
2
+ from .config import MCPConfig
3
+ from .exceptions import ScoutMCPError
4
+
5
+ __all__ = [
6
+ "NativeScoutMCPServer",
7
+ "MCPConfig",
8
+ "run_native_server",
9
+ "ScoutMCPError",
10
+ ]
scoutmcp/__main__.py ADDED
@@ -0,0 +1,58 @@
1
+ import sys
2
+ import json
3
+ import logging
4
+ import asyncio
5
+ from pathlib import Path
6
+ from .native_mcp_server import run_native_server
7
+
8
+
9
+ def main() -> None:
10
+ logging.basicConfig(
11
+ level=logging.INFO,
12
+ format="%(asctime)s - %(name)s - %(levelname)s - %(message)s",
13
+ )
14
+
15
+ # Check for help flag
16
+ if len(sys.argv) >= 2 and sys.argv[1] in ["-h", "--help"]:
17
+ logging.info("Usage: python -m scoutmcp [config.json]")
18
+ logging.info("")
19
+ logging.info("Optional config file containing JSON with:")
20
+ logging.info(" - server_name: Name for the MCP server")
21
+ logging.info(" - scout_mcp_assistant_id: Assistant UUID to use")
22
+ logging.info(" - scout_api_token: API authentication token")
23
+ logging.info(" - scout_api_url: Scout API base URL")
24
+ logging.info("")
25
+ logging.info("Alternatively, use environment variables:")
26
+ logging.info(" - MCP_SERVER_NAME")
27
+ logging.info(" - FORRA_MCP_ASSISTANT_ID")
28
+ logging.info(" - FORRA_API_TOKEN")
29
+ logging.info(" - FORRA_API_URL")
30
+ sys.exit(0)
31
+
32
+ # Parse command line arguments
33
+ config_file = None
34
+
35
+ args = sys.argv[1:]
36
+ for arg in args:
37
+ if not arg.startswith("--"):
38
+ config_file = arg
39
+ break
40
+
41
+ config = {}
42
+
43
+ # Load config file if provided
44
+ if config_file:
45
+ config_path = Path(config_file)
46
+ if not config_path.exists():
47
+ logging.error(f"Config file not found: {config_path}")
48
+ sys.exit(1)
49
+
50
+ with open(config_path, "r") as f:
51
+ config = json.load(f)
52
+
53
+ # Run the native server implementation
54
+ asyncio.run(run_native_server(config))
55
+
56
+
57
+ if __name__ == "__main__":
58
+ main()
scoutmcp/config.py ADDED
@@ -0,0 +1,9 @@
1
+ from pydantic import BaseModel
2
+ from typing import Optional
3
+
4
+
5
+ class MCPConfig(BaseModel):
6
+ server_name: str # Name for the MCP server
7
+ scout_mcp_assistant_id: str # Assistant UUID to use
8
+ scout_api_token: str # API authentication token
9
+ scout_api_url: Optional[str] = None # Scout API base URL
scoutmcp/exceptions.py ADDED
@@ -0,0 +1,23 @@
1
+ from typing import Any, Optional
2
+
3
+
4
+ class ScoutMCPError(Exception):
5
+ def __init__(
6
+ self,
7
+ message: str,
8
+ assistant_id: Optional[str] = None,
9
+ function_name: Optional[str] = None,
10
+ context: Optional[dict[str, Any]] = None,
11
+ ):
12
+ super().__init__(message)
13
+ self.assistant_id = assistant_id
14
+ self.function_name = function_name
15
+ self.context = context or {}
16
+
17
+ def to_dict(self) -> dict[str, Any]:
18
+ return {
19
+ "error": str(self),
20
+ "assistant_id": self.assistant_id,
21
+ "function_name": self.function_name,
22
+ "context": self.context,
23
+ }