stackone-ai 2.0.0__tar.gz → 2.3.0__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 (176) hide show
  1. stackone_ai-2.3.0/.claude/rules/nix-workflow.md +84 -0
  2. stackone_ai-2.3.0/.claude/skills/release-please/SKILL.md +51 -0
  3. stackone_ai-2.3.0/.github/actions/setup-nix/action.yaml +50 -0
  4. {stackone_ai-2.0.0 → stackone_ai-2.3.0}/.github/dependabot.yaml +2 -14
  5. {stackone_ai-2.0.0 → stackone_ai-2.3.0}/.github/workflows/ci.yaml +20 -26
  6. {stackone_ai-2.0.0 → stackone_ai-2.3.0}/.github/workflows/nix-flake-update.yaml +2 -2
  7. stackone_ai-2.3.0/.github/workflows/nix-flake.yaml +35 -0
  8. stackone_ai-2.3.0/.github/workflows/release.yaml +66 -0
  9. stackone_ai-2.3.0/.gitmodules +3 -0
  10. stackone_ai-2.3.0/.release-please-manifest.json +3 -0
  11. {stackone_ai-2.0.0 → stackone_ai-2.3.0}/CHANGELOG.md +39 -0
  12. {stackone_ai-2.0.0 → stackone_ai-2.3.0}/CLAUDE.md +7 -0
  13. {stackone_ai-2.0.0 → stackone_ai-2.3.0}/PKG-INFO +52 -38
  14. {stackone_ai-2.0.0 → stackone_ai-2.3.0}/README.md +49 -36
  15. {stackone_ai-2.0.0 → stackone_ai-2.3.0}/examples/test_examples.py +1 -1
  16. stackone_ai-2.0.0/examples/meta_tools_example.py → stackone_ai-2.3.0/examples/utility_tools_example.py +26 -26
  17. {stackone_ai-2.0.0 → stackone_ai-2.3.0}/flake.lock +20 -20
  18. {stackone_ai-2.0.0 → stackone_ai-2.3.0}/flake.nix +18 -8
  19. {stackone_ai-2.0.0 → stackone_ai-2.3.0}/justfile +0 -4
  20. {stackone_ai-2.0.0 → stackone_ai-2.3.0}/pyproject.toml +8 -6
  21. {stackone_ai-2.0.0 → stackone_ai-2.3.0}/stackone_ai/__init__.py +1 -1
  22. {stackone_ai-2.0.0 → stackone_ai-2.3.0}/stackone_ai/feedback/tool.py +1 -1
  23. {stackone_ai-2.0.0 → stackone_ai-2.3.0}/stackone_ai/integrations/langgraph.py +5 -5
  24. {stackone_ai-2.0.0 → stackone_ai-2.3.0}/stackone_ai/models.py +13 -13
  25. stackone_ai-2.0.0/stackone_ai/meta_tools.py → stackone_ai-2.3.0/stackone_ai/utility_tools.py +24 -24
  26. stackone_ai-2.3.0/tests/conftest.py +101 -0
  27. stackone_ai-2.3.0/tests/mocks/serve.ts +134 -0
  28. {stackone_ai-2.0.0 → stackone_ai-2.3.0}/tests/test_feedback.py +3 -3
  29. stackone_ai-2.0.0/tests/test_toolset_mcp.py → stackone_ai-2.3.0/tests/test_fetch_tools.py +203 -175
  30. stackone_ai-2.0.0/tests/test_meta_tools.py → stackone_ai-2.3.0/tests/test_utility_tools.py +40 -40
  31. {stackone_ai-2.0.0 → stackone_ai-2.3.0}/uv.lock +672 -109
  32. stackone_ai-2.3.0/vendor/stackone-ai-node/.claude/rules/development-workflow.md +29 -0
  33. stackone_ai-2.3.0/vendor/stackone-ai-node/.claude/rules/file-operations.md +134 -0
  34. stackone_ai-2.3.0/vendor/stackone-ai-node/.claude/rules/git-workflow.md +97 -0
  35. stackone_ai-2.3.0/vendor/stackone-ai-node/.claude/rules/pnpm-usage.md +54 -0
  36. stackone_ai-2.3.0/vendor/stackone-ai-node/.claude/rules/typescript-patterns.md +246 -0
  37. stackone_ai-2.3.0/vendor/stackone-ai-node/.claude/rules/typescript-testing.md +132 -0
  38. stackone_ai-2.3.0/vendor/stackone-ai-node/.claude/skills/orama-integration/SKILL.md +25 -0
  39. stackone_ai-2.3.0/vendor/stackone-ai-node/.cursor/rules/development-workflow.mdc +1 -0
  40. stackone_ai-2.3.0/vendor/stackone-ai-node/.cursor/rules/file-operations.mdc +1 -0
  41. stackone_ai-2.3.0/vendor/stackone-ai-node/.cursor/rules/git-workflow.mdc +1 -0
  42. stackone_ai-2.3.0/vendor/stackone-ai-node/.cursor/rules/orama-integration.mdc +1 -0
  43. stackone_ai-2.3.0/vendor/stackone-ai-node/.cursor/rules/pnpm-usage.mdc +1 -0
  44. stackone_ai-2.3.0/vendor/stackone-ai-node/.cursor/rules/typescript-patterns.mdc +1 -0
  45. stackone_ai-2.3.0/vendor/stackone-ai-node/.cursor/rules/typescript-testing.mdc +1 -0
  46. stackone_ai-2.3.0/vendor/stackone-ai-node/.envrc +1 -0
  47. stackone_ai-2.3.0/vendor/stackone-ai-node/.git +1 -0
  48. stackone_ai-2.3.0/vendor/stackone-ai-node/.github/CODEOWNERS +6 -0
  49. {stackone_ai-2.0.0 → stackone_ai-2.3.0/vendor/stackone-ai-node}/.github/actions/setup-nix/action.yaml +4 -4
  50. stackone_ai-2.3.0/vendor/stackone-ai-node/.github/workflows/check-title.yaml +25 -0
  51. stackone_ai-2.3.0/vendor/stackone-ai-node/.github/workflows/ci.yaml +87 -0
  52. stackone_ai-2.3.0/vendor/stackone-ai-node/.github/workflows/claude.yaml +39 -0
  53. stackone_ai-2.3.0/vendor/stackone-ai-node/.github/workflows/dry-publish.yaml +17 -0
  54. {stackone_ai-2.0.0 → stackone_ai-2.3.0/vendor/stackone-ai-node}/.github/workflows/nix-flake.yaml +9 -9
  55. stackone_ai-2.3.0/vendor/stackone-ai-node/.github/workflows/release.yaml +52 -0
  56. stackone_ai-2.3.0/vendor/stackone-ai-node/.gitignore +183 -0
  57. stackone_ai-2.3.0/vendor/stackone-ai-node/.gitleaks.toml +11 -0
  58. stackone_ai-2.3.0/vendor/stackone-ai-node/.mcp.json +12 -0
  59. stackone_ai-2.3.0/vendor/stackone-ai-node/.oxfmtrc.jsonc +7 -0
  60. stackone_ai-2.3.0/vendor/stackone-ai-node/.oxlintrc.jsonc +179 -0
  61. stackone_ai-2.3.0/vendor/stackone-ai-node/AGENTS.md +1 -0
  62. stackone_ai-2.3.0/vendor/stackone-ai-node/CHANGELOG.md +373 -0
  63. stackone_ai-2.3.0/vendor/stackone-ai-node/CLAUDE.md +26 -0
  64. stackone_ai-2.3.0/vendor/stackone-ai-node/LICENSE +201 -0
  65. stackone_ai-2.3.0/vendor/stackone-ai-node/README.md +614 -0
  66. stackone_ai-2.3.0/vendor/stackone-ai-node/examples/README.md +295 -0
  67. stackone_ai-2.3.0/vendor/stackone-ai-node/examples/ai-sdk-integration.test.ts +52 -0
  68. stackone_ai-2.3.0/vendor/stackone-ai-node/examples/ai-sdk-integration.ts +52 -0
  69. stackone_ai-2.3.0/vendor/stackone-ai-node/examples/anthropic-integration.ts +63 -0
  70. stackone_ai-2.3.0/vendor/stackone-ai-node/examples/claude-agent-sdk-integration.test.ts +140 -0
  71. stackone_ai-2.3.0/vendor/stackone-ai-node/examples/claude-agent-sdk-integration.ts +88 -0
  72. stackone_ai-2.3.0/vendor/stackone-ai-node/examples/fetch-tools-debug.ts +297 -0
  73. stackone_ai-2.3.0/vendor/stackone-ai-node/examples/fetch-tools.test.ts +102 -0
  74. stackone_ai-2.3.0/vendor/stackone-ai-node/examples/fetch-tools.ts +82 -0
  75. stackone_ai-2.3.0/vendor/stackone-ai-node/examples/meta-tools.ts +280 -0
  76. stackone_ai-2.3.0/vendor/stackone-ai-node/examples/openai-integration.test.ts +72 -0
  77. stackone_ai-2.3.0/vendor/stackone-ai-node/examples/openai-integration.ts +69 -0
  78. stackone_ai-2.3.0/vendor/stackone-ai-node/examples/openai-responses-integration.test.ts +64 -0
  79. stackone_ai-2.3.0/vendor/stackone-ai-node/examples/openai-responses-integration.ts +63 -0
  80. stackone_ai-2.3.0/vendor/stackone-ai-node/examples/package.json +30 -0
  81. stackone_ai-2.3.0/vendor/stackone-ai-node/examples/tanstack-ai-integration.test.ts +77 -0
  82. stackone_ai-2.3.0/vendor/stackone-ai-node/examples/tanstack-ai-integration.ts +83 -0
  83. stackone_ai-2.3.0/vendor/stackone-ai-node/examples/tsconfig.json +16 -0
  84. stackone_ai-2.3.0/vendor/stackone-ai-node/flake.lock +61 -0
  85. stackone_ai-2.3.0/vendor/stackone-ai-node/flake.nix +49 -0
  86. stackone_ai-2.3.0/vendor/stackone-ai-node/knip.config.ts +21 -0
  87. stackone_ai-2.3.0/vendor/stackone-ai-node/lefthook.yaml +22 -0
  88. stackone_ai-2.3.0/vendor/stackone-ai-node/mocks/handlers.example-api.ts +59 -0
  89. stackone_ai-2.3.0/vendor/stackone-ai-node/mocks/handlers.mcp.ts +35 -0
  90. stackone_ai-2.3.0/vendor/stackone-ai-node/mocks/handlers.openai.ts +214 -0
  91. stackone_ai-2.3.0/vendor/stackone-ai-node/mocks/handlers.stackone-ai.ts +97 -0
  92. stackone_ai-2.3.0/vendor/stackone-ai-node/mocks/handlers.stackone-rpc.ts +85 -0
  93. stackone_ai-2.3.0/vendor/stackone-ai-node/mocks/handlers.ts +13 -0
  94. stackone_ai-2.3.0/vendor/stackone-ai-node/mocks/handlers.utils.ts +30 -0
  95. stackone_ai-2.3.0/vendor/stackone-ai-node/mocks/mcp-server.ts +275 -0
  96. stackone_ai-2.3.0/vendor/stackone-ai-node/mocks/node.ts +4 -0
  97. stackone_ai-2.3.0/vendor/stackone-ai-node/package.json +118 -0
  98. stackone_ai-2.3.0/vendor/stackone-ai-node/pnpm-lock.yaml +4506 -0
  99. stackone_ai-2.3.0/vendor/stackone-ai-node/pnpm-workspace.yaml +66 -0
  100. stackone_ai-2.3.0/vendor/stackone-ai-node/src/consts.ts +20 -0
  101. stackone_ai-2.3.0/vendor/stackone-ai-node/src/feedback.test.ts +300 -0
  102. stackone_ai-2.3.0/vendor/stackone-ai-node/src/feedback.ts +230 -0
  103. stackone_ai-2.3.0/vendor/stackone-ai-node/src/headers.test.ts +69 -0
  104. stackone_ai-2.3.0/vendor/stackone-ai-node/src/headers.ts +46 -0
  105. stackone_ai-2.3.0/vendor/stackone-ai-node/src/index.ts +29 -0
  106. stackone_ai-2.3.0/vendor/stackone-ai-node/src/mcp-client.test.ts +68 -0
  107. stackone_ai-2.3.0/vendor/stackone-ai-node/src/mcp-client.ts +55 -0
  108. stackone_ai-2.3.0/vendor/stackone-ai-node/src/requestBuilder.test.ts +778 -0
  109. stackone_ai-2.3.0/vendor/stackone-ai-node/src/requestBuilder.ts +377 -0
  110. stackone_ai-2.3.0/vendor/stackone-ai-node/src/rpc-client.test.ts +122 -0
  111. stackone_ai-2.3.0/vendor/stackone-ai-node/src/rpc-client.ts +107 -0
  112. stackone_ai-2.3.0/vendor/stackone-ai-node/src/schema.ts +64 -0
  113. stackone_ai-2.3.0/vendor/stackone-ai-node/src/tool.test-d.ts +53 -0
  114. stackone_ai-2.3.0/vendor/stackone-ai-node/src/tool.test.ts +1453 -0
  115. stackone_ai-2.3.0/vendor/stackone-ai-node/src/tool.ts +743 -0
  116. stackone_ai-2.3.0/vendor/stackone-ai-node/src/toolsets.test-d.ts +44 -0
  117. stackone_ai-2.3.0/vendor/stackone-ai-node/src/toolsets.test.ts +712 -0
  118. stackone_ai-2.3.0/vendor/stackone-ai-node/src/toolsets.ts +558 -0
  119. stackone_ai-2.3.0/vendor/stackone-ai-node/src/types.ts +203 -0
  120. stackone_ai-2.3.0/vendor/stackone-ai-node/src/utils/array.test.ts +48 -0
  121. stackone_ai-2.3.0/vendor/stackone-ai-node/src/utils/array.ts +13 -0
  122. stackone_ai-2.3.0/vendor/stackone-ai-node/src/utils/error-stackone-api.test.ts +208 -0
  123. stackone_ai-2.3.0/vendor/stackone-ai-node/src/utils/error-stackone-api.ts +130 -0
  124. stackone_ai-2.3.0/vendor/stackone-ai-node/src/utils/error-stackone.test.ts +15 -0
  125. stackone_ai-2.3.0/vendor/stackone-ai-node/src/utils/error-stackone.ts +9 -0
  126. stackone_ai-2.3.0/vendor/stackone-ai-node/src/utils/tfidf-index.test.ts +206 -0
  127. stackone_ai-2.3.0/vendor/stackone-ai-node/src/utils/tfidf-index.ts +192 -0
  128. stackone_ai-2.3.0/vendor/stackone-ai-node/src/utils/try-import.test.ts +23 -0
  129. stackone_ai-2.3.0/vendor/stackone-ai-node/src/utils/try-import.ts +25 -0
  130. stackone_ai-2.3.0/vendor/stackone-ai-node/src/utils/type.ts +4 -0
  131. stackone_ai-2.3.0/vendor/stackone-ai-node/tsconfig.json +28 -0
  132. stackone_ai-2.3.0/vendor/stackone-ai-node/tsdown.config.ts +20 -0
  133. stackone_ai-2.3.0/vendor/stackone-ai-node/vitest.config.ts +46 -0
  134. stackone_ai-2.3.0/vendor/stackone-ai-node/vitest.setup.ts +5 -0
  135. stackone_ai-2.0.0/.github/workflows/release.yaml +0 -41
  136. stackone_ai-2.0.0/.release-please-manifest.json +0 -3
  137. stackone_ai-2.0.0/py.typed +0 -1
  138. stackone_ai-2.0.0/scripts/update_version.py +0 -47
  139. {stackone_ai-2.0.0 → stackone_ai-2.3.0}/.claude/rules/development-workflow.md +0 -0
  140. {stackone_ai-2.0.0 → stackone_ai-2.3.0}/.claude/rules/examples-standards.md +0 -0
  141. {stackone_ai-2.0.0 → stackone_ai-2.3.0}/.claude/rules/git-workflow.md +0 -0
  142. {stackone_ai-2.0.0 → stackone_ai-2.3.0}/.claude/rules/no-relative-imports.md +0 -0
  143. {stackone_ai-2.0.0 → stackone_ai-2.3.0}/.claude/rules/package-installation.md +0 -0
  144. {stackone_ai-2.0.0 → stackone_ai-2.3.0}/.claude/rules/release-please-standards.md +0 -0
  145. {stackone_ai-2.0.0 → stackone_ai-2.3.0}/.claude/rules/uv-scripts.md +0 -0
  146. {stackone_ai-2.0.0 → stackone_ai-2.3.0}/.cursor/rules/development-workflow.mdc +0 -0
  147. {stackone_ai-2.0.0 → stackone_ai-2.3.0}/.cursor/rules/examples-standards.mdc +0 -0
  148. {stackone_ai-2.0.0 → stackone_ai-2.3.0}/.cursor/rules/git-workflow.mdc +0 -0
  149. {stackone_ai-2.0.0 → stackone_ai-2.3.0}/.cursor/rules/no-relative-imports.mdc +0 -0
  150. {stackone_ai-2.0.0 → stackone_ai-2.3.0}/.cursor/rules/package-installation.mdc +0 -0
  151. {stackone_ai-2.0.0 → stackone_ai-2.3.0}/.cursor/rules/release-please-standards.mdc +0 -0
  152. {stackone_ai-2.0.0 → stackone_ai-2.3.0}/.cursor/rules/uv-scripts.mdc +0 -0
  153. {stackone_ai-2.0.0 → stackone_ai-2.3.0}/.envrc +0 -0
  154. {stackone_ai-2.0.0 → stackone_ai-2.3.0}/.gitignore +0 -0
  155. {stackone_ai-2.0.0 → stackone_ai-2.3.0}/.gitleaks.toml +0 -0
  156. {stackone_ai-2.0.0 → stackone_ai-2.3.0}/.mcp.json +0 -0
  157. {stackone_ai-2.0.0 → stackone_ai-2.3.0}/.release-please-config.json +0 -0
  158. {stackone_ai-2.0.0 → stackone_ai-2.3.0}/LICENSE +0 -0
  159. {stackone_ai-2.0.0 → stackone_ai-2.3.0}/examples/crewai_integration.py +0 -0
  160. {stackone_ai-2.0.0 → stackone_ai-2.3.0}/examples/file_uploads.py +0 -0
  161. {stackone_ai-2.0.0 → stackone_ai-2.3.0}/examples/index.py +0 -0
  162. {stackone_ai-2.0.0 → stackone_ai-2.3.0}/examples/langchain_integration.py +0 -0
  163. {stackone_ai-2.0.0 → stackone_ai-2.3.0}/examples/openai_integration.py +0 -0
  164. {stackone_ai-2.0.0 → stackone_ai-2.3.0}/examples/stackone_account_ids.py +0 -0
  165. {stackone_ai-2.0.0 → stackone_ai-2.3.0}/stackone_ai/constants.py +0 -0
  166. {stackone_ai-2.0.0 → stackone_ai-2.3.0}/stackone_ai/feedback/__init__.py +0 -0
  167. {stackone_ai-2.0.0 → stackone_ai-2.3.0}/stackone_ai/integrations/__init__.py +0 -0
  168. {stackone_ai-2.0.0 → stackone_ai-2.3.0}/stackone_ai/py.typed +0 -0
  169. {stackone_ai-2.0.0 → stackone_ai-2.3.0}/stackone_ai/toolset.py +0 -0
  170. {stackone_ai-2.0.0 → stackone_ai-2.3.0}/stackone_ai/utils/__init__.py +0 -0
  171. {stackone_ai-2.0.0 → stackone_ai-2.3.0}/stackone_ai/utils/tfidf_index.py +0 -0
  172. {stackone_ai-2.0.0 → stackone_ai-2.3.0}/tests/test_integrations_langgraph.py +0 -0
  173. {stackone_ai-2.0.0 → stackone_ai-2.3.0}/tests/test_models.py +0 -0
  174. {stackone_ai-2.0.0 → stackone_ai-2.3.0}/tests/test_tfidf_index.py +0 -0
  175. {stackone_ai-2.0.0 → stackone_ai-2.3.0}/tests/test_tool_calling.py +0 -0
  176. {stackone_ai-2.0.0 → stackone_ai-2.3.0}/tests/test_toolset.py +0 -0
