simdref 0.0.5__tar.gz → 0.0.6__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 (101) hide show
  1. {simdref-0.0.5/src/simdref.egg-info → simdref-0.0.6}/PKG-INFO +29 -104
  2. {simdref-0.0.5 → simdref-0.0.6}/README.md +15 -92
  3. {simdref-0.0.5 → simdref-0.0.6}/pyproject.toml +20 -17
  4. {simdref-0.0.5 → simdref-0.0.6}/src/simdref/annotate.py +12 -4
  5. {simdref-0.0.5 → simdref-0.0.6}/src/simdref/cli.py +290 -276
  6. simdref-0.0.5/src/simdref/web.py → simdref-0.0.6/src/simdref/export.py +140 -48
  7. {simdref-0.0.5 → simdref-0.0.6}/src/simdref/ingest_sources.py +3 -3
  8. {simdref-0.0.5 → simdref-0.0.6}/src/simdref/queries.py +8 -2
  9. {simdref-0.0.5 → simdref-0.0.6}/src/simdref/storage.py +42 -10
  10. {simdref-0.0.5 → simdref-0.0.6}/src/simdref/ui_labels.py +7 -6
  11. {simdref-0.0.5 → simdref-0.0.6/src/simdref.egg-info}/PKG-INFO +29 -104
  12. {simdref-0.0.5 → simdref-0.0.6}/src/simdref.egg-info/SOURCES.txt +4 -22
  13. simdref-0.0.6/src/simdref.egg-info/requires.txt +10 -0
  14. simdref-0.0.6/tests/test_annotate_positions.py +146 -0
  15. {simdref-0.0.5 → simdref-0.0.6}/tests/test_auto_update_on_version_change.py +6 -6
  16. {simdref-0.0.5 → simdref-0.0.6}/tests/test_coverage_live.py +4 -1
  17. {simdref-0.0.5 → simdref-0.0.6}/tests/test_coverage_parity.py +5 -1
  18. simdref-0.0.6/tests/test_export.py +214 -0
  19. {simdref-0.0.5 → simdref-0.0.6}/tests/test_issue2_fixes.py +1 -1
  20. simdref-0.0.6/tests/test_issues_23_24_25.py +384 -0
  21. {simdref-0.0.5 → simdref-0.0.6}/tests/test_lsp_web.py +14 -43
  22. {simdref-0.0.5 → simdref-0.0.6}/tests/test_presentation.py +14 -25
  23. {simdref-0.0.5 → simdref-0.0.6}/tests/test_preset_persistence.py +0 -28
  24. {simdref-0.0.5 → simdref-0.0.6}/tests/test_storage_schema.py +26 -0
  25. {simdref-0.0.5 → simdref-0.0.6}/tests/test_ui_labels_parity.py +4 -39
  26. {simdref-0.0.5 → simdref-0.0.6}/tests/test_version_matches_pyproject.py +5 -1
  27. simdref-0.0.5/src/simdref/profile/__init__.py +0 -25
  28. simdref-0.0.5/src/simdref/profile/adapters/__init__.py +0 -1
  29. simdref-0.0.5/src/simdref/profile/adapters/exegesis.py +0 -65
  30. simdref-0.0.5/src/simdref/profile/adapters/mca.py +0 -84
  31. simdref-0.0.5/src/simdref/profile/adapters/perf.py +0 -284
  32. simdref-0.0.5/src/simdref/profile/adapters/uprof.py +0 -89
  33. simdref-0.0.5/src/simdref/profile/adapters/vtune.py +0 -83
  34. simdref-0.0.5/src/simdref/profile/adapters/xctrace.py +0 -66
  35. simdref-0.0.5/src/simdref/profile/hotloop.py +0 -356
  36. simdref-0.0.5/src/simdref/profile/merge.py +0 -215
  37. simdref-0.0.5/src/simdref/profile/model.py +0 -129
  38. simdref-0.0.5/src/simdref/profile/orchestrate.py +0 -325
  39. simdref-0.0.5/src/simdref/profile/registry.py +0 -62
  40. simdref-0.0.5/src/simdref/templates/__init__.py +0 -0
  41. simdref-0.0.5/src/simdref/templates/app.js +0 -2358
  42. simdref-0.0.5/src/simdref/templates/favicon.svg +0 -5
  43. simdref-0.0.5/src/simdref/templates/index.html +0 -164
  44. simdref-0.0.5/src/simdref/templates/logo.svg +0 -12
  45. simdref-0.0.5/src/simdref/templates/style.css +0 -917
  46. simdref-0.0.5/src/simdref.egg-info/requires.txt +0 -10
  47. simdref-0.0.5/tests/test_search_index_js.py +0 -34
  48. simdref-0.0.5/tests/test_web_e2e.py +0 -202
  49. {simdref-0.0.5 → simdref-0.0.6}/LICENSE +0 -0
  50. {simdref-0.0.5 → simdref-0.0.6}/setup.cfg +0 -0
  51. {simdref-0.0.5 → simdref-0.0.6}/src/simdref/__init__.py +0 -0
  52. {simdref-0.0.5 → simdref-0.0.6}/src/simdref/__main__.py +0 -0
  53. {simdref-0.0.5 → simdref-0.0.6}/src/simdref/arm_instructions.py +0 -0
  54. {simdref-0.0.5 → simdref-0.0.6}/src/simdref/display.py +0 -0
  55. {simdref-0.0.5 → simdref-0.0.6}/src/simdref/filters.py +0 -0
  56. {simdref-0.0.5 → simdref-0.0.6}/src/simdref/ingest.py +0 -0
  57. {simdref-0.0.5 → simdref-0.0.6}/src/simdref/ingest_catalog.py +0 -0
  58. {simdref-0.0.5 → simdref-0.0.6}/src/simdref/ingest_pdf.py +0 -0
  59. {simdref-0.0.5 → simdref-0.0.6}/src/simdref/lsp.py +0 -0
  60. {simdref-0.0.5 → simdref-0.0.6}/src/simdref/manpages.py +0 -0
  61. {simdref-0.0.5 → simdref-0.0.6}/src/simdref/models.py +0 -0
  62. {simdref-0.0.5 → simdref-0.0.6}/src/simdref/pdfparse/__init__.py +0 -0
  63. {simdref-0.0.5 → simdref-0.0.6}/src/simdref/pdfparse/base.py +0 -0
  64. {simdref-0.0.5 → simdref-0.0.6}/src/simdref/pdfparse/intel.py +0 -0
  65. {simdref-0.0.5 → simdref-0.0.6}/src/simdref/pdfparse/registry.py +0 -0
  66. {simdref-0.0.5 → simdref-0.0.6}/src/simdref/pdfparse/types.py +0 -0
  67. {simdref-0.0.5 → simdref-0.0.6}/src/simdref/pdfrefs.py +0 -0
  68. {simdref-0.0.5 → simdref-0.0.6}/src/simdref/perf.py +0 -0
  69. {simdref-0.0.5 → simdref-0.0.6}/src/simdref/perf_sources/__init__.py +0 -0
  70. {simdref-0.0.5 → simdref-0.0.6}/src/simdref/perf_sources/cores.py +0 -0
  71. {simdref-0.0.5 → simdref-0.0.6}/src/simdref/perf_sources/llvm_mca.py +0 -0
  72. {simdref-0.0.5 → simdref-0.0.6}/src/simdref/perf_sources/llvm_scheduling.py +0 -0
  73. {simdref-0.0.5 → simdref-0.0.6}/src/simdref/perf_sources/merge.py +0 -0
  74. {simdref-0.0.5 → simdref-0.0.6}/src/simdref/riscv.py +0 -0
  75. {simdref-0.0.5 → simdref-0.0.6}/src/simdref/search.py +0 -0
  76. {simdref-0.0.5 → simdref-0.0.6}/src/simdref/tui.py +0 -0
  77. {simdref-0.0.5 → simdref-0.0.6}/src/simdref.egg-info/dependency_links.txt +0 -0
  78. {simdref-0.0.5 → simdref-0.0.6}/src/simdref.egg-info/entry_points.txt +0 -0
  79. {simdref-0.0.5 → simdref-0.0.6}/src/simdref.egg-info/top_level.txt +0 -0
  80. {simdref-0.0.5 → simdref-0.0.6}/tests/test_annotate.py +0 -0
  81. {simdref-0.0.5 → simdref-0.0.6}/tests/test_audit_coverage.py +0 -0
  82. {simdref-0.0.5 → simdref-0.0.6}/tests/test_cli_bare_query.py +0 -0
  83. {simdref-0.0.5 → simdref-0.0.6}/tests/test_cli_bootstrap_progress.py +0 -0
  84. {simdref-0.0.5 → simdref-0.0.6}/tests/test_cli_help.py +0 -0
  85. {simdref-0.0.5 → simdref-0.0.6}/tests/test_cli_llm.py +0 -0
  86. {simdref-0.0.5 → simdref-0.0.6}/tests/test_display.py +0 -0
  87. {simdref-0.0.5 → simdref-0.0.6}/tests/test_filters.py +0 -0
  88. {simdref-0.0.5 → simdref-0.0.6}/tests/test_ingest_sources.py +0 -0
  89. {simdref-0.0.5 → simdref-0.0.6}/tests/test_intel_operation_and_url.py +0 -0
  90. {simdref-0.0.5 → simdref-0.0.6}/tests/test_models.py +0 -0
  91. {simdref-0.0.5 → simdref-0.0.6}/tests/test_pdfparse.py +0 -0
  92. {simdref-0.0.5 → simdref-0.0.6}/tests/test_perf.py +0 -0
  93. {simdref-0.0.5 → simdref-0.0.6}/tests/test_perf_sources.py +0 -0
  94. {simdref-0.0.5 → simdref-0.0.6}/tests/test_riscv_docs_pages.py +0 -0
  95. {simdref-0.0.5 → simdref-0.0.6}/tests/test_search.py +0 -0
  96. {simdref-0.0.5 → simdref-0.0.6}/tests/test_search_pushdown.py +0 -0
  97. {simdref-0.0.5 → simdref-0.0.6}/tests/test_source_kind_filter.py +0 -0
  98. {simdref-0.0.5 → simdref-0.0.6}/tests/test_source_validation.py +0 -0
  99. {simdref-0.0.5 → simdref-0.0.6}/tests/test_storage_payload.py +0 -0
  100. {simdref-0.0.5 → simdref-0.0.6}/tests/test_tui.py +0 -0
  101. {simdref-0.0.5 → simdref-0.0.6}/tests/test_x86_linking.py +0 -0
