orcheo 0.0.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 (110) hide show
  1. orcheo-0.0.1/.bumpversion.cfg +13 -0
  2. orcheo-0.0.1/.cursor/rules/components.mdc +9 -0
  3. orcheo-0.0.1/.cursor/rules/docs.mdc +9 -0
  4. orcheo-0.0.1/.cursor/rules/nodes-and-edges.mdc +13 -0
  5. orcheo-0.0.1/.cursor/rules/project-structure.mdc +17 -0
  6. orcheo-0.0.1/.cursorignore +0 -0
  7. orcheo-0.0.1/.cursorrules +0 -0
  8. orcheo-0.0.1/.devcontainer/Dockerfile +5 -0
  9. orcheo-0.0.1/.devcontainer/devcontainer.json +33 -0
  10. orcheo-0.0.1/.env.example +14 -0
  11. orcheo-0.0.1/.github/ISSUE_TEMPLATE/bug_report.md +38 -0
  12. orcheo-0.0.1/.github/ISSUE_TEMPLATE/feature_request.md +20 -0
  13. orcheo-0.0.1/.github/workflows/after-ci.yml +50 -0
  14. orcheo-0.0.1/.github/workflows/ci.yml +190 -0
  15. orcheo-0.0.1/.github/workflows/claude.yml +48 -0
  16. orcheo-0.0.1/.gitignore +186 -0
  17. orcheo-0.0.1/.pre-commit-config.yaml +26 -0
  18. orcheo-0.0.1/.python-version +1 -0
  19. orcheo-0.0.1/AGENTS.md +45 -0
  20. orcheo-0.0.1/CLAUDE.md +75 -0
  21. orcheo-0.0.1/LICENSE +21 -0
  22. orcheo-0.0.1/Makefile +26 -0
  23. orcheo-0.0.1/PKG-INFO +88 -0
  24. orcheo-0.0.1/README.md +58 -0
  25. orcheo-0.0.1/apps/backend/.bumpversion.cfg +9 -0
  26. orcheo-0.0.1/apps/backend/README.md +21 -0
  27. orcheo-0.0.1/apps/backend/pyproject.toml +36 -0
  28. orcheo-0.0.1/apps/backend/src/orcheo_backend/__init__.py +18 -0
  29. orcheo-0.0.1/apps/backend/src/orcheo_backend/app/__init__.py +122 -0
  30. orcheo-0.0.1/apps/canvas/README.md +14 -0
  31. orcheo-0.0.1/apps/canvas/eslint.config.js +44 -0
  32. orcheo-0.0.1/apps/canvas/index.html +12 -0
  33. orcheo-0.0.1/apps/canvas/package-lock.json +5907 -0
  34. orcheo-0.0.1/apps/canvas/package.json +35 -0
  35. orcheo-0.0.1/apps/canvas/src/App.test.tsx +10 -0
  36. orcheo-0.0.1/apps/canvas/src/App.tsx +14 -0
  37. orcheo-0.0.1/apps/canvas/src/app.css +33 -0
  38. orcheo-0.0.1/apps/canvas/src/main.tsx +9 -0
  39. orcheo-0.0.1/apps/canvas/src/setupTests.ts +1 -0
  40. orcheo-0.0.1/apps/canvas/tsconfig.json +21 -0
  41. orcheo-0.0.1/apps/canvas/vite.config.ts +11 -0
  42. orcheo-0.0.1/docs/deployment.md +111 -0
  43. orcheo-0.0.1/docs/design.md +418 -0
  44. orcheo-0.0.1/docs/developer_tooling.md +53 -0
  45. orcheo-0.0.1/docs/milestone1_task1.md +58 -0
  46. orcheo-0.0.1/docs/prd.md +162 -0
  47. orcheo-0.0.1/docs/releasing.md +75 -0
  48. orcheo-0.0.1/docs/roadmap.md +63 -0
  49. orcheo-0.0.1/examples/agent_example.ipynb +550 -0
  50. orcheo-0.0.1/examples/agent_example.py +333 -0
  51. orcheo-0.0.1/examples/feedly_news.py +177 -0
  52. orcheo-0.0.1/examples/graph_engine_example.py +53 -0
  53. orcheo-0.0.1/examples/mongodb.py +61 -0
  54. orcheo-0.0.1/examples/pull_rss_updates.py +27 -0
  55. orcheo-0.0.1/examples/quickstart/canvas_welcome.json +17 -0
  56. orcheo-0.0.1/examples/quickstart/sdk_quickstart.py +36 -0
  57. orcheo-0.0.1/examples/slack.py +26 -0
  58. orcheo-0.0.1/examples/state_example.py +57 -0
  59. orcheo-0.0.1/examples/telegram_example.py +37 -0
  60. orcheo-0.0.1/jupytext.toml +1 -0
  61. orcheo-0.0.1/mkdocs.yml +1 -0
  62. orcheo-0.0.1/packages/sdk/.bumpversion.cfg +9 -0
  63. orcheo-0.0.1/packages/sdk/README.md +20 -0
  64. orcheo-0.0.1/packages/sdk/pyproject.toml +22 -0
  65. orcheo-0.0.1/packages/sdk/src/orcheo_sdk/__init__.py +6 -0
  66. orcheo-0.0.1/packages/sdk/src/orcheo_sdk/client.py +73 -0
  67. orcheo-0.0.1/packages/sdk/src/orcheo_sdk/py.typed +0 -0
  68. orcheo-0.0.1/pyproject.toml +137 -0
  69. orcheo-0.0.1/src/orcheo/__init__.py +1 -0
  70. orcheo-0.0.1/src/orcheo/config.py +239 -0
  71. orcheo-0.0.1/src/orcheo/graph/__init__.py +1 -0
  72. orcheo-0.0.1/src/orcheo/graph/builder.py +30 -0
  73. orcheo-0.0.1/src/orcheo/graph/state.py +16 -0
  74. orcheo-0.0.1/src/orcheo/models/__init__.py +26 -0
  75. orcheo-0.0.1/src/orcheo/models/workflow.py +341 -0
  76. orcheo-0.0.1/src/orcheo/nodes/__init__.py +16 -0
  77. orcheo-0.0.1/src/orcheo/nodes/ai.py +111 -0
  78. orcheo-0.0.1/src/orcheo/nodes/base.py +66 -0
  79. orcheo-0.0.1/src/orcheo/nodes/code.py +38 -0
  80. orcheo-0.0.1/src/orcheo/nodes/mongodb.py +163 -0
  81. orcheo-0.0.1/src/orcheo/nodes/registry.py +62 -0
  82. orcheo-0.0.1/src/orcheo/nodes/rss.py +31 -0
  83. orcheo-0.0.1/src/orcheo/nodes/slack.py +59 -0
  84. orcheo-0.0.1/src/orcheo/nodes/telegram.py +97 -0
  85. orcheo-0.0.1/src/orcheo/persistence.py +81 -0
  86. orcheo-0.0.1/src/orcheo/py.typed +0 -0
  87. orcheo-0.0.1/src/orcheo/tooling/__init__.py +14 -0
  88. orcheo-0.0.1/src/orcheo/tooling/commands.py +58 -0
  89. orcheo-0.0.1/src/orcheo/tooling/env.py +117 -0
  90. orcheo-0.0.1/tests/__init__.py +1 -0
  91. orcheo-0.0.1/tests/conftest.py +13 -0
  92. orcheo-0.0.1/tests/graph/__init__.py +1 -0
  93. orcheo-0.0.1/tests/graph/test_graph.py +31 -0
  94. orcheo-0.0.1/tests/graph/test_state.py +52 -0
  95. orcheo-0.0.1/tests/integration/test_postgres_persistence.py +67 -0
  96. orcheo-0.0.1/tests/nodes/test_ai.py +139 -0
  97. orcheo-0.0.1/tests/nodes/test_base.py +85 -0
  98. orcheo-0.0.1/tests/nodes/test_code_node.py +65 -0
  99. orcheo-0.0.1/tests/nodes/test_mongodb.py +441 -0
  100. orcheo-0.0.1/tests/nodes/test_rss.py +95 -0
  101. orcheo-0.0.1/tests/nodes/test_slack.py +242 -0
  102. orcheo-0.0.1/tests/nodes/test_telegram.py +107 -0
  103. orcheo-0.0.1/tests/sdk/test_client.py +64 -0
  104. orcheo-0.0.1/tests/test_app.py +81 -0
  105. orcheo-0.0.1/tests/test_config.py +173 -0
  106. orcheo-0.0.1/tests/test_persistence.py +114 -0
  107. orcheo-0.0.1/tests/test_tooling_commands.py +56 -0
  108. orcheo-0.0.1/tests/test_tooling_env.py +85 -0
  109. orcheo-0.0.1/tests/test_workflow_models.py +177 -0
  110. orcheo-0.0.1/uv.lock +3468 -0
