synapse-sdk 1.0.0a61__tar.gz → 1.0.0a63__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.

Potentially problematic release.


This version of synapse-sdk might be problematic. Click here for more details.

Files changed (306) hide show
  1. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/PKG-INFO +1 -1
  2. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/cli/__init__.py +26 -19
  3. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/cli/devtools.py +18 -9
  4. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/cli/plugin/publish.py +22 -13
  5. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/devtools/server.py +42 -63
  6. synapse_sdk-1.0.0a63/synapse_sdk/devtools/utils.py +52 -0
  7. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/devtools/web/dist/index.html +2 -2
  8. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/devtools/web/src/components/LogViewer.jsx +15 -1
  9. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/devtools/web/src/components/NavigationSidebar.jsx +4 -13
  10. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/devtools/web/src/utils/api.js +23 -6
  11. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk.egg-info/PKG-INFO +1 -1
  12. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk.egg-info/SOURCES.txt +1 -1
  13. synapse_sdk-1.0.0a61/.github/workflows/update-changelog.yml +0 -109
  14. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/.coverage +0 -0
  15. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/.github/workflows/lint.yml +0 -0
  16. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/.github/workflows/pypi-publish.yml +0 -0
  17. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/.gitignore +0 -0
  18. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/.pre-commit-config.yaml +0 -0
  19. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/LICENSE +0 -0
  20. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/README.md +0 -0
  21. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/docs/api/clients/agent.md +0 -0
  22. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/docs/api/clients/backend.md +0 -0
  23. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/docs/api/clients/base.md +0 -0
  24. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/docs/api/index.md +0 -0
  25. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/docs/api/plugins/categories.md +0 -0
  26. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/docs/api/plugins/models.md +0 -0
  27. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/docs/api/plugins/utils.md +0 -0
  28. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/docs/api/utils/file.md +0 -0
  29. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/docs/api/utils/storage.md +0 -0
  30. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/docs/api/utils/types.md +0 -0
  31. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/docs/categories.md +0 -0
  32. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/docs/changelog.md +0 -0
  33. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/docs/concepts/index.md +0 -0
  34. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/docs/configuration.md +0 -0
  35. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/docs/contributing.md +0 -0
  36. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/docs/examples/index.md +0 -0
  37. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/docs/faq.md +0 -0
  38. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/docs/i18n/ko/code.json +0 -0
  39. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/docs/i18n/ko/docusaurus-plugin-content-docs/current/introduction.md +0 -0
  40. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/docs/i18n/ko/docusaurus-plugin-content-docs/current.json +0 -0
  41. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/docs/i18n/ko/docusaurus-theme-classic/footer.json +0 -0
  42. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/docs/i18n/ko/docusaurus-theme-classic/navbar.json +0 -0
  43. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/docs/installation.md +0 -0
  44. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/docs/introduction.md +0 -0
  45. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/docs/quickstart.md +0 -0
  46. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/docs/troubleshooting.md +0 -0
  47. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/docs/tutorial-basics/_category_.json +0 -0
  48. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/docs/tutorial-basics/congratulations.md +0 -0
  49. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/docs/tutorial-basics/create-a-blog-post.md +0 -0
  50. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/docs/tutorial-basics/create-a-document.md +0 -0
  51. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/docs/tutorial-basics/create-a-page.md +0 -0
  52. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/docs/tutorial-basics/deploy-your-site.md +0 -0
  53. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/docs/tutorial-basics/markdown-features.mdx +0 -0
  54. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/docs/tutorial-extras/_category_.json +0 -0
  55. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/docs/tutorial-extras/img/docsVersionDropdown.png +0 -0
  56. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/docs/tutorial-extras/img/localeDropdown.png +0 -0
  57. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/docs/tutorial-extras/manage-docs-versions.md +0 -0
  58. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/docs/tutorial-extras/translate-your-site.md +0 -0
  59. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/locale/en/LC_MESSAGES/messages.mo +0 -0
  60. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/locale/en/LC_MESSAGES/messages.po +0 -0
  61. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/locale/ko/LC_MESSAGES/messages.mo +0 -0
  62. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/locale/ko/LC_MESSAGES/messages.po +0 -0
  63. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/pyproject.toml +0 -0
  64. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/requirements.test.txt +0 -0
  65. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/requirements.txt +0 -0
  66. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/setup.cfg +0 -0
  67. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/__init__.py +0 -0
  68. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/cli/alias/__init__.py +0 -0
  69. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/cli/alias/create.py +0 -0
  70. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/cli/alias/dataclass.py +0 -0
  71. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/cli/alias/default.py +0 -0
  72. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/cli/alias/delete.py +0 -0
  73. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/cli/alias/list.py +0 -0
  74. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/cli/alias/read.py +0 -0
  75. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/cli/alias/update.py +0 -0
  76. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/cli/alias/utils.py +0 -0
  77. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/cli/config.py +0 -0
  78. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/cli/plugin/__init__.py +0 -0
  79. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/cli/plugin/create.py +0 -0
  80. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/cli/plugin/run.py +0 -0
  81. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/clients/__init__.py +0 -0
  82. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/clients/agent/__init__.py +0 -0
  83. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/clients/agent/core.py +0 -0
  84. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/clients/agent/ray.py +0 -0
  85. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/clients/agent/service.py +0 -0
  86. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/clients/backend/__init__.py +0 -0
  87. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/clients/backend/annotation.py +0 -0
  88. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/clients/backend/core.py +0 -0
  89. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/clients/backend/data_collection.py +0 -0
  90. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/clients/backend/hitl.py +0 -0
  91. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/clients/backend/integration.py +0 -0
  92. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/clients/backend/ml.py +0 -0
  93. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/clients/backend/models.py +0 -0
  94. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/clients/base.py +0 -0
  95. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/clients/exceptions.py +0 -0
  96. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/clients/ray/__init__.py +0 -0
  97. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/clients/ray/core.py +0 -0
  98. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/clients/ray/serve.py +0 -0
  99. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/clients/utils.py +0 -0
  100. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/clients/validators/__init__.py +0 -0
  101. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/clients/validators/collections.py +0 -0
  102. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/devtools/__init__.py +0 -0
  103. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/devtools/config.py +0 -0
  104. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/devtools/docs/.gitignore +0 -0
  105. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/devtools/docs/README.md +0 -0
  106. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/devtools/docs/blog/2019-05-28-first-blog-post.md +0 -0
  107. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/devtools/docs/blog/2019-05-29-long-blog-post.md +0 -0
  108. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/devtools/docs/blog/2021-08-01-mdx-blog-post.mdx +0 -0
  109. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/devtools/docs/blog/2021-08-26-welcome/docusaurus-plushie-banner.jpeg +0 -0
  110. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/devtools/docs/blog/2021-08-26-welcome/index.md +0 -0
  111. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/devtools/docs/blog/authors.yml +0 -0
  112. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/devtools/docs/blog/tags.yml +0 -0
  113. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/devtools/docs/docusaurus.config.ts +0 -0
  114. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/devtools/docs/package-lock.json +0 -0
  115. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/devtools/docs/package.json +0 -0
  116. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/devtools/docs/sidebars.ts +0 -0
  117. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/devtools/docs/src/components/HomepageFeatures/index.tsx +0 -0
  118. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/devtools/docs/src/components/HomepageFeatures/styles.module.css +0 -0
  119. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/devtools/docs/src/css/custom.css +0 -0
  120. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/devtools/docs/src/pages/index.module.css +0 -0
  121. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/devtools/docs/src/pages/index.tsx +0 -0
  122. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/devtools/docs/src/pages/markdown-page.md +0 -0
  123. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/devtools/docs/static/.nojekyll +0 -0
  124. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/devtools/docs/static/img/docusaurus-social-card.jpg +0 -0
  125. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/devtools/docs/static/img/docusaurus.png +0 -0
  126. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/devtools/docs/static/img/favicon.ico +0 -0
  127. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/devtools/docs/static/img/logo.png +0 -0
  128. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/devtools/docs/static/img/undraw_docusaurus_mountain.svg +0 -0
  129. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/devtools/docs/static/img/undraw_docusaurus_react.svg +0 -0
  130. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/devtools/docs/static/img/undraw_docusaurus_tree.svg +0 -0
  131. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/devtools/docs/tsconfig.json +0 -0
  132. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/devtools/models.py +0 -0
  133. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/devtools/web/.gitignore +0 -0
  134. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/devtools/web/README.md +0 -0
  135. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/devtools/web/index.html +0 -0
  136. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/devtools/web/jsconfig.json +0 -0
  137. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/devtools/web/package-lock.json +0 -0
  138. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/devtools/web/package.json +0 -0
  139. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/devtools/web/pnpm-lock.yaml +0 -0
  140. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/devtools/web/src/App.jsx +0 -0
  141. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/devtools/web/src/App.module.css +0 -0
  142. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/devtools/web/src/assets/favicon.ico +0 -0
  143. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/devtools/web/src/components/Breadcrumbs.jsx +0 -0
  144. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/devtools/web/src/components/Layout.jsx +0 -0
  145. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/devtools/web/src/components/MessageViewer.jsx +0 -0
  146. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/devtools/web/src/components/ServerStatusBar.jsx +0 -0
  147. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/devtools/web/src/components/icons.jsx +0 -0
  148. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/devtools/web/src/index.css +0 -0
  149. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/devtools/web/src/index.jsx +0 -0
  150. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/devtools/web/src/logo.svg +0 -0
  151. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/devtools/web/src/router.jsx +0 -0
  152. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/devtools/web/src/views/ApplicationDetailView.jsx +0 -0
  153. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/devtools/web/src/views/ApplicationsView.jsx +0 -0
  154. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/devtools/web/src/views/HomeView.jsx +0 -0
  155. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/devtools/web/src/views/JobDetailView.jsx +0 -0
  156. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/devtools/web/src/views/PluginView.jsx +0 -0
  157. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/devtools/web/vite.config.js +0 -0
  158. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/i18n.py +0 -0
  159. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/loggers.py +0 -0
  160. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/plugins/__init__.py +0 -0
  161. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/plugins/categories/__init__.py +0 -0
  162. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/plugins/categories/base.py +0 -0
  163. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/plugins/categories/data_validation/__init__.py +0 -0
  164. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/plugins/categories/data_validation/actions/__init__.py +0 -0
  165. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/plugins/categories/data_validation/actions/validation.py +0 -0
  166. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/plugins/categories/data_validation/templates/config.yaml +0 -0
  167. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/plugins/categories/data_validation/templates/plugin/__init__.py +0 -0
  168. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/plugins/categories/data_validation/templates/plugin/validation.py +0 -0
  169. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/plugins/categories/decorators.py +0 -0
  170. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/plugins/categories/export/__init__.py +0 -0
  171. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/plugins/categories/export/actions/__init__.py +0 -0
  172. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/plugins/categories/export/actions/export.py +0 -0
  173. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/plugins/categories/export/enums.py +0 -0
  174. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/plugins/categories/export/templates/config.yaml +0 -0
  175. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/plugins/categories/export/templates/plugin/__init__.py +0 -0
  176. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/plugins/categories/export/templates/plugin/export.py +0 -0
  177. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/plugins/categories/neural_net/__init__.py +0 -0
  178. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/plugins/categories/neural_net/actions/__init__.py +0 -0
  179. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/plugins/categories/neural_net/actions/deployment.py +0 -0
  180. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/plugins/categories/neural_net/actions/gradio.py +0 -0
  181. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/plugins/categories/neural_net/actions/inference.py +0 -0
  182. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/plugins/categories/neural_net/actions/test.py +0 -0
  183. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/plugins/categories/neural_net/actions/train.py +0 -0
  184. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/plugins/categories/neural_net/actions/tune.py +0 -0
  185. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/plugins/categories/neural_net/base/__init__.py +0 -0
  186. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/plugins/categories/neural_net/base/inference.py +0 -0
  187. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/plugins/categories/neural_net/templates/config.yaml +0 -0
  188. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/plugins/categories/neural_net/templates/plugin/__init__.py +0 -0
  189. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/plugins/categories/neural_net/templates/plugin/inference.py +0 -0
  190. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/plugins/categories/neural_net/templates/plugin/test.py +0 -0
  191. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/plugins/categories/neural_net/templates/plugin/train.py +0 -0
  192. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/plugins/categories/post_annotation/__init__.py +0 -0
  193. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/plugins/categories/post_annotation/actions/__init__.py +0 -0
  194. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/plugins/categories/post_annotation/actions/post_annotation.py +0 -0
  195. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/plugins/categories/post_annotation/templates/config.yaml +0 -0
  196. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/plugins/categories/post_annotation/templates/plugin/__init__.py +0 -0
  197. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/plugins/categories/post_annotation/templates/plugin/post_annotation.py +0 -0
  198. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/plugins/categories/pre_annotation/__init__.py +0 -0
  199. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/plugins/categories/pre_annotation/actions/__init__.py +0 -0
  200. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/plugins/categories/pre_annotation/actions/pre_annotation.py +0 -0
  201. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/plugins/categories/pre_annotation/actions/to_task.py +0 -0
  202. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/plugins/categories/pre_annotation/templates/config.yaml +0 -0
  203. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/plugins/categories/pre_annotation/templates/plugin/__init__.py +0 -0
  204. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/plugins/categories/pre_annotation/templates/plugin/pre_annotation.py +0 -0
  205. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/plugins/categories/pre_annotation/templates/plugin/to_task.py +0 -0
  206. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/plugins/categories/registry.py +0 -0
  207. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/plugins/categories/smart_tool/__init__.py +0 -0
  208. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/plugins/categories/smart_tool/actions/__init__.py +0 -0
  209. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/plugins/categories/smart_tool/actions/auto_label.py +0 -0
  210. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/plugins/categories/smart_tool/templates/config.yaml +0 -0
  211. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/plugins/categories/smart_tool/templates/plugin/__init__.py +0 -0
  212. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/plugins/categories/smart_tool/templates/plugin/auto_label.py +0 -0
  213. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/plugins/categories/templates.py +0 -0
  214. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/plugins/categories/upload/__init__.py +0 -0
  215. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/plugins/categories/upload/actions/__init__.py +0 -0
  216. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/plugins/categories/upload/actions/upload.py +0 -0
  217. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/plugins/categories/upload/templates/config.yaml +0 -0
  218. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/plugins/categories/upload/templates/plugin/__init__.py +0 -0
  219. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/plugins/categories/upload/templates/plugin/upload.py +0 -0
  220. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/plugins/enums.py +0 -0
  221. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/plugins/exceptions.py +0 -0
  222. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/plugins/models.py +0 -0
  223. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/plugins/templates/cookiecutter.json +0 -0
  224. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/plugins/templates/hooks/post_gen_project.py +0 -0
  225. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/plugins/templates/hooks/pre_prompt.py +0 -0
  226. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/plugins/templates/plugin-config-schema.json +0 -0
  227. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/plugins/templates/schema.json +0 -0
  228. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin/.gitignore +0 -0
  229. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin/.pre-commit-config.yaml +0 -0
  230. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin/README.md +0 -0
  231. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin/config.yaml +0 -0
  232. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin/plugin/__init__.py +0 -0
  233. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin/pyproject.toml +0 -0
  234. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin/requirements.txt +0 -0
  235. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/plugins/upload.py +0 -0
  236. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/plugins/utils.py +0 -0
  237. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/shared/__init__.py +0 -0
  238. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/shared/enums.py +0 -0
  239. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/types.py +0 -0
  240. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/utils/__init__.py +0 -0
  241. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/utils/converters/__init__.py +0 -0
  242. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/utils/converters/coco/__init__.py +0 -0
  243. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/utils/converters/coco/from_dm.py +0 -0
  244. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/utils/dataset.py +0 -0
  245. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/utils/debug.py +0 -0
  246. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/utils/file.py +0 -0
  247. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/utils/http.py +0 -0
  248. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/utils/module_loading.py +0 -0
  249. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/utils/network.py +0 -0
  250. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/utils/pydantic/__init__.py +0 -0
  251. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/utils/pydantic/config.py +0 -0
  252. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/utils/pydantic/errors.py +0 -0
  253. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/utils/pydantic/validators.py +0 -0
  254. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/utils/storage/__init__.py +0 -0
  255. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/utils/storage/providers/__init__.py +0 -0
  256. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/utils/storage/providers/gcp.py +0 -0
  257. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/utils/storage/providers/s3.py +0 -0
  258. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/utils/storage/providers/sftp.py +0 -0
  259. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/utils/storage/registry.py +0 -0
  260. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk/utils/string.py +0 -0
  261. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk.egg-info/dependency_links.txt +0 -0
  262. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk.egg-info/entry_points.txt +0 -0
  263. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk.egg-info/requires.txt +0 -0
  264. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/synapse_sdk.egg-info/top_level.txt +0 -0
  265. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/tests/__init__.py +0 -0
  266. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/tests/clients/__init__.py +0 -0
  267. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/tests/clients/test_backend_models.py +0 -0
  268. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/tests/clients/test_base_client.py +0 -0
  269. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/tests/clients/test_collection_validators.py +0 -0
  270. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/tests/conftest.py +0 -0
  271. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/tests/loggers/__init__.py +0 -0
  272. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/tests/loggers/test_base_logger.py +0 -0
  273. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/tests/test_cli.py +0 -0
  274. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/tests/test_cli_integration.py +0 -0
  275. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/tests/utils/__init__,py +0 -0
  276. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/tests/utils/converters/__init__.py +0 -0
  277. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/tests/utils/converters/conftest.py +0 -0
  278. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/tests/utils/converters/fixtures/__init__.py +0 -0
  279. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/tests/utils/converters/fixtures/data_types/image/categorized/test/json/dm_1.json +0 -0
  280. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/tests/utils/converters/fixtures/data_types/image/categorized/test/json/dm_2.json +0 -0
  281. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/tests/utils/converters/fixtures/data_types/image/categorized/test/json/dm_3.json +0 -0
  282. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/tests/utils/converters/fixtures/data_types/image/categorized/test/original_files/dm_1.jpg +0 -0
  283. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/tests/utils/converters/fixtures/data_types/image/categorized/test/original_files/dm_2.jpg +0 -0
  284. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/tests/utils/converters/fixtures/data_types/image/categorized/test/original_files/dm_3.jpg +0 -0
  285. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/tests/utils/converters/fixtures/data_types/image/categorized/train/json/dm_4.json +0 -0
  286. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/tests/utils/converters/fixtures/data_types/image/categorized/train/json/dm_5.json +0 -0
  287. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/tests/utils/converters/fixtures/data_types/image/categorized/train/json/dm_6.json +0 -0
  288. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/tests/utils/converters/fixtures/data_types/image/categorized/train/json/dm_7.json +0 -0
  289. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/tests/utils/converters/fixtures/data_types/image/categorized/train/original_files/dm_4.jpg +0 -0
  290. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/tests/utils/converters/fixtures/data_types/image/categorized/train/original_files/dm_5.jpg +0 -0
  291. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/tests/utils/converters/fixtures/data_types/image/categorized/train/original_files/dm_6.jpg +0 -0
  292. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/tests/utils/converters/fixtures/data_types/image/categorized/train/original_files/dm_7.jpg +0 -0
  293. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/tests/utils/converters/fixtures/data_types/image/categorized/valid/json/dm_8.json +0 -0
  294. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/tests/utils/converters/fixtures/data_types/image/categorized/valid/json/dm_9.json +0 -0
  295. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/tests/utils/converters/fixtures/data_types/image/categorized/valid/original_files/dm_8.jpg +0 -0
  296. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/tests/utils/converters/fixtures/data_types/image/categorized/valid/original_files/dm_9.jpg +0 -0
  297. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/tests/utils/converters/fixtures/data_types/image/not_categorized/json/dm_1.json +0 -0
  298. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/tests/utils/converters/fixtures/data_types/image/not_categorized/json/dm_2.json +0 -0
  299. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/tests/utils/converters/fixtures/data_types/image/not_categorized/json/dm_3.json +0 -0
  300. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/tests/utils/converters/fixtures/data_types/image/not_categorized/original_files/dm_1.jpg +0 -0
  301. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/tests/utils/converters/fixtures/data_types/image/not_categorized/original_files/dm_2.jpg +0 -0
  302. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/tests/utils/converters/fixtures/data_types/image/not_categorized/original_files/dm_3.jpg +0 -0
  303. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/tests/utils/converters/fixtures/dm_schema.py +0 -0
  304. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/tests/utils/converters/test_coco_from_dm.py +0 -0
  305. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/tests/utils/test_debug.py +0 -0
  306. {synapse_sdk-1.0.0a61 → synapse_sdk-1.0.0a63}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: synapse-sdk