@@ -0,0 +1,84 @@
1
+ # Nix Workflow
2
+
3
+ This rule provides guidance on Nix usage in the StackOne AI Python SDK.
4
+
5
+ ## Development Environment
6
+
7
+ The project uses `flake.nix` with flake-parts to define the development environment. Enter it with `nix develop`.
8
+
9
+ ### Adding Development Tools
10
+
11
+ To add a new tool to the development environment, add it to `buildInputs` in `flake.nix`:
12
+
13
+ ```nix
14
+ devShells.default = pkgs.mkShellNoCC {
15
+ buildInputs = with pkgs; [
16
+ uv
17
+ ty
18
+ just
19
+ nixfmt
20
+
21
+ # your new tool here
22
+ new-tool
23
+ ];
24
+ };
25
+ ```
26
+
27
+ ### Treefmt and Git Hooks
28
+
29
+ The flake includes:
30
+
31
+ - **treefmt-nix**: Unified formatting (nixfmt, ruff, oxfmt)
32
+ - **git-hooks.nix**: Pre-commit hooks (gitleaks, treefmt, ty)
33
+
34
+ These are automatically installed when entering the dev shell.
35
+
36
+ ## CI Workflow
37
+
38
+ CI uses `nix profile install` via the `.github/actions/setup-nix/action.yaml` composite action.
39
+
40
+ ### Adding Tools to CI Jobs
41
+
42
+ Specify tools in the `tools` input of the setup-nix action:
43
+
44
+ ```yaml
45
+ - name: Setup Nix
46
+ uses: ./.github/actions/setup-nix
47
+ with:
48
+ tools: uv ty just bun pnpm_10
49
+ ```
50
+
51
+ The action installs packages using:
52
+
53
+ ```bash
54
+ nix profile install --inputs-from . nixpkgs#tool1 nixpkgs#tool2
55
+ ```
56
+
57
+ ### CI Tool Configuration
58
+
59
+ - **Default tools**: `uv ty just` (defined in action.yaml)
60
+ - **Skip uv sync**: Set `skip-uv-sync: 'true'` for jobs that don't need Python dependencies
61
+
62
+ ### Example: Adding a New Tool to CI Job
63
+
64
+ ```yaml
65
+ ci:
66
+ runs-on: ubuntu-latest
67
+ steps:
68
+ - name: Checkout repository
69
+ uses: actions/checkout@v4
70
+ with:
71
+ submodules: true
72
+ - name: Setup Nix
73
+ uses: ./.github/actions/setup-nix
74
+ with:
75
+ tools: uv ty just new-tool
76
+ - name: Run Lint
77
+ run: just lint
78
+ ```
79
+
80
+ ## Notes
81
+
82
+ - The project uses flake-parts for modular flake configuration
83
+ - Git submodules are initialised automatically in dev shell and CI
84
+ - MCP mock server dependencies (pnpm) are installed for testing
@@ -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
@@ -0,0 +1,50 @@
1
+ name: "Setup Nix"
2
+ description: "Install Nix and configure cache"
3
+ inputs:
4
+ tools:
5
+ description: 'Space-separated list of nixpkgs packages to install (e.g., "uv ty just")'
6
+ required: false
7
+ default: "uv ty just"
8
+ skip-uv-sync:
9
+ description: "Skip uv sync step (useful for jobs that do not need Python dependencies)"
10
+ required: false
11
+ default: "false"
12
+ runs:
13
+ using: "composite"
14
+ steps:
15
+ - name: Install Nix
16
+ uses: cachix/install-nix-action@0b0e072294b088b73964f1d72dfdac0951439dbd # v31.8.4
17
+ with:
18
+ github_access_token: ${{ github.token }}
19
+
20
+ - name: Install tools from nixpkgs
21
+ shell: bash
22
+ run: |
23
+ tools="${{ inputs.tools }}"
24
+ packages=""
25
+ for tool in $tools; do
26
+ packages="$packages nixpkgs#$tool"
27
+ done
28
+ nix profile install --inputs-from . $packages
29
+
30
+ - name: Initialise git submodules
31
+ if: inputs.skip-uv-sync != 'true'
32
+ shell: bash
33
+ run: |
34
+ # Only initialise if submodules exist but are not yet checked out
35
+ if [ -f .gitmodules ] && [ ! -f vendor/stackone-ai-node/package.json ]; then
36
+ git submodule update --init --recursive
37
+ fi
38
+
39
+ - name: Install Python dependencies
40
+ if: inputs.skip-uv-sync != 'true'
41
+ shell: bash
42
+ run: uv sync --all-extras --locked
43
+
44
+ - name: Install MCP mock server dependencies
45
+ if: inputs.skip-uv-sync != 'true'
46
+ shell: bash
47
+ run: |
48
+ if [ -f vendor/stackone-ai-node/package.json ]; then
49
+ cd vendor/stackone-ai-node && pnpm install --frozen-lockfile
50
+ fi
@@ -16,21 +16,9 @@ updates:
16
16
  - dependencies