@@ -0,0 +1,13 @@
1
+ [bumpversion]
2
+ current_version = 0.0.1
3
+ commit = true
4
+ tag = true
5
+ tag_name = "core-v{new_version}"
6
+
7
+ [bumpversion:file:pyproject.toml]
8
+ search = version = "{current_version}"
9
+ replace = version = "{new_version}"
10
+
11
+ [bumpversion:file:uv.lock]
12
+ search = version = "{current_version}"
13
+ replace = version = "{new_version}"
@@ -0,0 +1,9 @@
1
+ ---
2
+ description:
3
+ globs:
4
+ alwaysApply: false
5
+ ---
6
+ # Components Guide
7
+
8
+ - UI components are in [src/components/](mdc:src/components)
9
+ - Node configuration UI: [src/components/NodeConfigPage.tsx](mdc:src/components/NodeConfigPage.tsx)
@@ -0,0 +1,9 @@
1
+ ---
2
+ description:
3
+ globs:
4
+ alwaysApply: false
5
+ ---
6
+ # Documentation Guide
7
+
8
+ - Project documentation is in [docs/](mdc:docs)
9
+ - Node documentation: [docs/node.md](mdc:docs/node.md)
@@ -0,0 +1,13 @@
1
+ ---
2
+ description:
3
+ globs:
4
+ alwaysApply: false
5
+ ---
6
+ # Nodes and Edges Guide
7
+
8
+ - Node logic is in [src/nodes/](mdc:src/nodes):
9
+ - Base node component: [src/nodes/BaseNode.tsx](mdc:src/nodes/BaseNode.tsx)
10
+ - Node types: [src/nodes/types.ts](mdc:src/nodes/types.ts)
11
+ - Node exports: [src/nodes/index.ts](mdc:src/nodes/index.ts)
12
+ - Edge logic is in [src/edges/](mdc:src/edges):
13
+ - Edge exports: [src/edges/index.ts](mdc:src/edges/index.ts)
@@ -0,0 +1,17 @@
1
+ ---
2
+ description:
3
+ globs:
4
+ alwaysApply: false
5
+ ---
6
+ # Project Structure Guide
7
+
8
+ - Main entry: [src/main.tsx](mdc:src/main.tsx)
9
+ - App component: [src/App.tsx](mdc:src/App.tsx)
10
+ - Components: [src/components/](mdc:src/components)
11
+ - Node logic: [src/nodes/](mdc:src/nodes)
12
+ - Edge logic: [src/edges/](mdc:src/edges)
13
+ - Styles: [src/index.css](mdc:src/index.css)
14
+ - Types: [src/nodes/types.ts](mdc:src/nodes/types.ts)
15
+ - Documentation: [docs/](mdc:docs)
16
+ - Configuration: [package.json](mdc:package.json), [vite.config.ts](mdc:vite.config.ts), [tsconfig.json](mdc:tsconfig.json)
17
+ - Entry HTML: [index.html](mdc:index.html)
File without changes
File without changes
@@ -0,0 +1,5 @@
1
+ FROM mcr.microsoft.com/devcontainers/python:3.12
2
+
3
+ # Install uv for dependency management
4
+ RUN curl -LsSf https://astral.sh/uv/install.sh | sh \
5
+ && ln -s /root/.local/bin/uv /usr/local/bin/uv
@@ -0,0 +1,33 @@
1
+ {
2
+ "name": "Orcheo",
3
+ "dockerFile": "Dockerfile",
4
+ "features": {
5
+ "ghcr.io/devcontainers/features/node:1": {
6
+ "version": "lts"
7
+ }
8
+ },
9
+ "forwardPorts": [8000, 8080],
10
+ "postCreateCommand": "uv sync --all-groups",
11
+ "remoteEnv": {
12
+ "UV_NO_SYNC": "1"
13
+ },
14
+ "customizations": {
15
+ "vscode": {
16
+ "settings": {
17
+ "python.defaultInterpreterPath": "/usr/local/bin/python",
18
+ "python.formatting.provider": "none",
19
+ "editor.formatOnSave": true,
20
+ "editor.codeActionsOnSave": {
21
+ "source.organizeImports": "explicit",
22
+ "source.fixAll": "explicit"
23
+ }
24
+ },
25
+ "extensions": [
26
+ "ms-python.python",
27
+ "ms-python.vscode-pylance",
28
+ "charliermarsh.ruff",
29
+ "esbenp.prettier-vscode"
30
+ ]
31
+ }
32
+ }
33
+ }
@@ -0,0 +1,14 @@
1
+ # Default environment configuration for local development.
2
+ # Copy this file to `.env` and adjust values as needed.
3
+ ORCHEO_HOST=0.0.0.0
4
+ ORCHEO_PORT=8000
5
+ ORCHEO_CHECKPOINT_BACKEND=sqlite
6
+ ORCHEO_SQLITE_PATH=.orcheo/orcheo.sqlite3
7
+
8
+ # Credential vault configuration
9
+ ORCHEO_VAULT_BACKEND=inmemory
10
+ # ORCHEO_VAULT_ENCRYPTION_KEY= # Required for file/aws_kms backends - use strong random key (32+ chars)
11
+ # ORCHEO_VAULT_LOCAL_PATH=.orcheo/vault.sqlite
12
+ # ORCHEO_VAULT_AWS_REGION=
13
+ # ORCHEO_VAULT_AWS_KMS_KEY_ID=
14
+ # ORCHEO_VAULT_TOKEN_TTL_SECONDS=3600 # Token expiration time in seconds
@@ -0,0 +1,38 @@
1
+ ---
2
+ name: Bug report
3
+ about: Create a report to help us improve
4
+ title: ''
5
+ labels: ''
6
+ assignees: ''
7
+
8
+ ---
9
+
10
+ **Describe the bug**
11
+ A clear and concise description of what the bug is.
12
+
13
+ **To Reproduce**
14
+ Steps to reproduce the behavior:
15
+ 1. Go to '...'
16
+ 2. Click on '....'
17
+ 3. Scroll down to '....'
18
+ 4. See error
19
+
20
+ **Expected behavior**
21
+ A clear and concise description of what you expected to happen.
22
+
23
+ **Screenshots**
24
+ If applicable, add screenshots to help explain your problem.
25
+
26
+ **Desktop (please complete the following information):**
27
+ - OS: [e.g. iOS]
28
+ - Browser [e.g. chrome, safari]
29
+ - Version [e.g. 22]
30
+
31
+ **Smartphone (please complete the following information):**
32
+ - Device: [e.g. iPhone6]
33
+ - OS: [e.g. iOS8.1]
34
+ - Browser [e.g. stock browser, safari]
35
+ - Version [e.g. 22]
36
+
37
+ **Additional context**
38
+ Add any other context about the problem here.
@@ -0,0 +1,20 @@
1
+ ---
2
+ name: Feature request
3
+ about: Suggest an idea for this project
4
+ title: ''
5
+ labels: ''
6
+ assignees: ''
7
+
8
+ ---
9
+
10
+ **Is your feature request related to a problem? Please describe.**
11
+ A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
12
+
13
+ **Describe the solution you'd like**
14
+ A clear and concise description of what you want to happen.
15
+
16
+ **Describe alternatives you've considered**
17
+ A clear and concise description of any alternative solutions or features you've considered.
18
+
19
+ **Additional context**
20
+ Add any other context or screenshots about the feature request here.
@@ -0,0 +1,50 @@
1
+ name: After CI
2
+
3
+ on:
4
+ workflow_run:
5
+ workflows: [CI]
6
+ types: [completed]
7
+
8
+ permissions:
9
+ statuses: write
10
+ pull-requests: write
11
+
12
+ jobs:
13
+ smokeshow:
14
+ runs-on: ubuntu-latest
15
+
16
+ steps:
17
+ - uses: astral-sh/setup-uv@v5
18
+ with:
19
+ enable-cache: true
20
+ python-version: '3.12'
21
+
22
+ - uses: dawidd6/action-download-artifact@v6
23
+ with:
24
+ workflow: ci.yml
25
+ name: '(diff-)?coverage-html.*'
26
+ name_is_regexp: true
27
+ commit: ${{ github.event.workflow_run.head_sha }}
28
+ allow_forks: true
29
+ workflow_conclusion: completed
30
+ if_no_artifact_found: warn
31
+
32
+ - run: uvx smokeshow upload coverage-html
33
+ if: hashFiles('coverage-html/*.html') != ''
34
+ env:
35
+ SMOKESHOW_GITHUB_STATUS_DESCRIPTION: Coverage {coverage-percentage}
36
+ SMOKESHOW_GITHUB_COVERAGE_THRESHOLD: 50
37
+ SMOKESHOW_GITHUB_CONTEXT: coverage
38
+ SMOKESHOW_GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
39
+ SMOKESHOW_GITHUB_PR_HEAD_SHA: ${{ github.event.workflow_run.head_sha }}
40
+ SMOKESHOW_AUTH_KEY: ${{ secrets.SMOKESHOW_AUTH_KEY }}
41
+
42
+ - run: uvx smokeshow upload diff-coverage-html
43
+ if: hashFiles('diff-coverage-html/*.html') != ''
44
+ env:
45
+ SMOKESHOW_GITHUB_STATUS_DESCRIPTION: Diff coverage {coverage-percentage}
46
+ SMOKESHOW_GITHUB_COVERAGE_THRESHOLD: 95
47
+ SMOKESHOW_GITHUB_CONTEXT: diff-coverage
48
+ SMOKESHOW_GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
49
+ SMOKESHOW_GITHUB_PR_HEAD_SHA: ${{ github.event.workflow_run.head_sha }}
50
+ SMOKESHOW_AUTH_KEY: ${{ secrets.SMOKESHOW_AUTH_KEY }}
@@ -0,0 +1,190 @@
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - main
7
+ tags:
8
+ - 'core-v*'
9
+ - 'backend-v*'
10
+ - 'sdk-v*'
11
+ pull_request:
12
+ branches:
13
+ - main
14
+ types:
15
+ - opened
16
+ - synchronize
17
+ - ready_for_review
18
+
19
+ permissions:
20
+ id-token: write # Required for PyPI trusted publishing
21
+ contents: read
22
+
23
+ jobs:
24
+ lint:
25
+ if: github.event_name != 'pull_request' || github.event.pull_request.draft == false
26
+ runs-on: ubuntu-latest
27
+
28
+ strategy:
29
+ fail-fast: false
30
+
31
+ steps:
32
+ - name: Checkout repository
33
+ uses: actions/checkout@v4
34
+
35
+ - name: Setup uv
36
+ uses: astral-sh/setup-uv@v5
37
+ with:
38
+ enable-cache: true
39
+
40
+ - name: Install dependencies
41
+ run: uv sync --all-groups
42
+
43
+ - name: Check style against standards
44
+ run: uv run make lint
45
+
46
+ coverage:
47
+ if: github.event_name != 'pull_request' || github.event.pull_request.draft == false
48
+ runs-on: ubuntu-latest
49
+
50
+ strategy:
51
+ fail-fast: false
52
+
53
+ steps:
54
+ - name: Checkout repository
55
+ uses: actions/checkout@v4
56
+ with:
57
+ fetch-depth: 0
58
+
59
+ - name: Setup uv
60
+ uses: astral-sh/setup-uv@v5
61
+ with:
62
+ enable-cache: true
63
+
64
+ - name: Install dependencies
65
+ run: uv sync --all-groups
66
+
67
+ - name: Run unit tests with coverage
68
+ run: |
69
+ uv run coverage run -m pytest
70
+ uv run coverage html --show-contexts --title "Coverage for ${{ github.sha }}"
71
+ uv run coverage xml
72
+ uv run diff-cover coverage.xml --html-report index.html
73
+
74
+ - name: Store coverage html
75
+ uses: actions/upload-artifact@v4
76
+ with:
77
+ name: coverage-html
78
+ path: htmlcov
79
+ include-hidden-files: true
80
+
81
+ - name: Store diff coverage html
82
+ uses: actions/upload-artifact@v4
83
+ with:
84
+ name: diff-coverage-html
85
+ path: index.html
86
+
87
+ - name: Check coverage
88
+ run: |
89
+ uv run coverage report --fail-under 95
90
+ uv run diff-cover coverage.xml --fail-under 100
91
+
92
+ postgres-persistence:
93
+ if: github.event_name != 'pull_request' || github.event.pull_request.draft == false
94
+ runs-on: ubuntu-latest
95
+
96
+ services:
97
+ postgres:
98
+ image: postgres:16
99
+ env:
100
+ POSTGRES_USER: postgres
101
+ POSTGRES_PASSWORD: postgres
102
+ POSTGRES_DB: postgres
103
+ ports:
104
+ - 5432:5432
105
+ options: >-
106
+ --health-cmd "pg_isready -U postgres"
107
+ --health-interval 10s
108
+ --health-timeout 5s
109
+ --health-retries 5
110
+
111
+ steps:
112
+ - name: Checkout repository
113
+ uses: actions/checkout@v4
114
+
115
+ - name: Setup uv
116
+ uses: astral-sh/setup-uv@v5
117
+ with:
118
+ enable-cache: true
119
+
120
+ - name: Install dependencies
121
+ run: uv sync --all-groups
122
+
123
+ - name: Run Postgres persistence checks
124
+ env:
125
+ ORCHEO_POSTGRES_DSN: postgresql://postgres:postgres@localhost:5432/postgres
126
+ ORCHEO_CHECKPOINT_BACKEND: postgres
127
+ run: |
128
+ uv run pytest tests/integration/test_postgres_persistence.py -q
129
+
130
+ build-and-release:
131
+ needs: [lint, coverage, postgres-persistence]
132
+ if: "startsWith(github.ref, 'refs/tags/')"
133
+ runs-on: ubuntu-latest
134
+
135
+ steps:
136
+ - name: Checkout repository
137
+ uses: actions/checkout@v4
138
+
139
+ - name: Setup uv
140
+ uses: astral-sh/setup-uv@v5
141
+ with:
142
+ enable-cache: true
143
+
144
+ - name: Determine package context
145
+ id: package
146
+ run: |
147
+ tag="${GITHUB_REF_NAME}"
148
+ if [[ "$tag" == core-v* ]]; then
149
+ echo "package=orcheo" >> "$GITHUB_OUTPUT"
150
+ elif [[ "$tag" == backend-v* ]]; then
151
+ echo "package=orcheo-backend" >> "$GITHUB_OUTPUT"
152
+ elif [[ "$tag" == sdk-v* ]]; then
153
+ echo "package=orcheo-sdk" >> "$GITHUB_OUTPUT"
154
+ else
155
+ echo "Unsupported tag prefix: $tag" >&2
156
+ exit 1
157
+ fi
158
+ echo "dist_dir=dist/${GITHUB_REF_NAME}" >> "$GITHUB_OUTPUT"
159
+
160
+ - name: Install dependencies
161
+ run: uv sync --all-groups
162
+
163
+ - name: Build ${{ steps.package.outputs.package }}
164
+ run: |
165
+ uv build --package "${{ steps.package.outputs.package }}" --out-dir "${{ steps.package.outputs.dist_dir }}"
166
+
167
+ - name: Publish ${{ steps.package.outputs.package }} to PyPI
168
+ uses: pypa/gh-action-pypi-publish@release/v1
169
+ with:
170
+ packages-dir: ${{ steps.package.outputs.dist_dir }}
171
+
172
+ canvas:
173
+ if: github.event_name != 'pull_request' || github.event.pull_request.draft == false
174
+ runs-on: ubuntu-latest
175
+ defaults:
176
+ run:
177
+ working-directory: apps/canvas
178
+ steps:
179
+ - uses: actions/checkout@v4
180
+ with:
181
+ fetch-depth: 0
182
+ - uses: actions/setup-node@v4
183
+ with:
184
+ node-version: "20"
185
+ - name: Install dependencies
186
+ run: npm install
187
+ - name: Lint
188
+ run: npm run lint
189
+ - name: Test
190
+ run: npm run test -- --run
@@ -0,0 +1,48 @@
1
+ name: Claude PR Assistant
2
+
3
+ on:
4
+ issue_comment:
5
+ types: [created]
6
+ pull_request_review_comment:
7
+ types: [created]
8
+ issues:
9
+ types: [opened, assigned]
10
+ pull_request_review:
11
+ types: [submitted]
12
+
13
+ jobs:
14
+ claude-code-action:
15
+ if: |
16
+ (github.event_name == 'issue_comment' && contains(github.event.comment.body, '@claude')) ||
17
+ (github.event_name == 'pull_request_review_comment' && contains(github.event.comment.body, '@claude')) ||
18
+ (github.event_name == 'pull_request_review' && contains(github.event.review.body, '@claude')) ||
19
+ (github.event_name == 'issues' && contains(github.event.issue.body, '@claude'))
20
+ runs-on: ubuntu-latest
21
+ permissions:
22
+ contents: read
23
+ pull-requests: read
24
+ issues: read
25
+ id-token: write
26
+ steps:
27
+ - name: Checkout repository
28
+ uses: actions/checkout@v4
29
+ with:
30
+ fetch-depth: 1
31
+
32
+ - name: Run Claude PR Action
33
+ uses: anthropics/claude-code-action@beta
34
+ with:
35
+ # anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
36
+ # Or use OAuth token instead:
37
+ claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}
38
+ timeout_minutes: "60"
39
+ # mode: tag # Default: responds to @claude mentions
40
+ # Optional: Restrict network access to specific domains only
41
+ # experimental_allowed_domains: |
42
+ # .anthropic.com
43
+ # .github.com
44
+ # api.github.com
45
+ # .githubusercontent.com
46
+ # bun.sh
47
+ # registry.npmjs.org
48
+ # .blob.core.windows.net
@@ -0,0 +1,186 @@
1
+ # Byte-compiled / optimized / DLL files
2
+ __pycache__/
3
+ *.py[cod]
4
+ *$py.class
5
+
6
+ # C extensions
7
+ *.so
8
+
9
+ # Distribution / packaging
10
+ .Python
11
+ build/
12
+ develop-eggs/
13
+ downloads/
14
+ eggs/
15
+ .eggs/
16
+ /lib/
17
+ lib64/
18
+ parts/
19
+ sdist/
20
+ var/
21
+ wheels/
22
+ share/python-wheels/
23
+ *.egg-info/
24
+ .installed.cfg
25
+ *.egg
26
+ MANIFEST
27
+
28
+ # PyInstaller
29
+ # Usually these files are written by a python script from a template
30
+ # before PyInstaller builds the exe, so as to inject date/other infos into it.
31
+ *.manifest
32
+ *.spec
33
+
34
+ # Installer logs
35
+ pip-log.txt
36
+ pip-delete-this-directory.txt
37
+
38
+ # Unit test / coverage reports
39
+ htmlcov/
40
+ .tox/
41
+ .nox/
42
+ .coverage
43
+ .coverage.*
44
+ .cache
45
+ nosetests.xml
46
+ coverage.xml
47
+ xunit-result.xml
48
+ *.cover
49
+ *.py,cover
50
+ .hypothesis/
51
+ .pytest_cache/
52
+ cover/
53
+
54
+ # Translations
55
+ *.mo
56
+ *.pot
57
+
58
+ # Django stuff:
59
+ local_settings.py
60
+ db.sqlite3
61
+ db.sqlite3-journal
62
+
63
+ # Flask stuff:
64
+ instance/
65
+ .webassets-cache
66
+
67
+ # Scrapy stuff:
68
+ .scrapy
69
+
70
+ # Sphinx documentation
71
+ docs/_build/
72
+
73
+ # PyBuilder
74
+ .pybuilder/
75
+ target/
76
+
77
+ # Jupyter Notebook
78
+ .ipynb_checkpoints
79
+
80
+ # IPython
81
+ profile_default/
82
+ ipython_config.py
83
+
84
+ # pyenv
85
+ # For a library or package, you might want to ignore these files since the code is
86
+ # intended to run in multiple environments; otherwise, check them in:
87
+ # .python-version
88
+
89
+ # pipenv
90
+ # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
91
+ # However, in case of collaboration, if having platform-specific dependencies or dependencies
92
+ # having no cross-platform support, pipenv may install dependencies that don't work, or not
93
+ # install all needed dependencies.
94
+ #Pipfile.lock
95
+
96
+ # poetry
97
+ # Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
98
+ # This is especially recommended for binary packages to ensure reproducibility, and is more
99
+ # commonly ignored for libraries.
100
+ # https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
101
+ #poetry.lock
102
+
103
+ # pdm
104
+ # Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
105
+ #pdm.lock
106
+ # pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
107
+ # in version control.
108
+ # https://pdm.fming.dev/#use-with-ide
109
+ .pdm.toml
110
+
111
+ # PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
112
+ __pypackages__/
113
+
114
+ # Celery stuff
115
+ celerybeat-schedule
116
+ celerybeat.pid
117
+
118
+ # SageMath parsed files
119
+ *.sage.py
120
+
121
+ # Environments
122
+ .env
123
+ .venv
124
+ env/
125
+ venv/
126
+ ENV/
127
+ env.bak/
128
+ venv.bak/
129
+
130
+ # Spyder project settings
131
+ .spyderproject
132
+ .spyproject
133
+
134
+ # Rope project settings
135
+ .ropeproject
136
+
137
+ # mkdocs documentation
138
+ /site
139
+
140
+ # mypy
141
+ .mypy_cache/
142
+ .dmypy.json
143
+ dmypy.json
144
+
145
+ # Pyre type checker
146
+ .pyre/
147
+
148
+ # pytype static type analyzer
149
+ .pytype/
150
+
151
+ # Cython debug symbols
152
+ cython_debug/
153
+
154
+ # Dependencies
155
+ node_modules/
156
+
157
+ # Logs
158
+ logs
159
+ *.log
160
+ npm-debug.log*
161
+ yarn-debug.log*
162
+ yarn-error.log*
163
+ pnpm-debug.log*
164
+ lerna-debug.log*
165
+
166
+ # Build
167
+ dist/
168
+ dist-ssr/
169
+ *.local
170
+
171
+ # Editor directories and files
172
+ .vscode/*
173
+ !.vscode/extensions.json
174
+ .idea/
175
+ *.suo
176
+ *.ntvs*
177
+ *.njsproj
178
+ *.sln
179
+ *.sw?
180
+
181
+ # OS generated files
182
+ .DS_Store
183
+ **/.DS_Store
184
+
185
+ # LangGraph
186
+ checkpoints.sqlite
@@ -0,0 +1,26 @@
1
+ repos:
2
+ - repo: https://github.com/pre-commit/pre-commit-hooks
3
+ rev: v4.5.0
4
+ hooks:
5
+ - id: trailing-whitespace
6
+ - id: end-of-file-fixer
7
+ - id: check-yaml
8
+ - id: check-json
9
+ - id: check-case-conflict
10
+ - id: check-docstring-first
11
+ - id: check-builtin-literals
12
+ - id: check-ast
13
+ - id: check-merge-conflict
14
+
15
+ - repo: https://github.com/charliermarsh/ruff-pre-commit
16
+ rev: 'v0.4.6'
17
+ hooks:
18
+ - id: ruff
19
+ args: [--fix]
20
+ - id: ruff-format
21
+
22
+ - repo: https://github.com/macisamuele/language-formatters-pre-commit-hooks
23
+ rev: v2.13.0
24
+ hooks:
25
+ - id: pretty-format-toml
26
+ args: [--autofix]
@@ -0,0 +1 @@
1
+ 3.12.6