@pikaa-ai/pikaa 0.3.22 → 0.3.24

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 (191) hide show
  1. package/assets/brand/orbit-logo-option4-whale.jpg +0 -0
  2. package/assets/brand/orbit-logo.jpg +0 -0
  3. package/assets/brand/orbit-logo.png +0 -0
  4. package/assets/brand/orbit-logo.svg +3 -0
  5. package/dist/cli.js +448 -181
  6. package/dist/index.js +22 -2
  7. package/package.json +1 -2
  8. package/skills/adaptyv/SKILL.md +0 -240
  9. package/skills/aeon/SKILL.md +0 -402
  10. package/skills/analytical-method-validation/SKILL.md +0 -299
  11. package/skills/anndata/SKILL.md +0 -431
  12. package/skills/arbor/SKILL.md +0 -152
  13. package/skills/arboreto/SKILL.md +0 -267
  14. package/skills/astropy/SKILL.md +0 -353
  15. package/skills/autoskill/SKILL.md +0 -233
  16. package/skills/benchling-integration/SKILL.md +0 -229
  17. package/skills/bgpt-paper-search/SKILL.md +0 -75
  18. package/skills/bids/SKILL.md +0 -237
  19. package/skills/biopython/SKILL.md +0 -472
  20. package/skills/bioservices/SKILL.md +0 -399
  21. package/skills/bulk-rnaseq/SKILL.md +0 -198
  22. package/skills/cellxgene-census/SKILL.md +0 -283
  23. package/skills/cirq/SKILL.md +0 -370
  24. package/skills/citation-management/SKILL.md +0 -329
  25. package/skills/clinical-decision-support/SKILL.md +0 -238
  26. package/skills/clinical-decision-support/references/README.md +0 -62
  27. package/skills/clinical-reports/SKILL.md +0 -248
  28. package/skills/clinical-reports/references/README.md +0 -34
  29. package/skills/cobrapy/SKILL.md +0 -496
  30. package/skills/consciousness-council/SKILL.md +0 -151
  31. package/skills/dask/SKILL.md +0 -482
  32. package/skills/database-lookup/SKILL.md +0 -386
  33. package/skills/datamol/SKILL.md +0 -200
  34. package/skills/deepchem/SKILL.md +0 -244
  35. package/skills/deepspot-m/SKILL.md +0 -175
  36. package/skills/deeptools/SKILL.md +0 -412
  37. package/skills/depmap/SKILL.md +0 -301
  38. package/skills/dhdna-profiler/SKILL.md +0 -184
  39. package/skills/diffdock/SKILL.md +0 -488
  40. package/skills/dnanexus-integration/SKILL.md +0 -325
  41. package/skills/docx/SKILL.md +0 -99
  42. package/skills/esm/SKILL.md +0 -334
  43. package/skills/etetoolkit/SKILL.md +0 -327
  44. package/skills/exa-search/SKILL.md +0 -102
  45. package/skills/executing-plans/SKILL.md +0 -14
  46. package/skills/experimental-design/SKILL.md +0 -234
  47. package/skills/exploratory-data-analysis/SKILL.md +0 -280
  48. package/skills/flowio/SKILL.md +0 -310
  49. package/skills/fluidsim/SKILL.md +0 -279
  50. package/skills/frontend-design/SKILL.md +0 -100
  51. package/skills/generate-image/SKILL.md +0 -304
  52. package/skills/geniml/SKILL.md +0 -310
  53. package/skills/genomic-coordinates/SKILL.md +0 -189
  54. package/skills/genomic-intelligence/SKILL.md +0 -243
  55. package/skills/geomaster/README.md +0 -105
  56. package/skills/geomaster/SKILL.md +0 -366
  57. package/skills/geopandas/SKILL.md +0 -250
  58. package/skills/get-available-resources/SKILL.md +0 -260
  59. package/skills/gget/SKILL.md +0 -153
  60. package/skills/ginkgo-cloud-lab/SKILL.md +0 -106
  61. package/skills/glycoengineering/SKILL.md +0 -339
  62. package/skills/gtars/SKILL.md +0 -282
  63. package/skills/guardian-rails/SKILL.md +0 -54
  64. package/skills/histolab/SKILL.md +0 -243
  65. package/skills/hugging-science/SKILL.md +0 -132
  66. package/skills/hypogenic/SKILL.md +0 -290
  67. package/skills/hypothesis-generation/SKILL.md +0 -264
  68. package/skills/imaging-data-commons/SKILL.md +0 -496
  69. package/skills/infographics/SKILL.md +0 -315
  70. package/skills/iso-standards-readiness/SKILL.md +0 -352
  71. package/skills/lab-hardware-cad/SKILL.md +0 -372
  72. package/skills/labarchive-integration/SKILL.md +0 -216
  73. package/skills/lamindb/SKILL.md +0 -408
  74. package/skills/latchbio-integration/SKILL.md +0 -227
  75. package/skills/latex-posters/SKILL.md +0 -369
  76. package/skills/latex-posters/references/README.md +0 -439
  77. package/skills/liteparse/SKILL.md +0 -295
  78. package/skills/literature-review/SKILL.md +0 -263
  79. package/skills/markdown-mermaid-writing/SKILL.md +0 -322
  80. package/skills/market-research-reports/SKILL.md +0 -337
  81. package/skills/markitdown/SKILL.md +0 -264
  82. package/skills/matchms/SKILL.md +0 -276
  83. package/skills/matlab/SKILL.md +0 -274
  84. package/skills/matplotlib/SKILL.md +0 -378
  85. package/skills/medchem/SKILL.md +0 -321
  86. package/skills/modal/SKILL.md +0 -468
  87. package/skills/molecular-dynamics/SKILL.md +0 -458
  88. package/skills/molfeat/SKILL.md +0 -348
  89. package/skills/ncats-arax/SKILL.md +0 -178
  90. package/skills/networkx/SKILL.md +0 -440
  91. package/skills/neurokit2/SKILL.md +0 -323
  92. package/skills/neuropixels-analysis/SKILL.md +0 -412
  93. package/skills/nextflow/SKILL.md +0 -195
  94. package/skills/omero-integration/SKILL.md +0 -222
  95. package/skills/onekgpd/SKILL.md +0 -371
  96. package/skills/ontology-term-resolution/SKILL.md +0 -147
  97. package/skills/open-notebook/SKILL.md +0 -297
  98. package/skills/openpiv/SKILL.md +0 -469
  99. package/skills/opentrons-integration/SKILL.md +0 -322
  100. package/skills/optimize-for-gpu/SKILL.md +0 -176
  101. package/skills/owasp-top10/SKILL.md +0 -48
  102. package/skills/pacsomatic/LICENSE +0 -21
  103. package/skills/pacsomatic/SKILL.md +0 -150
  104. package/skills/paper-lookup/SKILL.md +0 -263
  105. package/skills/paperclip/SKILL.md +0 -413
  106. package/skills/paperzilla/SKILL.md +0 -159
  107. package/skills/parallel-web/SKILL.md +0 -128
  108. package/skills/pathml/SKILL.md +0 -222
  109. package/skills/pathogen-variant-surveillance/SKILL.md +0 -208
  110. package/skills/pathway-enrichment/SKILL.md +0 -194
  111. package/skills/pdf/SKILL.md +0 -322
  112. package/skills/peer-review/SKILL.md +0 -288
  113. package/skills/penetration-testing/SKILL.md +0 -31
  114. package/skills/pennylane/SKILL.md +0 -240
  115. package/skills/phylogenetics/SKILL.md +0 -409
  116. package/skills/pi-agent/SKILL.md +0 -83
  117. package/skills/pkpd-modeling/SKILL.md +0 -381
  118. package/skills/polars/SKILL.md +0 -393
  119. package/skills/polars-bio/SKILL.md +0 -379
  120. package/skills/ponytail/SKILL.md +0 -31
  121. package/skills/ponytail-audit/SKILL.md +0 -18
  122. package/skills/pptx/SKILL.md +0 -246
  123. package/skills/pptx-posters/SKILL.md +0 -258
  124. package/skills/primekg/SKILL.md +0 -99
  125. package/skills/protocolsio-integration/SKILL.md +0 -236
  126. package/skills/pufferlib/SKILL.md +0 -328
  127. package/skills/pydeseq2/SKILL.md +0 -369
  128. package/skills/pydicom/SKILL.md +0 -381
  129. package/skills/pyhealth/SKILL.md +0 -124
  130. package/skills/pylabrobot/SKILL.md +0 -216
  131. package/skills/pymatgen/SKILL.md +0 -404
  132. package/skills/pymc/SKILL.md +0 -310
  133. package/skills/pymoo/SKILL.md +0 -276
  134. package/skills/pyopenms/SKILL.md +0 -179
  135. package/skills/pysam/SKILL.md +0 -330
  136. package/skills/pytdc/SKILL.md +0 -297
  137. package/skills/pytorch-lightning/SKILL.md +0 -191
  138. package/skills/pyzotero/SKILL.md +0 -137
  139. package/skills/qiskit/SKILL.md +0 -259
  140. package/skills/qutip/SKILL.md +0 -317
  141. package/skills/rdkit/SKILL.md +0 -94
  142. package/skills/relsa-severity-assessment/SKILL.md +0 -354
  143. package/skills/research-grants/SKILL.md +0 -296
  144. package/skills/research-grants/references/README.md +0 -287
  145. package/skills/research-lookup/README.md +0 -106
  146. package/skills/research-lookup/SKILL.md +0 -338
  147. package/skills/rowan/SKILL.md +0 -398
  148. package/skills/scanpy/SKILL.md +0 -303
  149. package/skills/scholar-evaluation/SKILL.md +0 -296
  150. package/skills/scientific-brainstorming/SKILL.md +0 -282
  151. package/skills/scientific-critical-thinking/SKILL.md +0 -180
  152. package/skills/scientific-schematics/SKILL.md +0 -370
  153. package/skills/scientific-slides/SKILL.md +0 -379
  154. package/skills/scientific-visualization/SKILL.md +0 -285
  155. package/skills/scientific-writing/SKILL.md +0 -356
  156. package/skills/scikit-bio/SKILL.md +0 -470
  157. package/skills/scikit-learn/SKILL.md +0 -324
  158. package/skills/scikit-survival/SKILL.md +0 -313
  159. package/skills/scvelo/SKILL.md +0 -328
  160. package/skills/scvi-tools/SKILL.md +0 -201
  161. package/skills/seaborn/SKILL.md +0 -254
  162. package/skills/security-auditor/SKILL.md +0 -37
  163. package/skills/shap/SKILL.md +0 -282
  164. package/skills/simpy/SKILL.md +0 -283
  165. package/skills/stable-baselines3/SKILL.md +0 -325
  166. package/skills/statistical-analysis/SKILL.md +0 -446
  167. package/skills/statistical-power/SKILL.md +0 -200
  168. package/skills/statsmodels/SKILL.md +0 -238
  169. package/skills/sympy/SKILL.md +0 -354
  170. package/skills/systematic-debugging/SKILL.md +0 -35
  171. package/skills/tamarind/SKILL.md +0 -285
  172. package/skills/tdd/SKILL.md +0 -26
  173. package/skills/tiledbvcf/SKILL.md +0 -456
  174. package/skills/timesfm-forecasting/SKILL.md +0 -408
  175. package/skills/timesfm-forecasting/examples/global-temperature/README.md +0 -178
  176. package/skills/torch-geometric/SKILL.md +0 -458
  177. package/skills/torchdrug/SKILL.md +0 -241
  178. package/skills/transformers/SKILL.md +0 -195
  179. package/skills/treatment-plans/SKILL.md +0 -174
  180. package/skills/treatment-plans/references/README.md +0 -19
  181. package/skills/umap-learn/SKILL.md +0 -488
  182. package/skills/uncertainty-and-units/SKILL.md +0 -384
  183. package/skills/usfiscaldata/SKILL.md +0 -171
  184. package/skills/vaex/SKILL.md +0 -204
  185. package/skills/venue-templates/SKILL.md +0 -269
  186. package/skills/verification-before-completion/SKILL.md +0 -22
  187. package/skills/waypoint-bio/SKILL.md +0 -273
  188. package/skills/what-if-oracle/SKILL.md +0 -184
  189. package/skills/writing-plans/SKILL.md +0 -15
  190. package/skills/xlsx/SKILL.md +0 -110
  191. package/skills/zarr-python/SKILL.md +0 -241
