moshcode 0.29.2 → 0.30.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 +22 -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 +14 -4
- package/plugins/stocks/commands/help.md +34 -0
- package/plugins/stocks/commands/lookup.md +1 -1
- package/plugins/stocks/commands/quote.md +37 -0
- package/plugins/stocks/commands/reports.md +1 -1
- package/src/plugins.mjs +33 -4
- /package/plugins/stocks/commands/{stocks.md → report.md} +0 -0
package/README.md
CHANGED
|
@@ -376,18 +376,32 @@ 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` `reports` `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.
|
|
390
396
|
|
|
397
|
+
Updating an installed plugin is its own step, and upgrading moshcode does not do
|
|
398
|
+
it: an engine only pulls a new copy when the *plugin's* own version moves.
|
|
399
|
+
|
|
400
|
+
```sh
|
|
401
|
+
claude plugin update stocks@moshcode
|
|
402
|
+
claude plugin update crypto@moshcode
|
|
403
|
+
```
|
|
404
|
+
|
|
391
405
|
Plugin commands are namespaced `/<plugin>:<command>` — always, not only when two
|
|
392
406
|
plugins collide — so it is `/stocks:signals AAPL`, and a bare `/signals` answers
|
|
393
407
|
`Unknown command`. Typing `/` and picking from the menu inserts the right form.
|
|
@@ -412,7 +426,7 @@ any marketplace". `moshcode plugin install` runs both steps for you.
|
|
|
412
426
|
### Upgrading from `ticker@moshcode`
|
|
413
427
|
|
|
414
428
|
`stocks` was called `ticker` before v0.29.0. Installing the new id does **not**
|
|
415
|
-
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
|
|
416
430
|
come from two plugins at once. Remove the old id first:
|
|
417
431
|
|
|
418
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.3.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:reports` 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.3.0",
|
|
6
6
|
"author": {
|
|
7
7
|
"name": "moshcoder",
|
|
8
8
|
"url": "https://moshcode.sh"
|
package/plugins/stocks/README.md
CHANGED
|
@@ -6,13 +6,23 @@ 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:lookup rivian` | company name → `RIVN` |
|
|
13
15
|
| `/stocks:reports` | every 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
|
+
Note `report` and `reports` are different commands: singular takes a symbol and
|
|
24
|
+
returns one write-up, plural takes nothing and lists the whole stored index.
|
|
25
|
+
|
|
16
26
|
The `stocks:` prefix is not optional. Claude Code namespaces every plugin
|
|
17
27
|
command as `/<plugin>:<command>` — always, not only when two plugins collide —
|
|
18
28
|
so a bare `/stocks` answers `Unknown command`. Typing `/` and picking from the
|
|
@@ -24,11 +34,11 @@ command, not this plugin's.)
|
|
|
24
34
|
## Upgrading from `ticker@moshcode`
|
|
25
35
|
|
|
26
36
|
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:
|
|
37
|
+
renamed so the name says which market it covers, now that `/crypto:report` sits beside
|
|
28
38
|
it.
|
|
29
39
|
|
|
30
40
|
Installing the new one does **not** replace the old one — engines install
|
|
31
|
-
plugins side by side, so `/stocks:
|
|
41
|
+
plugins side by side, so `/stocks:report` would come from two plugins at once. Remove
|
|
32
42
|
the old id first:
|
|
33
43
|
|
|
34
44
|
```bash
|
|
@@ -0,0 +1,34 @@
|
|
|
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:reports` | every 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
|
+
- **`report` and `reports` are different commands.** Singular takes a symbol and
|
|
23
|
+
returns one write-up; plural takes nothing and lists the whole stored index.
|
|
24
|
+
- Every command name is namespaced `/stocks:…`. A bare `/report` is not a
|
|
25
|
+
command — Claude Code always prefixes plugin commands with the plugin name.
|
|
26
|
+
- `crypto@moshcode` is the sibling plugin, and the four shared names mean the
|
|
27
|
+
same thing there: `/crypto:report`, `/crypto:quote`, `/crypto:lookup`,
|
|
28
|
+
`/crypto:help`. It adds `/crypto:book`, `/crypto:bars`, `/crypto:spark` and
|
|
29
|
+
`/crypto:pairs` for things equities do not have.
|
|
30
|
+
- Everything here is a **stored snapshot** from advis0r.com, read-only and
|
|
31
|
+
public. Nothing in this plugin can place an order — that is `moshcode trade`.
|
|
32
|
+
|
|
33
|
+
If the user asked for something no command covers, say so rather than
|
|
34
|
+
improvising one that does not exist.
|
|
@@ -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`.
|
|
@@ -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.
|
package/src/plugins.mjs
CHANGED
|
@@ -39,22 +39,51 @@ export function marketplaceSource(env = process.env) {
|
|
|
39
39
|
* `example` exists because the invitation printed after an install has to be
|
|
40
40
|
* runnable. It used to append a hardcoded "NVDA" to whatever came first in
|
|
41
41
|
* `commands`, which told anyone installing the crypto plugin to try a stock.
|
|
42
|
+
*
|
|
43
|
+
* `version` mirrors each plugin's own plugin.json, and it is not decoration:
|
|
44
|
+
* "If set, users only receive updates when you bump this field."
|
|
45
|
+
* https://code.claude.com/docs/en/plugins-reference#version-management
|
|
46
|
+
*
|
|
47
|
+
* So editing a plugin's commands and shipping a moshcode release is *not*
|
|
48
|
+
* enough — an existing install keeps serving the old copy until this number
|
|
49
|
+
* moves. Both plugins sat at 0.1.0 through v0.29.2, which rewrote every command
|
|
50
|
+
* file. Change a plugin's contents, bump its version, in the same commit.
|
|
51
|
+
* A test fails when this list and the manifests disagree.
|
|
42
52
|
*/
|
|
43
53
|
export const PLUGINS = [
|
|
44
54
|
{
|
|
45
55
|
name: "stocks",
|
|
56
|
+
version: "0.3.0",
|
|
46
57
|
description: "equity research slash commands backed by advis0r.com",
|
|
47
|
-
commands: [
|
|
48
|
-
|
|
58
|
+
commands: [
|
|
59
|
+
"/stocks:help", "/stocks:report", "/stocks:quote", "/stocks:lookup",
|
|
60
|
+
"/stocks:signals", "/stocks:research", "/stocks:reports", "/stocks:discover",
|
|
61
|
+
],
|
|
62
|
+
example: "/stocks:report NVDA",
|
|
49
63
|
},
|
|
50
64
|
{
|
|
51
65
|
name: "crypto",
|
|
66
|
+
version: "0.3.0",
|
|
52
67
|
description: "crypto market data slash commands backed by advis0r.com",
|
|
53
|
-
commands: [
|
|
54
|
-
|
|
68
|
+
commands: [
|
|
69
|
+
"/crypto:help", "/crypto:report", "/crypto:quote", "/crypto:lookup",
|
|
70
|
+
"/crypto:book", "/crypto:bars", "/crypto:spark", "/crypto:pairs",
|
|
71
|
+
],
|
|
72
|
+
example: "/crypto:report BTC",
|
|
55
73
|
},
|
|
56
74
|
];
|
|
57
75
|
|
|
76
|
+
/**
|
|
77
|
+
* Command names both plugins are expected to share.
|
|
78
|
+
*
|
|
79
|
+
* The two cover different markets, so they can never ship the same *set* — a
|
|
80
|
+
* crypto pair has no earnings transcript and an equity has no order book. What
|
|
81
|
+
* they can share is vocabulary: the same question is spelled the same way on
|
|
82
|
+
* both sides, so knowing one plugin means knowing half the other. A test holds
|
|
83
|
+
* this, because the natural drift is for one side to grow a synonym.
|
|
84
|
+
*/
|
|
85
|
+
export const SHARED_COMMANDS = ["help", "report", "quote", "lookup"];
|
|
86
|
+
|
|
58
87
|
/** How Claude Code namespaces a plugin's command. */
|
|
59
88
|
export function pluginCommandName(plugin, file) {
|
|
60
89
|
return `/${plugin}:${String(file).replace(/\.md$/, "")}`;
|
|
File without changes
|