stackone-ai 2.1.1__tar.gz → 2.3.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (175) hide show
  1. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/.claude/rules/development-workflow.md +1 -1
  2. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/.claude/rules/nix-workflow.md +1 -1
  3. stackone_ai-2.3.1/.claude/skills/release-please/SKILL.md +51 -0
  4. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/.github/actions/setup-nix/action.yaml +2 -6
  5. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/.github/workflows/ci.yaml +3 -3
  6. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/.github/workflows/nix-flake-update.yaml +1 -1
  7. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/.github/workflows/nix-flake.yaml +1 -1
  8. stackone_ai-2.3.1/.github/workflows/release.yaml +66 -0
  9. stackone_ai-2.3.1/.release-please-manifest.json +3 -0
  10. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/CHANGELOG.md +19 -0
  11. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/CLAUDE.md +8 -2
  12. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/PKG-INFO +14 -14
  13. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/README.md +13 -13
  14. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/examples/test_examples.py +1 -1
  15. stackone_ai-2.1.1/examples/meta_tools_example.py → stackone_ai-2.3.1/examples/utility_tools_example.py +26 -26
  16. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/flake.nix +2 -3
  17. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/justfile +0 -4
  18. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/pyproject.toml +1 -1
  19. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/stackone_ai/__init__.py +1 -1
  20. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/stackone_ai/feedback/tool.py +1 -1
  21. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/stackone_ai/models.py +10 -10
  22. stackone_ai-2.1.1/stackone_ai/meta_tools.py → stackone_ai-2.3.1/stackone_ai/utility_tools.py +24 -24
  23. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/tests/test_feedback.py +3 -3
  24. stackone_ai-2.1.1/tests/test_meta_tools.py → stackone_ai-2.3.1/tests/test_utility_tools.py +40 -40
  25. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/uv.lock +4 -4
  26. stackone_ai-2.1.1/.github/workflows/release.yaml +0 -43
  27. stackone_ai-2.1.1/.release-please-manifest.json +0 -3
  28. stackone_ai-2.1.1/scripts/update_version.py +0 -47
  29. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/.claude/rules/examples-standards.md +0 -0
  30. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/.claude/rules/git-workflow.md +0 -0
  31. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/.claude/rules/no-relative-imports.md +0 -0
  32. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/.claude/rules/package-installation.md +0 -0
  33. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/.claude/rules/release-please-standards.md +0 -0
  34. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/.claude/rules/uv-scripts.md +0 -0
  35. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/.cursor/rules/development-workflow.mdc +0 -0
  36. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/.cursor/rules/examples-standards.mdc +0 -0
  37. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/.cursor/rules/git-workflow.mdc +0 -0
  38. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/.cursor/rules/no-relative-imports.mdc +0 -0
  39. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/.cursor/rules/package-installation.mdc +0 -0
  40. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/.cursor/rules/release-please-standards.mdc +0 -0
  41. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/.cursor/rules/uv-scripts.mdc +0 -0
  42. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/.envrc +0 -0
  43. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/.github/dependabot.yaml +0 -0
  44. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/.gitignore +0 -0
  45. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/.gitleaks.toml +0 -0
  46. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/.gitmodules +0 -0
  47. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/.mcp.json +0 -0
  48. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/.release-please-config.json +0 -0
  49. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/LICENSE +0 -0
  50. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/examples/crewai_integration.py +0 -0
  51. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/examples/file_uploads.py +0 -0
  52. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/examples/index.py +0 -0
  53. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/examples/langchain_integration.py +0 -0
  54. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/examples/openai_integration.py +0 -0
  55. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/examples/stackone_account_ids.py +0 -0
  56. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/flake.lock +0 -0
  57. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/stackone_ai/constants.py +0 -0
  58. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/stackone_ai/feedback/__init__.py +0 -0
  59. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/stackone_ai/integrations/__init__.py +0 -0
  60. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/stackone_ai/integrations/langgraph.py +0 -0
  61. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/stackone_ai/py.typed +0 -0
  62. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/stackone_ai/toolset.py +0 -0
  63. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/stackone_ai/utils/__init__.py +0 -0
  64. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/stackone_ai/utils/tfidf_index.py +0 -0
  65. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/tests/conftest.py +0 -0
  66. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/tests/mocks/serve.ts +0 -0
  67. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/tests/test_fetch_tools.py +0 -0
  68. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/tests/test_integrations_langgraph.py +0 -0
  69. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/tests/test_models.py +0 -0
  70. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/tests/test_tfidf_index.py +0 -0
  71. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/tests/test_tool_calling.py +0 -0
  72. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/tests/test_toolset.py +0 -0
  73. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/vendor/stackone-ai-node/.claude/rules/development-workflow.md +0 -0
  74. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/vendor/stackone-ai-node/.claude/rules/file-operations.md +0 -0
  75. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/vendor/stackone-ai-node/.claude/rules/git-workflow.md +0 -0
  76. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/vendor/stackone-ai-node/.claude/rules/pnpm-usage.md +0 -0
  77. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/vendor/stackone-ai-node/.claude/rules/typescript-patterns.md +0 -0
  78. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/vendor/stackone-ai-node/.claude/rules/typescript-testing.md +0 -0
  79. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/vendor/stackone-ai-node/.claude/skills/orama-integration/SKILL.md +0 -0
  80. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/vendor/stackone-ai-node/.cursor/rules/development-workflow.mdc +0 -0
  81. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/vendor/stackone-ai-node/.cursor/rules/file-operations.mdc +0 -0
  82. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/vendor/stackone-ai-node/.cursor/rules/git-workflow.mdc +0 -0
  83. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/vendor/stackone-ai-node/.cursor/rules/orama-integration.mdc +0 -0
  84. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/vendor/stackone-ai-node/.cursor/rules/pnpm-usage.mdc +0 -0
  85. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/vendor/stackone-ai-node/.cursor/rules/typescript-patterns.mdc +0 -0
  86. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/vendor/stackone-ai-node/.cursor/rules/typescript-testing.mdc +0 -0
  87. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/vendor/stackone-ai-node/.envrc +0 -0
  88. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/vendor/stackone-ai-node/.git +0 -0
  89. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/vendor/stackone-ai-node/.github/CODEOWNERS +0 -0
  90. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/vendor/stackone-ai-node/.github/actions/setup-nix/action.yaml +0 -0
  91. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/vendor/stackone-ai-node/.github/workflows/check-title.yaml +0 -0
  92. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/vendor/stackone-ai-node/.github/workflows/ci.yaml +0 -0
  93. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/vendor/stackone-ai-node/.github/workflows/claude.yaml +0 -0
  94. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/vendor/stackone-ai-node/.github/workflows/dry-publish.yaml +0 -0
  95. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/vendor/stackone-ai-node/.github/workflows/nix-flake.yaml +0 -0
  96. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/vendor/stackone-ai-node/.github/workflows/release.yaml +0 -0
  97. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/vendor/stackone-ai-node/.gitignore +0 -0
  98. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/vendor/stackone-ai-node/.gitleaks.toml +0 -0
  99. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/vendor/stackone-ai-node/.mcp.json +0 -0
  100. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/vendor/stackone-ai-node/.oxfmtrc.jsonc +0 -0
  101. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/vendor/stackone-ai-node/.oxlintrc.jsonc +0 -0
  102. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/vendor/stackone-ai-node/AGENTS.md +0 -0
  103. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/vendor/stackone-ai-node/CHANGELOG.md +0 -0
  104. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/vendor/stackone-ai-node/CLAUDE.md +0 -0
  105. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/vendor/stackone-ai-node/LICENSE +0 -0
  106. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/vendor/stackone-ai-node/README.md +0 -0
  107. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/vendor/stackone-ai-node/examples/README.md +0 -0
  108. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/vendor/stackone-ai-node/examples/ai-sdk-integration.test.ts +0 -0
  109. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/vendor/stackone-ai-node/examples/ai-sdk-integration.ts +0 -0
  110. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/vendor/stackone-ai-node/examples/anthropic-integration.ts +0 -0
  111. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/vendor/stackone-ai-node/examples/claude-agent-sdk-integration.test.ts +0 -0
  112. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/vendor/stackone-ai-node/examples/claude-agent-sdk-integration.ts +0 -0
  113. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/vendor/stackone-ai-node/examples/fetch-tools-debug.ts +0 -0
  114. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/vendor/stackone-ai-node/examples/fetch-tools.test.ts +0 -0
  115. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/vendor/stackone-ai-node/examples/fetch-tools.ts +0 -0
  116. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/vendor/stackone-ai-node/examples/meta-tools.ts +0 -0
  117. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/vendor/stackone-ai-node/examples/openai-integration.test.ts +0 -0
  118. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/vendor/stackone-ai-node/examples/openai-integration.ts +0 -0
  119. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/vendor/stackone-ai-node/examples/openai-responses-integration.test.ts +0 -0
  120. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/vendor/stackone-ai-node/examples/openai-responses-integration.ts +0 -0
  121. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/vendor/stackone-ai-node/examples/package.json +0 -0
  122. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/vendor/stackone-ai-node/examples/tanstack-ai-integration.test.ts +0 -0
  123. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/vendor/stackone-ai-node/examples/tanstack-ai-integration.ts +0 -0
  124. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/vendor/stackone-ai-node/examples/tsconfig.json +0 -0
  125. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/vendor/stackone-ai-node/flake.lock +0 -0
  126. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/vendor/stackone-ai-node/flake.nix +0 -0
  127. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/vendor/stackone-ai-node/knip.config.ts +0 -0
  128. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/vendor/stackone-ai-node/lefthook.yaml +0 -0
  129. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/vendor/stackone-ai-node/mocks/handlers.example-api.ts +0 -0
  130. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/vendor/stackone-ai-node/mocks/handlers.mcp.ts +0 -0
  131. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/vendor/stackone-ai-node/mocks/handlers.openai.ts +0 -0
  132. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/vendor/stackone-ai-node/mocks/handlers.stackone-ai.ts +0 -0
  133. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/vendor/stackone-ai-node/mocks/handlers.stackone-rpc.ts +0 -0
  134. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/vendor/stackone-ai-node/mocks/handlers.ts +0 -0
  135. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/vendor/stackone-ai-node/mocks/handlers.utils.ts +0 -0
  136. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/vendor/stackone-ai-node/mocks/mcp-server.ts +0 -0
  137. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/vendor/stackone-ai-node/mocks/node.ts +0 -0
  138. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/vendor/stackone-ai-node/package.json +0 -0
  139. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/vendor/stackone-ai-node/pnpm-lock.yaml +0 -0
  140. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/vendor/stackone-ai-node/pnpm-workspace.yaml +0 -0
  141. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/vendor/stackone-ai-node/src/consts.ts +0 -0
  142. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/vendor/stackone-ai-node/src/feedback.test.ts +0 -0
  143. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/vendor/stackone-ai-node/src/feedback.ts +0 -0
  144. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/vendor/stackone-ai-node/src/headers.test.ts +0 -0
  145. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/vendor/stackone-ai-node/src/headers.ts +0 -0
  146. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/vendor/stackone-ai-node/src/index.ts +0 -0
  147. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/vendor/stackone-ai-node/src/mcp-client.test.ts +0 -0
  148. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/vendor/stackone-ai-node/src/mcp-client.ts +0 -0
  149. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/vendor/stackone-ai-node/src/requestBuilder.test.ts +0 -0
  150. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/vendor/stackone-ai-node/src/requestBuilder.ts +0 -0
  151. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/vendor/stackone-ai-node/src/rpc-client.test.ts +0 -0
  152. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/vendor/stackone-ai-node/src/rpc-client.ts +0 -0
  153. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/vendor/stackone-ai-node/src/schema.ts +0 -0
  154. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/vendor/stackone-ai-node/src/tool.test-d.ts +0 -0
  155. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/vendor/stackone-ai-node/src/tool.test.ts +0 -0
  156. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/vendor/stackone-ai-node/src/tool.ts +0 -0
  157. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/vendor/stackone-ai-node/src/toolsets.test-d.ts +0 -0
  158. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/vendor/stackone-ai-node/src/toolsets.test.ts +0 -0
  159. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/vendor/stackone-ai-node/src/toolsets.ts +0 -0
  160. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/vendor/stackone-ai-node/src/types.ts +0 -0
  161. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/vendor/stackone-ai-node/src/utils/array.test.ts +0 -0
  162. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/vendor/stackone-ai-node/src/utils/array.ts +0 -0
  163. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/vendor/stackone-ai-node/src/utils/error-stackone-api.test.ts +0 -0
  164. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/vendor/stackone-ai-node/src/utils/error-stackone-api.ts +0 -0
  165. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/vendor/stackone-ai-node/src/utils/error-stackone.test.ts +0 -0
  166. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/vendor/stackone-ai-node/src/utils/error-stackone.ts +0 -0
  167. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/vendor/stackone-ai-node/src/utils/tfidf-index.test.ts +0 -0
  168. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/vendor/stackone-ai-node/src/utils/tfidf-index.ts +0 -0
  169. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/vendor/stackone-ai-node/src/utils/try-import.test.ts +0 -0
  170. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/vendor/stackone-ai-node/src/utils/try-import.ts +0 -0
  171. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/vendor/stackone-ai-node/src/utils/type.ts +0 -0
  172. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/vendor/stackone-ai-node/tsconfig.json +0 -0
  173. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/vendor/stackone-ai-node/tsdown.config.ts +0 -0
  174. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/vendor/stackone-ai-node/vitest.config.ts +0 -0
  175. {stackone_ai-2.1.1 → stackone_ai-2.3.1}/vendor/stackone-ai-node/vitest.setup.ts +0 -0