package/dist/index.js CHANGED
@@ -9100,6 +9100,27 @@ class SessionPersistenceManager {
9100
9100
  return null;
9101
9101
  }
9102
9102
  }
9103
+ unbindSession() {
9104
+ for (const unsub of this.unsubscribers) {
9105
+ try {
9106
+ unsub();
9107
+ } catch {}
9108
+ }
9109
+ this.unsubscribers = [];
9110
+ }
9111
+ resumeIntoSession(session2, threadId) {
9112
+ const restored = this.loadSession(threadId);
9113
+ if (!restored)
9114
+ return null;
9115
+ this.unbindSession();
9116
+ session2.threadId = restored.thread.id;
9117
+ session2.setHistory(restored.items);
9118
+ if (restored.thread.model) {
9119
+ session2.model = restored.thread.model;
9120
+ }
9121
+ this.bindSession(session2, restored.thread.role);
9122
+ return restored;
9123
+ }
9103
9124
  listSessions(options) {
9104
9125
  return this.store.listThreads(options);
9105
9126
  }
@@ -9119,7 +9140,6 @@ class SessionPersistenceManager {
9119
9140
  // src/skills/loader.ts
9120
9141
  import { existsSync as existsSync19, readdirSync as readdirSync8, readFileSync as readFileSync10 } from "fs";
9121
9142
  import { resolve as resolve20, join as join10 } from "path";
9122
- import { homedir as homedir3 } from "os";
9123
9143
  var __dirname = "/home/runner/work/agent-cli/agent-cli/src/skills";
9124
9144
 
9125
9145
  class SkillsLoader {
@@ -9195,7 +9215,7 @@ class SkillsLoader {
9195
9215
  }
9196
9216
  }
9197
9217
  if (this.includeGlobal) {
9198
- roots.push(getGlobalSkillsDir(), resolve20(homedir3(), ".gemini", "config", "skills"));
9218
+ roots.push(getGlobalSkillsDir());
9199
9219
  }
9200
9220
  roots.push(...this.customRoots.map((r) => resolve20(r)));
9201
9221
  return roots.filter((r) => existsSync19(r));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pikaa-ai/pikaa",
3
- "version": "0.3.22",
3
+ "version": "0.3.24",
4
4
  "description": "PIKAA CLI - AI coding agent that runs locally in your terminal.",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.js",
@@ -16,7 +16,6 @@
16
16
  "bin",
17
17
  "templates",
18
18
  "assets",
19
- "skills/**/SKILL.md",
20
19
  "README.md",
21
20
  "LICENSE"
22
21
  ],