@@ -1,7 +1,7 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: simdref
3
- Version: 0.0.5
4
- Summary: Searchable SIMD intrinsic and instruction reference with CLI, manpages, TUI, LSP, and static web export.
3
+ Version: 0.0.6
4
+ Summary: Searchable SIMD intrinsic and instruction reference with CLI, manpages, TUI, and LSP.
5
5
  Author: Marco
6
6
  License: GPL-3.0-or-later
7
7
  Classifier: Development Status :: 3 - Alpha
@@ -10,29 +10,31 @@ Classifier: Intended Audience :: Developers
10
10
  Classifier: License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)
11
11
  Classifier: Operating System :: OS Independent
12
12
  Classifier: Programming Language :: Python :: 3
13
+ Classifier: Programming Language :: Python :: 3.10
13
14
  Classifier: Programming Language :: Python :: 3.11
14
15
  Classifier: Programming Language :: Python :: 3.12
15
16
  Classifier: Programming Language :: Python :: 3.13
17
+ Classifier: Programming Language :: Python :: 3.14
16
18
  Classifier: Topic :: Software Development :: Documentation
17
19
  Classifier: Topic :: Software Development :: Libraries :: Python Modules
18
- Requires-Python: >=3.11
20
+ Requires-Python: >=3.10
19
21
  Description-Content-Type: text/markdown
