livespec 0.24.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.
- livespec-0.24.0/.claude-plugin/marketplace.json +15 -0
- livespec-0.24.0/.commit-guard.json +3 -0
- livespec-0.24.0/.github/workflows/ci.yml +85 -0
- livespec-0.24.0/.github/workflows/livespec-pr-comment.yml +52 -0
- livespec-0.24.0/.github/workflows/publish.yml +65 -0
- livespec-0.24.0/.gitignore +49 -0
- livespec-0.24.0/CHANGELOG.md +1866 -0
- livespec-0.24.0/CLAUDE.md +357 -0
- livespec-0.24.0/HANDOFF.md +1448 -0
- livespec-0.24.0/PKG-INFO +703 -0
- livespec-0.24.0/README.md +676 -0
- livespec-0.24.0/ROADMAP.md +454 -0
- livespec-0.24.0/bench/README.md +88 -0
- livespec-0.24.0/bench/agent_log_analyze.py +245 -0
- livespec-0.24.0/bench/results-baseline.json +30 -0
- livespec-0.24.0/bench/results-large.json +31 -0
- livespec-0.24.0/bench/run.py +198 -0
- livespec-0.24.0/docs/AGENT_PLAYBOOK.md +321 -0
- livespec-0.24.0/docs/AGENT_QUICKSTART.md +159 -0
- livespec-0.24.0/docs/AGENT_USAGE_DATA.md +845 -0
- livespec-0.24.0/docs/requirements/livespec-spec-links.json +737 -0
- livespec-0.24.0/docs/requirements/livespec-spec-links.md +46 -0
- livespec-0.24.0/docs/requirements/livespec-specs.md +145 -0
- livespec-0.24.0/fastmcp.json +8 -0
- livespec-0.24.0/plugin/.claude-plugin/plugin.json +17 -0
- livespec-0.24.0/plugin/.mcp.json +9 -0
- livespec-0.24.0/plugin/README.md +45 -0
- livespec-0.24.0/plugin/agents/livespec.md +55 -0
- livespec-0.24.0/plugin/commands/livespec-onboard.md +14 -0
- livespec-0.24.0/plugin/skills/livespec/SKILL.md +116 -0
- livespec-0.24.0/pyproject.toml +76 -0
- livespec-0.24.0/scripts/apply_spec_links.py +143 -0
- livespec-0.24.0/scripts/dogfood_v019.py +270 -0
- livespec-0.24.0/scripts/pr_diff_impact.py +134 -0
- livespec-0.24.0/scripts/sync_livespec_specs.py +42 -0
- livespec-0.24.0/scripts/validate_mcp.py +122 -0
- livespec-0.24.0/src/livespec_mcp/__init__.py +22 -0
- livespec-0.24.0/src/livespec_mcp/cli.py +185 -0
- livespec-0.24.0/src/livespec_mcp/config.py +377 -0
- livespec-0.24.0/src/livespec_mcp/domain/__init__.py +0 -0
- livespec-0.24.0/src/livespec_mcp/domain/extractors.py +1945 -0
- livespec-0.24.0/src/livespec_mcp/domain/graph.py +242 -0
- livespec-0.24.0/src/livespec_mcp/domain/indexer.py +708 -0
- livespec-0.24.0/src/livespec_mcp/domain/languages.py +72 -0
- livespec-0.24.0/src/livespec_mcp/domain/matcher.py +222 -0
- livespec-0.24.0/src/livespec_mcp/domain/md_specs.py +455 -0
- livespec-0.24.0/src/livespec_mcp/domain/openspec_changes.py +311 -0
- livespec-0.24.0/src/livespec_mcp/domain/openspec_discover.py +80 -0
- livespec-0.24.0/src/livespec_mcp/domain/openspec_export.py +212 -0
- livespec-0.24.0/src/livespec_mcp/domain/openspec_validate.py +199 -0
- livespec-0.24.0/src/livespec_mcp/domain/rag.py +660 -0
- livespec-0.24.0/src/livespec_mcp/domain/specs_sync.py +428 -0
- livespec-0.24.0/src/livespec_mcp/domain/watcher.py +188 -0
- livespec-0.24.0/src/livespec_mcp/error_middleware.py +73 -0
- livespec-0.24.0/src/livespec_mcp/explorer/__init__.py +23 -0
- livespec-0.24.0/src/livespec_mcp/explorer/asgi.py +162 -0
- livespec-0.24.0/src/livespec_mcp/explorer/autowire.py +105 -0
- livespec-0.24.0/src/livespec_mcp/explorer/fastapi.py +105 -0
- livespec-0.24.0/src/livespec_mcp/explorer/install.py +147 -0
- livespec-0.24.0/src/livespec_mcp/instrumentation.py +174 -0
- livespec-0.24.0/src/livespec_mcp/plugin_visibility.py +153 -0
- livespec-0.24.0/src/livespec_mcp/prompts.py +162 -0
- livespec-0.24.0/src/livespec_mcp/resources.py +226 -0
- livespec-0.24.0/src/livespec_mcp/server.py +59 -0
- livespec-0.24.0/src/livespec_mcp/state.py +252 -0
- livespec-0.24.0/src/livespec_mcp/storage/__init__.py +0 -0
- livespec-0.24.0/src/livespec_mcp/storage/db.py +597 -0
- livespec-0.24.0/src/livespec_mcp/storage/schema.sql +349 -0
- livespec-0.24.0/src/livespec_mcp/storage/trends.py +110 -0
- livespec-0.24.0/src/livespec_mcp/templates/fastapi/SESSION_PROMPT.md +20 -0
- livespec-0.24.0/src/livespec_mcp/templates/fastapi/cursor/rules/livespec-fastapi.mdc +44 -0
- livespec-0.24.0/src/livespec_mcp/templates/fastapi/cursor/skills/livespec-fastapi/SKILL.md +63 -0
- livespec-0.24.0/src/livespec_mcp/tools/__init__.py +0 -0
- livespec-0.24.0/src/livespec_mcp/tools/_errors.py +31 -0
- livespec-0.24.0/src/livespec_mcp/tools/analysis.py +3718 -0
- livespec-0.24.0/src/livespec_mcp/tools/docs.py +384 -0
- livespec-0.24.0/src/livespec_mcp/tools/explorer.py +2678 -0
- livespec-0.24.0/src/livespec_mcp/tools/indexing.py +227 -0
- livespec-0.24.0/src/livespec_mcp/tools/plugins/__init__.py +189 -0
- livespec-0.24.0/src/livespec_mcp/tools/plugins/docs.py +24 -0
- livespec-0.24.0/src/livespec_mcp/tools/plugins/spec.py +33 -0
- livespec-0.24.0/src/livespec_mcp/tools/search.py +88 -0
- livespec-0.24.0/src/livespec_mcp/tools/specs.py +1488 -0
- livespec-0.24.0/src/livespec_mcp/workspace_param.py +57 -0
- livespec-0.24.0/tests/__init__.py +0 -0
- livespec-0.24.0/tests/conftest.py +65 -0
- livespec-0.24.0/tests/data/matcher_golden.jsonl +37 -0
- livespec-0.24.0/tests/fixtures/go/cross_package/cmd/main.go +11 -0
- livespec-0.24.0/tests/fixtures/go/cross_package/util/format.go +11 -0
- livespec-0.24.0/tests/fixtures/go/sample.go +21 -0
- livespec-0.24.0/tests/fixtures/java/Sample.java +23 -0
- livespec-0.24.0/tests/fixtures/javascript/cross_module/helpers.js +9 -0
- livespec-0.24.0/tests/fixtures/javascript/cross_module/main.js +9 -0
- livespec-0.24.0/tests/fixtures/javascript/cross_module/utils.js +7 -0
- livespec-0.24.0/tests/fixtures/javascript/sample.js +25 -0
- livespec-0.24.0/tests/fixtures/php/cross_module/Service/Greeter.php +13 -0
- livespec-0.24.0/tests/fixtures/php/cross_module/main.php +7 -0
- livespec-0.24.0/tests/fixtures/php/sample.php +21 -0
- livespec-0.24.0/tests/fixtures/python/same_name_fanout/embed_cache.py +12 -0
- livespec-0.24.0/tests/fixtures/python/same_name_fanout/internal_proxy.py +2 -0
- livespec-0.24.0/tests/fixtures/python/same_name_fanout/proxy_pool.py +7 -0
- livespec-0.24.0/tests/fixtures/python/sample.py +21 -0
- livespec-0.24.0/tests/fixtures/ruby/cross_module/helpers.rb +9 -0
- livespec-0.24.0/tests/fixtures/ruby/cross_module/main.rb +5 -0
- livespec-0.24.0/tests/fixtures/ruby/sample.rb +19 -0
- livespec-0.24.0/tests/fixtures/rust/cross_module/src/main.rs +7 -0
- livespec-0.24.0/tests/fixtures/rust/cross_module/src/util.rs +17 -0
- livespec-0.24.0/tests/fixtures/rust/sample.rs +23 -0
- livespec-0.24.0/tests/fixtures/typescript/cross_module/helpers.ts +7 -0
- livespec-0.24.0/tests/fixtures/typescript/cross_module/main.ts +7 -0
- livespec-0.24.0/tests/fixtures/typescript/cross_module/utils.ts +5 -0
- livespec-0.24.0/tests/fixtures/typescript/sample.ts +26 -0
- livespec-0.24.0/tests/test_agent_features.py +108 -0
- livespec-0.24.0/tests/test_agent_log_analyze.py +125 -0
- livespec-0.24.0/tests/test_aggregator_tools.py +618 -0
- livespec-0.24.0/tests/test_audit10_annotation_verbs.py +122 -0
- livespec-0.24.0/tests/test_audit9_honest_zero.py +165 -0
- livespec-0.24.0/tests/test_audit_improvements.py +86 -0
- livespec-0.24.0/tests/test_audit_p3_regressions.py +142 -0
- livespec-0.24.0/tests/test_audit_p4_regressions.py +160 -0
- livespec-0.24.0/tests/test_audit_p5_regressions.py +93 -0
- livespec-0.24.0/tests/test_audit_p6_regressions.py +100 -0
- livespec-0.24.0/tests/test_body_hash_stability.py +95 -0
- livespec-0.24.0/tests/test_bulk_link.py +153 -0
- livespec-0.24.0/tests/test_bundler_filter.py +79 -0
- livespec-0.24.0/tests/test_callback_edges.py +122 -0
- livespec-0.24.0/tests/test_cli.py +53 -0
- livespec-0.24.0/tests/test_closure_capture_ts_rust.py +104 -0
- livespec-0.24.0/tests/test_dead_code_django.py +121 -0
- livespec-0.24.0/tests/test_decorator_aliases.py +95 -0
- livespec-0.24.0/tests/test_decorator_extraction.py +129 -0
- livespec-0.24.0/tests/test_did_you_mean.py +105 -0
- livespec-0.24.0/tests/test_django_cbv.py +95 -0
- livespec-0.24.0/tests/test_ecosystem_ignore.py +124 -0
- livespec-0.24.0/tests/test_error_shape.py +116 -0
- livespec-0.24.0/tests/test_explorer.py +489 -0
- livespec-0.24.0/tests/test_explorer_asgi.py +115 -0
- livespec-0.24.0/tests/test_explorer_freshness.py +111 -0
- livespec-0.24.0/tests/test_exports_protect.py +107 -0
- livespec-0.24.0/tests/test_extractors.py +235 -0
- livespec-0.24.0/tests/test_fastapi_install.py +41 -0
- livespec-0.24.0/tests/test_find_symbol_normalization.py +82 -0
- livespec-0.24.0/tests/test_git_diff.py +179 -0
- livespec-0.24.0/tests/test_gitignore.py +85 -0
- livespec-0.24.0/tests/test_graph_cache.py +83 -0
- livespec-0.24.0/tests/test_grouped_db.py +117 -0
- livespec-0.24.0/tests/test_hono.py +115 -0
- livespec-0.24.0/tests/test_indexing.py +234 -0
- livespec-0.24.0/tests/test_instrumentation.py +143 -0
- livespec-0.24.0/tests/test_large_repo.py +141 -0
- livespec-0.24.0/tests/test_matcher.py +96 -0
- livespec-0.24.0/tests/test_matcher_golden.py +54 -0
- livespec-0.24.0/tests/test_md_import.py +232 -0
- livespec-0.24.0/tests/test_migrations.py +201 -0
- livespec-0.24.0/tests/test_module_level_call_attribution.py +248 -0
- livespec-0.24.0/tests/test_multi_workspace.py +90 -0
- livespec-0.24.0/tests/test_no_orphan_db_creation.py +102 -0
- livespec-0.24.0/tests/test_openspec_interop.py +508 -0
- livespec-0.24.0/tests/test_openspec_validate_aggregation.py +105 -0
- livespec-0.24.0/tests/test_pagination.py +125 -0
- livespec-0.24.0/tests/test_phase456.py +132 -0
- livespec-0.24.0/tests/test_plugin_autoload.py +191 -0
- livespec-0.24.0/tests/test_plugin_visibility.py +120 -0
- livespec-0.24.0/tests/test_prompts.py +53 -0
- livespec-0.24.0/tests/test_properties.py +126 -0
- livespec-0.24.0/tests/test_propose_requirements.py +292 -0
- livespec-0.24.0/tests/test_python_http_routes.py +116 -0
- livespec-0.24.0/tests/test_quick_wins.py +187 -0
- livespec-0.24.0/tests/test_register_all_plugins.py +19 -0
- livespec-0.24.0/tests/test_regressions.py +89 -0
- livespec-0.24.0/tests/test_repo_config.py +104 -0
- livespec-0.24.0/tests/test_rf_coverage.py +208 -0
- livespec-0.24.0/tests/test_rf_deps.py +164 -0
- livespec-0.24.0/tests/test_rf_hints.py +104 -0
- livespec-0.24.0/tests/test_rf_trend.py +289 -0
- livespec-0.24.0/tests/test_robustness_v014.py +78 -0
- livespec-0.24.0/tests/test_route_edges.py +282 -0
- livespec-0.24.0/tests/test_runtime_registration.py +236 -0
- livespec-0.24.0/tests/test_scoped_resolution.py +273 -0
- livespec-0.24.0/tests/test_search.py +155 -0
- livespec-0.24.0/tests/test_specs_pagination_scratch_verbs.py +186 -0
- livespec-0.24.0/tests/test_spring_angular.py +136 -0
- livespec-0.24.0/tests/test_targeted_resolver.py +156 -0
- livespec-0.24.0/tests/test_traversal_pagination.py +176 -0
- livespec-0.24.0/tests/test_ts_framework_entry_points.py +363 -0
- livespec-0.24.0/tests/test_tsx_jsx_refs.py +235 -0
- livespec-0.24.0/tests/test_vec_load_id_reuse.py +81 -0
- livespec-0.24.0/tests/test_visibility.py +102 -0
- livespec-0.24.0/tests/test_weight_filter.py +150 -0
- livespec-0.24.0/uv.lock +3098 -0
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "livespec",
|
|
3
|
+
"description": "Local marketplace for the livespec Claude Code plugin (code intelligence + Spec traceability).",
|
|
4
|
+
"owner": {
|
|
5
|
+
"name": "Juan Pablo Diaz",
|
|
6
|
+
"email": "juanpablo516@gmail.com"
|
|
7
|
+
},
|
|
8
|
+
"plugins": [
|
|
9
|
+
{
|
|
10
|
+
"name": "livespec",
|
|
11
|
+
"source": "./plugin",
|
|
12
|
+
"description": "Code intelligence + Spec traceability: livespec MCP server, specialized subagent, and preloaded Skill."
|
|
13
|
+
}
|
|
14
|
+
]
|
|
15
|
+
}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main]
|
|
6
|
+
pull_request:
|
|
7
|
+
|
|
8
|
+
jobs:
|
|
9
|
+
lint-build:
|
|
10
|
+
name: ruff + package build
|
|
11
|
+
runs-on: ubuntu-latest
|
|
12
|
+
steps:
|
|
13
|
+
- uses: actions/checkout@v4
|
|
14
|
+
- uses: astral-sh/setup-uv@v6
|
|
15
|
+
with:
|
|
16
|
+
enable-cache: true
|
|
17
|
+
- name: Set up Python 3.12
|
|
18
|
+
run: uv python install 3.12
|
|
19
|
+
- name: Create venv
|
|
20
|
+
run: uv venv --python 3.12
|
|
21
|
+
- name: Install
|
|
22
|
+
run: uv pip install -e ".[dev]"
|
|
23
|
+
- name: ruff check
|
|
24
|
+
run: uv run ruff check src tests
|
|
25
|
+
- name: Build wheel + sdist (regression gate for packaging config)
|
|
26
|
+
run: uv build
|
|
27
|
+
- name: Verify wheel contents
|
|
28
|
+
run: |
|
|
29
|
+
python3 - <<'EOF'
|
|
30
|
+
import glob, sys, zipfile
|
|
31
|
+
wheel = glob.glob("dist/*.whl")[0]
|
|
32
|
+
names = zipfile.ZipFile(wheel).namelist()
|
|
33
|
+
required = [
|
|
34
|
+
"livespec_mcp/storage/schema.sql",
|
|
35
|
+
"livespec_mcp/templates/AGENT_PLAYBOOK.md",
|
|
36
|
+
]
|
|
37
|
+
missing = [r for r in required if r not in names]
|
|
38
|
+
if missing:
|
|
39
|
+
sys.exit(f"wheel missing required data files: {missing}")
|
|
40
|
+
print("wheel OK:", wheel)
|
|
41
|
+
EOF
|
|
42
|
+
|
|
43
|
+
test:
|
|
44
|
+
name: pytest (py${{ matrix.python-version }})
|
|
45
|
+
runs-on: ubuntu-latest
|
|
46
|
+
strategy:
|
|
47
|
+
fail-fast: false
|
|
48
|
+
matrix:
|
|
49
|
+
python-version: ["3.10", "3.11", "3.12"]
|
|
50
|
+
steps:
|
|
51
|
+
- uses: actions/checkout@v4
|
|
52
|
+
- uses: astral-sh/setup-uv@v6
|
|
53
|
+
with:
|
|
54
|
+
enable-cache: true
|
|
55
|
+
- name: Set up Python ${{ matrix.python-version }}
|
|
56
|
+
run: uv python install ${{ matrix.python-version }}
|
|
57
|
+
- name: Create venv
|
|
58
|
+
run: uv venv --python ${{ matrix.python-version }}
|
|
59
|
+
- name: Install
|
|
60
|
+
run: uv pip install -e ".[dev]"
|
|
61
|
+
- name: Run tests (no embeddings)
|
|
62
|
+
run: uv run pytest -q -m "not embeddings"
|
|
63
|
+
|
|
64
|
+
embeddings:
|
|
65
|
+
name: pytest -m embeddings
|
|
66
|
+
runs-on: ubuntu-latest
|
|
67
|
+
needs: test
|
|
68
|
+
steps:
|
|
69
|
+
- uses: actions/checkout@v4
|
|
70
|
+
- uses: astral-sh/setup-uv@v6
|
|
71
|
+
with:
|
|
72
|
+
enable-cache: true
|
|
73
|
+
- name: Set up Python 3.12
|
|
74
|
+
run: uv python install 3.12
|
|
75
|
+
- name: Create venv
|
|
76
|
+
run: uv venv --python 3.12
|
|
77
|
+
- name: Install with extras
|
|
78
|
+
run: uv pip install -e ".[dev,embeddings]"
|
|
79
|
+
- name: Cache HuggingFace models
|
|
80
|
+
uses: actions/cache@v4
|
|
81
|
+
with:
|
|
82
|
+
path: ~/.cache/huggingface
|
|
83
|
+
key: hf-embeddings-${{ runner.os }}
|
|
84
|
+
- name: Run embeddings tests
|
|
85
|
+
run: uv run pytest -q -m embeddings
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
name: Livespec PR impact
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
pull_request:
|
|
5
|
+
types: [opened, synchronize, reopened]
|
|
6
|
+
|
|
7
|
+
jobs:
|
|
8
|
+
spec-impact-comment:
|
|
9
|
+
name: Post Spec diff impact
|
|
10
|
+
runs-on: ubuntu-latest
|
|
11
|
+
permissions:
|
|
12
|
+
contents: read
|
|
13
|
+
pull-requests: write
|
|
14
|
+
steps:
|
|
15
|
+
- uses: actions/checkout@v4
|
|
16
|
+
with:
|
|
17
|
+
fetch-depth: 0
|
|
18
|
+
|
|
19
|
+
- uses: astral-sh/setup-uv@v6
|
|
20
|
+
with:
|
|
21
|
+
enable-cache: true
|
|
22
|
+
|
|
23
|
+
- name: Set up Python 3.12
|
|
24
|
+
run: uv python install 3.12
|
|
25
|
+
|
|
26
|
+
- name: Create venv
|
|
27
|
+
run: uv venv --python 3.12
|
|
28
|
+
|
|
29
|
+
- name: Install
|
|
30
|
+
run: uv pip install -e ".[dev]"
|
|
31
|
+
|
|
32
|
+
- name: Index workspace and render markdown
|
|
33
|
+
env:
|
|
34
|
+
LIVESPEC_WORKSPACE: ${{ github.workspace }}
|
|
35
|
+
GITHUB_BASE_SHA: ${{ github.event.pull_request.base.sha }}
|
|
36
|
+
GITHUB_HEAD_SHA: ${{ github.event.pull_request.head.sha }}
|
|
37
|
+
run: uv run python scripts/pr_diff_impact.py > /tmp/livespec-pr-comment.md
|
|
38
|
+
|
|
39
|
+
- name: Show comment preview
|
|
40
|
+
run: cat /tmp/livespec-pr-comment.md
|
|
41
|
+
|
|
42
|
+
- name: Post PR comment
|
|
43
|
+
env:
|
|
44
|
+
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
45
|
+
run: |
|
|
46
|
+
if [ -z "${GH_TOKEN:-}" ]; then
|
|
47
|
+
echo "No GITHUB_TOKEN — skipping PR comment (markdown still in /tmp/livespec-pr-comment.md)"
|
|
48
|
+
exit 0
|
|
49
|
+
fi
|
|
50
|
+
gh pr comment "${{ github.event.pull_request.number }}" \
|
|
51
|
+
--body-file /tmp/livespec-pr-comment.md \
|
|
52
|
+
--repo "${{ github.repository }}"
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
name: Publish to PyPI
|
|
2
|
+
|
|
3
|
+
# Publishes the `livespec` distribution to PyPI on every version tag push.
|
|
4
|
+
# Uses PyPI Trusted Publishing (OIDC) — no API token or secret is stored here.
|
|
5
|
+
#
|
|
6
|
+
# Setup, one time. Because the project does not exist on PyPI yet, this is the
|
|
7
|
+
# PENDING publisher flow, registered at the ACCOUNT level, not inside a project:
|
|
8
|
+
# pypi.org → Account settings → Publishing → add a pending publisher
|
|
9
|
+
# PyPI Project Name: livespec
|
|
10
|
+
# Owner: Rixmerz
|
|
11
|
+
# Repository name: livespec
|
|
12
|
+
# Workflow name: publish.yml
|
|
13
|
+
# Environment: (leave blank)
|
|
14
|
+
# The first successful run creates the project and converts it to a normal
|
|
15
|
+
# publisher. Once the project exists, the same settings live under
|
|
16
|
+
# pypi.org → project → Manage → Publishing instead.
|
|
17
|
+
#
|
|
18
|
+
# The distribution, the console command and the GitHub repo are all `livespec`.
|
|
19
|
+
# They used to disagree — package `livespec-mcp`, repo `livespec` — and since
|
|
20
|
+
# Trusted Publishing matches on the REPO, a publisher registered under the old
|
|
21
|
+
# name failed every release with:
|
|
22
|
+
# invalid-publisher: valid token, but no corresponding publisher
|
|
23
|
+
# `repository`: `Rixmerz/livespec`
|
|
24
|
+
# which reads like a permissions problem and is really a name mismatch. It
|
|
25
|
+
# silently broke v0.23.0 and v0.24.0. PyPI cannot rename a publisher, and it
|
|
26
|
+
# permanently blocks re-registering a deleted project name — which is why the
|
|
27
|
+
# distribution moved to `livespec` rather than reclaiming `livespec-mcp`.
|
|
28
|
+
# If this ever returns: the `repository` claim printed in the failure log is
|
|
29
|
+
# the authoritative value to compare against what is registered.
|
|
30
|
+
|
|
31
|
+
on:
|
|
32
|
+
push:
|
|
33
|
+
tags:
|
|
34
|
+
- "v*"
|
|
35
|
+
|
|
36
|
+
permissions:
|
|
37
|
+
contents: read
|
|
38
|
+
|
|
39
|
+
jobs:
|
|
40
|
+
publish:
|
|
41
|
+
name: Build and publish
|
|
42
|
+
runs-on: ubuntu-latest
|
|
43
|
+
permissions:
|
|
44
|
+
id-token: write # required for Trusted Publishing (OIDC)
|
|
45
|
+
steps:
|
|
46
|
+
- uses: actions/checkout@v4
|
|
47
|
+
|
|
48
|
+
- name: Install uv
|
|
49
|
+
uses: astral-sh/setup-uv@v6
|
|
50
|
+
|
|
51
|
+
- name: Build sdist + wheel
|
|
52
|
+
run: uv build
|
|
53
|
+
|
|
54
|
+
- name: Verify version tag matches package version
|
|
55
|
+
run: |
|
|
56
|
+
PKG_VERSION="$(uv run python -c 'import tomllib; print(tomllib.load(open("pyproject.toml","rb"))["project"]["version"])')"
|
|
57
|
+
TAG_VERSION="${GITHUB_REF_NAME#v}"
|
|
58
|
+
echo "package=$PKG_VERSION tag=$TAG_VERSION"
|
|
59
|
+
if [ "$PKG_VERSION" != "$TAG_VERSION" ]; then
|
|
60
|
+
echo "::error::Tag $GITHUB_REF_NAME does not match pyproject version $PKG_VERSION"
|
|
61
|
+
exit 1
|
|
62
|
+
fi
|
|
63
|
+
|
|
64
|
+
- name: Publish to PyPI (Trusted Publishing)
|
|
65
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
.venv/
|
|
2
|
+
__pycache__/
|
|
3
|
+
*.pyc
|
|
4
|
+
*.pyo
|
|
5
|
+
.pytest_cache/
|
|
6
|
+
.ruff_cache/
|
|
7
|
+
.mypy_cache/
|
|
8
|
+
dist/
|
|
9
|
+
build/
|
|
10
|
+
*.egg-info/
|
|
11
|
+
.mcp-docs/
|
|
12
|
+
.mcp-docs-agent-log-fallback/
|
|
13
|
+
.coverage
|
|
14
|
+
.env
|
|
15
|
+
.DS_Store
|
|
16
|
+
.claude/
|
|
17
|
+
|
|
18
|
+
# RAG layer / ML model caches (never commit weights or local dumps)
|
|
19
|
+
local_cache/
|
|
20
|
+
models/
|
|
21
|
+
.fastembed_cache/
|
|
22
|
+
.huggingface/
|
|
23
|
+
.cache/
|
|
24
|
+
*.onnx
|
|
25
|
+
*.safetensors
|
|
26
|
+
*.gguf
|
|
27
|
+
*.bin
|
|
28
|
+
*.pt
|
|
29
|
+
*.npy
|
|
30
|
+
*.npz
|
|
31
|
+
|
|
32
|
+
# Ad-hoc dumps from search/embeddings debugging
|
|
33
|
+
chunks_dump.*
|
|
34
|
+
embeddings_dump.*
|
|
35
|
+
*.dump.json
|
|
36
|
+
|
|
37
|
+
# Editor / OS personal
|
|
38
|
+
.idea/
|
|
39
|
+
.vscode/
|
|
40
|
+
*.swp
|
|
41
|
+
*.swo
|
|
42
|
+
Thumbs.db
|
|
43
|
+
|
|
44
|
+
# jig local scratch state
|
|
45
|
+
.jig/
|
|
46
|
+
|
|
47
|
+
# Playwright MCP debug output
|
|
48
|
+
.playwright-mcp/
|
|
49
|
+
.vise/
|