moshcode 0.29.3 → 0.31.0
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.
- package/README.md +14 -8
- package/package.json +1 -1
- package/plugins/crypto/.claude-plugin/plugin.json +1 -1
- package/plugins/crypto/README.md +10 -4
- package/plugins/crypto/commands/help.md +39 -0
- package/plugins/crypto/commands/{coin.md → lookup.md} +1 -1
- package/plugins/crypto/commands/pairs.md +1 -1
- package/plugins/crypto/commands/{crypto.md → report.md} +2 -2
- package/plugins/crypto/commands/spark.md +1 -1
- package/plugins/stocks/.claude-plugin/plugin.json +1 -1
- package/plugins/stocks/README.md +17 -5
- package/plugins/stocks/commands/help.md +35 -0
- package/plugins/stocks/commands/{reports.md → list.md} +4 -4
- package/plugins/stocks/commands/lookup.md +1 -1
- package/plugins/stocks/commands/quote.md +37 -0
- package/src/plugins.mjs +27 -6
- /package/plugins/stocks/commands/{stocks.md → report.md} +0 -0
package/README.md
CHANGED
|
@@ -376,14 +376,20 @@ moshcode plugin install crypto # add the marketplace + install `crypto`
|
|
|
376
376
|
moshcode plugin remove stocks # take it back off
|
|
377
377
|
```
|
|
378
378
|
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
driven from inside a coding session.
|
|
379
|
+
The two plugins share the four names for the questions both markets answer, and
|
|
380
|
+
differ only where the markets do. Either one's `/…:help` prints its own list.
|
|
382
381
|
|
|
383
|
-
`
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
382
|
+
| | `stocks@moshcode` | `crypto@moshcode` |
|
|
383
|
+
|---|---|---|
|
|
384
|
+
| shared | `help` `report` `quote` `lookup` | `help` `report` `quote` `lookup` |
|
|
385
|
+
| its own | `signals` `research` `list` `discover` | `book` `bars` `spark` `pairs` |
|
|
386
|
+
|
|
387
|
+
So `/stocks:report NVDA` and `/crypto:report BTC` are the same question asked of
|
|
388
|
+
different markets, while `/stocks:signals` (what an executive said on a call)
|
|
389
|
+
and `/crypto:book` (live order book depth) have no counterpart on the other
|
|
390
|
+
side. They ship separately because they are different surfaces, not modes of one
|
|
391
|
+
another: stored snapshots versus live venue reads, and a crypto score that must
|
|
392
|
+
not be ranked against an equity's.
|
|
387
393
|
|
|
388
394
|
Restart the engine after installing either; a newly installed plugin is not live
|
|
389
395
|
in a session that is already running.
|
|
@@ -420,7 +426,7 @@ any marketplace". `moshcode plugin install` runs both steps for you.
|
|
|
420
426
|
### Upgrading from `ticker@moshcode`
|
|
421
427
|
|
|
422
428
|
`stocks` was called `ticker` before v0.29.0. Installing the new id does **not**
|
|
423
|
-
replace the old one — engines install plugins side by side, so `/stocks:
|
|
429
|
+
replace the old one — engines install plugins side by side, so `/stocks:report` would
|
|
424
430
|
come from two plugins at once. Remove the old id first:
|
|
425
431
|
|
|
426
432
|
```sh
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"$schema": "https://anthropic.com/claude-code/plugin.schema.json",
|
|
3
3
|
"name": "crypto",
|
|
4
4
|
"description": "Crypto market data slash commands backed by advis0r.com: live prices, technical scores, order books, OHLCV history and sparklines across Alpaca's US crypto venue.",
|
|
5
|
-
"version": "0.
|
|
5
|
+
"version": "0.4.0",
|
|
6
6
|
"author": {
|
|
7
7
|
"name": "moshcoder",
|
|
8
8
|
"url": "https://moshcode.sh"
|
package/plugins/crypto/README.md
CHANGED
|
@@ -6,13 +6,19 @@ across Alpaca's US crypto venue.
|
|
|
6
6
|
|
|
7
7
|
| command | what it does |
|
|
8
8
|
| --- | --- |
|
|
9
|
-
| `/crypto:
|
|
9
|
+
| `/crypto:help` | this list, in the engine |
|
|
10
|
+
| `/crypto:report BTC` | price, technicals, score, supply, order book |
|
|
10
11
|
| `/crypto:quote ETH-USD` | latest trade and quote, with the spread in bps |
|
|
12
|
+
| `/crypto:lookup bitcoin` | asset name → `BTC/USD` |
|
|
11
13
|
| `/crypto:book BTC-USD` | top of the order book, both sides |
|
|
12
14
|
| `/crypto:bars ETH-USD` | historical OHLCV at any supported timeframe |
|
|
13
15
|
| `/crypto:spark BTC ETH SOL` | recent moves across pairs, ranked |
|
|
14
16
|
| `/crypto:pairs` | every supported pair, grouped by quote asset |
|
|
15
|
-
|
|
17
|
+
|
|
18
|
+
The first four names mean the same thing in `stocks@moshcode` — `help`,
|
|
19
|
+
`report`, `quote`, `lookup` — so knowing one plugin gets you half the other.
|
|
20
|
+
The rest are the parts a 24/7 venue has and equities do not: a live order book,
|
|
21
|
+
arbitrary timeframes, and cross-pair comparison.
|
|
16
22
|
|
|
17
23
|
Pairs are accepted as `BTC`, `BTC-USD`, `BTC/USD` or `BTCUSD`. A bare asset
|
|
18
24
|
resolves to that asset's USD pair.
|
|
@@ -50,9 +56,9 @@ Point the commands at another instance with `MOSHCODE_ADVISOR_URL`.
|
|
|
50
56
|
## Why this is separate from `stocks`
|
|
51
57
|
|
|
52
58
|
They answer different questions from different data, and share only a hostname.
|
|
53
|
-
A `/stocks:
|
|
59
|
+
A `/stocks:report` report is a **stored snapshot** built from transcripts, SEC
|
|
54
60
|
fundamentals and extracted signals — its risk is a stale price read as a live
|
|
55
|
-
one. A `/crypto:
|
|
61
|
+
one. A `/crypto:report` report is a **live venue read** with no transcripts, no
|
|
56
62
|
filings and no signals — its risk is the opposite: a price that is accurate to
|
|
57
63
|
the second and stale by the time you act on it.
|
|
58
64
|
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: What the crypto plugin can do, and the exact command names to type.
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
## Task
|
|
6
|
+
|
|
7
|
+
List what this plugin provides. Do not call any tool — everything needed is
|
|
8
|
+
below. Render it as a compact table, then the notes.
|
|
9
|
+
|
|
10
|
+
| command | what it does |
|
|
11
|
+
| --- | --- |
|
|
12
|
+
| `/crypto:report <PAIR>` | the full report — price, technicals, score, supply, order book |
|
|
13
|
+
| `/crypto:quote <PAIR>` | the short answer — latest trade, bid/ask, spread |
|
|
14
|
+
| `/crypto:lookup <name>` | asset name → pair (`bitcoin` → `BTC/USD`) |
|
|
15
|
+
| `/crypto:book <PAIR>` | top of the order book, both sides |
|
|
16
|
+
| `/crypto:bars <PAIR>` | historical OHLCV at any supported timeframe |
|
|
17
|
+
| `/crypto:spark <PAIR…>` | recent moves across several pairs, ranked |
|
|
18
|
+
| `/crypto:pairs` | every supported pair, grouped by quote asset |
|
|
19
|
+
|
|
20
|
+
## Notes to pass on
|
|
21
|
+
|
|
22
|
+
- Pairs are accepted as `BTC`, `BTC-USD`, `BTC/USD` or `BTCUSD`. A bare asset
|
|
23
|
+
resolves to that asset's USD pair.
|
|
24
|
+
- Every command name is namespaced `/crypto:…`. A bare `/report` is not a
|
|
25
|
+
command — Claude Code always prefixes plugin commands with the plugin name.
|
|
26
|
+
- `stocks@moshcode` is the sibling plugin, and the four shared names mean the
|
|
27
|
+
same thing there: `/stocks:report`, `/stocks:quote`, `/stocks:lookup`,
|
|
28
|
+
`/stocks:help`. It adds `/stocks:signals`, `/stocks:research`,
|
|
29
|
+
`/stocks:list` and `/stocks:discover` — transcript and filing work that
|
|
30
|
+
has no crypto equivalent.
|
|
31
|
+
- **These are live venue reads, not stored snapshots** — the opposite of the
|
|
32
|
+
stocks plugin. Prices are Alpaca's US crypto venue alone and can differ
|
|
33
|
+
materially from other exchanges. Crypto trades 24/7: no close, no halt.
|
|
34
|
+
- The crypto technical score counts venue-local liquidity, so it is **not
|
|
35
|
+
comparable** to a `/stocks:report` score. Do not rank the two against
|
|
36
|
+
each other.
|
|
37
|
+
|
|
38
|
+
If the user asked for something no command covers, say so rather than
|
|
39
|
+
improvising one that does not exist.
|
|
@@ -28,4 +28,4 @@ Fallback: `curl -sS "https://advis0r.com/api/crypto/lookup?q=<url-encoded>&limit
|
|
|
28
28
|
match is the one they meant.
|
|
29
29
|
- No match: say this venue lists no such pair, and do not invent a symbol. The
|
|
30
30
|
coin may exist and simply not be listed here — those are different answers.
|
|
31
|
-
- Offer `/crypto:
|
|
31
|
+
- Offer `/crypto:report <PAIR>` for the match you land on.
|
|
@@ -25,7 +25,7 @@ URL-safe spelling (`BTC-USD`) used in paths; `symbol` is canonical (`BTC/USD`).
|
|
|
25
25
|
different markets with three different liquidity profiles.
|
|
26
26
|
- **`idle` means listed but not currently printing trades** — it is not the same
|
|
27
27
|
as unsupported. Show idle pairs, marked, rather than filtering them out.
|
|
28
|
-
- If the user was looking for a specific coin, use `/crypto:
|
|
28
|
+
- If the user was looking for a specific coin, use `/crypto:lookup <name>` instead of
|
|
29
29
|
scanning this list for them.
|
|
30
30
|
- This is the coverage of one venue, not of crypto. A coin missing here is
|
|
31
31
|
missing *from Alpaca's US venue*.
|
|
@@ -42,9 +42,9 @@ resolves to that asset's USD pair.
|
|
|
42
42
|
- Crypto trades 24/7 with no circuit breakers and no market close. Never
|
|
43
43
|
describe a crypto price as "at the close" or "premarket".
|
|
44
44
|
- State `generatedAt` / `fetchedAt`. This is a live read, so it goes stale in
|
|
45
|
-
seconds, not days — the opposite failure mode from a stored `/stocks:
|
|
45
|
+
seconds, not days — the opposite failure mode from a stored `/stocks:report` report.
|
|
46
46
|
- The score's liquidity component counts venue-local volume only, so it is
|
|
47
|
-
**not comparable** to an equity's score from `/stocks:
|
|
47
|
+
**not comparable** to an equity's score from `/stocks:report`. Do not rank the two
|
|
48
48
|
against each other.
|
|
49
49
|
- End with the response's own `disclaimer`. This is research, not advice.
|
|
50
50
|
- Link the shareable page: `https://advis0r.com/crypto/<PAIR>`.
|
|
@@ -32,5 +32,5 @@ Fallback: `curl -sS "https://advis0r.com/api/crypto/sparklines?symbols=BTC-USD,E
|
|
|
32
32
|
- Name the window (`start` → `end`) and the period. "Up 5%" over 24h and over 7d
|
|
33
33
|
are different claims.
|
|
34
34
|
- Do not extrapolate a trend from 24 points, and do not call a direction
|
|
35
|
-
"momentum" without the technicals to back it — `/crypto:
|
|
35
|
+
"momentum" without the technicals to back it — `/crypto:report <PAIR>` has those.
|
|
36
36
|
- End with the response's own `disclaimer`.
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"$schema": "https://anthropic.com/claude-code/plugin.schema.json",
|
|
3
3
|
"name": "stocks",
|
|
4
4
|
"description": "Equity research slash commands backed by advis0r.com: scored reports, extracted signals, transcript search, company-name lookup, and ranked watchlists.",
|
|
5
|
-
"version": "0.
|
|
5
|
+
"version": "0.4.0",
|
|
6
6
|
"author": {
|
|
7
7
|
"name": "moshcoder",
|
|
8
8
|
"url": "https://moshcode.sh"
|
package/plugins/stocks/README.md
CHANGED
|
@@ -6,13 +6,25 @@ and ranked watchlists.
|
|
|
6
6
|
|
|
7
7
|
| command | what it does |
|
|
8
8
|
| --- | --- |
|
|
9
|
-
| `/stocks:
|
|
9
|
+
| `/stocks:help` | this list, in the engine |
|
|
10
|
+
| `/stocks:report NVDA` | score, technicals, fundamentals, thesis, signals, sources |
|
|
11
|
+
| `/stocks:quote NVDA` | the short answer — price, score, staleness |
|
|
12
|
+
| `/stocks:lookup rivian` | company name → `RIVN` |
|
|
10
13
|
| `/stocks:signals AAPL` | what was actually said, quoted and sourced |
|
|
11
14
|
| `/stocks:research data center` | full-text search across every indexed transcript |
|
|
12
|
-
| `/stocks:
|
|
13
|
-
| `/stocks:reports` | every stored report, best score first |
|
|
15
|
+
| `/stocks:list` | every ticker with a stored report, best score first |
|
|
14
16
|
| `/stocks:discover fusion` | a ranked watchlist for a topic (slow) |
|
|
15
17
|
|
|
18
|
+
The first four names mean the same thing in `crypto@moshcode` — `help`,
|
|
19
|
+
`report`, `quote`, `lookup` — so knowing one plugin gets you half the other.
|
|
20
|
+
The rest are the parts equities have and crypto does not: transcripts, filings,
|
|
21
|
+
and a watchlist built from them.
|
|
22
|
+
|
|
23
|
+
`/stocks:report` takes a symbol and returns one write-up; `/stocks:list` takes
|
|
24
|
+
none and lists everything covered. `list` was called `reports` until v0.31.0 —
|
|
25
|
+
one letter from `report`, which made it a coin-flip at the prompt. The CLI has
|
|
26
|
+
accepted `moshcode stocks list` all along, so the two surfaces still agree.
|
|
27
|
+
|
|
16
28
|
The `stocks:` prefix is not optional. Claude Code namespaces every plugin
|
|
17
29
|
command as `/<plugin>:<command>` — always, not only when two plugins collide —
|
|
18
30
|
so a bare `/stocks` answers `Unknown command`. Typing `/` and picking from the
|
|
@@ -24,11 +36,11 @@ command, not this plugin's.)
|
|
|
24
36
|
## Upgrading from `ticker@moshcode`
|
|
25
37
|
|
|
26
38
|
This plugin used to be called `ticker`. Both it and its headline command were
|
|
27
|
-
renamed so the name says which market it covers, now that `/crypto:
|
|
39
|
+
renamed so the name says which market it covers, now that `/crypto:report` sits beside
|
|
28
40
|
it.
|
|
29
41
|
|
|
30
42
|
Installing the new one does **not** replace the old one — engines install
|
|
31
|
-
plugins side by side, so `/stocks:
|
|
43
|
+
plugins side by side, so `/stocks:report` would come from two plugins at once. Remove
|
|
32
44
|
the old id first:
|
|
33
45
|
|
|
34
46
|
```bash
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: What the stocks plugin can do, and the exact command names to type.
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
## Task
|
|
6
|
+
|
|
7
|
+
List what this plugin provides. Do not call any tool — everything needed is
|
|
8
|
+
below. Render it as a compact table, then the notes.
|
|
9
|
+
|
|
10
|
+
| command | what it does |
|
|
11
|
+
| --- | --- |
|
|
12
|
+
| `/stocks:report <SYMBOL>` | the full research report — score, technicals, fundamentals, thesis, signals, sources |
|
|
13
|
+
| `/stocks:quote <SYMBOL>` | the short answer — price, score, staleness |
|
|
14
|
+
| `/stocks:lookup <company>` | company name → ticker (`rivian` → `RIVN`) |
|
|
15
|
+
| `/stocks:signals <SYMBOL>` | what was actually said, quoted and sourced |
|
|
16
|
+
| `/stocks:research <words…>` | full-text search across every indexed transcript |
|
|
17
|
+
| `/stocks:list` | every ticker with a stored report, best score first |
|
|
18
|
+
| `/stocks:discover <topic>` | a ranked watchlist for a topic (slow — analyzes each candidate) |
|
|
19
|
+
|
|
20
|
+
## Notes to pass on
|
|
21
|
+
|
|
22
|
+
- `/stocks:report` takes a symbol and returns one write-up; `/stocks:list` takes
|
|
23
|
+
no symbol and lists everything covered. (`list` used to be called `reports`,
|
|
24
|
+
which sat one letter from `report` and was a coin-flip at the prompt.)
|
|
25
|
+
- Every command name is namespaced `/stocks:…`. A bare `/report` is not a
|
|
26
|
+
command — Claude Code always prefixes plugin commands with the plugin name.
|
|
27
|
+
- `crypto@moshcode` is the sibling plugin, and the four shared names mean the
|
|
28
|
+
same thing there: `/crypto:report`, `/crypto:quote`, `/crypto:lookup`,
|
|
29
|
+
`/crypto:help`. It adds `/crypto:book`, `/crypto:bars`, `/crypto:spark` and
|
|
30
|
+
`/crypto:pairs` for things equities do not have.
|
|
31
|
+
- Everything here is a **stored snapshot** from advis0r.com, read-only and
|
|
32
|
+
public. Nothing in this plugin can place an order — that is `moshcode trade`.
|
|
33
|
+
|
|
34
|
+
If the user asked for something no command covers, say so rather than
|
|
35
|
+
improvising one that does not exist.
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
---
|
|
2
|
-
description:
|
|
2
|
+
description: List every ticker with a stored report, best score first.
|
|
3
3
|
argument-hint: "[--limit n] [--sort recent|score|ticker]"
|
|
4
4
|
allowed-tools: Bash(moshcode stocks:*), Bash(curl -sS https://advis0r.com/api/:*)
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
## Task
|
|
8
8
|
|
|
9
|
-
List
|
|
9
|
+
List every ticker advis0r has a stored report for.
|
|
10
10
|
|
|
11
11
|
```bash
|
|
12
|
-
moshcode stocks
|
|
12
|
+
moshcode stocks list $ARGUMENTS --json
|
|
13
13
|
```
|
|
14
14
|
|
|
15
15
|
Fallback: `curl -sS "https://advis0r.com/api/reports?sort=score&limit=25"`
|
|
@@ -26,5 +26,5 @@ generatedAt }`, and `total` is how many exist.
|
|
|
26
26
|
- **`generatedAt` per row, always.** These are snapshots taken at different
|
|
27
27
|
times; a table that hides that reads as one consistent as-of date.
|
|
28
28
|
- A row with no `aiProvider` was scored deterministically, not by a model.
|
|
29
|
-
- Offer `/stocks:
|
|
29
|
+
- Offer `/stocks:report <SYMBOL>` for anything worth a closer look.
|
|
30
30
|
- This is a coverage list, not a recommendation list. Rank order is score order.
|
|
@@ -22,6 +22,6 @@ Fallback: `curl -sS "https://advis0r.com/api/lookup?q=<url-encoded>&limit=10"`
|
|
|
22
22
|
## Rules
|
|
23
23
|
|
|
24
24
|
- Show every match with its exchange — "Delta" is an airline and a faucet company.
|
|
25
|
-
- Mark which ones have a report, and offer `/stocks:
|
|
25
|
+
- Mark which ones have a report, and offer `/stocks:report <SYMBOL>` for those.
|
|
26
26
|
- One unambiguous match: say the symbol and go straight to offering the report.
|
|
27
27
|
- No match: say the *directory* has no match, and do not invent a symbol.
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: The fast read on one ticker — price, score, and how stale the snapshot is.
|
|
3
|
+
argument-hint: <SYMBOL>
|
|
4
|
+
allowed-tools: Bash(moshcode stocks:*), Bash(curl -sS https://advis0r.com/api/:*)
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Task
|
|
8
|
+
|
|
9
|
+
Give the short answer on `$ARGUMENTS` — price and score, not the full write-up.
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
moshcode stocks $ARGUMENTS --json
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
Fallback: `curl -sS "https://advis0r.com/api/ticker?symbol=$ARGUMENTS"`
|
|
16
|
+
|
|
17
|
+
This is the same document `/stocks:report` reads. The difference is what you do
|
|
18
|
+
with it: four lines, not a report. If the user wants the thesis, signals and
|
|
19
|
+
sources, that is `/stocks:report`.
|
|
20
|
+
|
|
21
|
+
## Reading the response
|
|
22
|
+
|
|
23
|
+
Take only: `lastPrice`, `priceTimestamp`, `delayed`, `overallScore`,
|
|
24
|
+
`classification`, and `companyName`.
|
|
25
|
+
|
|
26
|
+
## Rules
|
|
27
|
+
|
|
28
|
+
- **Four lines at most.** Price, score with classification, staleness, and one
|
|
29
|
+
pointer to `/stocks:report <SYMBOL>` for the rest. Brevity is the feature.
|
|
30
|
+
- **This is a stored snapshot, not a live quote.** Print `priceTimestamp` and
|
|
31
|
+
say `delayed` when it is — a stale price presented as a live one is the one
|
|
32
|
+
failure here that costs money. Equities are not crypto: this number can be
|
|
33
|
+
days old.
|
|
34
|
+
- A low score is the answer, not a failure to answer. Say it plainly.
|
|
35
|
+
- Keep the response's own `disclaimer` if the user is acting on the number.
|
|
36
|
+
- If the symbol 400s with `didYouMean`, they typed a company name — re-run
|
|
37
|
+
against the suggestion and say you did, or point at `/stocks:lookup`.
|
package/src/plugins.mjs
CHANGED
|
@@ -53,20 +53,41 @@ export function marketplaceSource(env = process.env) {
|
|
|
53
53
|
export const PLUGINS = [
|
|
54
54
|
{
|
|
55
55
|
name: "stocks",
|
|
56
|
-
version: "0.
|
|
56
|
+
version: "0.4.0",
|
|
57
57
|
description: "equity research slash commands backed by advis0r.com",
|
|
58
|
-
|
|
59
|
-
|
|
58
|
+
// `list` rather than `reports`: one letter from `report` is a coin-flip at
|
|
59
|
+
// the prompt, and `index` would read as a market index in a stocks plugin.
|
|
60
|
+
// The CLI already accepts `moshcode stocks list` as an alias, so the two
|
|
61
|
+
// surfaces still agree.
|
|
62
|
+
commands: [
|
|
63
|
+
"/stocks:help", "/stocks:report", "/stocks:quote", "/stocks:lookup",
|
|
64
|
+
"/stocks:signals", "/stocks:research", "/stocks:list", "/stocks:discover",
|
|
65
|
+
],
|
|
66
|
+
example: "/stocks:report NVDA",
|
|
60
67
|
},
|
|
61
68
|
{
|
|
62
69
|
name: "crypto",
|
|
63
|
-
version: "0.
|
|
70
|
+
version: "0.4.0",
|
|
64
71
|
description: "crypto market data slash commands backed by advis0r.com",
|
|
65
|
-
commands: [
|
|
66
|
-
|
|
72
|
+
commands: [
|
|
73
|
+
"/crypto:help", "/crypto:report", "/crypto:quote", "/crypto:lookup",
|
|
74
|
+
"/crypto:book", "/crypto:bars", "/crypto:spark", "/crypto:pairs",
|
|
75
|
+
],
|
|
76
|
+
example: "/crypto:report BTC",
|
|
67
77
|
},
|
|
68
78
|
];
|
|
69
79
|
|
|
80
|
+
/**
|
|
81
|
+
* Command names both plugins are expected to share.
|
|
82
|
+
*
|
|
83
|
+
* The two cover different markets, so they can never ship the same *set* — a
|
|
84
|
+
* crypto pair has no earnings transcript and an equity has no order book. What
|
|
85
|
+
* they can share is vocabulary: the same question is spelled the same way on
|
|
86
|
+
* both sides, so knowing one plugin means knowing half the other. A test holds
|
|
87
|
+
* this, because the natural drift is for one side to grow a synonym.
|
|
88
|
+
*/
|
|
89
|
+
export const SHARED_COMMANDS = ["help", "report", "quote", "lookup"];
|
|
90
|
+
|
|
70
91
|
/** How Claude Code namespaces a plugin's command. */
|
|
71
92
|
export function pluginCommandName(plugin, file) {
|
|
72
93
|
return `/${plugin}:${String(file).replace(/\.md$/, "")}`;
|
|
File without changes
|