20
22
  License-File: LICENSE
21
- Requires-Dist: click<10,>=8.1
23
+ Requires-Dist: click<9,>=8.5
22
24
  Requires-Dist: httpx<1,>=0.28
23
- Requires-Dist: msgpack<2,>=1.0
24
- Requires-Dist: pdfplumber<1,>=0.11
25
- Requires-Dist: PyMuPDF<2,>=1.24
26
- Requires-Dist: PyYAML<7,>=6
27
- Requires-Dist: rapidfuzz<4,>=3.9
28
- Requires-Dist: rich<15,>=13
29
- Requires-Dist: textual<2,>=1.0
30
- Requires-Dist: typer<1,>=0.19
25
+ Requires-Dist: msgpack<2,>=1.2.1
26
+ Requires-Dist: pdfplumber<1,>=0.11.10
27
+ Requires-Dist: PyMuPDF<2,>=1.28
28
+ Requires-Dist: PyYAML<7,>=6.0.3
29
+ Requires-Dist: rapidfuzz<4,>=3.14
30
+ Requires-Dist: rich<16,>=15
31
+ Requires-Dist: textual<9,>=8.2
32
+ Requires-Dist: typer<1,>=0.27
31
33
  Dynamic: license-file
32
34
 
33
35
  # simdref
34
36
 