17
17
  - python
18
18
  groups:
19
- dev-dependencies:
19
+ python-minor-patch:
20
20
  patterns:
21
- - "pytest*"
22
- - "ruff"
23
- - "ty"
24
- - "pre-commit"
25
- update-types:
26
- - minor
27
- - patch
28
- ai-frameworks:
29
- patterns:
30
- - "openai*"
31
- - "langchain*"
32
- - "crewai*"
33
- - "mcp*"
21
+ - "*"
34
22
  update-types:
35
23
  - minor
36
24
  - patch
@@ -20,66 +20,60 @@ 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
 
27
27
  - name: Setup Nix
28
28
  uses: ./.github/actions/setup-nix
29
+ with:
30
+ tools: gitleaks
31
+ skip-uv-sync: "true"
29
32
 
30
33
  - name: Run Gitleaks
31
- run: nix develop --command just gitleaks
34
+ run: gitleaks detect --source . --config .gitleaks.toml
32
35
 
33
36
  ci:
34
37
  runs-on: ubuntu-latest
35
38
  strategy:
36
39
  matrix:
37
- python-version: ["3.11", "3.13"]
38
- include:
39
- - python-version: "3.11"
40
- sync-extras: "--all-extras"
41
- - python-version: "3.13"
42
- sync-extras: "--all-extras"
43
- env:
44
- STACKONE_API_KEY: ${{ secrets.STACKONE_API_KEY }}
45
- OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
40
+ python-version: ["3.10", "3.11", "3.12", "3.13"]
46
41
  steps:
47
42
  - name: Checkout repository
48
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
43
+ uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
44
+ with:
45
+ submodules: true
49
46
 
50
47
  - name: Setup Nix
51
48
  uses: ./.github/actions/setup-nix
52
-
53
- - name: Install dependencies
54
- run: nix develop --command just install ${{ matrix.sync-extras }}
49
+ with:
50
+ tools: uv ty just bun pnpm_10 typescript-go
55
51
 
56
52
  - name: Run Lint
57
- run: nix develop --command just lint
53
+ run: just lint
58
54
 
59
55
  - name: Run Ty
60
- run: nix develop --command just ty
56
+ run: just ty
61
57
 
62
58
  - name: Run Tests
63
- run: nix develop --command just test
59
+ run: just test
64
60
 
65
61
  coverage:
66
62
  runs-on: ubuntu-latest
67
63
  if: github.ref == 'refs/heads/main'
68
- env:
69
- STACKONE_API_KEY: ${{ secrets.STACKONE_API_KEY }}
70
- OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
71
64
  steps:
72
65
  - name: Checkout repository
73
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
66
+ uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
67
+ with:
68
+ submodules: true
74
69
 
75
70
  - name: Setup Nix
76
71
  uses: ./.github/actions/setup-nix
77
-
78
- - name: Install dependencies
79
- run: nix develop --command just install --all-extras
72
+ with:
73
+ tools: uv just bun pnpm_10 typescript-go
80
74
 