3
- Version: 1.0.0a61
3
+ Version: 1.0.0a63
4
4
  Summary: synapse sdk
5
5
  Author-email: datamaker <developer@datamaker.io>
6
6
  License: MIT
@@ -106,18 +106,36 @@ def display_connection_status():
106
106
  click.echo() # Empty line for spacing
107
107
 
108
108
 
109
- def run_devtools(build=False):
109
+ def run_devtools(build=True):
110
110
  """Run devtools with default settings"""
111
111
  try:
112
+ from synapse_sdk.devtools.config import get_server_config
112
113
  from synapse_sdk.devtools.server import create_devtools_server
114
+ from synapse_sdk.devtools.utils import find_available_port, is_port_available
113
115
 
114
116
  if build:
115
- click.echo('Building frontend assets...')
117
+ click.echo('Building...')
116
118
  build_frontend()
117
119
 
118
120
  click.echo('Starting Synapse Devtools...')
119
- server = create_devtools_server(host='0.0.0.0', port=8080)
120
- server.start_server(open_browser=True)
121
+
122
+ # Get server configuration defaults
123
+ server_config = get_server_config()
124
+ host = server_config['host']
125
+ port = server_config['port']
126
+
127
+ # Check if the port is available, fallback to next available port if not
128
+ if not is_port_available(host, port):
129
+ try:
130
+ fallback_port = find_available_port(host, port + 1)
131
+ click.echo(click.style(f'Port {port} is in use, falling back to port {fallback_port}', fg='yellow'))
132
+ port = fallback_port
133
+ except RuntimeError as e:
134
+ click.echo(click.style(f'Failed to find available port: {e}', fg='red'), err=True)
135
+ return
136
+
137
+ server = create_devtools_server(host=host, port=port)
138
+ server.start_server()
121
139
  except ImportError:
122
140
  click.echo(
123
141
  click.style(
@@ -153,21 +171,20 @@ def build_frontend():
153
171
  try:
154
172
  # Install dependencies if node_modules doesn't exist
155
173
  if not (devtools_dir / 'node_modules').exists():
156
- click.echo('Installing frontend dependencies...')
174
+ click.echo('Installing dependencies...')
157
175
  result = subprocess.run(['npm', 'install'], cwd=devtools_dir, capture_output=True, text=True)
158
176
  if result.returncode != 0:
159
177
  click.echo(click.style(f'npm install failed:\n{result.stderr}', fg='red'), err=True)
160
178
  return False
161
179
 
162
180
  # Build the frontend
163
- click.echo('Building frontend...')
164
181
  result = subprocess.run(['npm', 'run', 'build'], cwd=devtools_dir, capture_output=True, text=True)
165
182
 
166
183
  if result.returncode != 0:
167
184
  click.echo(click.style(f'Frontend build failed:\n{result.stderr}', fg='red'), err=True)
168
185
  return False
169
186
 
170
- click.echo(click.style('Frontend build completed successfully!', fg='green'))
187
+ click.echo(click.style('Build completed successfully!', fg='green'))
171
188
  return True
172
189
 
173
190
  except Exception as e:
@@ -184,23 +201,13 @@ def run_config():
184
201
 
185
202
  @click.group(invoke_without_command=True)
186
203
  @click.option('--dev-tools', is_flag=True, help='Start devtools immediately')
187
- @click.option('--build', is_flag=True, help='Build frontend before starting devtools (only with --dev-tools)')
188
204
  @click.pass_context
189
- def cli(ctx, dev_tools, build):
205
+ def cli(ctx, dev_tools):
190
206
  """Synapse SDK - Interactive CLI"""
191
207
 
192
208
  # Handle --dev-tools flag
193
209
  if dev_tools:
194
- if build:
195
- run_devtools(build=True)
196
- else:
197
- run_devtools(build=False)
198
- return
199
-
200
- # Handle --build flag without --dev-tools (show warning)
201
- if build and not dev_tools:
202
- click.echo(click.style('Warning: --build flag requires --dev-tools flag', fg='yellow'))
203
- click.echo('Use: synapse --dev-tools --build')
210
+ run_devtools()
204
211
  return
205
212
 
206
213
  if ctx.invoked_subcommand is None:
@@ -9,15 +9,15 @@ from synapse_sdk.i18n import gettext as _
9
9
  @click.command()
10
10
  @click.option('--host', default=None, help='Host to bind the devtools server')
11
11
  @click.option('--port', default=None, type=int, help='Port to bind the devtools server')
12
- @click.option('--no-browser', is_flag=True, help='Do not open browser automatically')
13
12
  @click.option('--debug', is_flag=True, help='Run in debug mode')
14
- @click.option('--build', is_flag=True, help='Build frontend assets before starting server')
15
- def devtools(host, port, no_browser, debug, build):
13
+ def devtools(host, port, debug):
16
14
  """Start the Synapse devtools web interface"""
17
15
 
18
16
  try:
19
17
  from synapse_sdk.devtools.config import get_server_config
20
18
  from synapse_sdk.devtools.server import create_devtools_server
19
+ from synapse_sdk.devtools.utils import find_available_port, is_port_available
20
+
21
21
  except ImportError:
22
22
  click.echo(
23
23
  click.style(
@@ -27,12 +27,11 @@ def devtools(host, port, no_browser, debug, build):
27
27
  )
28
28
  sys.exit(1)
29
29
 
30
- if build:
31
- click.echo('Building frontend assets...')
32
- from synapse_sdk.cli import build_frontend
30
+ click.echo('Building assets...')
31
+ from synapse_sdk.cli import build_frontend
33
32
 
34
- if not build_frontend():
35
- click.echo(click.style('Build failed, continuing with existing assets...', fg='yellow'))
33
+ if not build_frontend():
34
+ click.echo(click.style('Build failed, continuing with existing assets...', fg='yellow'))
36
35
 
37
36
  if debug:
38
37
  click.echo(_('Starting devtools in debug mode...'))
@@ -47,13 +46,23 @@ def devtools(host, port, no_browser, debug, build):
47
46
  final_host = host if host is not None else server_config['host']
48
47
  final_port = port if port is not None else server_config['port']
49
48
 
49
+ # Check if the port is available, fallback to next available port if not
50
+ if not is_port_available(final_host, final_port):
51
+ try:
52
+ fallback_port = find_available_port(final_host, final_port + 1)
53
+ click.echo(click.style(f'Port {final_port} is in use, falling back to port {fallback_port}', fg='yellow'))
54
+ final_port = fallback_port
55
+ except RuntimeError as e:
56
+ click.echo(click.style(f'Failed to find available port: {e}', fg='red'), err=True)
57
+ sys.exit(1)
58
+
50
59
  # Create and start the devtools server
51
60
  # Pass the current working directory as the plugin directory
52
61
  plugin_directory = os.getcwd()
53
62
  server = create_devtools_server(host=final_host, port=final_port, plugin_directory=plugin_directory)
54
63
 
55
64
  try:
56
- server.start_server(open_browser=not no_browser)
65
+ server.start_server()
57
66
  except KeyboardInterrupt:
58
67
  click.echo(_('\nDevtools stopped.'))
59
68
  except Exception as e:
@@ -8,14 +8,14 @@ from synapse_sdk.plugins.models import PluginRelease
8
8
  from synapse_sdk.plugins.upload import archive
9
9
 
10
10
 
11
- @click.command()
12
- @click.option('--host', required=True)
13
- @click.option('--access_token', required=True)
14
- @click.option('--debug_modules', default='', envvar='SYNAPSE_DEBUG_MODULES')
15
- @click.pass_context
16
- def publish(ctx, host, access_token, debug_modules):
17
- debug = ctx.obj['DEBUG']
18
-
11
+ def _publish(host, access_token, debug, debug_modules=''):
12
+ """
13
+ Publish a plugin release to the Synapse backend.
14
+
15
+ :param host: The host URL of the Synapse backend.
16
+ :param access_token: The access token for authentication.
17
+ :param debug_modules: Comma-separated list of debug modules.
18
+ """
19
19
  plugin_release = PluginRelease()
20
20
 
21
21
  source_path = Path('./')
@@ -29,8 +29,17 @@ def publish(ctx, host, access_token, debug_modules):
29
29
 
30
30
  client = BackendClient(host, access_token)
31
31
  client.create_plugin_release(data)
32
- click.secho(
33
- _('Successfully published "{}" ({}) to synapse backend!').format(plugin_release.name, plugin_release.code),
34
- fg='green',
35
- bold=True,
36
- )
32
+
33
+ message = _('Successfully published "{}" ({}) to synapse backend!').format(plugin_release.name, plugin_release.code)
34
+ click.secho(message, fg='green', bold=True)
35
+ return plugin_release
36
+
37
+
38
+ @click.command()
39
+ @click.option('--host', required=True)
40
+ @click.option('--access_token', required=True)
41
+ @click.option('--debug_modules', default='', envvar='SYNAPSE_DEBUG_MODULES')
42
+ @click.pass_context
43
+ def publish(ctx, host, access_token, debug_modules):
44
+ debug = ctx.obj['DEBUG']
45
+ _publish(host, access_token, debug, debug_modules)
@@ -1,6 +1,5 @@
1
1
  import json
2
2
  import logging
3
- import webbrowser
4
3
  from contextlib import asynccontextmanager
5
4
  from datetime import datetime
6
5
  from importlib.metadata import version
@@ -15,11 +14,13 @@ from fastapi.middleware.cors import CORSMiddleware
15
14
  from fastapi.responses import StreamingResponse
16
15
  from fastapi.staticfiles import StaticFiles
17
16
 
17
+ from synapse_sdk.cli.plugin.publish import _publish
18
18
  from synapse_sdk.clients.agent import AgentClient
19
19
  from synapse_sdk.clients.backend import BackendClient
20
20
  from synapse_sdk.clients.exceptions import ClientError
21
21
  from synapse_sdk.devtools.config import get_backend_config, load_devtools_config
22
22
  from synapse_sdk.devtools.models import ConfigResponse, ConfigUpdateRequest
23
+ from synapse_sdk.devtools.utils import get_display_host
23
24
 
24
25
  logger = logging.getLogger(__name__)
25
26
 
@@ -93,32 +94,12 @@ class DevtoolsServer:
93
94
  """Internal method to publish plugin using CLI logic"""
94
95
  import os
95
96
 
96
- from synapse_sdk.clients.backend import BackendClient
97
- from synapse_sdk.plugins.models import PluginRelease
98
- from synapse_sdk.plugins.upload import archive
99
-
100
- # Change to plugin directory
101
97
  original_cwd = os.getcwd()
102
98
  try:
103
99
  os.chdir(str(source_path))
104
100
 
105
- # Create plugin release from config in plugin directory
106
- plugin_release = PluginRelease()
107
-
108
- # Create archive
109
- archive_path = source_path / 'dist' / 'archive.zip'
110
- archive(source_path, archive_path)
111
-
112
- # Prepare data for backend
113
- data = {'plugin': plugin_release.plugin, 'file': str(archive_path), 'debug': debug}
114
-
115
- if debug:
116
- modules = [] # TODO: Get debug modules from environment or config
117
- data['meta'] = {'modules': modules}
118
-
119
- # Create backend client and publish
120
- client = BackendClient(host, access_token, debug=debug)
121
- result = client.create_plugin_release(data)
101
+ debug_modules = os.getenv('SYNAPSE_DEBUG_MODULES', '')
102
+ plugin_release = _publish(host, access_token, debug, debug_modules)
122
103
 
123
104
  return {
124
105
  'success': True,
@@ -127,7 +108,7 @@ class DevtoolsServer:
127
108
  'plugin_code': plugin_release.code,
128
109
  'version': plugin_release.version,
129
110
  'name': plugin_release.name,
130
- 'result': result,
111
+ 'result': '',
131
112
  }
132
113
 
133
114
  finally:
@@ -263,9 +244,11 @@ class DevtoolsServer:
263
244
 
264
245
  def _inject_env_vars(self, html_content: str) -> str:
265
246
  """Inject environment variables into HTML"""
247
+ # Use display host for frontend access (resolves 0.0.0.0 to actual IP)
248
+ display_host = get_display_host(self.host)
266
249
  env_script = f"""<script>
267
250
  window.VITE_API_PORT = {self.port};
268
- window.VITE_API_HOST = '{self.host}';
251
+ window.VITE_API_HOST = '{display_host}';
269
252
  </script>"""
270
253
 
271
254
  # Insert before closing head tag
@@ -360,14 +343,38 @@ class DevtoolsServer:
360
343
  raise HTTPException(status_code=503, detail='Agent client not configured')
361
344
 
362
345
  async def log_generator():
346
+ import asyncio
347
+
363
348
  try:
364
- # Use shorter timeout for log streaming to prevent hanging
365
- for log_line in self.agent_client.tail_job_logs(job_id, stream_timeout=5):
366
- # Check if client disconnected
349
+ # Run the synchronous generator in a thread to avoid blocking
350
+ loop = asyncio.get_event_loop()
351
+ log_iter = self.agent_client.tail_job_logs(job_id, stream_timeout=3)
352
+
353
+ while True:
354
+ # Check if client disconnected before getting next log
367
355
  if await request.is_disconnected():
368
356
  logger.info(f'Client disconnected, stopping log stream for job {job_id}')
369
357
  break
370
- yield log_line
358
+
359
+ try:
360
+ # Get next log line with timeout to allow periodic disconnect checks
361
+ log_line = await loop.run_in_executor(None, lambda: next(log_iter, None))
362
+
363
+ if log_line is None:
364
+ break
365
+
366
+ # Check again before yielding
367
+ if await request.is_disconnected():
368
+ logger.info(f'Client disconnected before yield, stopping log stream for job {job_id}')
369
+ break
370
+
371
+ # Convert plain text to SSE format
372
+ if log_line.strip():
373
+ yield f'data: {log_line.strip()}\n\n'
374
+
375
+ except StopIteration:
376
+ break
377
+
371
378
  except ClientError as e:
372
379
  logger.warning(f'Agent client error in log streaming for job {job_id}: {e.reason}')
373
380
  if e.status == 408:
@@ -383,7 +390,7 @@ class DevtoolsServer:
383
390
  logger.info(f'Log streaming ended for job {job_id}')
384
391
 
385
392
  try:
386
- return StreamingResponse(log_generator(), media_type='text/plain')
393
+ return StreamingResponse(log_generator(), media_type='text/event-stream')
387
394
  except Exception as e:
388
395
  logger.error(f'Failed to setup log stream for job {job_id}: {e}')
389
396
  raise HTTPException(status_code=500, detail=f'Failed to setup log stream for job {job_id}')
@@ -786,40 +793,12 @@ class DevtoolsServer:
786
793
  self.websocket_connections.remove(connection)
787
794
  logger.info('Removed disconnected WebSocket connection')
788
795
 
789
- def start_server(self, open_browser: bool = True):
796
+ def start_server(self):
790
797
  """Start the devtools server"""
791
- url = f'http://{self.host}:{self.port}'
792
-
793
- if open_browser:
794
- # Open browser after a short delay to ensure server is ready
795
- def open_browser_delayed():
796
- import os
797
- import time
798
-
799
- time.sleep(1.5)
800
-
801
- try:
802
- # Redirect stderr to suppress xdg-open error messages
803
- old_stderr = os.dup(2)
804
- with open(os.devnull, 'w') as devnull:
805
- os.dup2(devnull.fileno(), 2)
806
- webbrowser.open(url)
807
- os.dup2(old_stderr, 2)
808
- os.close(old_stderr)
809
- except Exception:
810
- # Restore stderr if something went wrong
811
- try:
812
- os.dup2(old_stderr, 2)
813
- os.close(old_stderr)
814
- except Exception as e:
815
- logger.error(f'Failed to restore stderr: {e}')
816
-
817
- # Always show the URL since we can't reliably detect browser success
818
- print(f'Open devtools on your browser: {url}')
819
-
820
- import threading
821
-
822
- threading.Thread(target=open_browser_delayed, daemon=True).start()
798
+ # Use display host for browser opening and URL display
799
+ display_host = get_display_host(self.host)
800
+ url = f'http://{display_host}:{self.port}'
801
+ print(f'Open devtools on your browser: {url}')
823
802
 
824
803
  uvicorn.run(self.app, host=self.host, port=self.port, log_level='warning', access_log=False)
825
804
 
@@ -0,0 +1,52 @@
1
+ import socket
2
+
3
+
4
+ def is_port_available(host: str, port: int) -> bool:
5
+ """Check if a port is available on the given host"""
6
+ try:
7
+ with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock:
8
+ sock.settimeout(1)
9
+ result = sock.connect_ex((host, port))
10
+ return result != 0
11
+ except (socket.error, OSError):
12
+ return False
13
+
14
+
15
+ def find_available_port(host: str, start_port: int, max_attempts: int = 10) -> int:
16
+ """Find an available port starting from start_port"""
17
+ for port in range(start_port, start_port + max_attempts):
18
+ if is_port_available(host, port):
19
+ return port
20
+ raise RuntimeError(f'No available port found in range {start_port}-{start_port + max_attempts - 1}')
21
+
22
+
23
+ def get_local_ip() -> str:
24
+ """Get the local IP address for client access"""
25
+ try:
26
+ # In WSL, return localhost since the server is accessible via localhost
27
+ if _is_wsl():
28
+ return '127.0.0.1'
29
+
30
+ with socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as s:
31
+ s.connect(('8.8.8.8', 80))
32
+ return s.getsockname()[0]
33
+ except Exception:
34
+ # Fallback to localhost if we can't determine the local IP
35
+ return '127.0.0.1'
36
+
37
+
38
+ def _is_wsl() -> bool:
39
+ """Check if we're running in WSL"""
40
+ try:
41
+ with open('/proc/version', 'r') as f:
42
+ content = f.read().lower()
43
+ return 'microsoft' in content or 'wsl' in content
44
+ except Exception:
45
+ return False
46
+
47
+
48
+ def get_display_host(server_host: str) -> str:
49
+ """Get the appropriate host for display and frontend access"""
50
+ if server_host == '0.0.0.0':
51
+ return get_local_ip()
52
+ return server_host
@@ -6,8 +6,8 @@
6
6
  <meta name="theme-color" content="#000000" />
7
7
  <link rel="shortcut icon" type="image/ico" href="/assets/favicon-mtvwWgEY.ico" />
8
8
  <title>Synapse SDK</title>
9
- <script type="module" crossorigin src="/assets/index-CUXTZIPM.js"></script>
10
- <link rel="stylesheet" crossorigin href="/assets/index-CFhy91rB.css">
9
+ <script type="module" crossorigin src="/assets/index-C-6muTAU.js"></script>
10
+ <link rel="stylesheet" crossorigin href="/assets/index-DaWyc9aY.css">
11
11
  </head>
12
12
  <body>
13
13
  <noscript>You need to enable JavaScript to run this app.</noscript>
@@ -186,6 +186,10 @@ export default function LogViewer(props) {
186
186
  startStreaming();
187
187
  });
188
188
 
189
+ onCleanup(() => {
190
+ stopStreaming();
191
+ });
192
+
189
193
  return (
190
194
  <div class="github-log-viewer">
191
195
  {/* Header */}
@@ -208,9 +212,19 @@ export default function LogViewer(props) {
208
212
  </div>
209
213
  </div>
210
214
 
215
+ {/* Error State */}
216
+ <Show when={error()}>
217
+ <div class="alert alert-error mb-2">
218
+ <svg xmlns="http://www.w3.org/2000/svg" class="stroke-current shrink-0 h-6 w-6" fill="none" viewBox="0 0 24 24">
219
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 14l2-2m0 0l2-2m-2 2l-2-2m2 2l2 2m7-2a9 9 0 11-18 0 9 9 0 0118 0z" />
220
+ </svg>
221
+ <span>{error()}</span>
222
+ </div>
223
+ </Show>
224
+
211
225
  {/* Container */}
212
226
  <div class="log-container" ref={logContainerRef} onScroll={handleScroll}>
213
- <Show when={logs().length === 0}>
227
+ <Show when={logs().length === 0 && !error()}>
214
228
  <div class="log-empty">
215
229
  <div class="empty-state">
216
230
  <svg class="empty-icon" viewBox="0 0 24 24" width="24" height="24">
@@ -1,6 +1,6 @@
1
1
  import { useLocation, useNavigate } from "@solidjs/router";
2
2
  import { createSignal, Show } from "solid-js";
3
- import { HomeIcon, DocumentIcon, SettingsIcon, CubeIcon, MenuIcon, CloseIcon } from "./icons";
3
+ import { MenuIcon, CloseIcon, DocumentIcon } from "./icons";
4
4
  import { createStatusResource } from "../utils/api";
5
5
 
6
6
  export default function NavigationSidebar() {
@@ -15,23 +15,17 @@ export default function NavigationSidebar() {
15
15
  {
16
16
  id: "home",
17
17
  label: "Jobs",
18
- icon: HomeIcon,
19
18
  path: "/",
20
- description: "View and manage Ray jobs"
21
19
  },
22
20
  {
23
21
  id: "applications",
24
- label: "Serve Apps",
25
- icon: CubeIcon,
22
+ label: "Serve Application",
26
23
  path: "/serve_applications",
27
- description: "Ray Serve applications"
28
24
  },
29
25
  {
30
26
  id: "plugin",
31
- label: "Plugin Dev",
32
- icon: SettingsIcon,
27
+ label: "Plugin",
33
28
  path: "/plugin",
34
- description: "Develop and test plugins"
35
29
  }
36
30
  ];
37
31
 
@@ -89,7 +83,6 @@ export default function NavigationSidebar() {
89
83
  <nav class="flex-1 p-6 py-8 overflow-y-auto">
90
84
  <ul class="space-y-2">
91
85
  {navigationItems.map((item) => {
92
- const Icon = item.icon;
93
86
  const active = isActive(item.path);
94
87
 
95
88
  return (
@@ -102,10 +95,8 @@ export default function NavigationSidebar() {
102
95
  }`}
103
96
  onClick={() => handleNavigation(item.path)}
104
97
  >
105
- <Icon class="w-5 h-5 flex-shrink-0" />
106
98
  <div class="flex-1 min-w-0">
107
99
  <div class="text-sm font-medium">{item.label}</div>
108
- <div class="text-xs text-slate-500 truncate">{item.description}</div>
109
100
  </div>
110
101
  </button>
111
102
  </li>
@@ -120,7 +111,7 @@ export default function NavigationSidebar() {
120
111
  <div class="flex items-center justify-between">
121
112
  <span>SDK {status()?.devtools?.version || "Unknown"}</span>
122
113
  <a
123
- href="https://docs.synapse.ml"
114
+ href="https://docs.synapse.sh"
124
115
  target="_blank"
125
116
  rel="noopener noreferrer"
126
117
  class="text-slate-600 hover:text-slate-900"
@@ -333,12 +333,29 @@ export function createJobLogsStream(jobId) {
333
333
  const lines = buffer.split(/\r?\n/);
334
334
  buffer = lines.pop() || "";
335
335
 
336
- const newLogs = lines
337
- .filter(line => line.trim())
338
- .map(parseLogLine);
339
-
340
- if (newLogs.length > 0) {
341
- setLogs(prev => [...prev, ...newLogs]);
336
+ for (const line of lines) {
337
+ if (!line.trim()) continue;
338
+
339
+ // Handle SSE format (data: prefix)
340
+ if (line.startsWith('data: ')) {
341
+ const content = line.substring(6).trim();
342
+
343
+ // Check if this is an error message from the server
344
+ if (content.includes('Agent client error') ||
345
+ content.includes('Agent connection error') ||
346
+ content.includes('Agent error:') ||
347
+ content.includes('Unexpected error:')) {
348
+ setError(content);
349
+ // Still add as a log entry so user can see the error
350
+ setLogs(prev => [...prev, parseLogLine(content)]);
351
+ } else {
352
+ // Normal log line
353
+ setLogs(prev => [...prev, parseLogLine(content)]);
354
+ }
355
+ } else {
356
+ // Handle non-SSE format (backward compatibility)
357
+ setLogs(prev => [...prev, parseLogLine(line)]);
358
+ }
342
359
  }
343
360
  }
344
361
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: synapse-sdk
3
- Version: 1.0.0a61
3
+ Version: 1.0.0a63
4
4
  Summary: synapse sdk
5
5
  Author-email: datamaker <developer@datamaker.io>
6
6
  License: MIT
@@ -9,7 +9,6 @@ requirements.txt
9
9
  uv.lock
10
10
  .github/workflows/lint.yml
11
11
  .github/workflows/pypi-publish.yml
12
- .github/workflows/update-changelog.yml
13
12
  docs/categories.md
14
13
  docs/changelog.md
15
14
  docs/configuration.md
@@ -105,6 +104,7 @@ synapse_sdk/devtools/__init__.py
105
104
  synapse_sdk/devtools/config.py
106
105
  synapse_sdk/devtools/models.py
107
106
  synapse_sdk/devtools/server.py
107
+ synapse_sdk/devtools/utils.py
108
108
  synapse_sdk/devtools/docs/.gitignore
109
109
  synapse_sdk/devtools/docs/README.md
110
110
  synapse_sdk/devtools/docs/docusaurus.config.ts