35
- [![CI](https://github.com/DiamonDinoia/simdref/actions/workflows/ci.yml/badge.svg)](https://github.com/DiamonDinoia/simdref/actions/workflows/ci.yml)
37
+ [![CI](https://github.com/simd-labs/simdref/actions/workflows/ci.yml/badge.svg)](https://github.com/simd-labs/simdref/actions/workflows/ci.yml)
36
38
  [![TestPyPI](https://img.shields.io/pypi/v/simdref?pypiBaseUrl=https%3A%2F%2Ftest.pypi.org&label=TestPyPI)](https://test.pypi.org/project/simdref/)
37
39
  [![Python](https://img.shields.io/pypi/pyversions/simdref?pypiBaseUrl=https%3A%2F%2Ftest.pypi.org)](https://pypi.org/project/simdref/)
38
40
 
@@ -43,87 +45,24 @@ on-demand manpages (`simdref man` — or run `simdref install-manpages`
43
45
  so plain `man vpaddd` works), a static web app, and a structured JSON
44
46
  interface for LLM skills.
45
47
 
46
- [Web App](https://diamondinoia.github.io/simdref/) ·
48
+ [Web App](https://simdref.diamondinoia.com/) ·
47
49
  [TestPyPI](https://test.pypi.org/project/simdref/) ·
48
- [GitHub](https://github.com/DiamonDinoia/simdref) ·
50
+ [GitHub](https://github.com/simd-labs/simdref) ·
49
51
  [Contributing](CONTRIBUTING.md)
50
52
 
51
53
  <!-- Screenshots are hosted on the `docs-assets` branch so the main
52
54
  branch stays lightweight to clone. -->
53
55
 
54
56
  <p align="center">
55
- <img alt="simdref TUI" src="https://raw.githubusercontent.com/DiamonDinoia/simdref/docs-assets/img/tui.svg" width="720">
57
+ <img alt="simdref TUI" src="https://raw.githubusercontent.com/simd-labs/simdref/docs-assets/img/tui.svg" width="720">
56
58
  <br><em>Interactive TUI with ISA filters, ranked results, and measured/modeled performance tables.</em>
57
59
  </p>
58
60
 
59
- ## Install the Claude Code skill
61
+ ## Install the Claude Code and Codex skill
60
62
 
61
- `skills/asm-analysis/` ships a Claude Code skill that drives the
62
- compile → objdump → `simdref annotate` → `simdref profile` → LLM-batch
63
- pipeline automatically. This repo publishes it as a Claude Code plugin,
64
- so the one-liner install is:
65
-
66
- ```
67
- /plugin marketplace add DiamonDinoia/simdref
68
- /plugin install asm-analysis@simdref
69
- ```
70
-
71
- Run those at the Claude Code prompt. The marketplace add fetches this
72
- repo; the install wires up the skill so Claude picks it up automatically
73
- on performance-oriented prompts like *"why is this loop slow"*,
74
- *"vectorise this"*, *"look at the asm"*.
75
-
76
- ### Manual install (no marketplace)
77
-
78
- If you prefer a hand-managed copy:
79
-
80
- ```bash
81
- # symlink from a checkout — always current with main:
82
- git clone https://github.com/DiamonDinoia/simdref.git ~/src/simdref
83
- mkdir -p ~/.claude/skills
84
- ln -sf ~/src/simdref/skills/asm-analysis ~/.claude/skills/asm-analysis
85
-
86
- # or pull a one-off snapshot:
87
- mkdir -p ~/.claude/skills/asm-analysis && \
88
- curl -fsSL https://raw.githubusercontent.com/DiamonDinoia/simdref/main/skills/asm-analysis/SKILL.md \
89
- -o ~/.claude/skills/asm-analysis/SKILL.md
90
- ```
91
-
92
- See [`skills/asm-analysis/SKILL.md`](skills/asm-analysis/SKILL.md) for
93
- the full trigger list and pipeline stages.
94
-
95
- ## Install the Codex skill
96
-
97
- This repo also ships the same pipeline as an OpenAI Codex plugin, so
98
- the one-liner install from a Codex CLI prompt is:
99
-
100
- ```
101
- codex plugin marketplace add DiamonDinoia/simdref
102
- /plugins
103
- ```
104
-
105
- Pick `asm-analysis` in the browser and enable it. Codex picks up the
106
- skill automatically on performance-oriented prompts (*"why is this
107
- loop slow"*, *"vectorise this"*, *"look at the asm"*).
108
-
109
- ### Manual install (no marketplace)
110
-
111
- ```bash
112
- # user-scoped symlink — applies to every repo, always current with main:
113
- git clone https://github.com/DiamonDinoia/simdref.git ~/src/simdref
114
- mkdir -p ~/.agents/skills
115
- ln -sf ~/src/simdref/codex-skills/asm-analysis/skills/asm-analysis \
116
- ~/.agents/skills/asm-analysis
117
-
118
- # or scope the skill to a single repo:
119
- mkdir -p .agents/skills
120
- ln -sf ~/src/simdref/codex-skills/asm-analysis/skills/asm-analysis \
121
- .agents/skills/asm-analysis
122
- ```
123
-
124
- See
125
- [`codex-skills/asm-analysis/skills/asm-analysis/SKILL.md`](codex-skills/asm-analysis/skills/asm-analysis/SKILL.md)
126
- for the trigger list and pipeline stages.
63
+ The `asm-analysis` skill for Claude Code and OpenAI Codex lives in
64
+ [simd-labs/simdref-skill](https://github.com/simd-labs/simdref-skill).
65
+ Follow the install steps in that repo.
127
66
 
128
67
  ## Install
129
68
 
@@ -134,15 +73,6 @@ isa doctor # confirm everything is wired up
134
73
  isa # open the TUI
135
74
  ```
136
75
 
137
- For the bleeding-edge version with the `simdref profile` subcommand
138
- (runtime-profile → asm-annotation pipeline, Stage 2b of the skill),
139
- install from `main`:
140
-
141
- ```bash
142
- pipx install git+https://github.com/DiamonDinoia/simdref.git@main
143
- # or editable: pip install -e git+https://github.com/DiamonDinoia/simdref.git@main#egg=simdref
144
- ```
145
-
146
76
  The package installs two equivalent executables, **`isa`** (short) and
147
77
  **`simdref`** (explicit). The rest of this README uses `isa`.
148
78
 
@@ -174,15 +104,15 @@ isa # open the interactive TUI
174
104
 
175
105
  **Web app** — a self-contained static SPA with filters and performance
176
106
  tables, published to GitHub Pages at
177
- [diamondinoia.github.io/simdref](https://diamondinoia.github.io/simdref/).
178
- Export your own copy:
107
+ [simdref.diamondinoia.com](https://simdref.diamondinoia.com/) and
108
+ built from the `simdref-web` repo. This repo (`simdref-core`) exports the
109
+ JSON data it consumes:
179
110
 
180
111
  ```bash
181
- isa web --web-dir ./web
182
- isa serve --web-dir ./web # gzip-aware local server
112
+ isa export --out-dir ./site-data
183
113
  ```
184
114
 
185
- The [live demo](https://diamondinoia.github.io/simdref/) hosts the same
115
+ The [live demo](https://simdref.diamondinoia.com/) hosts the same
186
116
  build — search across ~122k entries with ISA filters and per-uarch perf
187
117
  tables.
188
118
 
@@ -258,10 +188,6 @@ and `ld` still consume it.
258
188
  | `isa doctor` | Check the installation — pass/fail per component, non-zero exit on failure |
259
189
  | `isa update` | Download the pre-built release catalog (no `llvm-mca` required); `--from-release` for the GitHub Release artifact |
260
190
  | `isa annotate <file.s>` | Annotate a `.s` assembly file with per-instruction summaries and latency/CPI — writes `<file>.sa` |
261
- | `isa profile run` | Compile→record→disassemble→annotate→merge in one shot (perf or llvm-mca) |
262
- | `isa profile ingest` | Convert profiler output (perf / VTune / uProf / xctrace / llvm-mca / exegesis) to normalized samples |
263
- | `isa profile hotloops` | Detect natural loops in a disassembly and rank them by sample weight |
264
- | `isa profile merge` | Attach hotness data to the annotated instruction stream |
265
191
  | `isa llm query <q>` | Strict lookup → JSON/NDJSON/Markdown (see [docs/LLM.md](docs/LLM.md)) |
266
192
  | `isa llm batch` | Resolve many queries from stdin in one invocation (NDJSON out) |
267
193
  | `isa llm list` | Dump the `FilterSpec` or stream matching catalog entries |
@@ -272,8 +198,7 @@ and `ld` still consume it.
272
198
  | Command | Description |
273
199
  | -------------------------------- | ----------------------------------------------------------------------------------------------- |
274
200
  | `isa build` | Full local rebuild from upstream sources, including Intel SDM parsing (`llvm-mca` 18+ required) |
275
- | `isa web` | Export the static web app under `web/` |
276
- | `isa serve` | Serve the exported web app locally (gzip-aware) |
201
+ | `isa export` | Export site data (JSON only) — the release contract for the `simdref-web` repo |
277
202
  | `isa completion install [SHELL]` | Install shell completion into the user's profile |
278
203
  | `isa completion show [SHELL]` | Print the completion script for a shell |
279
204
 
@@ -308,7 +233,7 @@ mixed.
308
233
  ## Development
309
234
 
310
235
  ```bash
311
- git clone https://github.com/DiamonDinoia/simdref.git
236
+ git clone https://github.com/simd-labs/simdref.git
312
237
  cd simdref
313
238
  python3 -m venv .venv
314
239
  .venv/bin/pip install -e .
@@ -1,6 +1,6 @@
1
1
  # simdref
2
2
 
3
- [![CI](https://github.com/DiamonDinoia/simdref/actions/workflows/ci.yml/badge.svg)](https://github.com/DiamonDinoia/simdref/actions/workflows/ci.yml)
3
+ [![CI](https://github.com/simd-labs/simdref/actions/workflows/ci.yml/badge.svg)](https://github.com/simd-labs/simdref/actions/workflows/ci.yml)
4
4
  [![TestPyPI](https://img.shields.io/pypi/v/simdref?pypiBaseUrl=https%3A%2F%2Ftest.pypi.org&label=TestPyPI)](https://test.pypi.org/project/simdref/)
5
5
  [![Python](https://img.shields.io/pypi/pyversions/simdref?pypiBaseUrl=https%3A%2F%2Ftest.pypi.org)](https://pypi.org/project/simdref/)
6
6
 
@@ -11,87 +11,24 @@ on-demand manpages (`simdref man` — or run `simdref install-manpages`
11
11
  so plain `man vpaddd` works), a static web app, and a structured JSON
12
12
  interface for LLM skills.
13
13
 
14
- [Web App](https://diamondinoia.github.io/simdref/) ·
14
+ [Web App](https://simdref.diamondinoia.com/) ·
15
15
  [TestPyPI](https://test.pypi.org/project/simdref/) ·
16
- [GitHub](https://github.com/DiamonDinoia/simdref) ·
16
+ [GitHub](https://github.com/simd-labs/simdref) ·
17
17
  [Contributing](CONTRIBUTING.md)
18
18
 
19
19
  <!-- Screenshots are hosted on the `docs-assets` branch so the main
20
20
  branch stays lightweight to clone. -->
21
21
 
22
22
  <p align="center">
23
- <img alt="simdref TUI" src="https://raw.githubusercontent.com/DiamonDinoia/simdref/docs-assets/img/tui.svg" width="720">
23
+ <img alt="simdref TUI" src="https://raw.githubusercontent.com/simd-labs/simdref/docs-assets/img/tui.svg" width="720">
24
24
  <br><em>Interactive TUI with ISA filters, ranked results, and measured/modeled performance tables.</em>
25
25
  </p>
26
26
 
27
- ## Install the Claude Code skill
27
+ ## Install the Claude Code and Codex skill
28
28
 
29
- `skills/asm-analysis/` ships a Claude Code skill that drives the
30
- compile → objdump → `simdref annotate` → `simdref profile` → LLM-batch
31
- pipeline automatically. This repo publishes it as a Claude Code plugin,
32
- so the one-liner install is:
33
-
34
- ```
35
- /plugin marketplace add DiamonDinoia/simdref
36
- /plugin install asm-analysis@simdref
37
- ```
38
-
39
- Run those at the Claude Code prompt. The marketplace add fetches this
40
- repo; the install wires up the skill so Claude picks it up automatically
41
- on performance-oriented prompts like *"why is this loop slow"*,
42
- *"vectorise this"*, *"look at the asm"*.
43
-
44
- ### Manual install (no marketplace)
45
-
46
- If you prefer a hand-managed copy:
47
-
48
- ```bash
49
- # symlink from a checkout — always current with main:
50
- git clone https://github.com/DiamonDinoia/simdref.git ~/src/simdref
51
- mkdir -p ~/.claude/skills
52
- ln -sf ~/src/simdref/skills/asm-analysis ~/.claude/skills/asm-analysis
53
-
54
- # or pull a one-off snapshot:
55
- mkdir -p ~/.claude/skills/asm-analysis && \
56
- curl -fsSL https://raw.githubusercontent.com/DiamonDinoia/simdref/main/skills/asm-analysis/SKILL.md \
57
- -o ~/.claude/skills/asm-analysis/SKILL.md
58
- ```
59
-
60
- See [`skills/asm-analysis/SKILL.md`](skills/asm-analysis/SKILL.md) for
61
- the full trigger list and pipeline stages.
62
-
63
- ## Install the Codex skill
64
-
65
- This repo also ships the same pipeline as an OpenAI Codex plugin, so
66
- the one-liner install from a Codex CLI prompt is:
67
-
68
- ```
69
- codex plugin marketplace add DiamonDinoia/simdref
70
- /plugins
71
- ```
72
-
73
- Pick `asm-analysis` in the browser and enable it. Codex picks up the
74
- skill automatically on performance-oriented prompts (*"why is this
75
- loop slow"*, *"vectorise this"*, *"look at the asm"*).
76
-
77
- ### Manual install (no marketplace)
78
-
79
- ```bash
80
- # user-scoped symlink — applies to every repo, always current with main:
81
- git clone https://github.com/DiamonDinoia/simdref.git ~/src/simdref
82
- mkdir -p ~/.agents/skills
83
- ln -sf ~/src/simdref/codex-skills/asm-analysis/skills/asm-analysis \
84
- ~/.agents/skills/asm-analysis
85
-
86
- # or scope the skill to a single repo:
87
- mkdir -p .agents/skills
88
- ln -sf ~/src/simdref/codex-skills/asm-analysis/skills/asm-analysis \
89
- .agents/skills/asm-analysis
90
- ```
91
-
92
- See
93
- [`codex-skills/asm-analysis/skills/asm-analysis/SKILL.md`](codex-skills/asm-analysis/skills/asm-analysis/SKILL.md)
94
- for the trigger list and pipeline stages.
29
+ The `asm-analysis` skill for Claude Code and OpenAI Codex lives in
30
+ [simd-labs/simdref-skill](https://github.com/simd-labs/simdref-skill).
31
+ Follow the install steps in that repo.
95
32
 
96
33
  ## Install
97
34
 
@@ -102,15 +39,6 @@ isa doctor # confirm everything is wired up
102
39
  isa # open the TUI
103
40
  ```
104
41
 
105
- For the bleeding-edge version with the `simdref profile` subcommand
106
- (runtime-profile → asm-annotation pipeline, Stage 2b of the skill),
107
- install from `main`:
108
-
109
- ```bash
110
- pipx install git+https://github.com/DiamonDinoia/simdref.git@main
111
- # or editable: pip install -e git+https://github.com/DiamonDinoia/simdref.git@main#egg=simdref
112
- ```
113
-
114
42
  The package installs two equivalent executables, **`isa`** (short) and
115
43
  **`simdref`** (explicit). The rest of this README uses `isa`.
116
44
 
@@ -142,15 +70,15 @@ isa # open the interactive TUI
142
70
 
143
71
  **Web app** — a self-contained static SPA with filters and performance
144
72
  tables, published to GitHub Pages at
145
- [diamondinoia.github.io/simdref](https://diamondinoia.github.io/simdref/).
146
- Export your own copy:
73
+ [simdref.diamondinoia.com](https://simdref.diamondinoia.com/) and
74
+ built from the `simdref-web` repo. This repo (`simdref-core`) exports the
75
+ JSON data it consumes:
147
76
 
148
77
  ```bash
149
- isa web --web-dir ./web
150
- isa serve --web-dir ./web # gzip-aware local server
78
+ isa export --out-dir ./site-data
151
79
  ```
152
80
 
153
- The [live demo](https://diamondinoia.github.io/simdref/) hosts the same
81
+ The [live demo](https://simdref.diamondinoia.com/) hosts the same
154
82
  build — search across ~122k entries with ISA filters and per-uarch perf
155
83
  tables.
156
84
 
@@ -226,10 +154,6 @@ and `ld` still consume it.
226
154
  | `isa doctor` | Check the installation — pass/fail per component, non-zero exit on failure |
227
155
  | `isa update` | Download the pre-built release catalog (no `llvm-mca` required); `--from-release` for the GitHub Release artifact |
228
156
  | `isa annotate <file.s>` | Annotate a `.s` assembly file with per-instruction summaries and latency/CPI — writes `<file>.sa` |
229
- | `isa profile run` | Compile→record→disassemble→annotate→merge in one shot (perf or llvm-mca) |
230
- | `isa profile ingest` | Convert profiler output (perf / VTune / uProf / xctrace / llvm-mca / exegesis) to normalized samples |
231
- | `isa profile hotloops` | Detect natural loops in a disassembly and rank them by sample weight |
232
- | `isa profile merge` | Attach hotness data to the annotated instruction stream |
233
157
  | `isa llm query <q>` | Strict lookup → JSON/NDJSON/Markdown (see [docs/LLM.md](docs/LLM.md)) |
234
158
  | `isa llm batch` | Resolve many queries from stdin in one invocation (NDJSON out) |
235
159
  | `isa llm list` | Dump the `FilterSpec` or stream matching catalog entries |
@@ -240,8 +164,7 @@ and `ld` still consume it.
240
164
  | Command | Description |
241
165
  | -------------------------------- | ----------------------------------------------------------------------------------------------- |
242
166
  | `isa build` | Full local rebuild from upstream sources, including Intel SDM parsing (`llvm-mca` 18+ required) |
243
- | `isa web` | Export the static web app under `web/` |
244
- | `isa serve` | Serve the exported web app locally (gzip-aware) |
167
+ | `isa export` | Export site data (JSON only) — the release contract for the `simdref-web` repo |
245
168
  | `isa completion install [SHELL]` | Install shell completion into the user's profile |
246
169
  | `isa completion show [SHELL]` | Print the completion script for a shell |
247
170
 
@@ -276,7 +199,7 @@ mixed.
276
199
  ## Development
277
200
 
278
201
  ```bash
279
- git clone https://github.com/DiamonDinoia/simdref.git
202
+ git clone https://github.com/simd-labs/simdref.git
280
203
  cd simdref
281
204
  python3 -m venv .venv
282
205
  .venv/bin/pip install -e .
@@ -4,10 +4,10 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "simdref"
7
- version = "0.0.5"
8
- description = "Searchable SIMD intrinsic and instruction reference with CLI, manpages, TUI, LSP, and static web export."
7
+ version = "0.0.6"
8
+ description = "Searchable SIMD intrinsic and instruction reference with CLI, manpages, TUI, and LSP."
9
9
  readme = "README.md"
10
- requires-python = ">=3.11"
10
+ requires-python = ">=3.10"
11
11
  license = {text = "GPL-3.0-or-later"}
12
12
  authors = [
13
13
  {name = "Marco"}
@@ -19,23 +19,30 @@ classifiers = [
19
19
  "License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)",
20
20
  "Operating System :: OS Independent",
21
21
  "Programming Language :: Python :: 3",
22
+ "Programming Language :: Python :: 3.10",
22
23
  "Programming Language :: Python :: 3.11",
23
24
  "Programming Language :: Python :: 3.12",
24
25
  "Programming Language :: Python :: 3.13",
26
+ "Programming Language :: Python :: 3.14",
25
27
  "Topic :: Software Development :: Documentation",
26
28
  "Topic :: Software Development :: Libraries :: Python Modules",
27
29
  ]
30
+ # `requires-python` tracks the non-EOL CPython range; 3.10 goes EOL 2026-10-31.
31
+ # Lower dependency bound is the version CI resolves and tests; anything older is
32
+ # an untested compatibility claim. Upper bound is the next major (next minor for
33
+ # 0.x, where that is the compatibility unit). msgpack floors above its own
34
+ # advisory: 1.2.0 and earlier carry GHSA-6v7p-g79w-8964.
28
35
  dependencies = [
29
- "click>=8.1,<10",
36
+ "click>=8.5,<9",
30
37
  "httpx>=0.28,<1",
31
- "msgpack>=1.0,<2",
32
- "pdfplumber>=0.11,<1",
33
- "PyMuPDF>=1.24,<2",
34
- "PyYAML>=6,<7",
35
- "rapidfuzz>=3.9,<4",
36
- "rich>=13,<15",
37
- "textual>=1.0,<2",
38
- "typer>=0.19,<1",
38
+ "msgpack>=1.2.1,<2",
39
+ "pdfplumber>=0.11.10,<1",
40
+ "PyMuPDF>=1.28,<2",
41
+ "PyYAML>=6.0.3,<7",
42
+ "rapidfuzz>=3.14,<4",
43
+ "rich>=15,<16",
44
+ "textual>=8.2,<9",
45
+ "typer>=0.27,<1",
39
46
  ]
40
47
 
41
48
  [project.scripts]
@@ -45,14 +52,10 @@ simdref-lsp = "simdref.lsp:main"
45
52
 
46
53
  [tool.setuptools]
47
54
  package-dir = {"" = "src"}
48
- include-package-data = true
49
55
 
50
56
  [tool.setuptools.packages.find]
51
57
  where = ["src"]
52
58
 
53
- [tool.setuptools.package-data]
54
- simdref = ["templates/*"]
55
-
56
59
  [tool.ruff]
57
60
  line-length = 100
58
- target-version = "py311"
61
+ target-version = "py310"
@@ -556,6 +556,17 @@ def arch_perf(record: InstructionRecord, arch: str) -> tuple[float | None, float
556
556
  return lat, cpi, kind
557
557
 
558
558
 
559
+ def arch_perf_tag(arch: str, lat: float | None, cpi: float | None, kind: str) -> str:
560
+ """Provenance label for a perf row pinned to *arch*.
561
+
562
+ ``[missing:<arch>]`` when the catalog holds no latency and no CPI for
563
+ *arch*, so an empty row never reads as "measured to cost nothing".
564
+ """
565
+ if lat is None and cpi is None:
566
+ return f"[missing:{arch}]"
567
+ return f"[{arch}, {kind}]"
568
+
569
+
559
570
  def _ports_for(details: dict[str, Any]) -> str | None:
560
571
  measurement = details.get("measurement") or {}
561
572
  ports = measurement.get("ports") or measurement.get("TP_ports")
@@ -629,10 +640,7 @@ def format_annotation(
629
640
  if performance:
630
641
  if arch is not None:
631
642
  lat, cpi, kind = arch_perf(record, arch)
632
- if lat is None and cpi is None:
633
- tag = f"[missing:{arch}]"
634
- else:
635
- tag = f"[{arch}, {kind}]"
643
+ tag = arch_perf_tag(arch, lat, cpi, kind)
636
644
  else:
637
645
  summary = aggregate_perf(record, mode=agg, include_modeled=include_modeled)
638
646
  lat, cpi = summary.latency, summary.cpi