@@ -1,240 +0,0 @@
1
- ---
2
- name: adaptyv
3
- description: "How to use the Adaptyv Bio Foundry API and Python SDK for protein experiment design, submission, and results retrieval. Use this skill whenever the user mentions Adaptyv, Foundry API, protein binding assays, protein screening experiments, BLI/SPR assays, thermostability assays, or wants to submit protein sequences for experimental characterization. Also trigger when code imports `adaptyv`, `adaptyv_sdk`, or `FoundryClient`, or references `foundry-api-public.adaptyvbio.com`."
4
- license: MIT
5
- compatibility: Requires Python 3.10+, an Adaptyv Foundry account, and an API key from foundry.adaptyvbio.com. Install adaptyv-sdk from GitHub with uv pip install.
6
- metadata:
7
- version: "1.2"
8
- skill-author: K-Dense Inc.
9
- ---
10
-
11
- # Adaptyv Bio Foundry API
12
-
13
- Adaptyv Bio is a cloud lab that turns protein sequences into experimental data. Users submit amino acid sequences via API or UI; Adaptyv's automated lab runs assays (binding, thermostability, expression, fluorescence) and delivers results in ~21 days.
14
-
15
- **Official docs:** [docs.adaptyvbio.com/api-reference](https://docs.adaptyvbio.com/api-reference) · [llms.txt index](https://docs.adaptyvbio.com/llms.txt) · [OpenAPI spec](https://foundry-api-public.adaptyvbio.com/api/v1/openapi.json)
16
-
17
- ## Quick Start
18
-
19
- **Base URL:** `https://foundry-api-public.adaptyvbio.com/api/v1`
20
-
21
- **Authentication:** Bearer token in the `Authorization` header. Tokens are obtained from [foundry.adaptyvbio.com](https://foundry.adaptyvbio.com/) sidebar.
22
-
23
- When writing code, always read the API key from the environment variable `ADAPTYV_API_KEY` or from a `.env` file — never hardcode tokens. Check for a `.env` file in the project root first; if one exists, use a library like `python-dotenv` to load it.
24
-
25
- The [official API docs](https://docs.adaptyvbio.com/api-reference/api-introduction) use `FOUNDRY_API_TOKEN` in curl examples; that is the same bearer token — prefer `ADAPTYV_API_KEY` in Python and new shell scripts for consistency with the SDK.
26
-
27
- ```bash
28
- export ADAPTYV_API_KEY="abs0_..."
29
- curl https://foundry-api-public.adaptyvbio.com/api/v1/targets?limit=3 \
30
- -H "Authorization: Bearer $ADAPTYV_API_KEY"
31
- ```
32
-
33
- Every request except `GET /openapi.json` requires authentication. Store tokens in environment variables or `.env` files — never commit them to source control.
34
-
35
- ## Python SDK
36
-
37
- **Version note:** `adaptyv-sdk` **0.1.0** (beta) is not yet on PyPI — install from GitHub:
38
-
39
- ```bash
40
- uv pip install "git+https://github.com/adaptyvbio/adaptyv-sdk.git"
41
- ```
42
-
43
- In a project with `pyproject.toml`:
44
-
45
- ```bash
46
- uv add "adaptyv-sdk @ git+https://github.com/adaptyvbio/adaptyv-sdk.git"
47
- ```
48
-
49
- **Environment variables** (set in shell or `.env` file):
50
-
51
- ```bash
52
- ADAPTYV_API_KEY=your_api_key
53
- ADAPTYV_API_URL=https://foundry-api-public.adaptyvbio.com/api/v1
54
- ADAPTYV_ORGANIZATION_ID=your_org_id # optional
55
- ```
56
-
57
- The `@lab.experiment` decorator and `FoundryClient` both read `ADAPTYV_API_KEY` and `ADAPTYV_API_URL` from the environment when not passed explicitly.
58
-
59
- ### Decorator Pattern
60
-
61
- ```python
62
- from adaptyv import lab
63
-
64
- @lab.experiment(target="PD-L1", experiment_type="screening", method="bli")
65
- def design_binders():
66
- return {"design_a": "MVKVGVNG...", "design_b": "MKVLVAG..."}
67
-
68
- result = design_binders()
69
- print(f"Experiment: {result.experiment_url}")
70
- ```
71
-
72
- ### Client Pattern
73
-
74
- ```python
75
- import os
76
- from adaptyv import FoundryClient
77
-
78
- client = FoundryClient(
79
- api_key=os.environ["ADAPTYV_API_KEY"],
80
- base_url=os.environ.get(
81
- "ADAPTYV_API_URL",
82
- "https://foundry-api-public.adaptyvbio.com/api/v1",
83
- ),
84
- )
85
-
86
- # Browse targets
87
- targets = client.targets.list(search="EGFR", selfservice_only=True)
88
-
89
- # Estimate cost
90
- estimate = client.experiments.cost_estimate({
91
- "experiment_spec": {
92
- "experiment_type": "screening",
93
- "method": "bli",
94
- "target_id": "target-uuid",
95
- "sequences": {"seq1": "EVQLVESGGGLVQ..."},
96
- "n_replicates": 3
97
- }
98
- })
99
-
100
- # Create and submit
101
- exp = client.experiments.create({...})
102
- client.experiments.submit(exp.experiment_id)
103
-
104
- # Later: retrieve results
105
- results = client.experiments.get_results(exp.experiment_id)
106
- ```
107
-
108
- ## Experiment Types
109
-
110
- | Type | Method | Measures | Requires Target |
111
- |---|---|---|---|
112
- | `affinity` | `bli` or `spr` | KD, kon, koff kinetics | Yes |
113
- | `screening` | `bli` or `spr` | Yes/no binding | Yes |
114
- | `thermostability` | — | Melting temperature (Tm) | No |
115
- | `expression` | — | Expression yield | No |
116
- | `fluorescence` | — | Fluorescence intensity | No |
117
-
118
- ## Experiment Lifecycle
119
-
120
- ```
121
- Draft → WaitingForConfirmation → QuoteSent → WaitingForMaterials → InQueue → InProduction → DataAnalysis → InReview → Done
122
- ```
123
-
124
- | Status | Who Acts | Description |
125
- |---|---|---|
126
- | `Draft` | You | Editable, no cost commitment |
127
- | `WaitingForConfirmation` | Adaptyv | Under review, quote being prepared |
128
- | `QuoteSent` | You | Review and confirm the quote |
129
- | `WaitingForMaterials` | Adaptyv | Gene fragments and target ordered |
130
- | `InQueue` | Adaptyv | Materials arrived, queued for lab |
131
- | `InProduction` | Adaptyv | Assay running |
132
- | `DataAnalysis` | Adaptyv | Raw data processing and QC |
133
- | `InReview` | Adaptyv | Final validation |
134
- | `Done` | You | Results available |
135
- | `Canceled` | Either | Experiment canceled |
136
-
137
- The `results_status` field on an experiment tracks: `none`, `partial`, or `all`.
138
-
139
- ## Common Workflows
140
-
141
- ### 1. Submit a Binding Screen (Step by Step)
142
-
143
- ```python
144
- # 1. Find a target
145
- targets = client.targets.list(search="EGFR", selfservice_only=True)
146
- target_id = targets.items[0].id
147
-
148
- # 2. Preview cost
149
- estimate = client.experiments.cost_estimate({
150
- "experiment_spec": {
151
- "experiment_type": "screening",
152
- "method": "bli",
153
- "target_id": target_id,
154
- "sequences": {"seq1": "EVQLVESGGGLVQ...", "seq2": "MKVLVAG..."},
155
- "n_replicates": 3
156
- }
157
- })
158
-
159
- # 3. Create experiment (starts as Draft)
160
- exp = client.experiments.create({
161
- "name": "EGFR binder screen batch 1",
162
- "experiment_spec": {
163
- "experiment_type": "screening",
164
- "method": "bli",
165
- "target_id": target_id,
166
- "sequences": {"seq1": "EVQLVESGGGLVQ...", "seq2": "MKVLVAG..."},
167
- "n_replicates": 3
168
- }
169
- })
170
-
171
- # 4. Submit for review
172
- client.experiments.submit(exp.experiment_id)
173
-
174
- # 5. Poll or use webhooks until Done
175
- # 6. Retrieve results
176
- results = client.experiments.get_results(exp.experiment_id)
177
- ```
178
-
179
- ### 2. Automated Pipeline (Skip Draft + Auto-Accept Quote)
180
-
181
- ```python
182
- exp = client.experiments.create({
183
- "name": "Auto pipeline run",
184
- "experiment_spec": {...},
185
- "skip_draft": True,
186
- "auto_accept_quote": True,
187
- "webhook_url": "https://my-server.com/webhook"
188
- })
189
- # Webhook fires on each status transition; poll or wait for Done
190
- ```
191
-
192
- ### 3. Using Webhooks
193
-
194
- Pass `webhook_url` when creating an experiment. Adaptyv POSTs to that URL on every status transition with the experiment ID, previous status, and new status.
195
-
196
- ## Sequences
197
-
198
- - Simple format: `{"seq1": "EVQLVESGGGLVQPGGSLRLSCAAS"}`
199
- - Rich format: `{"seq1": {"aa_string": "EVQLVESGGGLVQ...", "control": false, "metadata": {"type": "scfv"}}}`
200
- - Multi-chain: use colon separator — `"MVLS:EVQL"`
201
- - Valid amino acids: A, C, D, E, F, G, H, I, K, L, M, N, P, Q, R, S, T, V, W, Y (case-insensitive, stored uppercase)
202
- - Sequences can only be added to experiments in `Draft` status
203
-
204
- ## Filtering, Sorting, and Pagination
205
-
206
- All list endpoints support pagination (`limit` 1-100, default 50; `offset`), search (free-text on name fields), and sorting.
207
-
208
- **Filtering** uses s-expression syntax via the `filter` query parameter:
209
- - Comparison: `eq(field,value)`, `neq`, `gt`, `gte`, `lt`, `lte`, `contains(field,substring)`
210
- - Range/set: `between(field,lo,hi)`, `in(field,v1,v2,...)`
211
- - Logic: `and(expr1,expr2,...)`, `or(...)`, `not(expr)`
212
- - Null: `is_null(field)`, `is_not_null(field)`
213
- - JSONB: `at(field,key)` — e.g., `eq(at(metadata,score),42)`
214
- - Cast: `float()`, `int()`, `text()`, `timestamp()`, `date()`
215
-
216
- **Sorting** uses `asc(field)` or `desc(field)`, comma-separated (max 8):
217
- ```
218
- sort=desc(created_at),asc(name)
219
- ```
220
-
221
- **Example:** `filter=and(gte(created_at,2026-01-01),eq(status,done))`
222
-
223
- ## Error Handling
224
-
225
- All errors return:
226
- ```json
227
- {
228
- "error": "Human-readable description",
229
- "request_id": "req_019462a4-b1c2-7def-8901-23456789abcd"
230
- }
231
- ```
232
- The `request_id` is also in the `x-request-id` response header — include it when contacting support.
233
-
234
- ## Token Management
235
-
236
- Tokens use Biscuit-based cryptographic attenuation. You can create restricted tokens scoped by organization, resource type, actions (read/create/update), and expiry via `POST /tokens/attenuate`. Revoking a token (`POST /tokens/revoke`) revokes it and all its descendants.
237
-
238
- ## Detailed API Reference
239
-
240
- For the full list of all 32 endpoints with request/response schemas, read `references/api-endpoints.md`.
@@ -1,402 +0,0 @@
1
- ---
2
- name: aeon
3
- description: This skill should be used for time series machine learning tasks including classification, regression, clustering, forecasting, anomaly detection, segmentation, and similarity search. Use when working with temporal data, sequential patterns, or time-indexed observations requiring specialized algorithms beyond standard ML approaches. Particularly suited for univariate and multivariate time series analysis with scikit-learn compatible APIs.
4
- license: BSD-3-Clause license
5
- allowed-tools: Read Write Edit Bash
6
- compatibility: Requires Python 3.10+ and the aeon package (uv pip install). Optional aeon[all_extras] for deep learning and extended dependencies.
7
- metadata:
8
- version: "1.0"
9
- skill-author: K-Dense Inc.
10
- ---
11
-
12
- # Aeon Time Series Machine Learning
13
-
14
- ## Overview
15
-
16
- Aeon is a scikit-learn compatible Python toolkit for time series machine learning ([aeon-toolkit.org](https://www.aeon-toolkit.org/)). It provides algorithms across classification, regression, clustering, forecasting, anomaly detection, segmentation, similarity search, distances, transformations, benchmarking, and visualization — with a consistent estimator API.
17
-
18
- **Version note:** Examples target **aeon 1.x** (stable docs: v1.4.0, March 2026). The v1.0 release reworked forecasting and transformations; import paths differ from aeon 0.x/sktime-era code.
19
-
20
- ## When to Use This Skill
21
-
22
- Apply this skill when:
23
- - Classifying or predicting from time series data
24
- - Detecting anomalies or change points in temporal sequences
25
- - Clustering similar time series patterns
26
- - Forecasting future values
27
- - Finding repeated patterns (motifs) or unusual subsequences (discords)
28
- - Comparing time series with specialized distance metrics
29
- - Extracting features from temporal data
30
-
31
- ## Installation
32
-
33
- Requires **Python 3.10+** (3.11+ recommended). Pin a 1.x release for reproducibility:
34
-
35
- ```bash
36
- uv pip install "aeon>=1.4,<2"
37
- ```
38
-
39
- For deep learning forecasters/classifiers and other optional estimators:
40
-
41
- ```bash
42
- uv pip install "aeon[all_extras]>=1.4,<2"
43
- ```
44
-
45
- On zsh, quote the extras: `uv pip install "aeon[all_extras]>=1.4,<2"`.
46
-
47
- ### Experimental modules
48
-
49
- Upstream treats **forecasting**, **anomaly_detection**, **segmentation**, **similarity_search**, and **visualisation** as experimental — interfaces may change between minor releases. Prefer stable modules (classification, regression, clustering, distances, transformations) for production pipelines unless you need these tasks.
50
-
51
- ## Core Capabilities
52
-
53
- ### 1. Time Series Classification
54
-
55
- Categorize time series into predefined classes. See `references/classification.md` for complete algorithm catalog.
56
-
57
- **Quick Start:**
58
- ```python
59
- from aeon.classification.convolution_based import RocketClassifier
60
- from aeon.datasets import load_classification
61
-
62
- # Load data
63
- X_train, y_train = load_classification("GunPoint", split="train")
64
- X_test, y_test = load_classification("GunPoint", split="test")
65
-
66
- # Train classifier
67
- clf = RocketClassifier(n_kernels=10000)
68
- clf.fit(X_train, y_train)
69
- accuracy = clf.score(X_test, y_test)
70
- ```
71
-
72
- **Algorithm Selection:**
73
- - **Speed + Performance**: `MiniRocketClassifier`, `Arsenal`
74
- - **Maximum Accuracy**: `HIVECOTEV2`, `InceptionTimeClassifier`
75
- - **Interpretability**: `ShapeletTransformClassifier`, `Catch22Classifier`
76
- - **Small Datasets**: `KNeighborsTimeSeriesClassifier` with DTW distance
77
-
78
- ### 2. Time Series Regression
79
-
80
- Predict continuous values from time series. See `references/regression.md` for algorithms.
81
-
82
- **Quick Start:**
83
- ```python
84
- from aeon.regression.convolution_based import RocketRegressor
85
- from aeon.datasets import load_regression
86
-
87
- X_train, y_train = load_regression("Covid3Month", split="train")
88
- X_test, y_test = load_regression("Covid3Month", split="test")
89
-
90
- reg = RocketRegressor()
91
- reg.fit(X_train, y_train)
92
- predictions = reg.predict(X_test)
93
- ```
94
-
95
- ### 3. Time Series Clustering
96
-
97
- Group similar time series without labels. See `references/clustering.md` for methods.
98
-
99
- **Quick Start:**
100
- ```python
101
- from aeon.clustering import TimeSeriesKMeans
102
-
103
- clusterer = TimeSeriesKMeans(
104
- n_clusters=3,
105
- distance="dtw",
106
- averaging_method="ba"
107
- )
108
- labels = clusterer.fit_predict(X_train)
109
- centers = clusterer.cluster_centers_
110
- ```
111
-
112
- ### 4. Forecasting
113
-
114
- Predict future time series values (experimental module in aeon 1.x). See `references/forecasting.md` for forecasters.
115
-
116
- **Quick Start:**
117
- ```python
118
- import numpy as np
119
- from aeon.forecasting import NaiveForecaster
120
- from aeon.forecasting.stats import ARIMA
121
-
122
- y_train = np.array([1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0])
123
-
124
- # Set horizon in the constructor; predict passes the series to forecast from
125
- naive = NaiveForecaster(strategy="last", horizon=5)
126
- naive.fit(y_train)
127
- y_pred = naive.predict(y_train)
128
-
129
- # ARIMA uses p/d/q (not order=); multi-step via iterative_forecast
130
- arima = ARIMA(p=1, d=1, q=1)
131
- arima.fit(y_train)
132
- y_pred = arima.iterative_forecast(y_train, prediction_horizon=5)
133
- ```
134
-
135
- ### 5. Anomaly Detection
136
-
137
- Identify unusual patterns or outliers. See `references/anomaly_detection.md` for detectors.
138
-
139
- **Quick Start:**
140
- ```python
141
- from aeon.anomaly_detection import STOMP
142
-
143
- detector = STOMP(window_size=50)
144
- anomaly_scores = detector.fit_predict(y)
145
-
146
- # Higher scores indicate anomalies
147
- threshold = np.percentile(anomaly_scores, 95)
148
- anomalies = anomaly_scores > threshold
149
- ```
150
-
151
- ### 6. Segmentation
152
-
153
- Partition time series into regions with change points. See `references/segmentation.md`.
154
-
155
- **Quick Start:**
156
- ```python
157
- from aeon.segmentation import ClaSPSegmenter
158
-
159
- segmenter = ClaSPSegmenter()
160
- change_points = segmenter.fit_predict(y)
161
- ```
162
-
163
- ### 7. Similarity Search
164
-
165
- Find similar patterns within or across time series. See `references/similarity_search.md`.
166
-
167
- **Quick Start:**
168
- ```python
169
- from aeon.similarity_search import StompMotif
170
-
171
- # Find recurring patterns
172
- motif_finder = StompMotif(window_size=50, k=3)
173
- motifs = motif_finder.fit_predict(y)
174
- ```
175
-
176
- ## Feature Extraction and Transformations
177
-
178
- Transform time series for feature engineering. See `references/transformations.md`.
179
-
180
- **ROCKET Features:**
181
- ```python
182
- from aeon.transformations.collection.convolution_based import RocketTransformer
183
-
184
- rocket = RocketTransformer()
185
- X_features = rocket.fit_transform(X_train)
186
-
187
- # Use features with any sklearn classifier
188
- from sklearn.ensemble import RandomForestClassifier
189
- clf = RandomForestClassifier()
190
- clf.fit(X_features, y_train)
191
- ```
192
-
193
- **Statistical Features:**
194
- ```python
195
- from aeon.transformations.collection.feature_based import Catch22
196
-
197
- catch22 = Catch22()
198
- X_features = catch22.fit_transform(X_train)
199
- ```
200
-
201
- **Preprocessing:**
202
- ```python
203
- from aeon.transformations.collection import MinMaxScaler, Normalizer
204
-
205
- scaler = Normalizer() # Z-normalization
206
- X_normalized = scaler.fit_transform(X_train)
207
- ```
208
-
209
- ## Distance Metrics
210
-
211
- Specialized temporal distance measures. See `references/distances.md` for complete catalog.
212
-
213
- **Usage:**
214
- ```python
215
- from aeon.distances import dtw_distance, dtw_pairwise_distance
216
-
217
- # Single distance
218
- distance = dtw_distance(x, y, window=0.1)
219
-
220
- # Pairwise distances
221
- distance_matrix = dtw_pairwise_distance(X_train)
222
-
223
- # Use with classifiers
224
- from aeon.classification.distance_based import KNeighborsTimeSeriesClassifier
225
-
226
- clf = KNeighborsTimeSeriesClassifier(
227
- n_neighbors=5,
228
- distance="dtw",
229
- distance_params={"window": 0.2}
230
- )
231
- ```
232
-
233
- **Available Distances:**
234
- - **Elastic**: DTW, DDTW, WDTW, ERP, EDR, LCSS, TWE, MSM
235
- - **Lock-step**: Euclidean, Manhattan, Minkowski
236
- - **Shape-based**: Shape DTW, SBD
237
-
238
- ## Deep Learning Networks
239
-
240
- Neural architectures for time series. See `references/networks.md`.
241
-
242
- **Architectures:**
243
- - Convolutional: `FCNClassifier`, `ResNetClassifier`, `InceptionTimeClassifier`
244
- - Recurrent: `RecurrentNetwork`, `TCNNetwork`
245
- - Autoencoders: `AEFCNClusterer`, `AEResNetClusterer`
246
-
247
- **Usage:**
248
- ```python
249
- from aeon.classification.deep_learning import InceptionTimeClassifier
250
-
251
- clf = InceptionTimeClassifier(n_epochs=100, batch_size=32)
252
- clf.fit(X_train, y_train)
253
- predictions = clf.predict(X_test)
254
- ```
255
-
256
- ## Datasets and Benchmarking
257
-
258
- Load standard benchmarks and evaluate performance. See `references/datasets_benchmarking.md`.
259
-
260
- **Load Datasets:**
261
- ```python
262
- from aeon.datasets import load_classification, load_gunpoint, load_regression
263
-
264
- # Classification (generic loader or dataset-specific helper)
265
- X_train, y_train = load_classification("GunPoint", split="train")
266
- X_train, y_train = load_gunpoint(split="train") # same UCR dataset
267
-
268
- # Regression
269
- X_train, y_train = load_regression("Covid3Month", split="train")
270
- ```
271
-
272
- **Benchmarking:**
273
- ```python
274
- from aeon.benchmarking import get_estimator_results
275
-
276
- # Compare with published results
277
- published = get_estimator_results("ROCKET", "GunPoint")
278
- ```
279
-
280
- ## Common Workflows
281
-
282
- ### Classification Pipeline
283
-
284
- ```python
285
- from aeon.transformations.collection import Normalizer
286
- from aeon.classification.convolution_based import RocketClassifier
287
- from sklearn.pipeline import Pipeline
288
-
289
- pipeline = Pipeline([
290
- ('normalize', Normalizer()),
291
- ('classify', RocketClassifier())
292
- ])
293
-
294
- pipeline.fit(X_train, y_train)
295
- accuracy = pipeline.score(X_test, y_test)
296
- ```
297
-
298
- ### Feature Extraction + Traditional ML
299
-
300
- ```python
301
- from aeon.transformations.collection import RocketTransformer
302
- from sklearn.ensemble import GradientBoostingClassifier
303
-
304
- # Extract features
305
- rocket = RocketTransformer()
306
- X_train_features = rocket.fit_transform(X_train)
307
- X_test_features = rocket.transform(X_test)
308
-
309
- # Train traditional ML
310
- clf = GradientBoostingClassifier()
311
- clf.fit(X_train_features, y_train)
312
- predictions = clf.predict(X_test_features)
313
- ```
314
-
315
- ### Anomaly Detection with Visualization
316
-
317
- ```python
318
- from aeon.anomaly_detection import STOMP
319
- import matplotlib.pyplot as plt
320
-
321
- detector = STOMP(window_size=50)
322
- scores = detector.fit_predict(y)
323
-
324
- plt.figure(figsize=(15, 5))
325
- plt.subplot(2, 1, 1)
326
- plt.plot(y, label='Time Series')
327
- plt.subplot(2, 1, 2)
328
- plt.plot(scores, label='Anomaly Scores', color='red')
329
- plt.axhline(np.percentile(scores, 95), color='k', linestyle='--')
330
- plt.show()
331
- ```
332
-
333
- ## Best Practices
334
-
335
- ### Data Preparation
336
-
337
- 1. **Normalize**: Most algorithms benefit from z-normalization
338
- ```python
339
- from aeon.transformations.collection import Normalizer
340
- normalizer = Normalizer()
341
- X_train = normalizer.fit_transform(X_train)
342
- X_test = normalizer.transform(X_test)
343
- ```
344
-
345
- 2. **Handle Missing Values**: Impute before analysis
346
- ```python
347
- from aeon.transformations.collection import SimpleImputer
348
- imputer = SimpleImputer(strategy='mean')
349
- X_train = imputer.fit_transform(X_train)
350
- ```
351
-
352
- 3. **Check Data Format**: Collections use `(n_cases, n_channels, n_timepoints)`; single series use `(n_channels, n_timepoints)` (see [data format](https://www.aeon-toolkit.org/en/stable/api_reference/data_format.html))
353
-
354
- ### Model Selection
355
-
356
- 1. **Start Simple**: Begin with ROCKET variants before deep learning
357
- 2. **Use Validation**: Split training data for hyperparameter tuning
358
- 3. **Compare Baselines**: Test against simple methods (1-NN Euclidean, Naive)
359
- 4. **Consider Resources**: ROCKET for speed, deep learning if GPU available
360
-
361
- ### Algorithm Selection Guide
362
-
363
- **For Fast Prototyping:**
364
- - Classification: `MiniRocketClassifier`
365
- - Regression: `MiniRocketRegressor`
366
- - Clustering: `TimeSeriesKMeans` with Euclidean
367
-
368
- **For Maximum Accuracy:**
369
- - Classification: `HIVECOTEV2`, `InceptionTimeClassifier`
370
- - Regression: `InceptionTimeRegressor`
371
- - Forecasting: `AutoARIMA`, `AutoETS`, `TCNForecaster` (requires `[all_extras]` for deep learning)
372
-
373
- **For Interpretability:**
374
- - Classification: `ShapeletTransformClassifier`, `Catch22Classifier`
375
- - Features: `Catch22`, `TSFresh`
376
-
377
- **For Small Datasets:**
378
- - Distance-based: `KNeighborsTimeSeriesClassifier` with DTW
379
- - Avoid: Deep learning (requires large data)
380
-
381
- ## Reference Documentation
382
-
383
- Detailed information available in `references/`:
384
- - `classification.md` - All classification algorithms
385
- - `regression.md` - Regression methods
386
- - `clustering.md` - Clustering algorithms
387
- - `forecasting.md` - Forecasting approaches
388
- - `anomaly_detection.md` - Anomaly detection methods
389
- - `segmentation.md` - Segmentation algorithms
390
- - `similarity_search.md` - Pattern matching and motif discovery
391
- - `transformations.md` - Feature extraction and preprocessing
392
- - `distances.md` - Time series distance metrics
393
- - `networks.md` - Deep learning architectures
394
- - `datasets_benchmarking.md` - Data loading and evaluation tools
395
-
396
- ## Additional Resources
397
-
398
- - Documentation: https://www.aeon-toolkit.org/
399
- - GitHub: https://github.com/aeon-toolkit/aeon
400
- - Examples: https://www.aeon-toolkit.org/en/stable/examples.html
401
- - API Reference: https://www.aeon-toolkit.org/en/stable/api_reference.html
402
-