81
75
  - name: Run Tests with Coverage
82
- run: nix develop --command just coverage
76
+ run: just coverage
83
77
 
84
78
  - name: Create Coverage Badge
85
79
  uses: jaywcjlove/coverage-badges-cli@4e8975aa2628e3329126e7eee36724d07ed86fda # v2.2.0
@@ -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
@@ -35,7 +35,7 @@ jobs:
35
35
  - name: Create Pull Request
36
36
  id: create-pr
37
37
  if: steps.check-changes.outputs.changed == 'true'
38
- uses: peter-evans/create-pull-request@98357b18bf14b5342f975ff684046ec3b2a07725 # v8.0.0
38
+ uses: peter-evans/create-pull-request@c0f553fe549906ede9cf27b5156039d195d2ece0 # v8.1.0
39
39
  with:
40
40
  token: ${{ secrets.GITHUB_TOKEN }}
41
41
  commit-message: "chore(deps): update nix flake inputs"
@@ -0,0 +1,35 @@
1
+ name: "CI: Flake check"
2
+
3
+ on:
4
+ push:
5
+ paths:
6
+ - "flake.nix"
7
+ - "flake.lock"
8
+ - ".github/workflows/nix-flake.yaml"
9
+ - ".github/actions/setup-nix/**"
10
+ pull_request:
11
+ paths:
12
+ - "flake.nix"
13
+ - "flake.lock"
14
+ - ".github/workflows/nix-flake.yaml"
15
+ - ".github/actions/setup-nix/**"
16
+
17
+ concurrency:
18
+ group: ${{ github.workflow }}-${{ github.ref }}
19
+ cancel-in-progress: true
20
+
21
+ jobs:
22
+ # Check flake syntax and structure
23
+ flake-check:
24
+ runs-on: ubuntu-latest
25
+ steps:
26
+ - name: Checkout repository
27
+ uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
28
+
29
+ - name: Install Nix
30
+ uses: cachix/install-nix-action@4e002c8ec80594ecd40e759629461e26c8abed15 # v31.9.0
31
+ with:
32
+ github_access_token: ${{ github.token }}
33
+
34
+ - name: Check flake
35
+ run: nix flake check --all-systems --print-build-logs --show-trace
@@ -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
+ [submodule "vendor/stackone-ai-node"]
2
+ path = vendor/stackone-ai-node
3
+ url = https://github.com/StackOneHQ/stackone-ai-node.git
@@ -0,0 +1,3 @@
1
+ {
2
+ ".": "2.3.0"
3
+ }
@@ -1,5 +1,44 @@
1
1
  # Changelog