@@ -17,7 +17,7 @@ This rule provides code style guidelines and project conventions for the StackOn
17
17
  ## Type Annotations
18
18
 
19
19
  - Full type annotations required for all public APIs
20
- - Use Python 3.11+ typing features
20
+ - Use Python 3.10+ typing features
21
21
  - Run `just ty` to verify type correctness
22
22
  - Strict ty configuration is enforced
23
23
 
@@ -16,7 +16,7 @@ devShells.default = pkgs.mkShellNoCC {
16
16
  uv
17
17
  ty
18
18
  just
19
- nixfmt-rfc-style
19
+ nixfmt
20
20
 
21
21
  # your new tool here
22
22
  new-tool
@@ -0,0 +1,51 @@
1
+ # Release Please Trigger
2
+
3
+ Trigger a release-please PR for a specific version.
4
+
5
+ ## Usage
6
+
7
+ ```
8
+ /release-please <version>
9
+ ```
10
+
11
+ ## Examples
12
+
13
+ ```
14
+ /release-please 2.3.0
15
+ /release-please 3.0.0
16
+ ```
17
+
18
+ ## Instructions
19
+
20
+ When this skill is invoked with a version argument:
21
+
22
+ 1. **Validate the version format**: Ensure the version follows semantic versioning (X.Y.Z format)
23
+
24
+ 2. **Create a new branch**: Create a branch named `chore/trigger-release-<version>`
25
+
26
+ ```bash
27
+ git switch -c chore/trigger-release-<version>
28
+ ```
29
+
30
+ 3. **Create an empty commit with Release-As trailer**: The commit message must include the `Release-As: <version>` trailer to trigger release-please
31
+
32
+ ```bash
33
+ git commit --allow-empty -m "chore: trigger release <version>
34
+
35
+ Release-As: <version>"
36
+ ```
37
+
38
+ 4. **Push the branch and create a PR**:
39
+
40
+ ```bash
41
+ git push -u origin chore/trigger-release-<version>
42
+ gh pr create --title "chore: trigger release <version>" --body "Trigger release-please to create version <version>."
43
+ ```
44
+
45
+ 5. **Report the PR URL** to the user
46
+
47
+ ## Notes
48
+
49
+ - The `Release-As` trailer in the commit message tells release-please to use that specific version
50
+ - Once the PR is merged to main, release-please will automatically create a release PR with the specified version
51
+ - The release PR will update CHANGELOG.md, version files, and create a GitHub release when merged
@@ -9,10 +9,6 @@ inputs:
9
9
  description: "Skip uv sync step (useful for jobs that do not need Python dependencies)"
10
10
  required: false
11
11
  default: "false"
12
- skip-mock-server:
13
- description: "Skip MCP mock server dependencies installation (useful for jobs that do not run tests)"
14
- required: false
15
- default: "false"
16
12
  runs:
17
13
  using: "composite"
18
14
  steps:
@@ -43,10 +39,10 @@ runs:
43
39
  - name: Install Python dependencies
44
40
  if: inputs.skip-uv-sync != 'true'
45
41
  shell: bash
46
- run: uv sync --all-extras
42
+ run: uv sync --all-extras --locked
47
43
 
48
44
  - name: Install MCP mock server dependencies
49
- if: inputs.skip-uv-sync != 'true' && inputs.skip-mock-server != 'true'
45
+ if: inputs.skip-uv-sync != 'true'
50
46
  shell: bash
51
47
  run: |
52
48
  if [ -f vendor/stackone-ai-node/package.json ]; then
@@ -20,7 +20,7 @@ jobs:
20
20
  runs-on: ubuntu-latest
21
21
  steps:
22
22
  - name: Checkout repository
23
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
23
+ uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
24
24
  with:
25
25
  fetch-depth: 0
26
26
 
@@ -40,7 +40,7 @@ jobs:
40
40
  python-version: ["3.10", "3.11", "3.12", "3.13"]
41
41
  steps:
42
42
  - name: Checkout repository
43
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
43
+ uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
44
44
  with:
45
45
  submodules: true
46
46
 
@@ -63,7 +63,7 @@ jobs:
63
63
  if: github.ref == 'refs/heads/main'
64
64
  steps:
65
65
  - name: Checkout repository
66
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
66
+ uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
67
67
  with:
68
68
  submodules: true
69
69
 
@@ -15,7 +15,7 @@ jobs:
15
15
  runs-on: ubuntu-latest
16
16
  steps:
17
17
  - name: Checkout repository
18
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
18
+ uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
19
19
 
20
20
  - name: Setup Nix
21
21
  uses: ./.github/actions/setup-nix
@@ -24,7 +24,7 @@ jobs:
24
24
  runs-on: ubuntu-latest
25
25
  steps:
26
26
  - name: Checkout repository
27
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
27
+ uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
28
28
 
29
29
  - name: Install Nix
30
30
  uses: cachix/install-nix-action@4e002c8ec80594ecd40e759629461e26c8abed15 # v31.9.0
@@ -0,0 +1,66 @@
1
+ name: Release Please
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - main
7
+
8
+ permissions:
9
+ contents: write
10
+ pull-requests: write
11
+
12
+ jobs:
13
+ release-please:
14
+ runs-on: ubuntu-latest
15
+ steps:
16
+ - uses: googleapis/release-please-action@16a9c90856f42705d54a6fda1823352bdc62cf38 # v4.4.0
17
+ id: release
18
+ with:
19
+ config-file: .release-please-config.json
20
+ manifest-file: .release-please-manifest.json
21
+
22
+ # Update uv.lock when release PR is created/updated
23
+ - name: Checkout repository (for PR update)
24
+ uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
25
+ if: ${{ steps.release.outputs.pr }}
26
+ with:
27
+ ref: ${{ fromJSON(steps.release.outputs.pr).headBranchName }}
28
+
29
+ - name: Setup Nix (for PR update)
30
+ if: ${{ steps.release.outputs.pr }}
31
+ uses: ./.github/actions/setup-nix
32
+ with:
33
+ skip-uv-sync: "true"
34
+
35
+ - name: Update uv.lock
36
+ if: ${{ steps.release.outputs.pr }}
37
+ run: |
38
+ nix develop --command uv lock
39
+ if git diff --quiet uv.lock; then
40
+ echo "uv.lock is already up to date"
41
+ else
42
+ git config user.name "github-actions[bot]"
43
+ git config user.email "github-actions[bot]@users.noreply.github.com"
44
+ git add uv.lock
45
+ git commit -m "chore: update uv.lock"
46
+ git push
47
+ fi
48
+
49
+ # Only release to PyPI when a new release is created
50
+ - name: Checkout repository
51
+ uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
52
+ if: ${{ steps.release.outputs.release_created }}
53
+
54
+ - name: Setup Nix
55
+ if: ${{ steps.release.outputs.release_created }}
56
+ uses: ./.github/actions/setup-nix
57
+ with:
58
+ skip-uv-sync: "true"
59
+
60
+ - name: Build and publish package
61
+ if: ${{ steps.release.outputs.release_created }}
62
+ env:
63
+ UV_PUBLISH_TOKEN: ${{ secrets.PYPI_API_TOKEN }}
64
+ run: |
65
+ nix develop --command just build
66
+ nix develop --command just publish
@@ -0,0 +1,3 @@
1
+ {
2
+ ".": "2.3.1"
3
+ }
@@ -1,5 +1,24 @@
1
1
  # Changelog
2
2
 
3
+ ## [2.3.1](https://github.com/StackOneHQ/stackone-ai-python/compare/stackone-ai-v2.3.0...stackone-ai-v2.3.1) (2026-01-29)
4
+
5
+
6
+ ### Documentation
7
+
8
+ * fix Python version requirement to 3.10+ ([#131](https://github.com/StackOneHQ/stackone-ai-python/issues/131)) ([ef2b4e3](https://github.com/StackOneHQ/stackone-ai-python/commit/ef2b4e3d06290d4fdc638bc66eec0c48b177c4f0))
9
+
10
+ ## [2.3.0](https://github.com/StackOneHQ/stackone-ai-python/compare/stackone-ai-v2.1.1...stackone-ai-v2.3.0) (2026-01-29)
11
+
12
+
13
+ ### Bug Fixes
14
+
15
+ * **nix:** replace deprecated nixfmt-rfc-style with nixfmt ([#114](https://github.com/StackOneHQ/stackone-ai-python/issues/114)) ([10627b4](https://github.com/StackOneHQ/stackone-ai-python/commit/10627b441745806f3b57a7b1cdba296ef722b00f))
16
+
17
+
18
+ ### Miscellaneous Chores
19
+
20
+ * trigger release 2.3.0 ([#130](https://github.com/StackOneHQ/stackone-ai-python/issues/130)) ([a28d0a6](https://github.com/StackOneHQ/stackone-ai-python/commit/a28d0a6fbcf703dd640d3255fa4171046ea225c7))
21
+
3
22
  ## [2.1.1](https://github.com/StackOneHQ/stackone-ai-python/compare/stackone-ai-v2.1.0...stackone-ai-v2.1.1) (2026-01-22)
4
23
 
5
24
 
@@ -8,6 +8,12 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co
8
8
  - **Skills** (`.claude/skills/`): Manually invoked for specific integrations.
9
9
  - **Cursor rules** (`.cursor/rules/`): Symlinks to `.claude/rules/` for consistency.
10
10
 
11
+ ## Available Skills
12
+
13
+ | Skill | Usage | Description |
14
+ | ------------------ | --------------------------- | -------------------------------------------------- |
15
+ | **release-please** | `/release-please <version>` | Trigger a release-please PR for a specific version |
16
+
11
17
  ## Available Rules
12
18
 
13
19
  | Rule | Applies To | Description |
@@ -88,7 +94,7 @@ toolset = StackOneToolSet(
88
94
 
89
95
  ### Type Safety
90
96
 
91
- - Full type annotations required (Python 3.11+)
97
+ - Full type annotations required (Python 3.10+)
92
98
  - Strict ty configuration
93
99
  - Use generics for better IDE support
94
100
 
@@ -102,7 +108,7 @@ toolset = StackOneToolSet(
102
108
 
103
109
  1. **Dependencies**: See `package-installation` rule for uv dependency management
104
110
  2. **Pre-commit**: Hooks configured for ruff and ty - run on all commits
105
- 3. **Python Version**: Requires Python >=3.11
111
+ 3. **Python Version**: Requires Python >=3.10
106
112
  4. **Error Handling**: Custom exceptions (`StackOneError`, `StackOneAPIError`)
107
113
  5. **File Uploads**: Binary parameters auto-detected from OpenAPI specs
108
114
  6. **Context Window**: Tool loading warns when loading all tools (large context)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: stackone-ai
3
- Version: 2.1.1
3
+ Version: 2.3.1
4
4
  Summary: agents performing actions on your SaaS
5
5
  Author-email: StackOne <support@stackone.com>
6
6
  License-File: LICENSE
@@ -51,7 +51,7 @@ StackOne AI provides a unified interface for accessing various SaaS tools throug
51
51
  - Glob pattern filtering with patterns like `"hris_*"` and exclusions `"!hris_delete_*"`
52
52
  - Provider and action filtering
53
53
  - Multi-account support
54
- - **Meta Tools** (Beta): Dynamic tool discovery and execution based on natural language queries
54
+ - **Utility Tools** (Beta): Dynamic tool discovery and execution based on natural language queries
55
55
  - Integration with popular AI frameworks:
56
56
  - OpenAI Functions
57
57
  - LangChain Tools
@@ -60,7 +60,7 @@ StackOne AI provides a unified interface for accessing various SaaS tools throug
60
60
 
61
61
  ## Requirements
62
62
 
63
- - Python 3.11+
63
+ - Python 3.10+
64
64
 
65
65
  ## Installation
66
66
 
@@ -313,16 +313,16 @@ result = crew.kickoff()
313
313
 
314
314
  ## Feedback Collection
315
315
 
316
- The SDK includes a feedback collection tool (`meta_collect_tool_feedback`) that allows users to submit feedback about their experience with StackOne tools. This tool is automatically included in the toolset and is designed to be invoked by AI agents after user permission.
316
+ The SDK includes a feedback collection tool (`tool_feedback`) that allows users to submit feedback about their experience with StackOne tools. This tool is automatically included in the toolset and is designed to be invoked by AI agents after user permission.
317
317
 
318
318
  ```python
319
319
  from stackone_ai import StackOneToolSet
320
320
 
321
321
  toolset = StackOneToolSet()
322
322
 
323
- # Get the feedback tool (included with "meta_*" pattern or all tools)
324
- tools = toolset.fetch_tools(actions=["meta_*"])
325
- feedback_tool = tools.get_tool("meta_collect_tool_feedback")
323
+ # Get the feedback tool (included with "tool_*" pattern or all tools)
324
+ tools = toolset.fetch_tools(actions=["tool_*"])
325
+ feedback_tool = tools.get_tool("tool_feedback")
326
326
 
327
327
  # Submit feedback (typically invoked by AI after user consent)
328
328
  result = feedback_tool.call(
@@ -337,23 +337,23 @@ result = feedback_tool.call(
337
337
  - "Are you ok with sending feedback to StackOne? The LLM will take care of sending it."
338
338
  - Only call the tool after the user explicitly agrees.
339
339
 
340
- ## Meta Tools (Beta)
340
+ ## Utility Tools (Beta)
341
341
 
342
- Meta tools enable dynamic tool discovery and execution without hardcoding tool names.
342
+ Utility tools enable dynamic tool discovery and execution without hardcoding tool names.
343
343
 
344
344
  ### Basic Usage
345
345
 
346
346
  ```python
347
- # Get meta tools for dynamic discovery
347
+ # Get utility tools for dynamic discovery
348
348
  tools = toolset.fetch_tools(actions=["hris_*"])
349
- meta_tools = tools.meta_tools()
349
+ utility_tools = tools.utility_tools()
350
350
 
351
351
  # Search for relevant tools using natural language
352
- filter_tool = meta_tools.get_tool("meta_search_tools")
352
+ filter_tool = utility_tools.get_tool("tool_search")
353
353
  results = filter_tool.call(query="manage employees", limit=5)
354
354
 
355
355
  # Execute discovered tools dynamically
356
- execute_tool = meta_tools.get_tool("meta_execute_tool")
356
+ execute_tool = utility_tools.get_tool("tool_execute")
357
357
  result = execute_tool.call(toolName="hris_list_employees", params={"limit": 10})
358
358
  ```
359
359
 
@@ -366,7 +366,7 @@ For more examples, check out the [examples/](examples/) directory:
366
366
  - [OpenAI Integration](examples/openai_integration.py)
367
367
  - [LangChain Integration](examples/langchain_integration.py)
368
368
  - [CrewAI Integration](examples/crewai_integration.py)
369
- - [Meta Tools](examples/meta_tools_example.py)
369
+ - [Utility Tools](examples/utility_tools_example.py)
370
370
 
371
371
  ## Development
372
372
 
@@ -19,7 +19,7 @@ StackOne AI provides a unified interface for accessing various SaaS tools throug
19
19
  - Glob pattern filtering with patterns like `"hris_*"` and exclusions `"!hris_delete_*"`
20
20
  - Provider and action filtering
21
21
  - Multi-account support
22
- - **Meta Tools** (Beta): Dynamic tool discovery and execution based on natural language queries
22
+ - **Utility Tools** (Beta): Dynamic tool discovery and execution based on natural language queries
23
23
  - Integration with popular AI frameworks:
24
24
  - OpenAI Functions
25
25
  - LangChain Tools
@@ -28,7 +28,7 @@ StackOne AI provides a unified interface for accessing various SaaS tools throug
28
28
 
29
29
  ## Requirements
30
30
 
31
- - Python 3.11+
31
+ - Python 3.10+
32
32
 
33
33
  ## Installation
34
34
 
@@ -281,16 +281,16 @@ result = crew.kickoff()
281
281
 
282
282
  ## Feedback Collection
283
283
 
284
- The SDK includes a feedback collection tool (`meta_collect_tool_feedback`) that allows users to submit feedback about their experience with StackOne tools. This tool is automatically included in the toolset and is designed to be invoked by AI agents after user permission.
284
+ The SDK includes a feedback collection tool (`tool_feedback`) that allows users to submit feedback about their experience with StackOne tools. This tool is automatically included in the toolset and is designed to be invoked by AI agents after user permission.
285
285
 
286
286
  ```python
287
287
  from stackone_ai import StackOneToolSet
288
288
 
289
289
  toolset = StackOneToolSet()
290
290
 
291
- # Get the feedback tool (included with "meta_*" pattern or all tools)
292
- tools = toolset.fetch_tools(actions=["meta_*"])
293
- feedback_tool = tools.get_tool("meta_collect_tool_feedback")
291
+ # Get the feedback tool (included with "tool_*" pattern or all tools)
292
+ tools = toolset.fetch_tools(actions=["tool_*"])
293
+ feedback_tool = tools.get_tool("tool_feedback")
294
294
 
295
295
  # Submit feedback (typically invoked by AI after user consent)
296
296
  result = feedback_tool.call(
@@ -305,23 +305,23 @@ result = feedback_tool.call(
305
305
  - "Are you ok with sending feedback to StackOne? The LLM will take care of sending it."
306
306
  - Only call the tool after the user explicitly agrees.
307
307
 
308
- ## Meta Tools (Beta)
308
+ ## Utility Tools (Beta)
309
309
 
310
- Meta tools enable dynamic tool discovery and execution without hardcoding tool names.
310
+ Utility tools enable dynamic tool discovery and execution without hardcoding tool names.
311
311
 
312
312
  ### Basic Usage
313
313
 
314
314
  ```python
315
- # Get meta tools for dynamic discovery
315
+ # Get utility tools for dynamic discovery
316
316
  tools = toolset.fetch_tools(actions=["hris_*"])
317
- meta_tools = tools.meta_tools()
317
+ utility_tools = tools.utility_tools()
318
318
 
319
319
  # Search for relevant tools using natural language
320
- filter_tool = meta_tools.get_tool("meta_search_tools")
320
+ filter_tool = utility_tools.get_tool("tool_search")
321
321
  results = filter_tool.call(query="manage employees", limit=5)
322
322
 
323
323
  # Execute discovered tools dynamically
324
- execute_tool = meta_tools.get_tool("meta_execute_tool")
324
+ execute_tool = utility_tools.get_tool("tool_execute")
325
325
  result = execute_tool.call(toolName="hris_list_employees", params={"limit": 10})
326
326
  ```
327
327
 
@@ -334,7 +334,7 @@ For more examples, check out the [examples/](examples/) directory:
334
334
  - [OpenAI Integration](examples/openai_integration.py)
335
335
  - [LangChain Integration](examples/langchain_integration.py)
336
336
  - [CrewAI Integration](examples/crewai_integration.py)
337
- - [Meta Tools](examples/meta_tools_example.py)
337
+ - [Utility Tools](examples/utility_tools_example.py)
338
338
 
339
339
  ## Development
340
340
 
@@ -30,7 +30,7 @@ OPTIONAL_DEPENDENCIES = {
30
30
  "index.py": ["mcp"],
31
31
  "file_uploads.py": ["mcp"],
32
32
  "stackone_account_ids.py": ["mcp"],
33
- "meta_tools_example.py": ["mcp"],
33
+ "utility_tools_example.py": ["mcp"],
34
34
  "mcp_server.py": ["mcp"],
35
35
  }
36
36
 
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env python
2
2
  """
3
- Example demonstrating meta tools for dynamic tool discovery and execution.
3
+ Example demonstrating utility tools for dynamic tool discovery and execution.
4
4
 
5
- Meta tools allow AI agents to search for relevant tools based on natural language queries
5
+ Utility tools allow AI agents to search for relevant tools based on natural language queries
6
6
  and execute them dynamically without hardcoding tool names.
7
7
  """
8
8
 
@@ -16,8 +16,8 @@ from stackone_ai import StackOneToolSet
16
16
  load_dotenv()
17
17
 
18
18
 
19
- def example_meta_tools_basic():
20
- """Basic example of using meta tools for tool discovery"""
19
+ def example_utility_tools_basic():
20
+ """Basic example of using utility tools for tool discovery"""
21
21
  print("Example 1: Dynamic tool discovery\n")
22
22
 
23
23
  # Initialize StackOne toolset
@@ -27,11 +27,11 @@ def example_meta_tools_basic():
27
27
  all_tools = toolset.fetch_tools(actions=["bamboohr_*"])
28
28
  print(f"Total BambooHR tools available: {len(all_tools)}")
29
29
 
30
- # Get meta tools for dynamic discovery
31
- meta_tools = all_tools.meta_tools()
30
+ # Get utility tools for dynamic discovery
31
+ utility_tools = all_tools.utility_tools()
32
32
 
33
33
  # Get the filter tool to search for relevant tools
34
- filter_tool = meta_tools.get_tool("meta_search_tools")
34
+ filter_tool = utility_tools.get_tool("tool_search")
35
35
  if filter_tool:
36
36
  # Search for employee management tools
37
37
  result = filter_tool.call(query="manage employees create update list", limit=5, minScore=0.0)
@@ -43,7 +43,7 @@ def example_meta_tools_basic():
43
43
  print()
44
44
 
45
45
 
46
- def example_meta_tools_with_execution():
46
+ def example_utility_tools_with_execution():
47
47
  """Example of discovering and executing tools dynamically"""
48
48
  print("Example 2: Dynamic tool execution\n")
49
49
 
@@ -52,11 +52,11 @@ def example_meta_tools_with_execution():
52
52
 
53
53
  # Get all tools using MCP-backed fetch_tools()
54
54
  all_tools = toolset.fetch_tools()
55
- meta_tools = all_tools.meta_tools()
55
+ utility_tools = all_tools.utility_tools()
56
56
 
57
57
  # Step 1: Search for relevant tools
58
- filter_tool = meta_tools.get_tool("meta_search_tools")
59
- execute_tool = meta_tools.get_tool("meta_execute_tool")
58
+ filter_tool = utility_tools.get_tool("tool_search")
59
+ execute_tool = utility_tools.get_tool("tool_execute")
60
60
 
61
61
  if filter_tool and execute_tool:
62
62
  # Find tools for listing employees
@@ -81,8 +81,8 @@ def example_meta_tools_with_execution():
81
81
 
82
82
 
83
83
  def example_with_openai():
84
- """Example of using meta tools with OpenAI"""
85
- print("Example 3: Using meta tools with OpenAI\n")
84
+ """Example of using utility tools with OpenAI"""
85
+ print("Example 3: Using utility tools with OpenAI\n")
86
86
 
87
87
  try:
88
88
  from openai import OpenAI
@@ -93,20 +93,20 @@ def example_with_openai():
93
93
  # Initialize StackOne toolset
94
94
  toolset = StackOneToolSet()
95
95
 
96
- # Get BambooHR tools and their meta tools using MCP-backed fetch_tools()
96
+ # Get BambooHR tools and their utility tools using MCP-backed fetch_tools()
97
97
  bamboohr_tools = toolset.fetch_tools(actions=["bamboohr_*"])
98
- meta_tools = bamboohr_tools.meta_tools()
98
+ utility_tools = bamboohr_tools.utility_tools()
99
99
 
100
100
  # Convert to OpenAI format
101
- openai_tools = meta_tools.to_openai()
101
+ openai_tools = utility_tools.to_openai()
102
102
 
103
- # Create a chat completion with meta tools
103
+ # Create a chat completion with utility tools
104
104
  response = client.chat.completions.create(
105
105
  model="gpt-4",
106
106
  messages=[
107
107
  {
108
108
  "role": "system",
109
- "content": "You are an HR assistant. Use meta_search_tools to find appropriate tools, then meta_execute_tool to execute them.",
109
+ "content": "You are an HR assistant. Use tool_search to find appropriate tools, then tool_execute to execute them.",
110
110
  },
111
111
  {"role": "user", "content": "Can you help me find tools for managing employee records?"},
112
112
  ],
@@ -145,12 +145,12 @@ def example_with_langchain():
145
145
  tools = toolset.fetch_tools(actions=["bamboohr_list_*"])
146
146
  langchain_tools = tools.to_langchain()
147
147
 
148
- # Get meta tools as well
149
- meta_tools = tools.meta_tools()
150
- langchain_meta_tools = meta_tools.to_langchain()
148
+ # Get utility tools as well
149
+ utility_tools = tools.utility_tools()
150
+ langchain_utility_tools = utility_tools.to_langchain()
151
151
 
152
152
  # Combine all tools
153
- all_langchain_tools = list(langchain_tools) + list(langchain_meta_tools)
153
+ all_langchain_tools = list(langchain_tools) + list(langchain_utility_tools)
154
154
 
155
155
  print(f"Available tools for LangChain: {len(all_langchain_tools)}")
156
156
  for tool in all_langchain_tools:
@@ -163,7 +163,7 @@ def example_with_langchain():
163
163
  [
164
164
  (
165
165
  "system",
166
- "You are an HR assistant. Use the meta tools to discover and execute relevant tools.",
166
+ "You are an HR assistant. Use the utility tools to discover and execute relevant tools.",
167
167
  ),
168
168
  ("human", "{input}"),
169
169
  ("placeholder", "{agent_scratchpad}"),
@@ -190,13 +190,13 @@ def example_with_langchain():
190
190
  def main():
191
191
  """Run all examples"""
192
192
  print("=" * 60)
193
- print("StackOne AI SDK - Meta Tools Examples")
193
+ print("StackOne AI SDK - Utility Tools Examples")
194
194
  print("=" * 60)
195
195
  print()
196
196
 
197
197
  # Basic examples that work without external APIs
198
- example_meta_tools_basic()
199
- example_meta_tools_with_execution()
198
+ example_utility_tools_basic()
199
+ example_utility_tools_with_execution()
200
200
 
201
201
  # Examples that require OpenAI API
202
202
  if os.getenv("OPENAI_API_KEY"):
@@ -39,7 +39,6 @@
39
39
  projectRootFile = "flake.nix";
40
40
  programs = {
41
41
  nixfmt.enable = true;
42
- nixfmt.package = pkgs.nixfmt-rfc-style;
43
42
  ruff-check.enable = true;
44
43
  ruff-format.enable = true;
45
44
  };
@@ -94,7 +93,7 @@
94
93
  uv
95
94
  ty
96
95
  just
97
- nixfmt-rfc-style
96
+ nixfmt
98
97
 
99
98
  # security
100
99
  gitleaks
@@ -117,7 +116,7 @@
117
116
  # Install Python dependencies only if .venv is missing or uv.lock is newer
118
117
  if [ ! -d .venv ] || [ uv.lock -nt .venv ]; then
119
118
  echo "📦 Installing Python dependencies..."
120
- uv sync --all-extras
119
+ uv sync --all-extras --locked
121
120
  fi
122
121
 
123
122
  # Install git hooks
@@ -34,10 +34,6 @@ ty:
34
34
  gitleaks:
35
35
  gitleaks detect --source . --config .gitleaks.toml
36
36
 
37
- # Update version in __init__.py
38
- update-version:
39
- uv run scripts/update_version.py
40
-
41
37
  # Build package
42
38
  build:
43
39
  uv build
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "stackone-ai"
3
- version = "2.1.1"
3
+ version = "2.3.1"
4
4
  description = "agents performing actions on your SaaS"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.10"
@@ -8,4 +8,4 @@ __all__ = [
8
8
  "StackOneTool",
9
9
  "Tools",
10
10
  ]
11
- __version__ = "2.1.1"
11
+ __version__ = "2.3.1"
@@ -160,7 +160,7 @@ def create_feedback_tool(
160
160
  Returns:
161
161
  FeedbackTool configured for feedback collection
162
162
  """
163
- name = "meta_collect_tool_feedback"
163
+ name = "tool_feedback"
164
164
  description = (
165
165
  "Collects user feedback on StackOne tool performance. "
166
166
  'First ask the user, "Are you ok with sending feedback to StackOne?" '