datoon 1.7.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.
- datoon-1.7.0/.agents/plugins/marketplace.json +20 -0
- datoon-1.7.0/.claude-plugin/marketplace.json +17 -0
- datoon-1.7.0/.claude-plugin/plugin.json +19 -0
- datoon-1.7.0/.editorconfig +12 -0
- datoon-1.7.0/.gitattributes +1 -0
- datoon-1.7.0/.github/ISSUE_TEMPLATE/bug_report.md +27 -0
- datoon-1.7.0/.github/ISSUE_TEMPLATE/feature_request.md +18 -0
- datoon-1.7.0/.github/dependabot.yml +13 -0
- datoon-1.7.0/.github/workflows/package-installer-smoke.yml +51 -0
- datoon-1.7.0/.github/workflows/pages.yml +50 -0
- datoon-1.7.0/.github/workflows/pre-commit.yml +26 -0
- datoon-1.7.0/.github/workflows/publish-mcp.yml +70 -0
- datoon-1.7.0/.github/workflows/publish.yml +45 -0
- datoon-1.7.0/.github/workflows/release.yml +43 -0
- datoon-1.7.0/.github/workflows/tests.yml +43 -0
- datoon-1.7.0/.github/workflows/validate-artifacts.yml +32 -0
- datoon-1.7.0/.github/workflows/workflow-lint.yml +45 -0
- datoon-1.7.0/.gitignore +46 -0
- datoon-1.7.0/.pre-commit-config.yaml +22 -0
- datoon-1.7.0/.releaserc.yaml +19 -0
- datoon-1.7.0/CHANGELOG.md +97 -0
- datoon-1.7.0/CLAUDE.md +175 -0
- datoon-1.7.0/CONTRIBUTING.md +129 -0
- datoon-1.7.0/INSTALL.md +293 -0
- datoon-1.7.0/LICENSE +21 -0
- datoon-1.7.0/MARKETPLACES.md +89 -0
- datoon-1.7.0/PKG-INFO +544 -0
- datoon-1.7.0/README.md +484 -0
- datoon-1.7.0/SECURITY.md +21 -0
- datoon-1.7.0/SKILL.md +59 -0
- datoon-1.7.0/assets/datoon-banner.svg +186 -0
- datoon-1.7.0/benchmarks/agent_skill_eval/REPORT.md +79 -0
- datoon-1.7.0/benchmarks/agent_skill_eval/agent_results.json +452 -0
- datoon-1.7.0/benchmarks/agent_skill_eval/expected_answers.json +137 -0
- datoon-1.7.0/benchmarks/agent_skill_eval/generate_payloads.py +130 -0
- datoon-1.7.0/benchmarks/agent_skill_eval/payloads/1_large.json +4057 -0
- datoon-1.7.0/benchmarks/agent_skill_eval/payloads/1_medium.json +682 -0
- datoon-1.7.0/benchmarks/agent_skill_eval/payloads/1_small.json +52 -0
- datoon-1.7.0/benchmarks/agent_skill_eval/payloads/2_large.json +4057 -0
- datoon-1.7.0/benchmarks/agent_skill_eval/payloads/2_medium.json +682 -0
- datoon-1.7.0/benchmarks/agent_skill_eval/payloads/2_small.json +52 -0
- datoon-1.7.0/benchmarks/agent_skill_eval/payloads/3_large.json +4057 -0
- datoon-1.7.0/benchmarks/agent_skill_eval/payloads/3_medium.json +682 -0
- datoon-1.7.0/benchmarks/agent_skill_eval/payloads/3_small.json +52 -0
- datoon-1.7.0/benchmarks/agent_skill_eval/reports/1_large.report.json +14 -0
- datoon-1.7.0/benchmarks/agent_skill_eval/reports/1_medium.report.json +14 -0
- datoon-1.7.0/benchmarks/agent_skill_eval/reports/1_small.report.json +14 -0
- datoon-1.7.0/benchmarks/agent_skill_eval/reports/2_large.report.json +14 -0
- datoon-1.7.0/benchmarks/agent_skill_eval/reports/2_medium.report.json +14 -0
- datoon-1.7.0/benchmarks/agent_skill_eval/reports/2_small.report.json +14 -0
- datoon-1.7.0/benchmarks/agent_skill_eval/reports/3_large.report.json +14 -0
- datoon-1.7.0/benchmarks/agent_skill_eval/reports/3_medium.report.json +14 -0
- datoon-1.7.0/benchmarks/agent_skill_eval/reports/3_small.report.json +14 -0
- datoon-1.7.0/benchmarks/agent_skill_eval/scored_agent_results.json +488 -0
- datoon-1.7.0/benchmarks/agent_skill_eval/toon/1_large.toon +454 -0
- datoon-1.7.0/benchmarks/agent_skill_eval/toon/1_medium.toon +79 -0
- datoon-1.7.0/benchmarks/agent_skill_eval/toon/1_small.toon +9 -0
- datoon-1.7.0/benchmarks/agent_skill_eval/toon/2_large.toon +454 -0
- datoon-1.7.0/benchmarks/agent_skill_eval/toon/2_medium.toon +79 -0
- datoon-1.7.0/benchmarks/agent_skill_eval/toon/2_small.toon +9 -0
- datoon-1.7.0/benchmarks/agent_skill_eval/toon/3_large.toon +454 -0
- datoon-1.7.0/benchmarks/agent_skill_eval/toon/3_medium.toon +79 -0
- datoon-1.7.0/benchmarks/agent_skill_eval/toon/3_small.toon +9 -0
- datoon-1.7.0/benchmarks/payloads.json +218 -0
- datoon-1.7.0/benchmarks/results/.gitkeep +0 -0
- datoon-1.7.0/benchmarks/run.py +472 -0
- datoon-1.7.0/datoon/SKILL.md +59 -0
- datoon-1.7.0/datoon.skill +0 -0
- datoon-1.7.0/docs/.nojekyll +0 -0
- datoon-1.7.0/docs/app.js +50 -0
- datoon-1.7.0/docs/assets/datoon-banner.svg +161 -0
- datoon-1.7.0/docs/index.html +202 -0
- datoon-1.7.0/docs/styles.css +484 -0
- datoon-1.7.0/glama.json +6 -0
- datoon-1.7.0/install.sh +6 -0
- datoon-1.7.0/plugins/datoon/.codex-plugin/plugin.json +35 -0
- datoon-1.7.0/plugins/datoon/skills/datoon/SKILL.md +59 -0
- datoon-1.7.0/pyproject.toml +65 -0
- datoon-1.7.0/scripts/ab_skill_benchmark.py +672 -0
- datoon-1.7.0/scripts/install.py +439 -0
- datoon-1.7.0/scripts/summarize_agent_skill_eval.py +374 -0
- datoon-1.7.0/scripts/validate_plugin_metadata.py +225 -0
- datoon-1.7.0/scripts/validate_skill_sync.py +93 -0
- datoon-1.7.0/server.json +37 -0
- datoon-1.7.0/setup.cfg +4 -0
- datoon-1.7.0/setup.sh +118 -0
- datoon-1.7.0/skills/datoon/README.md +54 -0
- datoon-1.7.0/skills/datoon/SKILL.md +59 -0
- datoon-1.7.0/smithery.yaml +18 -0
- datoon-1.7.0/src/datoon/__init__.py +31 -0
- datoon-1.7.0/src/datoon/_version.py +24 -0
- datoon-1.7.0/src/datoon/analyzer.py +89 -0
- datoon-1.7.0/src/datoon/cli.py +197 -0
- datoon-1.7.0/src/datoon/converter.py +165 -0
- datoon-1.7.0/src/datoon/mcp_server.py +140 -0
- datoon-1.7.0/src/datoon/models.py +65 -0
- datoon-1.7.0/src/datoon/py.typed +0 -0
- datoon-1.7.0/src/datoon/readers/__init__.py +98 -0
- datoon-1.7.0/src/datoon/readers/columnar.py +42 -0
- datoon-1.7.0/src/datoon/readers/csv.py +35 -0
- datoon-1.7.0/src/datoon/readers/excel.py +31 -0
- datoon-1.7.0/src/datoon/readers/jsonl.py +27 -0
- datoon-1.7.0/src/datoon/readers/numbers.py +30 -0
- datoon-1.7.0/src/datoon/readers/xml.py +58 -0
- datoon-1.7.0/src/datoon/readers/yaml.py +30 -0
- datoon-1.7.0/src/datoon.egg-info/PKG-INFO +544 -0
- datoon-1.7.0/src/datoon.egg-info/SOURCES.txt +122 -0
- datoon-1.7.0/src/datoon.egg-info/dependency_links.txt +1 -0
- datoon-1.7.0/src/datoon.egg-info/entry_points.txt +3 -0
- datoon-1.7.0/src/datoon.egg-info/requires.txt +27 -0
- datoon-1.7.0/src/datoon.egg-info/scm_file_list.json +117 -0
- datoon-1.7.0/src/datoon.egg-info/scm_version.json +8 -0
- datoon-1.7.0/src/datoon.egg-info/top_level.txt +1 -0
- datoon-1.7.0/tests/fixtures/users.expected.toon +4 -0
- datoon-1.7.0/tests/fixtures/users.json +19 -0
- datoon-1.7.0/tests/integration/test_toon_cli_integration.py +68 -0
- datoon-1.7.0/tests/unit/test_analyzer.py +75 -0
- datoon-1.7.0/tests/unit/test_cli.py +282 -0
- datoon-1.7.0/tests/unit/test_converter_policy.py +184 -0
- datoon-1.7.0/tests/unit/test_installer.py +258 -0
- datoon-1.7.0/tests/unit/test_mcp_server.py +204 -0
- datoon-1.7.0/tests/unit/test_models.py +42 -0
- datoon-1.7.0/tests/unit/test_readers.py +269 -0
- datoon-1.7.0/uv.lock +1395 -0
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "datoon-repo",
|
|
3
|
+
"interface": {
|
|
4
|
+
"displayName": "Datoon Repo"
|
|
5
|
+
},
|
|
6
|
+
"plugins": [
|
|
7
|
+
{
|
|
8
|
+
"name": "datoon",
|
|
9
|
+
"source": {
|
|
10
|
+
"source": "local",
|
|
11
|
+
"path": "./plugins/datoon"
|
|
12
|
+
},
|
|
13
|
+
"policy": {
|
|
14
|
+
"installation": "AVAILABLE",
|
|
15
|
+
"authentication": "ON_INSTALL"
|
|
16
|
+
},
|
|
17
|
+
"category": "Productivity"
|
|
18
|
+
}
|
|
19
|
+
]
|
|
20
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://anthropic.com/claude-code/marketplace.schema.json",
|
|
3
|
+
"name": "datoon",
|
|
4
|
+
"description": "Smart JSON-to-TOON conversion with pragmatic auto-gating for LLM prompts.",
|
|
5
|
+
"owner": {
|
|
6
|
+
"name": "Andrii Suruhov",
|
|
7
|
+
"url": "https://github.com/andrii-su"
|
|
8
|
+
},
|
|
9
|
+
"plugins": [
|
|
10
|
+
{
|
|
11
|
+
"name": "datoon",
|
|
12
|
+
"description": "Auto-convert structured JSON to TOON only when token savings are meaningful.",
|
|
13
|
+
"source": "./",
|
|
14
|
+
"category": "productivity"
|
|
15
|
+
}
|
|
16
|
+
]
|
|
17
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "datoon",
|
|
3
|
+
"version": "1.4.1",
|
|
4
|
+
"description": "Smart JSON-to-TOON conversion with pragmatic auto-gating for LLM prompts.",
|
|
5
|
+
"author": {
|
|
6
|
+
"name": "Andrii Suruhov",
|
|
7
|
+
"url": "https://github.com/andrii-su"
|
|
8
|
+
},
|
|
9
|
+
"homepage": "https://github.com/andrii-su/datoon",
|
|
10
|
+
"repository": "https://github.com/andrii-su/datoon",
|
|
11
|
+
"license": "MIT",
|
|
12
|
+
"keywords": [
|
|
13
|
+
"llm",
|
|
14
|
+
"prompt-engineering",
|
|
15
|
+
"json",
|
|
16
|
+
"toon",
|
|
17
|
+
"data"
|
|
18
|
+
]
|
|
19
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
*.skill binary
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
______________________________________________________________________
|
|
2
|
+
|
|
3
|
+
## name: Bug report about: Datoon behavior is incorrect or broken labels: bug
|
|
4
|
+
|
|
5
|
+
**What happened**
|
|
6
|
+
|
|
7
|
+
<!-- What datoon did wrong -->
|
|
8
|
+
|
|
9
|
+
**Expected**
|
|
10
|
+
|
|
11
|
+
<!-- What datoon should do -->
|
|
12
|
+
|
|
13
|
+
**Before/after example**
|
|
14
|
+
|
|
15
|
+
```
|
|
16
|
+
Input: [your data/prompt]
|
|
17
|
+
Got: [current behavior]
|
|
18
|
+
Want: [expected behavior]
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
**Platform**
|
|
22
|
+
|
|
23
|
+
- [ ] Claude Code
|
|
24
|
+
- [ ] Codex
|
|
25
|
+
- [ ] Other: \_\_\_
|
|
26
|
+
|
|
27
|
+
**Version / install method**
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
______________________________________________________________________
|
|
2
|
+
|
|
3
|
+
## name: Feature request about: Suggest an improvement for datoon labels: enhancement
|
|
4
|
+
|
|
5
|
+
**What you want**
|
|
6
|
+
|
|
7
|
+
<!-- New behavior, new rule, or integration -->
|
|
8
|
+
|
|
9
|
+
**Before/after example**
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
Before: [current behavior]
|
|
13
|
+
After: [desired behavior]
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
**Why this is useful**
|
|
17
|
+
|
|
18
|
+
<!-- Why this helps users -->
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
version: 2
|
|
2
|
+
updates:
|
|
3
|
+
- package-ecosystem: "uv"
|
|
4
|
+
directory: "/"
|
|
5
|
+
schedule:
|
|
6
|
+
interval: "weekly"
|
|
7
|
+
open-pull-requests-limit: 10
|
|
8
|
+
|
|
9
|
+
- package-ecosystem: "github-actions"
|
|
10
|
+
directory: "/"
|
|
11
|
+
schedule:
|
|
12
|
+
interval: "weekly"
|
|
13
|
+
open-pull-requests-limit: 10
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
name: Package and Installer Smoke
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
pull_request:
|
|
5
|
+
push:
|
|
6
|
+
branches:
|
|
7
|
+
- main
|
|
8
|
+
|
|
9
|
+
concurrency:
|
|
10
|
+
group: package-installer-smoke-${{ github.event.pull_request.number || github.ref }}
|
|
11
|
+
cancel-in-progress: true
|
|
12
|
+
|
|
13
|
+
jobs:
|
|
14
|
+
package-installer-smoke:
|
|
15
|
+
runs-on: ubuntu-latest
|
|
16
|
+
steps:
|
|
17
|
+
- name: Checkout
|
|
18
|
+
uses: actions/checkout@v6
|
|
19
|
+
|
|
20
|
+
- name: Setup Python
|
|
21
|
+
uses: actions/setup-python@v6
|
|
22
|
+
with:
|
|
23
|
+
python-version: "3.12"
|
|
24
|
+
|
|
25
|
+
- name: Setup uv
|
|
26
|
+
uses: astral-sh/setup-uv@v7
|
|
27
|
+
|
|
28
|
+
- name: Build package
|
|
29
|
+
run: uv build
|
|
30
|
+
|
|
31
|
+
- name: Install wheel and smoke CLI
|
|
32
|
+
run: |
|
|
33
|
+
python -m venv .smoke-venv
|
|
34
|
+
. .smoke-venv/bin/activate
|
|
35
|
+
python -m pip install --upgrade pip
|
|
36
|
+
python -m pip install dist/*.whl
|
|
37
|
+
datoon --help
|
|
38
|
+
|
|
39
|
+
- name: Smoke installer list and dry-run
|
|
40
|
+
run: |
|
|
41
|
+
python scripts/install.py \
|
|
42
|
+
--list \
|
|
43
|
+
--mcp-config "$RUNNER_TEMP/datoon-mcp.json" \
|
|
44
|
+
--codex-marketplace "$RUNNER_TEMP/codex-marketplace.json"
|
|
45
|
+
python scripts/install.py \
|
|
46
|
+
--dry-run \
|
|
47
|
+
--mcp-config "$RUNNER_TEMP/datoon-mcp.json" \
|
|
48
|
+
--codex-marketplace "$RUNNER_TEMP/codex-marketplace.json"
|
|
49
|
+
|
|
50
|
+
- name: Run installer unit tests
|
|
51
|
+
run: uv run --with ".[dev]" pytest tests/unit/test_installer.py
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
name: Docs
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
workflow_dispatch:
|
|
5
|
+
push:
|
|
6
|
+
branches:
|
|
7
|
+
- main
|
|
8
|
+
paths:
|
|
9
|
+
- docs/**
|
|
10
|
+
- .github/workflows/pages.yml
|
|
11
|
+
|
|
12
|
+
permissions:
|
|
13
|
+
contents: read
|
|
14
|
+
pages: write
|
|
15
|
+
id-token: write
|
|
16
|
+
|
|
17
|
+
concurrency:
|
|
18
|
+
group: pages
|
|
19
|
+
cancel-in-progress: true
|
|
20
|
+
|
|
21
|
+
jobs:
|
|
22
|
+
deploy:
|
|
23
|
+
environment:
|
|
24
|
+
name: github-pages
|
|
25
|
+
url: ${{ steps.deployment.outputs.page_url || '' }}
|
|
26
|
+
runs-on: ubuntu-latest
|
|
27
|
+
steps:
|
|
28
|
+
- name: Checkout
|
|
29
|
+
uses: actions/checkout@v6
|
|
30
|
+
|
|
31
|
+
- name: Setup Pages
|
|
32
|
+
id: setup_pages
|
|
33
|
+
uses: actions/configure-pages@v6
|
|
34
|
+
continue-on-error: true
|
|
35
|
+
|
|
36
|
+
- name: Skip when Pages is not enabled
|
|
37
|
+
if: steps.setup_pages.outcome != 'success'
|
|
38
|
+
run: |
|
|
39
|
+
echo "::notice title=Pages disabled::GitHub Pages is not enabled for this repository yet. Skipping docs deployment."
|
|
40
|
+
|
|
41
|
+
- name: Upload docs artifact
|
|
42
|
+
if: steps.setup_pages.outcome == 'success'
|
|
43
|
+
uses: actions/upload-pages-artifact@v5
|
|
44
|
+
with:
|
|
45
|
+
path: docs
|
|
46
|
+
|
|
47
|
+
- name: Deploy to GitHub Pages
|
|
48
|
+
if: steps.setup_pages.outcome == 'success'
|
|
49
|
+
id: deployment
|
|
50
|
+
uses: actions/deploy-pages@v5
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
name: Pre-commit
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
pull_request:
|
|
5
|
+
push:
|
|
6
|
+
branches:
|
|
7
|
+
- main
|
|
8
|
+
|
|
9
|
+
concurrency:
|
|
10
|
+
group: pre-commit-${{ github.event.pull_request.number || github.ref }}
|
|
11
|
+
cancel-in-progress: true
|
|
12
|
+
|
|
13
|
+
jobs:
|
|
14
|
+
lint:
|
|
15
|
+
runs-on: ubuntu-latest
|
|
16
|
+
steps:
|
|
17
|
+
- name: Checkout
|
|
18
|
+
uses: actions/checkout@v6
|
|
19
|
+
|
|
20
|
+
- name: Setup uv
|
|
21
|
+
uses: astral-sh/setup-uv@v7
|
|
22
|
+
with:
|
|
23
|
+
python-version: "3.12"
|
|
24
|
+
|
|
25
|
+
- name: Run pre-commit
|
|
26
|
+
run: uvx pre-commit run --all-files
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
name: Publish to MCP Registry
|
|
2
|
+
|
|
3
|
+
# Publishes server.json to the official MCP Registry after a GitHub Release.
|
|
4
|
+
# Ownership is proven via GitHub OIDC (namespace io.github.andrii-su/*) and the
|
|
5
|
+
# `mcp-name: io.github.andrii-su/datoon` token in the PyPI package README.
|
|
6
|
+
#
|
|
7
|
+
# Runs after publish.yml has pushed the tagged version to PyPI, so the registry
|
|
8
|
+
# can validate the package + ownership token for the released version.
|
|
9
|
+
|
|
10
|
+
on:
|
|
11
|
+
release:
|
|
12
|
+
types: [published]
|
|
13
|
+
workflow_dispatch:
|
|
14
|
+
|
|
15
|
+
permissions:
|
|
16
|
+
contents: read
|
|
17
|
+
id-token: write
|
|
18
|
+
|
|
19
|
+
jobs:
|
|
20
|
+
publish:
|
|
21
|
+
runs-on: ubuntu-latest
|
|
22
|
+
steps:
|
|
23
|
+
- uses: actions/checkout@v6
|
|
24
|
+
|
|
25
|
+
- name: Resolve release version
|
|
26
|
+
id: version
|
|
27
|
+
run: echo "version=${GITHUB_REF_NAME#v}" >> "$GITHUB_OUTPUT"
|
|
28
|
+
|
|
29
|
+
- name: Sync server.json version to release tag
|
|
30
|
+
if: github.event_name == 'release'
|
|
31
|
+
run: |
|
|
32
|
+
version="${{ steps.version.outputs.version }}"
|
|
33
|
+
tmp="$(mktemp)"
|
|
34
|
+
jq --arg v "$version" \
|
|
35
|
+
'.version = $v | .packages[0].version = $v' \
|
|
36
|
+
server.json > "$tmp"
|
|
37
|
+
mv "$tmp" server.json
|
|
38
|
+
cat server.json
|
|
39
|
+
|
|
40
|
+
- name: Install mcp-publisher
|
|
41
|
+
run: |
|
|
42
|
+
curl -sSL "https://github.com/modelcontextprotocol/registry/releases/latest/download/mcp-publisher_linux_amd64.tar.gz" \
|
|
43
|
+
| tar -xz mcp-publisher
|
|
44
|
+
sudo mv mcp-publisher /usr/local/bin/
|
|
45
|
+
|
|
46
|
+
- name: Validate server.json
|
|
47
|
+
run: mcp-publisher validate
|
|
48
|
+
|
|
49
|
+
- name: Wait for the released version to appear on PyPI
|
|
50
|
+
if: github.event_name == 'release'
|
|
51
|
+
run: |
|
|
52
|
+
version="${{ steps.version.outputs.version }}"
|
|
53
|
+
url="https://pypi.org/pypi/datoon/${version}/json"
|
|
54
|
+
for attempt in $(seq 1 30); do
|
|
55
|
+
code="$(curl -s -o /dev/null -w '%{http_code}' "$url")"
|
|
56
|
+
if [ "$code" = "200" ]; then
|
|
57
|
+
echo "datoon ${version} is live on PyPI."
|
|
58
|
+
exit 0
|
|
59
|
+
fi
|
|
60
|
+
echo "Attempt ${attempt}: PyPI returned ${code} for ${version}; retrying in 20s..."
|
|
61
|
+
sleep 20
|
|
62
|
+
done
|
|
63
|
+
echo "::error::datoon ${version} did not appear on PyPI in time." >&2
|
|
64
|
+
exit 1
|
|
65
|
+
|
|
66
|
+
- name: Login via GitHub OIDC
|
|
67
|
+
run: mcp-publisher login github-oidc
|
|
68
|
+
|
|
69
|
+
- name: Publish to MCP Registry
|
|
70
|
+
run: mcp-publisher publish
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
name: Publish to PyPI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
release:
|
|
5
|
+
types: [published]
|
|
6
|
+
|
|
7
|
+
permissions:
|
|
8
|
+
contents: read
|
|
9
|
+
id-token: write
|
|
10
|
+
|
|
11
|
+
jobs:
|
|
12
|
+
build:
|
|
13
|
+
runs-on: ubuntu-latest
|
|
14
|
+
steps:
|
|
15
|
+
- uses: actions/checkout@v6
|
|
16
|
+
with:
|
|
17
|
+
fetch-depth: 0
|
|
18
|
+
|
|
19
|
+
- name: Install uv
|
|
20
|
+
uses: astral-sh/setup-uv@v7
|
|
21
|
+
|
|
22
|
+
- name: Build distributions
|
|
23
|
+
run: uv build
|
|
24
|
+
|
|
25
|
+
- name: Upload distributions
|
|
26
|
+
uses: actions/upload-artifact@v7
|
|
27
|
+
with:
|
|
28
|
+
name: dist
|
|
29
|
+
path: dist/
|
|
30
|
+
|
|
31
|
+
publish:
|
|
32
|
+
needs: build
|
|
33
|
+
runs-on: ubuntu-latest
|
|
34
|
+
environment:
|
|
35
|
+
name: pypi
|
|
36
|
+
url: https://pypi.org/project/datoon/
|
|
37
|
+
steps:
|
|
38
|
+
- name: Download distributions
|
|
39
|
+
uses: actions/download-artifact@v8
|
|
40
|
+
with:
|
|
41
|
+
name: dist
|
|
42
|
+
path: dist/
|
|
43
|
+
|
|
44
|
+
- name: Publish to PyPI
|
|
45
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
name: Release
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches:
|
|
6
|
+
- main
|
|
7
|
+
|
|
8
|
+
permissions:
|
|
9
|
+
contents: write
|
|
10
|
+
issues: write
|
|
11
|
+
pull-requests: write
|
|
12
|
+
|
|
13
|
+
jobs:
|
|
14
|
+
release:
|
|
15
|
+
runs-on: ubuntu-latest
|
|
16
|
+
steps:
|
|
17
|
+
- name: Checkout
|
|
18
|
+
uses: actions/checkout@v6
|
|
19
|
+
with:
|
|
20
|
+
fetch-depth: 0
|
|
21
|
+
|
|
22
|
+
- name: Setup Node.js
|
|
23
|
+
uses: actions/setup-node@v6
|
|
24
|
+
with:
|
|
25
|
+
node-version: "22"
|
|
26
|
+
|
|
27
|
+
- name: Setup Python
|
|
28
|
+
uses: actions/setup-python@v6
|
|
29
|
+
with:
|
|
30
|
+
python-version: "3.12"
|
|
31
|
+
|
|
32
|
+
- name: Run semantic-release
|
|
33
|
+
env:
|
|
34
|
+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
35
|
+
run: |
|
|
36
|
+
npx --yes \
|
|
37
|
+
-p semantic-release \
|
|
38
|
+
-p @semantic-release/changelog \
|
|
39
|
+
-p @semantic-release/commit-analyzer \
|
|
40
|
+
-p @semantic-release/release-notes-generator \
|
|
41
|
+
-p @semantic-release/github \
|
|
42
|
+
-p @semantic-release/git \
|
|
43
|
+
semantic-release
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
name: Tests
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
pull_request:
|
|
5
|
+
push:
|
|
6
|
+
branches:
|
|
7
|
+
- main
|
|
8
|
+
|
|
9
|
+
concurrency:
|
|
10
|
+
group: tests-${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
|
|
11
|
+
cancel-in-progress: true
|
|
12
|
+
|
|
13
|
+
jobs:
|
|
14
|
+
unit-tests:
|
|
15
|
+
runs-on: ubuntu-latest
|
|
16
|
+
steps:
|
|
17
|
+
- name: Checkout
|
|
18
|
+
uses: actions/checkout@v6
|
|
19
|
+
|
|
20
|
+
- name: Setup uv
|
|
21
|
+
uses: astral-sh/setup-uv@v7
|
|
22
|
+
|
|
23
|
+
- name: Run unit tests
|
|
24
|
+
run: uv run --with ".[dev]" pytest -m "not integration"
|
|
25
|
+
|
|
26
|
+
integration-tests:
|
|
27
|
+
runs-on: ubuntu-latest
|
|
28
|
+
steps:
|
|
29
|
+
- name: Checkout
|
|
30
|
+
uses: actions/checkout@v6
|
|
31
|
+
|
|
32
|
+
- name: Setup uv
|
|
33
|
+
uses: astral-sh/setup-uv@v7
|
|
34
|
+
with:
|
|
35
|
+
python-version: "3.12"
|
|
36
|
+
|
|
37
|
+
- name: Setup Node
|
|
38
|
+
uses: actions/setup-node@v6
|
|
39
|
+
with:
|
|
40
|
+
node-version: "22"
|
|
41
|
+
|
|
42
|
+
- name: Run integration tests
|
|
43
|
+
run: uv run --with ".[dev]" pytest -m integration
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
name: Validate Artifacts
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
pull_request:
|
|
5
|
+
push:
|
|
6
|
+
branches:
|
|
7
|
+
- main
|
|
8
|
+
|
|
9
|
+
concurrency:
|
|
10
|
+
group: validate-artifacts-${{ github.event.pull_request.number || github.ref }}
|
|
11
|
+
cancel-in-progress: true
|
|
12
|
+
|
|
13
|
+
permissions:
|
|
14
|
+
contents: read
|
|
15
|
+
|
|
16
|
+
jobs:
|
|
17
|
+
validate:
|
|
18
|
+
runs-on: ubuntu-latest
|
|
19
|
+
steps:
|
|
20
|
+
- name: Checkout
|
|
21
|
+
uses: actions/checkout@v6
|
|
22
|
+
|
|
23
|
+
- name: Setup Python
|
|
24
|
+
uses: actions/setup-python@v6
|
|
25
|
+
with:
|
|
26
|
+
python-version: "3.12"
|
|
27
|
+
|
|
28
|
+
- name: Validate skill sync
|
|
29
|
+
run: python scripts/validate_skill_sync.py
|
|
30
|
+
|
|
31
|
+
- name: Validate plugin metadata
|
|
32
|
+
run: python scripts/validate_plugin_metadata.py
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
name: Workflow lint
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
pull_request:
|
|
5
|
+
paths:
|
|
6
|
+
- .github/workflows/**
|
|
7
|
+
push:
|
|
8
|
+
branches:
|
|
9
|
+
- main
|
|
10
|
+
paths:
|
|
11
|
+
- .github/workflows/**
|
|
12
|
+
|
|
13
|
+
permissions:
|
|
14
|
+
contents: read
|
|
15
|
+
|
|
16
|
+
concurrency:
|
|
17
|
+
group: workflow-lint-${{ github.event.pull_request.number || github.ref }}
|
|
18
|
+
cancel-in-progress: true
|
|
19
|
+
|
|
20
|
+
jobs:
|
|
21
|
+
actionlint:
|
|
22
|
+
runs-on: ubuntu-latest
|
|
23
|
+
steps:
|
|
24
|
+
- name: Checkout
|
|
25
|
+
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
|
26
|
+
with:
|
|
27
|
+
persist-credentials: false
|
|
28
|
+
|
|
29
|
+
- name: Run actionlint
|
|
30
|
+
run: |
|
|
31
|
+
go install github.com/rhysd/actionlint/cmd/actionlint@v1.7.7
|
|
32
|
+
"$(go env GOPATH)/bin/actionlint"
|
|
33
|
+
|
|
34
|
+
zizmor:
|
|
35
|
+
runs-on: ubuntu-latest
|
|
36
|
+
steps:
|
|
37
|
+
- name: Checkout
|
|
38
|
+
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
|
39
|
+
with:
|
|
40
|
+
persist-credentials: false
|
|
41
|
+
|
|
42
|
+
- name: Audit workflows
|
|
43
|
+
run: |
|
|
44
|
+
python3 -m pip install --user zizmor==1.25.2
|
|
45
|
+
"$HOME/.local/bin/zizmor" --format=github --no-exit-codes .github/workflows
|
datoon-1.7.0/.gitignore
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# Python
|
|
2
|
+
__pycache__/
|
|
3
|
+
*.py[cod]
|
|
4
|
+
*.pyo
|
|
5
|
+
*.pyd
|
|
6
|
+
.python-version
|
|
7
|
+
.venv/
|
|
8
|
+
venv/
|
|
9
|
+
env/
|
|
10
|
+
|
|
11
|
+
# Packaging
|
|
12
|
+
build/
|
|
13
|
+
dist/
|
|
14
|
+
*.egg-info/
|
|
15
|
+
.eggs/
|
|
16
|
+
|
|
17
|
+
# Tooling
|
|
18
|
+
.mypy_cache/
|
|
19
|
+
.pytest_cache/
|
|
20
|
+
.ruff_cache/
|
|
21
|
+
.coverage
|
|
22
|
+
coverage.xml
|
|
23
|
+
|
|
24
|
+
# IDE/OS
|
|
25
|
+
.DS_Store
|
|
26
|
+
.idea/
|
|
27
|
+
.vscode/
|
|
28
|
+
|
|
29
|
+
# Node (optional local caching/tooling)
|
|
30
|
+
node_modules/
|
|
31
|
+
|
|
32
|
+
# Logs
|
|
33
|
+
*.log
|
|
34
|
+
|
|
35
|
+
# Benchmark artifacts
|
|
36
|
+
benchmarks/results/*.json
|
|
37
|
+
benchmarks/results/**/*.json
|
|
38
|
+
!benchmarks/results/.gitkeep
|
|
39
|
+
|
|
40
|
+
# Local Codex/Claude artifacts
|
|
41
|
+
.agents/skills/
|
|
42
|
+
.claude/
|
|
43
|
+
skills-lock.json
|
|
44
|
+
|
|
45
|
+
# Generated by setuptools-scm during local builds/tests
|
|
46
|
+
src/datoon/_version.py
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
repos:
|
|
2
|
+
- repo: https://github.com/pre-commit/pre-commit-hooks
|
|
3
|
+
rev: v5.0.0
|
|
4
|
+
hooks:
|
|
5
|
+
- id: check-json
|
|
6
|
+
- id: check-yaml
|
|
7
|
+
- id: end-of-file-fixer
|
|
8
|
+
- id: trailing-whitespace
|
|
9
|
+
- id: check-merge-conflict
|
|
10
|
+
|
|
11
|
+
- repo: https://github.com/astral-sh/ruff-pre-commit
|
|
12
|
+
rev: v0.13.2
|
|
13
|
+
hooks:
|
|
14
|
+
- id: ruff
|
|
15
|
+
args: [--fix]
|
|
16
|
+
- id: ruff-format
|
|
17
|
+
|
|
18
|
+
- repo: https://github.com/executablebooks/mdformat
|
|
19
|
+
rev: 0.7.22
|
|
20
|
+
hooks:
|
|
21
|
+
- id: mdformat
|
|
22
|
+
exclude: (^|/)(CHANGELOG\.md|SKILL\.md)$
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
branches:
|
|
2
|
+
- main
|
|
3
|
+
tagFormat: v${version}
|
|
4
|
+
plugins:
|
|
5
|
+
- "@semantic-release/commit-analyzer"
|
|
6
|
+
- "@semantic-release/release-notes-generator"
|
|
7
|
+
- - "@semantic-release/changelog"
|
|
8
|
+
- changelogFile: CHANGELOG.md
|
|
9
|
+
- - "@semantic-release/github"
|
|
10
|
+
- assets:
|
|
11
|
+
- path: datoon.skill
|
|
12
|
+
label: datoon.skill
|
|
13
|
+
- - "@semantic-release/git"
|
|
14
|
+
- assets:
|
|
15
|
+
- CHANGELOG.md
|
|
16
|
+
message: |-
|
|
17
|
+
chore(release): ${nextRelease.version} [skip ci]
|
|
18
|
+
|
|
19
|
+
${nextRelease.notes}
|