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.
- stackone_ai-2.3.0/.claude/rules/nix-workflow.md +84 -0
- stackone_ai-2.3.0/.claude/skills/release-please/SKILL.md +51 -0
- stackone_ai-2.3.0/.github/actions/setup-nix/action.yaml +50 -0
- {stackone_ai-2.0.0 → stackone_ai-2.3.0}/.github/dependabot.yaml +2 -14
- {stackone_ai-2.0.0 → stackone_ai-2.3.0}/.github/workflows/ci.yaml +20 -26
- {stackone_ai-2.0.0 → stackone_ai-2.3.0}/.github/workflows/nix-flake-update.yaml +2 -2
- stackone_ai-2.3.0/.github/workflows/nix-flake.yaml +35 -0
- stackone_ai-2.3.0/.github/workflows/release.yaml +66 -0
- stackone_ai-2.3.0/.gitmodules +3 -0
- stackone_ai-2.3.0/.release-please-manifest.json +3 -0
- {stackone_ai-2.0.0 → stackone_ai-2.3.0}/CHANGELOG.md +39 -0
- {stackone_ai-2.0.0 → stackone_ai-2.3.0}/CLAUDE.md +7 -0
- {stackone_ai-2.0.0 → stackone_ai-2.3.0}/PKG-INFO +52 -38
- {stackone_ai-2.0.0 → stackone_ai-2.3.0}/README.md +49 -36
- {stackone_ai-2.0.0 → stackone_ai-2.3.0}/examples/test_examples.py +1 -1
- stackone_ai-2.0.0/examples/meta_tools_example.py → stackone_ai-2.3.0/examples/utility_tools_example.py +26 -26
- {stackone_ai-2.0.0 → stackone_ai-2.3.0}/flake.lock +20 -20
- {stackone_ai-2.0.0 → stackone_ai-2.3.0}/flake.nix +18 -8
- {stackone_ai-2.0.0 → stackone_ai-2.3.0}/justfile +0 -4
- {stackone_ai-2.0.0 → stackone_ai-2.3.0}/pyproject.toml +8 -6
- {stackone_ai-2.0.0 → stackone_ai-2.3.0}/stackone_ai/__init__.py +1 -1
- {stackone_ai-2.0.0 → stackone_ai-2.3.0}/stackone_ai/feedback/tool.py +1 -1
- {stackone_ai-2.0.0 → stackone_ai-2.3.0}/stackone_ai/integrations/langgraph.py +5 -5
- {stackone_ai-2.0.0 → stackone_ai-2.3.0}/stackone_ai/models.py +13 -13
- stackone_ai-2.0.0/stackone_ai/meta_tools.py → stackone_ai-2.3.0/stackone_ai/utility_tools.py +24 -24
- stackone_ai-2.3.0/tests/conftest.py +101 -0
- stackone_ai-2.3.0/tests/mocks/serve.ts +134 -0
- {stackone_ai-2.0.0 → stackone_ai-2.3.0}/tests/test_feedback.py +3 -3
- stackone_ai-2.0.0/tests/test_toolset_mcp.py → stackone_ai-2.3.0/tests/test_fetch_tools.py +203 -175
- stackone_ai-2.0.0/tests/test_meta_tools.py → stackone_ai-2.3.0/tests/test_utility_tools.py +40 -40
- {stackone_ai-2.0.0 → stackone_ai-2.3.0}/uv.lock +672 -109
- stackone_ai-2.3.0/vendor/stackone-ai-node/.claude/rules/development-workflow.md +29 -0
- stackone_ai-2.3.0/vendor/stackone-ai-node/.claude/rules/file-operations.md +134 -0
- stackone_ai-2.3.0/vendor/stackone-ai-node/.claude/rules/git-workflow.md +97 -0
- stackone_ai-2.3.0/vendor/stackone-ai-node/.claude/rules/pnpm-usage.md +54 -0
- stackone_ai-2.3.0/vendor/stackone-ai-node/.claude/rules/typescript-patterns.md +246 -0
- stackone_ai-2.3.0/vendor/stackone-ai-node/.claude/rules/typescript-testing.md +132 -0
- stackone_ai-2.3.0/vendor/stackone-ai-node/.claude/skills/orama-integration/SKILL.md +25 -0
- stackone_ai-2.3.0/vendor/stackone-ai-node/.cursor/rules/development-workflow.mdc +1 -0
- stackone_ai-2.3.0/vendor/stackone-ai-node/.cursor/rules/file-operations.mdc +1 -0
- stackone_ai-2.3.0/vendor/stackone-ai-node/.cursor/rules/git-workflow.mdc +1 -0
- stackone_ai-2.3.0/vendor/stackone-ai-node/.cursor/rules/orama-integration.mdc +1 -0
- stackone_ai-2.3.0/vendor/stackone-ai-node/.cursor/rules/pnpm-usage.mdc +1 -0
- stackone_ai-2.3.0/vendor/stackone-ai-node/.cursor/rules/typescript-patterns.mdc +1 -0
- stackone_ai-2.3.0/vendor/stackone-ai-node/.cursor/rules/typescript-testing.mdc +1 -0
- stackone_ai-2.3.0/vendor/stackone-ai-node/.envrc +1 -0
- stackone_ai-2.3.0/vendor/stackone-ai-node/.git +1 -0
- stackone_ai-2.3.0/vendor/stackone-ai-node/.github/CODEOWNERS +6 -0
- {stackone_ai-2.0.0 → stackone_ai-2.3.0/vendor/stackone-ai-node}/.github/actions/setup-nix/action.yaml +4 -4
- stackone_ai-2.3.0/vendor/stackone-ai-node/.github/workflows/check-title.yaml +25 -0
- stackone_ai-2.3.0/vendor/stackone-ai-node/.github/workflows/ci.yaml +87 -0
- stackone_ai-2.3.0/vendor/stackone-ai-node/.github/workflows/claude.yaml +39 -0
- stackone_ai-2.3.0/vendor/stackone-ai-node/.github/workflows/dry-publish.yaml +17 -0
- {stackone_ai-2.0.0 → stackone_ai-2.3.0/vendor/stackone-ai-node}/.github/workflows/nix-flake.yaml +9 -9
- stackone_ai-2.3.0/vendor/stackone-ai-node/.github/workflows/release.yaml +52 -0
- stackone_ai-2.3.0/vendor/stackone-ai-node/.gitignore +183 -0
- stackone_ai-2.3.0/vendor/stackone-ai-node/.gitleaks.toml +11 -0
- stackone_ai-2.3.0/vendor/stackone-ai-node/.mcp.json +12 -0
- stackone_ai-2.3.0/vendor/stackone-ai-node/.oxfmtrc.jsonc +7 -0
- stackone_ai-2.3.0/vendor/stackone-ai-node/.oxlintrc.jsonc +179 -0
- stackone_ai-2.3.0/vendor/stackone-ai-node/AGENTS.md +1 -0
- stackone_ai-2.3.0/vendor/stackone-ai-node/CHANGELOG.md +373 -0
- stackone_ai-2.3.0/vendor/stackone-ai-node/CLAUDE.md +26 -0
- stackone_ai-2.3.0/vendor/stackone-ai-node/LICENSE +201 -0
- stackone_ai-2.3.0/vendor/stackone-ai-node/README.md +614 -0
- stackone_ai-2.3.0/vendor/stackone-ai-node/examples/README.md +295 -0
- stackone_ai-2.3.0/vendor/stackone-ai-node/examples/ai-sdk-integration.test.ts +52 -0
- stackone_ai-2.3.0/vendor/stackone-ai-node/examples/ai-sdk-integration.ts +52 -0
- stackone_ai-2.3.0/vendor/stackone-ai-node/examples/anthropic-integration.ts +63 -0
- stackone_ai-2.3.0/vendor/stackone-ai-node/examples/claude-agent-sdk-integration.test.ts +140 -0
- stackone_ai-2.3.0/vendor/stackone-ai-node/examples/claude-agent-sdk-integration.ts +88 -0
- stackone_ai-2.3.0/vendor/stackone-ai-node/examples/fetch-tools-debug.ts +297 -0
- stackone_ai-2.3.0/vendor/stackone-ai-node/examples/fetch-tools.test.ts +102 -0
- stackone_ai-2.3.0/vendor/stackone-ai-node/examples/fetch-tools.ts +82 -0
- stackone_ai-2.3.0/vendor/stackone-ai-node/examples/meta-tools.ts +280 -0
- stackone_ai-2.3.0/vendor/stackone-ai-node/examples/openai-integration.test.ts +72 -0
- stackone_ai-2.3.0/vendor/stackone-ai-node/examples/openai-integration.ts +69 -0
- stackone_ai-2.3.0/vendor/stackone-ai-node/examples/openai-responses-integration.test.ts +64 -0
- stackone_ai-2.3.0/vendor/stackone-ai-node/examples/openai-responses-integration.ts +63 -0
- stackone_ai-2.3.0/vendor/stackone-ai-node/examples/package.json +30 -0
- stackone_ai-2.3.0/vendor/stackone-ai-node/examples/tanstack-ai-integration.test.ts +77 -0
- stackone_ai-2.3.0/vendor/stackone-ai-node/examples/tanstack-ai-integration.ts +83 -0
- stackone_ai-2.3.0/vendor/stackone-ai-node/examples/tsconfig.json +16 -0
- stackone_ai-2.3.0/vendor/stackone-ai-node/flake.lock +61 -0
- stackone_ai-2.3.0/vendor/stackone-ai-node/flake.nix +49 -0
- stackone_ai-2.3.0/vendor/stackone-ai-node/knip.config.ts +21 -0
- stackone_ai-2.3.0/vendor/stackone-ai-node/lefthook.yaml +22 -0
- stackone_ai-2.3.0/vendor/stackone-ai-node/mocks/handlers.example-api.ts +59 -0
- stackone_ai-2.3.0/vendor/stackone-ai-node/mocks/handlers.mcp.ts +35 -0
- stackone_ai-2.3.0/vendor/stackone-ai-node/mocks/handlers.openai.ts +214 -0
- stackone_ai-2.3.0/vendor/stackone-ai-node/mocks/handlers.stackone-ai.ts +97 -0
- stackone_ai-2.3.0/vendor/stackone-ai-node/mocks/handlers.stackone-rpc.ts +85 -0
- stackone_ai-2.3.0/vendor/stackone-ai-node/mocks/handlers.ts +13 -0
- stackone_ai-2.3.0/vendor/stackone-ai-node/mocks/handlers.utils.ts +30 -0
- stackone_ai-2.3.0/vendor/stackone-ai-node/mocks/mcp-server.ts +275 -0
- stackone_ai-2.3.0/vendor/stackone-ai-node/mocks/node.ts +4 -0
- stackone_ai-2.3.0/vendor/stackone-ai-node/package.json +118 -0
- stackone_ai-2.3.0/vendor/stackone-ai-node/pnpm-lock.yaml +4506 -0
- stackone_ai-2.3.0/vendor/stackone-ai-node/pnpm-workspace.yaml +66 -0
- stackone_ai-2.3.0/vendor/stackone-ai-node/src/consts.ts +20 -0
- stackone_ai-2.3.0/vendor/stackone-ai-node/src/feedback.test.ts +300 -0
- stackone_ai-2.3.0/vendor/stackone-ai-node/src/feedback.ts +230 -0
- stackone_ai-2.3.0/vendor/stackone-ai-node/src/headers.test.ts +69 -0
- stackone_ai-2.3.0/vendor/stackone-ai-node/src/headers.ts +46 -0
- stackone_ai-2.3.0/vendor/stackone-ai-node/src/index.ts +29 -0
- stackone_ai-2.3.0/vendor/stackone-ai-node/src/mcp-client.test.ts +68 -0
- stackone_ai-2.3.0/vendor/stackone-ai-node/src/mcp-client.ts +55 -0
- stackone_ai-2.3.0/vendor/stackone-ai-node/src/requestBuilder.test.ts +778 -0
- stackone_ai-2.3.0/vendor/stackone-ai-node/src/requestBuilder.ts +377 -0
- stackone_ai-2.3.0/vendor/stackone-ai-node/src/rpc-client.test.ts +122 -0
- stackone_ai-2.3.0/vendor/stackone-ai-node/src/rpc-client.ts +107 -0
- stackone_ai-2.3.0/vendor/stackone-ai-node/src/schema.ts +64 -0
- stackone_ai-2.3.0/vendor/stackone-ai-node/src/tool.test-d.ts +53 -0
- stackone_ai-2.3.0/vendor/stackone-ai-node/src/tool.test.ts +1453 -0
- stackone_ai-2.3.0/vendor/stackone-ai-node/src/tool.ts +743 -0
- stackone_ai-2.3.0/vendor/stackone-ai-node/src/toolsets.test-d.ts +44 -0
- stackone_ai-2.3.0/vendor/stackone-ai-node/src/toolsets.test.ts +712 -0
- stackone_ai-2.3.0/vendor/stackone-ai-node/src/toolsets.ts +558 -0
- stackone_ai-2.3.0/vendor/stackone-ai-node/src/types.ts +203 -0
- stackone_ai-2.3.0/vendor/stackone-ai-node/src/utils/array.test.ts +48 -0
- stackone_ai-2.3.0/vendor/stackone-ai-node/src/utils/array.ts +13 -0
- stackone_ai-2.3.0/vendor/stackone-ai-node/src/utils/error-stackone-api.test.ts +208 -0
- stackone_ai-2.3.0/vendor/stackone-ai-node/src/utils/error-stackone-api.ts +130 -0
- stackone_ai-2.3.0/vendor/stackone-ai-node/src/utils/error-stackone.test.ts +15 -0
- stackone_ai-2.3.0/vendor/stackone-ai-node/src/utils/error-stackone.ts +9 -0
- stackone_ai-2.3.0/vendor/stackone-ai-node/src/utils/tfidf-index.test.ts +206 -0
- stackone_ai-2.3.0/vendor/stackone-ai-node/src/utils/tfidf-index.ts +192 -0
- stackone_ai-2.3.0/vendor/stackone-ai-node/src/utils/try-import.test.ts +23 -0
- stackone_ai-2.3.0/vendor/stackone-ai-node/src/utils/try-import.ts +25 -0
- stackone_ai-2.3.0/vendor/stackone-ai-node/src/utils/type.ts +4 -0
- stackone_ai-2.3.0/vendor/stackone-ai-node/tsconfig.json +28 -0
- stackone_ai-2.3.0/vendor/stackone-ai-node/tsdown.config.ts +20 -0
- stackone_ai-2.3.0/vendor/stackone-ai-node/vitest.config.ts +46 -0
- stackone_ai-2.3.0/vendor/stackone-ai-node/vitest.setup.ts +5 -0
- stackone_ai-2.0.0/.github/workflows/release.yaml +0 -41
- stackone_ai-2.0.0/.release-please-manifest.json +0 -3
- stackone_ai-2.0.0/py.typed +0 -1
- stackone_ai-2.0.0/scripts/update_version.py +0 -47
- {stackone_ai-2.0.0 → stackone_ai-2.3.0}/.claude/rules/development-workflow.md +0 -0
- {stackone_ai-2.0.0 → stackone_ai-2.3.0}/.claude/rules/examples-standards.md +0 -0
- {stackone_ai-2.0.0 → stackone_ai-2.3.0}/.claude/rules/git-workflow.md +0 -0
- {stackone_ai-2.0.0 → stackone_ai-2.3.0}/.claude/rules/no-relative-imports.md +0 -0
- {stackone_ai-2.0.0 → stackone_ai-2.3.0}/.claude/rules/package-installation.md +0 -0
- {stackone_ai-2.0.0 → stackone_ai-2.3.0}/.claude/rules/release-please-standards.md +0 -0
- {stackone_ai-2.0.0 → stackone_ai-2.3.0}/.claude/rules/uv-scripts.md +0 -0
- {stackone_ai-2.0.0 → stackone_ai-2.3.0}/.cursor/rules/development-workflow.mdc +0 -0
- {stackone_ai-2.0.0 → stackone_ai-2.3.0}/.cursor/rules/examples-standards.mdc +0 -0
- {stackone_ai-2.0.0 → stackone_ai-2.3.0}/.cursor/rules/git-workflow.mdc +0 -0
- {stackone_ai-2.0.0 → stackone_ai-2.3.0}/.cursor/rules/no-relative-imports.mdc +0 -0
- {stackone_ai-2.0.0 → stackone_ai-2.3.0}/.cursor/rules/package-installation.mdc +0 -0
- {stackone_ai-2.0.0 → stackone_ai-2.3.0}/.cursor/rules/release-please-standards.mdc +0 -0
- {stackone_ai-2.0.0 → stackone_ai-2.3.0}/.cursor/rules/uv-scripts.mdc +0 -0
- {stackone_ai-2.0.0 → stackone_ai-2.3.0}/.envrc +0 -0
- {stackone_ai-2.0.0 → stackone_ai-2.3.0}/.gitignore +0 -0
- {stackone_ai-2.0.0 → stackone_ai-2.3.0}/.gitleaks.toml +0 -0
- {stackone_ai-2.0.0 → stackone_ai-2.3.0}/.mcp.json +0 -0
- {stackone_ai-2.0.0 → stackone_ai-2.3.0}/.release-please-config.json +0 -0
- {stackone_ai-2.0.0 → stackone_ai-2.3.0}/LICENSE +0 -0
- {stackone_ai-2.0.0 → stackone_ai-2.3.0}/examples/crewai_integration.py +0 -0
- {stackone_ai-2.0.0 → stackone_ai-2.3.0}/examples/file_uploads.py +0 -0
- {stackone_ai-2.0.0 → stackone_ai-2.3.0}/examples/index.py +0 -0
- {stackone_ai-2.0.0 → stackone_ai-2.3.0}/examples/langchain_integration.py +0 -0
- {stackone_ai-2.0.0 → stackone_ai-2.3.0}/examples/openai_integration.py +0 -0
- {stackone_ai-2.0.0 → stackone_ai-2.3.0}/examples/stackone_account_ids.py +0 -0
- {stackone_ai-2.0.0 → stackone_ai-2.3.0}/stackone_ai/constants.py +0 -0
- {stackone_ai-2.0.0 → stackone_ai-2.3.0}/stackone_ai/feedback/__init__.py +0 -0
- {stackone_ai-2.0.0 → stackone_ai-2.3.0}/stackone_ai/integrations/__init__.py +0 -0
- {stackone_ai-2.0.0 → stackone_ai-2.3.0}/stackone_ai/py.typed +0 -0
- {stackone_ai-2.0.0 → stackone_ai-2.3.0}/stackone_ai/toolset.py +0 -0
- {stackone_ai-2.0.0 → stackone_ai-2.3.0}/stackone_ai/utils/__init__.py +0 -0
- {stackone_ai-2.0.0 → stackone_ai-2.3.0}/stackone_ai/utils/tfidf_index.py +0 -0
- {stackone_ai-2.0.0 → stackone_ai-2.3.0}/tests/test_integrations_langgraph.py +0 -0
- {stackone_ai-2.0.0 → stackone_ai-2.3.0}/tests/test_models.py +0 -0
- {stackone_ai-2.0.0 → stackone_ai-2.3.0}/tests/test_tfidf_index.py +0 -0
- {stackone_ai-2.0.0 → stackone_ai-2.3.0}/tests/test_tool_calling.py +0 -0
- {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
|
-
|
|
19
|
+
python-minor-patch:
|
|
20
20
|
patterns:
|
|
21
|
-
- "
|
|
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@
|
|
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:
|
|
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@
|
|
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
|
-
|
|
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:
|
|
53
|
+
run: just lint
|
|
58
54
|
|
|
59
55
|
- name: Run Ty
|
|
60
|
-
run:
|
|
56
|
+
run: just ty
|
|
61
57
|
|
|
62
58
|
- name: Run Tests
|
|
63
|
-
run:
|
|
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@
|
|
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
|
-
|
|
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:
|
|
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@
|
|
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@
|
|
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
|
|
@@ -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.
|
|
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.
|
|
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
|
[](https://badge.fury.io/py/stackone-ai)
|
|
35
36
|
[](https://github.com/StackOneHQ/stackone-ai-python/releases)
|
|
36
37
|
[](https://stackonehq.github.io/stackone-ai-python/html/)
|
|
38
|
+
[](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
|
-
- **
|
|
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 (`
|
|
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 "
|
|
344
|
-
tools = toolset.fetch_tools(actions=["
|
|
345
|
-
feedback_tool = tools.get_tool("
|
|
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
|
-
##
|
|
340
|
+
## Utility Tools (Beta)
|
|
361
341
|
|
|
362
|
-
|
|
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
|
|
347
|
+
# Get utility tools for dynamic discovery
|
|
368
348
|
tools = toolset.fetch_tools(actions=["hris_*"])
|
|
369
|
-
|
|
349
|
+
utility_tools = tools.utility_tools()
|
|
370
350
|
|
|
371
351
|
# Search for relevant tools using natural language
|
|
372
|
-
filter_tool =
|
|
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 =
|
|
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
|
-
- [
|
|
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
|
|