2
2
 
3
+ ## [2.3.0](https://github.com/StackOneHQ/stackone-ai-python/compare/stackone-ai-v2.1.1...stackone-ai-v2.3.0) (2026-01-29)
4
+
5
+
6
+ ### Bug Fixes
7
+
8
+ * **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))
9
+
10
+
11
+ ### Miscellaneous Chores
12
+
13
+ * 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))
14
+
15
+ ## [2.1.1](https://github.com/StackOneHQ/stackone-ai-python/compare/stackone-ai-v2.1.0...stackone-ai-v2.1.1) (2026-01-22)
16
+
17
+
18
+ ### Bug Fixes
19
+
20
+ * **ci:** skip mock server install in release workflow [ENG-11910] ([#111](https://github.com/StackOneHQ/stackone-ai-python/issues/111)) ([377d766](https://github.com/StackOneHQ/stackone-ai-python/commit/377d766a276b444e84fee5af95f3d56db7e0b89b))
21
+
22
+ ## [2.1.0](https://github.com/StackOneHQ/stackone-ai-python/compare/stackone-ai-v2.0.0...stackone-ai-v2.1.0) (2026-01-22)
23
+
24
+
25
+ ### Features
26
+
27
+ * **nix:** integrate uv2nix for Python dependency management ([#88](https://github.com/StackOneHQ/stackone-ai-python/issues/88)) ([ee67062](https://github.com/StackOneHQ/stackone-ai-python/commit/ee67062d1a6628c9b549f2ad69c0c1d7bdde6d97))
28
+
29
+
30
+ ### Bug Fixes
31
+
32
+ * **ci:** add submodules checkout to coverage job ([#85](https://github.com/StackOneHQ/stackone-ai-python/issues/85)) ([4cf907a](https://github.com/StackOneHQ/stackone-ai-python/commit/4cf907a49ac288f368ebbfa3a5dc59a0194bf54a))
33
+
34
+
35
+ ### Documentation
36
+
37
+ * deepwiki badge ([#97](https://github.com/StackOneHQ/stackone-ai-python/issues/97)) ([d8b0234](https://github.com/StackOneHQ/stackone-ai-python/commit/d8b02346b6a77377b7c0356e636edcf2eac47096))
38
+ * **readme:** improve Nix development environment setup instructions ([#94](https://github.com/StackOneHQ/stackone-ai-python/issues/94)) ([2d6f6c2](https://github.com/StackOneHQ/stackone-ai-python/commit/2d6f6c224d1119a5a0254934ff542a0572f44c06))
39
+ * **readme:** reorganise installation section ([#72](https://github.com/StackOneHQ/stackone-ai-python/issues/72)) ([3cde479](https://github.com/StackOneHQ/stackone-ai-python/commit/3cde4794739e95479409396adc3b6e3b01eb3d33))
40
+ * **rules:** add nix-workflow rule ([#106](https://github.com/StackOneHQ/stackone-ai-python/issues/106)) ([b10c164](https://github.com/StackOneHQ/stackone-ai-python/commit/b10c164142ede3ce37b96a27b0e73452d6de50e6))
41
+
3
42
  ## [2.0.0](https://github.com/StackOneHQ/stackone-ai-python/compare/stackone-ai-v0.3.4...stackone-ai-v2.0.0) (2025-12-29)
4
43
 
5
44
 
@@ -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 |
@@ -15,6 +21,7 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co
15
21
  | **git-workflow** | All files | Commit conventions, branch strategy, PR guidelines |
16
22
  | **development-workflow** | All files | Code style, file naming, project conventions |
17
23
  | **release-please-standards** | All files | Release versioning with release-please |
24
+ | **nix-workflow** | All files | Nix development environment and CI configuration |
18
25
  | **no-relative-imports** | `**/*.py` | Enforce absolute imports in Python files |
19
26
  | **package-installation** | `**/pyproject.toml` | UV package management standards |
20
27
  | **uv-scripts** | `scripts/**/*.py` | Utility script standards with UV |
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: stackone-ai
3
- Version: 2.0.0
3
+ Version: 2.3.0
4
4
  Summary: agents performing actions on your SaaS
5
5
  Author-email: StackOne <support@stackone.com>
6
6
  License-File: LICENSE
@@ -8,11 +8,12 @@ Classifier: Development Status :: 4 - Beta
8
8
  Classifier: Intended Audience :: Developers
9
9
  Classifier: License :: OSI Approved :: MIT License
10
10
  Classifier: Programming Language :: Python :: 3
11
+ Classifier: Programming Language :: Python :: 3.10
11
12
  Classifier: Programming Language :: Python :: 3.11
12
13
  Classifier: Programming Language :: Python :: 3.12
13
14
  Classifier: Programming Language :: Python :: 3.13
14
15
  Classifier: Topic :: Software Development :: Libraries :: Python Modules
15
- Requires-Python: >=3.11
16
+ Requires-Python: >=3.10
16
17
  Requires-Dist: bm25s>=0.2.2
17
18
  Requires-Dist: httpx>=0.28.0
18
19
  Requires-Dist: langchain-core>=0.1.0
@@ -34,6 +35,9 @@ Description-Content-Type: text/markdown
34
35
  [![PyPI version](https://badge.fury.io/py/stackone-ai.svg)](https://badge.fury.io/py/stackone-ai)
35
36
  [![GitHub release (latest by date)](https://img.shields.io/github/v/release/StackOneHQ/stackone-ai-python)](https://github.com/StackOneHQ/stackone-ai-python/releases)
36
37
  [![Coverage](https://stackonehq.github.io/stackone-ai-python/badges.svg)](https://stackonehq.github.io/stackone-ai-python/html/)
38
+ [![DeepWiki](https://img.shields.io/badge/DeepWiki-StackOneHQ%2Fstackone--ai--python-blue.svg?logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAyCAYAAAAnWDnqAAAAAXNSR0IArs4c6QAAA05JREFUaEPtmUtyEzEQhtWTQyQLHNak2AB7ZnyXZMEjXMGeK/AIi+QuHrMnbChYY7MIh8g01fJoopFb0uhhEqqcbWTp06/uv1saEDv4O3n3dV60RfP947Mm9/SQc0ICFQgzfc4CYZoTPAswgSJCCUJUnAAoRHOAUOcATwbmVLWdGoH//PB8mnKqScAhsD0kYP3j/Yt5LPQe2KvcXmGvRHcDnpxfL2zOYJ1mFwrryWTz0advv1Ut4CJgf5uhDuDj5eUcAUoahrdY/56ebRWeraTjMt/00Sh3UDtjgHtQNHwcRGOC98BJEAEymycmYcWwOprTgcB6VZ5JK5TAJ+fXGLBm3FDAmn6oPPjR4rKCAoJCal2eAiQp2x0vxTPB3ALO2CRkwmDy5WohzBDwSEFKRwPbknEggCPB/imwrycgxX2NzoMCHhPkDwqYMr9tRcP5qNrMZHkVnOjRMWwLCcr8ohBVb1OMjxLwGCvjTikrsBOiA6fNyCrm8V1rP93iVPpwaE+gO0SsWmPiXB+jikdf6SizrT5qKasx5j8ABbHpFTx+vFXp9EnYQmLx02h1QTTrl6eDqxLnGjporxl3NL3agEvXdT0WmEost648sQOYAeJS9Q7bfUVoMGnjo4AZdUMQku50McDcMWcBPvr0SzbTAFDfvJqwLzgxwATnCgnp4wDl6Aa+Ax283gghmj+vj7feE2KBBRMW3FzOpLOADl0Isb5587h/U4gGvkt5v60Z1VLG8BhYjbzRwyQZemwAd6cCR5/XFWLYZRIMpX39AR0tjaGGiGzLVyhse5C9RKC6ai42ppWPKiBagOvaYk8lO7DajerabOZP46Lby5wKjw1HCRx7p9sVMOWGzb/vA1hwiWc6jm3MvQDTogQkiqIhJV0nBQBTU+3okKCFDy9WwferkHjtxib7t3xIUQtHxnIwtx4mpg26/HfwVNVDb4oI9RHmx5WGelRVlrtiw43zboCLaxv46AZeB3IlTkwouebTr1y2NjSpHz68WNFjHvupy3q8TFn3Hos2IAk4Ju5dCo8B3wP7VPr/FGaKiG+T+v+TQqIrOqMTL1VdWV1DdmcbO8KXBz6esmYWYKPwDL5b5FA1a0hwapHiom0r/cKaoqr+27/XcrS5UwSMbQAAAABJRU5ErkJggg==)](https://deepwiki.com/StackOneHQ/stackone-ai-python)
39
+
40
+ <!-- DeepWiki badge generated by https://deepwiki.ryoppippi.com/ -->
37
41
 
38
42
  StackOne AI provides a unified interface for accessing various SaaS tools through AI-friendly APIs.
39
43
 
@@ -47,7 +51,7 @@ StackOne AI provides a unified interface for accessing various SaaS tools throug
47
51
  - Glob pattern filtering with patterns like `"hris_*"` and exclusions `"!hris_delete_*"`
48
52
  - Provider and action filtering
49
53
  - Multi-account support
50
- - **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
51
55
  - Integration with popular AI frameworks:
52
56
  - OpenAI Functions
53
57
  - LangChain Tools
@@ -60,30 +64,6 @@ StackOne AI provides a unified interface for accessing various SaaS tools throug
60
64
 
61
65
  ## Installation
62
66
 
63
- ### Using Nix (Recommended for Development)
64
-
65
- If you have [Nix](https://nixos.org/) installed with flakes enabled:
66
-
67
- ```bash
68
- # Enter development environment (auto-installs dependencies and git hooks)
69
- nix develop
70
-
71
- # Format code
72
- nix fmt
73
-
74
- # Run checks
75
- nix flake check
76
- ```
77
-
78
- The Nix development environment includes:
79
-
80
- - Python with uv package manager
81
- - Automatic dependency installation
82
- - Git hooks (treefmt + ty) auto-configured
83
- - Consistent environment across all platforms
84
-
85
- ### Using pip/uv
86
-
87
67
  ```bash
88
68
  pip install 'stackone-ai[mcp]'
89
69
 
@@ -333,16 +313,16 @@ result = crew.kickoff()
333
313
 
334
314
  ## Feedback Collection
335
315
 
336
- 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.
337
317
 
338
318
  ```python
339
319
  from stackone_ai import StackOneToolSet
340
320
 
341
321
  toolset = StackOneToolSet()
342
322
 
343
- # Get the feedback tool (included with "meta_*" pattern or all tools)
344
- tools = toolset.fetch_tools(actions=["meta_*"])
345
- 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")
346
326
 
347
327
  # Submit feedback (typically invoked by AI after user consent)
348
328
  result = feedback_tool.call(
@@ -357,23 +337,23 @@ result = feedback_tool.call(
357
337
  - "Are you ok with sending feedback to StackOne? The LLM will take care of sending it."
358
338
  - Only call the tool after the user explicitly agrees.
359
339
 
360
- ## Meta Tools (Beta)
340
+ ## Utility Tools (Beta)
361
341
 
362
- 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.
363
343
 
364
344
  ### Basic Usage
365
345
 
366
346
  ```python
367
- # Get meta tools for dynamic discovery
347
+ # Get utility tools for dynamic discovery
368
348
  tools = toolset.fetch_tools(actions=["hris_*"])
369
- meta_tools = tools.meta_tools()
349
+ utility_tools = tools.utility_tools()
370
350
 
371
351
  # Search for relevant tools using natural language
372
- filter_tool = meta_tools.get_tool("meta_search_tools")
352
+ filter_tool = utility_tools.get_tool("tool_search")
373
353
  results = filter_tool.call(query="manage employees", limit=5)
374
354
 
375
355
  # Execute discovered tools dynamically
376
- execute_tool = meta_tools.get_tool("meta_execute_tool")
356
+ execute_tool = utility_tools.get_tool("tool_execute")
377
357
  result = execute_tool.call(toolName="hris_list_employees", params={"limit": 10})
378
358
  ```
379
359
 
@@ -386,7 +366,41 @@ For more examples, check out the [examples/](examples/) directory:
386
366
  - [OpenAI Integration](examples/openai_integration.py)
387
367
  - [LangChain Integration](examples/langchain_integration.py)
388
368
  - [CrewAI Integration](examples/crewai_integration.py)
389
- - [Meta Tools](examples/meta_tools_example.py)
369
+ - [Utility Tools](examples/utility_tools_example.py)
370
+
371
+ ## Development
372
+
373
+ ### Using Nix (Recommended)
374
+
375
+ This project includes a Nix flake for reproducible development environments. All development tools are defined in [flake.nix](./flake.nix) and provided via Nix.
376
+
377
+ #### Installing Nix
378
+
379
+ ```bash
380
+ # Install Nix with flakes enabled (if not already installed)
381
+ curl --proto '=https' --tlsv1.2 -sSf -L https://artifacts.nixos.org/experimental-installer | \
382
+ sh -s -- install
383
+
384
+ # If flakes are not enabled, enable them with:
385
+ mkdir -p ~/.config/nix && echo "experimental-features = nix-command flakes" >> ~/.config/nix/nix.conf
386
+ ```
387
+
388
+ #### Activating the Development Environment
389
+
390
+ ```bash
391
+ # Automatic activation with direnv (recommended)
392
+ direnv allow
393
+
394
+ # Or manual activation
395
+ nix develop
396
+ ```
397
+
398
+ The Nix development environment includes:
399
+
400
+ - Python with uv package manager
401
+ - Automatic dependency installation
402
+ - Git hooks (treefmt + ty) auto-configured
403
+ - Consistent environment across all platforms
390
404
 
391
405
  ## License
392
406