@invinite-org/invinite-data-cli 0.1.22 → 0.2.1
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 +321 -6
- package/claude-plugin/.claude-plugin/plugin.json +2 -2
- package/claude-plugin/agents/invinite-data.md +5 -1
- package/claude-plugin/commands/analyze-earnings-call.md +24 -0
- package/claude-plugin/commands/financial-research.md +2 -1
- package/claude-plugin/skills/invinite-data-cli/SKILL.md +91 -1
- package/dist/src/cli.d.ts +2 -0
- package/dist/src/cli.js +22 -1
- package/dist/src/cli.js.map +1 -1
- package/dist/src/client/api-client.d.ts +13 -1
- package/dist/src/client/api-client.js +46 -13
- package/dist/src/client/api-client.js.map +1 -1
- package/dist/src/client/download.d.ts +23 -0
- package/dist/src/client/download.js +116 -0
- package/dist/src/client/download.js.map +1 -0
- package/dist/src/client/earnings-live.d.ts +156 -0
- package/dist/src/client/earnings-live.js +270 -0
- package/dist/src/client/earnings-live.js.map +1 -0
- package/dist/src/client/pagination.js +2 -1
- package/dist/src/client/pagination.js.map +1 -1
- package/dist/src/client/websocket-client.d.ts +14 -1
- package/dist/src/client/websocket-client.js +118 -37
- package/dist/src/client/websocket-client.js.map +1 -1
- package/dist/src/commands/earnings-selector.d.ts +15 -0
- package/dist/src/commands/earnings-selector.js +29 -0
- package/dist/src/commands/earnings-selector.js.map +1 -0
- package/dist/src/commands/earnings.d.ts +13 -0
- package/dist/src/commands/earnings.js +705 -0
- package/dist/src/commands/earnings.js.map +1 -0
- package/dist/src/commands/plugin.d.ts +11 -0
- package/dist/src/commands/plugin.js +23 -8
- package/dist/src/commands/plugin.js.map +1 -1
- package/dist/src/commands/webhooks.d.ts +16 -0
- package/dist/src/commands/webhooks.js +186 -0
- package/dist/src/commands/webhooks.js.map +1 -0
- package/dist/src/commands/ws.d.ts +18 -0
- package/dist/src/commands/ws.js +57 -3
- package/dist/src/commands/ws.js.map +1 -1
- package/dist/src/formatters/flatten.d.ts +4 -0
- package/dist/src/formatters/flatten.js +15 -0
- package/dist/src/formatters/flatten.js.map +1 -0
- package/dist/src/formatters/time.d.ts +2 -0
- package/dist/src/formatters/time.js +14 -0
- package/dist/src/formatters/time.js.map +1 -0
- package/dist/src/shared/errors.d.ts +2 -1
- package/dist/src/shared/errors.js +5 -1
- package/dist/src/shared/errors.js.map +1 -1
- package/dist/src/shared/options.d.ts +2 -0
- package/dist/src/shared/options.js +6 -0
- package/dist/src/shared/options.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -120,10 +120,10 @@ npx @invinite-org/invinite-data-cli@latest plugin uninstall --all --global
|
|
|
120
120
|
|
|
121
121
|
| Runtime | Skill | Agent | Command |
|
|
122
122
|
|---------|-------|-------|---------|
|
|
123
|
-
| **Claude Code** | `skills/invinite-data-cli/SKILL.md` | `agents/invinite-data.md` | `commands/financial-research.md` |
|
|
124
|
-
| **OpenCode** | `command/invinite-data-cli.md` | `agents/invinite-data.md` |
|
|
125
|
-
| **Codex** | `skills/invinite-data-cli/SKILL.md` | — | `skills/invinite-financial-research/SKILL.md` |
|
|
126
|
-
| **Copilot** | `skills/invinite-data-cli/SKILL.md` | — | `skills/invinite-financial-research/SKILL.md` |
|
|
123
|
+
| **Claude Code** | `skills/invinite-data-cli/SKILL.md` | `agents/invinite-data.md` | `commands/financial-research.md`, `commands/analyze-earnings-call.md` |
|
|
124
|
+
| **OpenCode** | `command/invinite-data-cli.md` | `agents/invinite-data.md` | `command/analyze-earnings-call.md` |
|
|
125
|
+
| **Codex** | `skills/invinite-data-cli/SKILL.md` | — | `skills/invinite-financial-research/SKILL.md`, `skills/invinite-analyze-earnings-call/SKILL.md` |
|
|
126
|
+
| **Copilot** | `skills/invinite-data-cli/SKILL.md` | — | `skills/invinite-financial-research/SKILL.md`, `skills/invinite-analyze-earnings-call/SKILL.md` |
|
|
127
127
|
|
|
128
128
|
### Alternative: Claude Code plugin directory
|
|
129
129
|
|
|
@@ -143,6 +143,13 @@ Use `/financial-research` for multi-step analysis:
|
|
|
143
143
|
/financial-research Analyze risk factors from NVDA's latest 10-K filing
|
|
144
144
|
```
|
|
145
145
|
|
|
146
|
+
Use `/analyze-earnings-call` for one call — results vs guidance, raised / lowered guidance, analyst focus and tone change vs the prior call, cited with `[m:ss]` timestamps:
|
|
147
|
+
|
|
148
|
+
```
|
|
149
|
+
/analyze-earnings-call NVDA
|
|
150
|
+
/analyze-earnings-call AAPL 2026 Q4
|
|
151
|
+
```
|
|
152
|
+
|
|
146
153
|
Or ask questions directly — the AI will auto-trigger the skill and delegate to the data agent as needed.
|
|
147
154
|
|
|
148
155
|
> **Note:** The CLI must be installed and authenticated (see [Authentication](#authentication)) for the plugin to work.
|
|
@@ -167,12 +174,14 @@ These options are available on all data commands:
|
|
|
167
174
|
- [metrics](#metrics) — Financial metrics, ratios, and growth
|
|
168
175
|
- [segments](#segments) — Segmented financials
|
|
169
176
|
- [filings](#filings) — SEC filings
|
|
177
|
+
- [earnings](#earnings) — Earnings calls: calendar, transcripts, Q&A, guidance, audio, slides, documents, search
|
|
170
178
|
- [ownership](#ownership) — Institutional ownership
|
|
171
179
|
- [insider-trades](#insider-trades) — Insider trading data
|
|
172
180
|
- [ipos](#ipos) — IPO listings
|
|
173
181
|
- [market](#market) — Market data
|
|
174
182
|
- [metadata](#metadata) — API metadata
|
|
175
|
-
- [
|
|
183
|
+
- [webhooks](#webhooks) — Earnings-call webhook subscriptions
|
|
184
|
+
- [ws](#ws) — WebSocket streaming (`ws listen --earnings` for live call transcripts, `--keywords` / `--all-live` for keyword alerts)
|
|
176
185
|
|
|
177
186
|
---
|
|
178
187
|
|
|
@@ -501,6 +510,255 @@ invd filings form-types -i AAPL
|
|
|
501
510
|
|
|
502
511
|
---
|
|
503
512
|
|
|
513
|
+
### earnings
|
|
514
|
+
|
|
515
|
+
Earnings calls: calendar, transcripts, Q&A, guidance and KPIs, audio, slides, documents, search. The live transcript (`ws listen --earnings`), audio, slides, the live stream and webhooks need the **PRO** plan (calendar, events and `live` need LITE, the other reads STANDARD); a `403` names the plan a route needs.
|
|
516
|
+
|
|
517
|
+
**Selecting a call.** Commands about one call (marked *selector* below) take either `--event <event_id>` (a UUID from `earnings events` / `earnings calendar`; wins over the rest), or `-i, --identifier <ticker|cik>` with `--year <n>` + `--quarter <n>` (the company's fiscal quarter) or `--date <YYYY-MM-DD>` (the New York call day).
|
|
518
|
+
|
|
519
|
+
**Saving files.** `--output <file>` saves a transcript, press release, recording or deck (`documents --output <dir>` saves every document); an existing file is only replaced with `--force`. Without `--output` the media commands print **presigned URLs that expire after 15 minutes**.
|
|
520
|
+
|
|
521
|
+
#### `earnings calendar`
|
|
522
|
+
|
|
523
|
+
Upcoming and recent calls across companies.
|
|
524
|
+
|
|
525
|
+
| Option | Description | Default |
|
|
526
|
+
|--------|-------------|---------|
|
|
527
|
+
| `--from <date>` / `--to <date>` | New York days (at most 92 days) | today / from + 14 days |
|
|
528
|
+
| `--status <list>` | `estimated`, `unconfirmed`, `confirmed`, `postponed`, `cancelled` (comma-separated) | — |
|
|
529
|
+
| `--session <session>` | `bmo`, `amc`, `intraday` | — |
|
|
530
|
+
| `--exchange <exchange>` | Exchange | — |
|
|
531
|
+
| `--event-type <type>` | `earnings_call`, `investor_day`, `conference`, `agm`, `other`, or `all` (every type) | `earnings_call` |
|
|
532
|
+
| `-s, --sort` / `-l, --limit` / `--offset` | Sort, page size (1–500), offset | — |
|
|
533
|
+
|
|
534
|
+
```bash
|
|
535
|
+
invd earnings calendar --from 2026-10-26 --to 2026-10-30 --status confirmed
|
|
536
|
+
```
|
|
537
|
+
|
|
538
|
+
#### `earnings events`
|
|
539
|
+
|
|
540
|
+
A company's calls.
|
|
541
|
+
|
|
542
|
+
| Option | Description |
|
|
543
|
+
|--------|-------------|
|
|
544
|
+
| `-i, --identifier <ticker>` | Ticker or CIK **(required)** |
|
|
545
|
+
| `--from <date>` / `--to <date>` | Call day range |
|
|
546
|
+
| `--event-type <type>` | `earnings_call`, `investor_day`, `conference`, `agm`, `other`, or `all` (default: every type) |
|
|
547
|
+
| `--observations` | Include the date / time observations per call |
|
|
548
|
+
| `-s, --sort` / `-l, --limit` / `--offset` | Sort, page size (1–200), offset |
|
|
549
|
+
|
|
550
|
+
```bash
|
|
551
|
+
invd earnings events -i AAPL -s desc -l 4
|
|
552
|
+
```
|
|
553
|
+
|
|
554
|
+
#### `earnings live`
|
|
555
|
+
|
|
556
|
+
Calls being captured right now (`live_audio` = a live stream exists).
|
|
557
|
+
|
|
558
|
+
```bash
|
|
559
|
+
invd earnings live
|
|
560
|
+
```
|
|
561
|
+
|
|
562
|
+
#### `earnings event`
|
|
563
|
+
|
|
564
|
+
One call with its date / time observations: `invd earnings event <event_id>`.
|
|
565
|
+
|
|
566
|
+
```bash
|
|
567
|
+
invd earnings event 0b9d6f43-6b1e-4c39-9d3a-2f6a3c1e8b11
|
|
568
|
+
```
|
|
569
|
+
|
|
570
|
+
#### `earnings transcript` *(selector)*
|
|
571
|
+
|
|
572
|
+
| Option | Description |
|
|
573
|
+
|--------|-------------|
|
|
574
|
+
| `--format <format>` | `speakers` (default), `text`, `words`, `sections`, `cleaned` |
|
|
575
|
+
| `--transcript-version <n>` | A published version (`earnings versions`); not `--version`, which prints the CLI version |
|
|
576
|
+
| `--as-of <iso>` | The version current at that instant |
|
|
577
|
+
| `-o, --output <file>` / `--force` | Save the transcript as text |
|
|
578
|
+
|
|
579
|
+
The header shows where the Q&A begins ("Q&A starts at 41:07") when the call has one; `--json` carries it as `qa_start_ms` (milliseconds, `null` without a Q&A).
|
|
580
|
+
|
|
581
|
+
```bash
|
|
582
|
+
invd earnings transcript -i AAPL --year 2026 --quarter 4 --output aapl-q4.txt
|
|
583
|
+
```
|
|
584
|
+
|
|
585
|
+
#### `earnings versions` *(selector)*
|
|
586
|
+
|
|
587
|
+
Published transcript versions (final, corrected, …).
|
|
588
|
+
|
|
589
|
+
```bash
|
|
590
|
+
invd earnings versions -i AAPL --date 2026-10-30
|
|
591
|
+
```
|
|
592
|
+
|
|
593
|
+
#### `earnings transcript-diff` *(selector)*
|
|
594
|
+
|
|
595
|
+
| Option | Description |
|
|
596
|
+
|--------|-------------|
|
|
597
|
+
| `--from <n>` | Older version **(required)** |
|
|
598
|
+
| `--to <n>` | Newer version (default: the current one) |
|
|
599
|
+
|
|
600
|
+
```bash
|
|
601
|
+
invd earnings transcript-diff --event <event_id> --from 1
|
|
602
|
+
```
|
|
603
|
+
|
|
604
|
+
#### `earnings qa` *(selector)*
|
|
605
|
+
|
|
606
|
+
Question / answer pairs with the analyst and the answering executives (`-l, --limit` 1–200, `--offset`).
|
|
607
|
+
|
|
608
|
+
```bash
|
|
609
|
+
invd earnings qa -i NVDA --year 2027 --quarter 2
|
|
610
|
+
```
|
|
611
|
+
|
|
612
|
+
#### `earnings participants` *(selector)*
|
|
613
|
+
|
|
614
|
+
Speakers of the call (`--evidence` adds the quotes each name was resolved from).
|
|
615
|
+
|
|
616
|
+
```bash
|
|
617
|
+
invd earnings participants --event <event_id> --evidence
|
|
618
|
+
```
|
|
619
|
+
|
|
620
|
+
#### `earnings analysts`
|
|
621
|
+
|
|
622
|
+
Analysts on a company's calls (`-i` **required**, `-l, --limit` 1–100, `--offset`).
|
|
623
|
+
|
|
624
|
+
```bash
|
|
625
|
+
invd earnings analysts -i MSFT
|
|
626
|
+
```
|
|
627
|
+
|
|
628
|
+
#### `earnings person`
|
|
629
|
+
|
|
630
|
+
One person's call appearances: `invd earnings person <person_id>` (`-l, --limit` 1–200, `--offset`).
|
|
631
|
+
|
|
632
|
+
```bash
|
|
633
|
+
invd earnings person <person_id>
|
|
634
|
+
```
|
|
635
|
+
|
|
636
|
+
#### `earnings press-release` *(selector)*
|
|
637
|
+
|
|
638
|
+
| Option | Description |
|
|
639
|
+
|--------|-------------|
|
|
640
|
+
| `--body` | Include the release text |
|
|
641
|
+
| `-o, --output <file>` / `--force` | Save the release text |
|
|
642
|
+
|
|
643
|
+
```bash
|
|
644
|
+
invd earnings press-release -i AAPL --year 2026 --quarter 4 --body
|
|
645
|
+
```
|
|
646
|
+
|
|
647
|
+
#### `earnings extractions` *(selector)*
|
|
648
|
+
|
|
649
|
+
| Option | Description |
|
|
650
|
+
|--------|-------------|
|
|
651
|
+
| `--kind <kind>` | `guidance` (default) or `kpi` |
|
|
652
|
+
| `--review <filter>` | Guidance review filter: `approved`, `auto`, `all` |
|
|
653
|
+
| `-l, --limit` / `--offset` | Page size (1–500), offset |
|
|
654
|
+
|
|
655
|
+
```bash
|
|
656
|
+
invd earnings extractions --event <event_id> --kind kpi
|
|
657
|
+
```
|
|
658
|
+
|
|
659
|
+
#### `earnings guidance-history`
|
|
660
|
+
|
|
661
|
+
A company's guidance for one metric across calls.
|
|
662
|
+
|
|
663
|
+
| Option | Description |
|
|
664
|
+
|--------|-------------|
|
|
665
|
+
| `-i, --identifier <ticker>` | Ticker or CIK **(required)** |
|
|
666
|
+
| `--metric <metric>` | Normalized metric, e.g. `revenue`, `eps_non_gaap`, `segment:iphone` **(required)** |
|
|
667
|
+
| `--period-kind <kind>` | `quarter`, `fiscal_year`, `half`, `other` |
|
|
668
|
+
| `--basis <basis>` | `gaap`, `non_gaap`, `unknown` |
|
|
669
|
+
| `-l, --limit <n>` | Series entries (1–40) |
|
|
670
|
+
|
|
671
|
+
```bash
|
|
672
|
+
invd earnings guidance-history -i AAPL --metric revenue --period-kind quarter
|
|
673
|
+
```
|
|
674
|
+
|
|
675
|
+
#### `earnings diff` *(selector)*
|
|
676
|
+
|
|
677
|
+
What changed against the prior call: similarity, tone, hedging, new / dropped topics, slide changes (`--vs prior`, the only base).
|
|
678
|
+
|
|
679
|
+
```bash
|
|
680
|
+
invd earnings diff -i AAPL --year 2026 --quarter 4
|
|
681
|
+
```
|
|
682
|
+
|
|
683
|
+
#### `earnings metrics` *(selector)*
|
|
684
|
+
|
|
685
|
+
Call structure metrics (length, Q&A share, question count, …).
|
|
686
|
+
|
|
687
|
+
```bash
|
|
688
|
+
invd earnings metrics --event <event_id>
|
|
689
|
+
```
|
|
690
|
+
|
|
691
|
+
#### `earnings prosody` *(selector)*
|
|
692
|
+
|
|
693
|
+
Speech timing, pitch and energy per speaker (`--section all|prepared|qa`).
|
|
694
|
+
|
|
695
|
+
```bash
|
|
696
|
+
invd earnings prosody --event <event_id> --section qa
|
|
697
|
+
```
|
|
698
|
+
|
|
699
|
+
#### `earnings audio` *(selector)*
|
|
700
|
+
|
|
701
|
+
The recording as a presigned URL, or `-o, --output <file>` (+ `--force`) to save it.
|
|
702
|
+
|
|
703
|
+
```bash
|
|
704
|
+
invd earnings audio --event <event_id> --output call.mp3
|
|
705
|
+
```
|
|
706
|
+
|
|
707
|
+
#### `earnings slides` *(selector)*
|
|
708
|
+
|
|
709
|
+
| Option | Description |
|
|
710
|
+
|--------|-------------|
|
|
711
|
+
| `--markdown` | Include each page's extracted text |
|
|
712
|
+
| `--pages <range>` | Page or range, e.g. `3` or `1-5` |
|
|
713
|
+
| `-o, --output <file>` / `--force` | Save the deck PDF |
|
|
714
|
+
|
|
715
|
+
```bash
|
|
716
|
+
invd earnings slides -i AAPL --year 2026 --quarter 4 --output deck.pdf
|
|
717
|
+
```
|
|
718
|
+
|
|
719
|
+
#### `earnings documents` *(selector)*
|
|
720
|
+
|
|
721
|
+
Investor documents of the call (CFO commentary, data sheets, letters, filings).
|
|
722
|
+
|
|
723
|
+
| Option | Description |
|
|
724
|
+
|--------|-------------|
|
|
725
|
+
| `--kind <list>` | `cfo_commentary`, `financial_data`, `shareholder_letter`, `fact_sheet`, `company_transcript`, `sec_filing`, `infographic`, `other` |
|
|
726
|
+
| `--body` | Include the extracted text |
|
|
727
|
+
| `-l, --limit` / `--offset` | Page size (1–100), offset |
|
|
728
|
+
| `-o, --output <dir>` / `--force` | Save every document as `<kind>-<document_id>.<ext>` |
|
|
729
|
+
|
|
730
|
+
With `--output`, a document without a download URL (a link-only `sec_filing`, or a file the API could not fetch — use its `source_url`) is never skipped silently: each gets a warning on stderr, followed by a count (`2 of 3 documents saved; 1 skipped`). The exit code is 0 when at least one document was saved (or the list was empty) and 1 when documents were listed but none could be saved. An interrupted download (Ctrl-C) never leaves a partial file behind.
|
|
731
|
+
|
|
732
|
+
```bash
|
|
733
|
+
invd earnings documents --event <event_id> --output ./docs
|
|
734
|
+
```
|
|
735
|
+
|
|
736
|
+
#### `earnings search`
|
|
737
|
+
|
|
738
|
+
Semantic search over call transcripts and slides.
|
|
739
|
+
|
|
740
|
+
| Option | Description |
|
|
741
|
+
|--------|-------------|
|
|
742
|
+
| `-q, --query <text>` | Search text **(required)** |
|
|
743
|
+
| `--event <event_id>` / `-i, --identifier <ticker>` | Only this call / company |
|
|
744
|
+
| `--from <date>` / `--to <date>` | Call day range |
|
|
745
|
+
| `--type <type>` | `transcript`, `qa`, `preparedRemarks`, `presentation` |
|
|
746
|
+
| `-l, --limit <n>` | Passages (1–8) |
|
|
747
|
+
|
|
748
|
+
```bash
|
|
749
|
+
invd earnings search -q "data center demand" -i NVDA
|
|
750
|
+
```
|
|
751
|
+
|
|
752
|
+
#### `earnings stream` *(selector)*
|
|
753
|
+
|
|
754
|
+
The live HLS audio URL of a call in progress (PRO; `status` = `available`, `not_started`, `ended` or `disabled`). Play it with `ffplay` or VLC; the URL expires (`expires_at`).
|
|
755
|
+
|
|
756
|
+
```bash
|
|
757
|
+
invd earnings stream --event <event_id>
|
|
758
|
+
```
|
|
759
|
+
|
|
760
|
+
---
|
|
761
|
+
|
|
504
762
|
### ownership
|
|
505
763
|
|
|
506
764
|
Institutional ownership data.
|
|
@@ -661,13 +919,50 @@ invd metadata section-ids
|
|
|
661
919
|
|
|
662
920
|
---
|
|
663
921
|
|
|
922
|
+
### webhooks
|
|
923
|
+
|
|
924
|
+
Earnings-call webhook subscriptions (PRO): signed, retried `POST`s of the call lifecycle to your HTTPS endpoint. Events: `earnings_call.scheduled`, `.rescheduled`, `.started`, `.ended`, `.transcript_provisional`, `.transcript_ready`, `.transcript_corrected`, `.assets_ready`, `.keyword_hit` (one delivery per mention of one of the subscription's `--keywords` on a live call, with the speaker, `start_ms` and the sentence), `.guidance_flash` (a guidance number spoken live, before the final transcript), and `ping`. Deliveries carry `X-Invinite-Signature: t=…,v1=…` (HMAC-SHA256 of `<t>.<raw body>` with the secret) and are retried after 1 min, 5 min, 30 min, 2 h, 6 h, 12 h and 24 h.
|
|
925
|
+
|
|
926
|
+
| Command | Description |
|
|
927
|
+
|---------|-------------|
|
|
928
|
+
| `webhooks list` | Your team's subscriptions (never the secret, only `secret_hint`) |
|
|
929
|
+
| `webhooks create --url <url> --events <list> [--ciks <list>] [--keywords <list>]` | Create one (max 10 per team; `--ciks` max 10, default every company; `--keywords` max 20 of 2–64 chars, matched on every live call for `.keyword_hit`). **Prints the signing secret once** |
|
|
930
|
+
| `webhooks update <id> [--keywords <list>] [--ciks <list>] [--events <list>] [--active true\|false]` | Change a subscription (`PATCH`; at least one option; an empty `--keywords ""` / `--ciks ""` clears the list; `--active false` pauses it, `true` resumes it and resets the failure counters) |
|
|
931
|
+
| `webhooks delete <id>` | Delete a subscription |
|
|
932
|
+
| `webhooks rotate-secret <id>` | New secret (printed once); the old one stays valid until `previous_secret_expires_at` (5 min) |
|
|
933
|
+
| `webhooks test <id>` | Queue a signed `ping` delivery |
|
|
934
|
+
| `webhooks deliveries <id>` | The last 100 attempts: `delivery_id`, `event`, `attempt`, `status`, `response_status`, `duration_ms`, `at`, `next_attempt_at` |
|
|
935
|
+
|
|
936
|
+
```bash
|
|
937
|
+
invd webhooks create --url https://hooks.example.com/invinite --events earnings_call.transcript_ready,earnings_call.started --ciks 320193
|
|
938
|
+
invd webhooks create --url https://hooks.example.com/alerts --events earnings_call.keyword_hit --keywords tariffs,buyback # every company
|
|
939
|
+
invd webhooks update <id> --keywords tariffs,china,buyback
|
|
940
|
+
invd webhooks update <id> --active false
|
|
941
|
+
invd webhooks test <id>
|
|
942
|
+
invd webhooks deliveries <id>
|
|
943
|
+
```
|
|
944
|
+
|
|
945
|
+
---
|
|
946
|
+
|
|
664
947
|
### ws
|
|
665
948
|
|
|
666
949
|
Real-time WebSocket streaming.
|
|
667
950
|
|
|
668
951
|
#### `ws listen`
|
|
669
952
|
|
|
670
|
-
Listen to real-time SEC filing notifications. Automatically reconnects on disconnection with exponential backoff.
|
|
953
|
+
Listen to real-time SEC filing notifications, or with `--earnings` follow one earnings call's live transcript (PRO), or with `--all-live --keywords` get keyword alerts across every live call. Automatically reconnects on disconnection with exponential backoff.
|
|
954
|
+
|
|
955
|
+
| Option | Description |
|
|
956
|
+
|--------|-------------|
|
|
957
|
+
| `--earnings <event_id\|cik>` | Follow a live call: event ID (UUID) or CIK |
|
|
958
|
+
| `--all-live` | Keyword alerts across every live call at once (needs `--keywords`; no transcript, replay or partials) |
|
|
959
|
+
| `--since-seq <n>` | Replay the finals after this seq (default `-1` = the whole call so far) |
|
|
960
|
+
| `--partials` | Show interim segments, overwritten in place (terminal only; `--json` emits them) |
|
|
961
|
+
| `--names` | Print each speaker-name snapshot |
|
|
962
|
+
| `--keywords <list>` | Comma-separated keywords (max 20, 2–64 chars each): one highlighted `keyword_hit` line per mention |
|
|
963
|
+
| `--keyword-match exact\|stem` | `exact` (default) matches the word; `stem` also its inflections (`tariff` hits "tariffs") |
|
|
964
|
+
| `--speaker-roles <list>` | Only hits by these speakers: `executive`, `ir_host`, `analyst`, `operator` |
|
|
965
|
+
| `--min-rank <n>` | With `--all-live`: only companies ranked ≤ n by market cap |
|
|
671
966
|
|
|
672
967
|
```bash
|
|
673
968
|
invd ws listen
|
|
@@ -675,6 +970,26 @@ invd ws listen
|
|
|
675
970
|
|
|
676
971
|
Press `Ctrl+C` to disconnect.
|
|
677
972
|
|
|
973
|
+
**Live transcripts.** Find a call in progress, then follow it:
|
|
974
|
+
|
|
975
|
+
```bash
|
|
976
|
+
invd earnings live
|
|
977
|
+
invd ws listen --earnings 0b9d6f43-6b1e-4c39-9d3a-2f6a3c1e8b11 --partials
|
|
978
|
+
# AAPL 2026-10-30T21:00:00.000Z · capturing · from seq 0 (latest 41)
|
|
979
|
+
# [0:12] Operator: Good afternoon and welcome to the Apple Q4 fiscal year 2026 earnings call.
|
|
980
|
+
# [1:05] Tim Cook: Thank you, everyone, for joining us.
|
|
981
|
+
```
|
|
982
|
+
|
|
983
|
+
**Keyword and guidance alerts.** With `--keywords` the same subscription also delivers a `keyword_hit` frame for every mention (one highlighted line: `[m:ss] keyword "tariffs" · Tim Cook (executive): …`, the speaker from the API's live naming) and a `guidance_flash` frame for every guidance number spoken live (`[m:ss] guidance flash · Revenue Q1 FY2027: USD 4.1–4.3 billion — "…"`), both before the final transcript. `--all-live --keywords <list>` subscribes to every live call at once (`scope: "all_live"`; each line starts with the symbol; the API refuses it without keywords, and so does the CLI); a `warning` frame (`global_scope_degraded`: some calls may be missing from the alerts) is printed and never fatal. With `--json` both frames are emitted as they arrive.
|
|
984
|
+
|
|
985
|
+
```bash
|
|
986
|
+
invd ws listen --earnings 320193 --keywords tariffs,china --keyword-match stem --speaker-roles executive
|
|
987
|
+
invd ws listen --all-live --keywords tariffs --min-rank 500
|
|
988
|
+
invd ws listen --all-live --keywords tariffs --json | jq -r 'select(.type=="keyword_hit") | "\(.symbol) \(.speaker_name): \(.text)"'
|
|
989
|
+
```
|
|
990
|
+
|
|
991
|
+
Finals are named from the newest speaker-name snapshot (`Speaker A` until a name is known). A `gap` line marks a seq range with no final yet (a late final may still follow on the same subscription, so finals can print slightly out of order); `resume_unavailable` means missed finals cannot be replayed right now — live delivery continues and the API back-fills them once it can. Neither needs a re-subscribe. After a reconnect the listener resumes after the last final it printed; it exits once the final transcript is ready (`invd earnings transcript --event <id>`). With `--json` every frame is one JSON line (NDJSON), e.g. `invd ws listen --earnings 320193 --json | jq -r 'select(.type=="transcript_segment") | .text'`.
|
|
992
|
+
|
|
678
993
|
---
|
|
679
994
|
|
|
680
995
|
## Output Formats
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "invinite-financial-data",
|
|
3
|
-
"description": "Fetch and analyze financial data using the Invinite Data API — company fundamentals, financial statements, SEC filings, institutional ownership, insider trades, and more.",
|
|
4
|
-
"version": "0.
|
|
3
|
+
"description": "Fetch and analyze financial data using the Invinite Data API — company fundamentals, financial statements, SEC filings, earnings calls (transcripts, guidance, Q&A, live calls), institutional ownership, insider trades, and more.",
|
|
4
|
+
"version": "0.4.0",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Invinite"
|
|
7
7
|
},
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: invinite-data
|
|
3
|
-
description: Fetches financial data from the Invinite Data API for analysis. Use this agent whenever you need company financials, SEC filings, institutional ownership, insider trades, financial ratios, growth metrics, or any stock/company data. Delegate to this agent when the user asks for financial data retrieval, company research, or comparative financial analysis — even if they don't mention "Invinite" explicitly. This agent knows how to efficiently query the right endpoints, combine data from multiple sources, and return structured results ready for analysis.
|
|
3
|
+
description: Fetches financial data from the Invinite Data API for analysis. Use this agent whenever you need company financials, SEC filings, institutional ownership, insider trades, financial ratios, growth metrics, earnings calls (calendar, transcripts, guidance and KPIs, Q&A, press releases, slides), or any stock/company data. Delegate to this agent when the user asks for financial data retrieval, company research, or comparative financial analysis — even if they don't mention "Invinite" explicitly. This agent knows how to efficiently query the right endpoints, combine data from multiple sources, and return structured results ready for analysis.
|
|
4
4
|
tools: Bash(invd *), Read, Glob, Grep
|
|
5
5
|
skills:
|
|
6
6
|
- invinite-data-cli
|
|
@@ -29,6 +29,8 @@ You are a financial data retrieval specialist. Your job is to fetch the requeste
|
|
|
29
29
|
- When fetching financial statements, default to `annual` period unless the request specifies otherwise
|
|
30
30
|
- Use `--limit` appropriately — don't fetch more data than needed, but don't under-fetch either
|
|
31
31
|
- For large datasets, use `--all` only when specifically needed
|
|
32
|
+
- For earnings calls, resolve the call's `event_id` first (`invd earnings events -i <TICKER> -s desc -l 4 --json`) and pass `--event <event_id>` to every per-call command; keep `start_ms` values in the results so the caller can cite `[m:ss]` timestamps
|
|
33
|
+
- Never pass `--output` (file downloads) unless the caller asked for a file
|
|
32
34
|
|
|
33
35
|
## Query planning
|
|
34
36
|
|
|
@@ -40,6 +42,8 @@ Common multi-step patterns:
|
|
|
40
42
|
- **Ownership analysis**: holdings-by-company + ownership transactions
|
|
41
43
|
- **Filing deep-dive**: metadata section-ids (first) + filings list → then filings sections for full text
|
|
42
44
|
- **Comparative analysis**: metadata metrics (first) + financials snapshot with multiple tickers + metrics ratios for each
|
|
45
|
+
- **Earnings call review**: earnings events (first, for the `event_id`) → then in parallel press-release + extractions `--kind guidance` + extractions `--kind kpi` + qa + diff
|
|
46
|
+
- **Guidance tracking**: earnings guidance-history `--metric <metric>` across calls + extractions of the latest call
|
|
43
47
|
|
|
44
48
|
## Output format
|
|
45
49
|
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: analyze-earnings-call
|
|
3
|
+
description: Analyze a company's latest (or a given quarter's) earnings call — results vs guidance, raised or lowered guidance, analyst focus, tone change against the prior call — with timestamped evidence.
|
|
4
|
+
argument-hint: <ticker> [fiscal year + quarter, e.g. 2026 Q3]
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Analyze Earnings Call
|
|
8
|
+
|
|
9
|
+
Analyze the earnings call requested in `$ARGUMENTS` using Invinite Data. Prefer the MCP tools (`earnings_call_*`) when connected; otherwise use the `invd earnings` commands below with `--json`.
|
|
10
|
+
|
|
11
|
+
1. **Find the call.** Without a quarter, take the latest call that already happened: `invd earnings events -i <TICKER> --to <today> -s desc -l 1 --json` (MCP `earnings_call_events`). With a quarter, select it directly with `-i <TICKER> --year <YYYY> --quarter <Q>`. Use the call's `event_id` for every later step (`--event <event_id>`). If the call has no transcript yet, say so and stop.
|
|
12
|
+
2. **Fetch in parallel** (all with `--event <event_id> --json`):
|
|
13
|
+
- press release: `invd earnings press-release` (`earnings_call_press_release`)
|
|
14
|
+
- guidance: `invd earnings extractions --kind guidance` and KPIs: `invd earnings extractions --kind kpi` (`earnings_call_guidance`)
|
|
15
|
+
- Q&A: `invd earnings qa` (`earnings_call_qa`) and participants: `invd earnings participants` (`earnings_call_participants`)
|
|
16
|
+
- diff vs the prior call: `invd earnings diff` (`earnings_call_diff`)
|
|
17
|
+
- only when a claim needs the exact wording: `invd earnings transcript` (`earnings_call_transcript`) or `invd earnings search -q "<topic>" --event <event_id>` (`earnings_call_search`)
|
|
18
|
+
3. **Summarise**:
|
|
19
|
+
- **Results vs guidance** — reported figures from the press release against the guidance given on the prior call (`invd earnings guidance-history -i <TICKER> --metric <metric>` for a metric's series).
|
|
20
|
+
- **Guidance changes** — each item raised, lowered, maintained, introduced or withdrawn (`direction`), with the period and basis (GAAP / non-GAAP).
|
|
21
|
+
- **Analyst focus** — the recurring Q&A themes, who asked (firm), and where management deflected.
|
|
22
|
+
- **Tone change** — the diff's tone shift, hedging / uncertainty changes and new or dropped topics.
|
|
23
|
+
4. **Cite evidence** — every quote or claim carries its `[m:ss]` timestamp (from `start_ms`) and the speaker; separate what was said from your interpretation.
|
|
24
|
+
5. Flag what is missing (no press release, no guidance extracted, prior call not covered) instead of inferring it.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: financial-research
|
|
3
|
-
description: Perform AI-powered financial research and analysis. Use when the user asks to research companies, compare financials, analyze ownership patterns, review SEC filings, evaluate growth trends, or any multi-faceted financial question. This command orchestrates parallel data fetching and then synthesizes the results into a coherent analysis.
|
|
3
|
+
description: Perform AI-powered financial research and analysis. Use when the user asks to research companies, compare financials, analyze ownership patterns, review SEC filings or earnings calls, evaluate growth trends, or any multi-faceted financial question. This command orchestrates parallel data fetching and then synthesizes the results into a coherent analysis.
|
|
4
4
|
argument-hint: [question or research topic]
|
|
5
5
|
---
|
|
6
6
|
|
|
@@ -17,6 +17,7 @@ Break the user's request into independent data retrieval tasks. Think about what
|
|
|
17
17
|
- **Statements**: income statements, balance sheets, cash flows (for trend analysis)
|
|
18
18
|
- **Ownership**: institutional holders, ownership transactions, insider trades
|
|
19
19
|
- **Filings**: SEC filing sections (risk factors, MD&A, business descriptions)
|
|
20
|
+
- **Earnings calls**: call calendar, transcripts, management guidance and KPIs, Q&A with analysts, press releases, the diff vs the prior call
|
|
20
21
|
- **Context**: dividends, stock splits, fiscal periods, segments
|
|
21
22
|
|
|
22
23
|
Each independent data need becomes a separate subagent task.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: invinite-financial-data
|
|
3
|
-
description: Fetch financial data through the Invinite Data API MCP connector or invd CLI. Use whenever the user wants company information, financial statements, SEC filings, institutional ownership, insider trades, IPO data, market holidays, financial metrics, or other stock/company data, including requests mentioning tickers, CIKs, balance sheets, income statements, cash flows, 10-K, 10-Q, ratios, CAGR, growth rates, dividends, stock splits, or
|
|
3
|
+
description: Fetch financial data through the Invinite Data API MCP connector or invd CLI. Use whenever the user wants company information, financial statements, SEC filings, institutional ownership, insider trades, IPO data, market holidays, financial metrics, earnings calls, or other stock/company data, including requests mentioning tickers, CIKs, balance sheets, income statements, cash flows, 10-K, 10-Q, ratios, CAGR, growth rates, dividends, stock splits, institutional holdings, call transcripts, earnings guidance, KPIs, Q&A, analysts, live calls, slides, or press releases.
|
|
4
4
|
allowed-tools: Bash(invd *)
|
|
5
5
|
---
|
|
6
6
|
|
|
@@ -28,6 +28,12 @@ Use the connected Invinite Data API MCP tools when available. Fall back to the `
|
|
|
28
28
|
| Filing and metric discovery | `sec_available_form_types`, `list_available_section_ids`, `list_available_metrics` | `invd filings form-types`, `invd metadata ...` |
|
|
29
29
|
| Institutional ownership | `holdings_by_company`, `holdings_by_investor`, `institutional_investors`, `institutional_transactions` | `invd ownership ...` |
|
|
30
30
|
| Insider trades/IPOs/holidays | `insider_trades`, `ipos`, `market_holidays` | `invd insider-trades`, `invd ipos`, `invd market ...` |
|
|
31
|
+
| Earnings call calendar/events/live | `earnings_call_calendar`, `earnings_call_events`, `earnings_call_live` | `invd earnings calendar\|events\|live` |
|
|
32
|
+
| Call transcript/Q&A/participants | `earnings_call_transcript`, `earnings_call_qa`, `earnings_call_participants` | `invd earnings transcript\|qa\|participants` |
|
|
33
|
+
| Call guidance/KPIs, diff vs prior call | `earnings_call_guidance`, `earnings_call_diff` | `invd earnings extractions\|guidance-history\|diff` |
|
|
34
|
+
| Call documents/press release | `earnings_call_documents`, `earnings_call_press_release` | `invd earnings documents\|press-release` |
|
|
35
|
+
| Search across calls | `earnings_call_search` | `invd earnings search` |
|
|
36
|
+
| Keyword / guidance alerts | `earnings_call_alert_create\|list\|update\|delete\|test\|deliveries` | `invd webhooks …` |
|
|
31
37
|
|
|
32
38
|
The discovery rules below apply to both transports: call `list_available_metrics` before ratios, growth, CAGR, or financial-statement analysis, and call `list_available_section_ids` before requesting filing sections.
|
|
33
39
|
|
|
@@ -227,6 +233,79 @@ invd metadata metrics --json
|
|
|
227
233
|
invd metadata section-ids --json
|
|
228
234
|
```
|
|
229
235
|
|
|
236
|
+
### Earnings Calls
|
|
237
|
+
|
|
238
|
+
Commands about one call take a selector: `--event <event_id>` (from `events` / `calendar`), or `-i <ticker>` with `--year` + `--quarter` (fiscal) or `--date YYYY-MM-DD` (New York call day).
|
|
239
|
+
|
|
240
|
+
```bash
|
|
241
|
+
# Calendar across companies, a company's calls, calls being captured right now
|
|
242
|
+
# --event-type: earnings_call (calendar default), investor_day, conference, agm, other, all (events default)
|
|
243
|
+
invd earnings calendar --from 2026-10-20 --to 2026-10-31 --json
|
|
244
|
+
invd earnings calendar --event-type all --json # investor days, conferences, AGMs too
|
|
245
|
+
invd earnings events -i AAPL -s desc -l 4 --json
|
|
246
|
+
invd earnings live --json
|
|
247
|
+
invd earnings event <event_id> --json
|
|
248
|
+
|
|
249
|
+
# Transcript (formats: speakers, text, words, sections, cleaned), versions, word diff between versions
|
|
250
|
+
# qa_start_ms = where the Q&A begins (ms into the call, null without one)
|
|
251
|
+
invd earnings transcript -i AAPL --year 2026 --quarter 4 --format speakers --json
|
|
252
|
+
invd earnings versions --event <event_id> --json
|
|
253
|
+
invd earnings transcript-diff --event <event_id> --from 1 --json
|
|
254
|
+
|
|
255
|
+
# Q&A pairs, speakers, analysts of a company, one person's appearances
|
|
256
|
+
invd earnings qa --event <event_id> --json
|
|
257
|
+
invd earnings participants --event <event_id> --json
|
|
258
|
+
invd earnings analysts -i AAPL --json
|
|
259
|
+
invd earnings person <person_id> --json
|
|
260
|
+
|
|
261
|
+
# Press release, guidance / KPI extractions, a metric's guidance across calls
|
|
262
|
+
invd earnings press-release --event <event_id> --body --json
|
|
263
|
+
invd earnings extractions --event <event_id> --kind guidance --json
|
|
264
|
+
invd earnings extractions --event <event_id> --kind kpi --json
|
|
265
|
+
invd earnings guidance-history -i AAPL --metric revenue --json
|
|
266
|
+
|
|
267
|
+
# Derived: diff vs the prior call, call metrics, prosody
|
|
268
|
+
invd earnings diff --event <event_id> --json
|
|
269
|
+
invd earnings metrics --event <event_id> --json
|
|
270
|
+
invd earnings prosody --event <event_id> --section qa --json
|
|
271
|
+
|
|
272
|
+
# Media (signed URLs expire after 15 min; --output saves the file)
|
|
273
|
+
invd earnings audio --event <event_id> --output call.mp3
|
|
274
|
+
invd earnings slides --event <event_id> --markdown --json
|
|
275
|
+
invd earnings documents --event <event_id> --kind cfo_commentary --json
|
|
276
|
+
invd earnings documents --event <event_id> --output ./docs # a row without url (link-only sec_filing) is warned on stderr; use its source_url
|
|
277
|
+
invd earnings stream --event <event_id> --json # live HLS URL of a call in progress (PRO)
|
|
278
|
+
|
|
279
|
+
# Semantic search over transcripts and slides
|
|
280
|
+
invd earnings search -q "data center demand" -i NVDA --json
|
|
281
|
+
```
|
|
282
|
+
|
|
283
|
+
- `--transcript-version N` (not `--version`) selects a published transcript version; `--as-of <iso>` the version current at that instant.
|
|
284
|
+
- `extractions --review approved|auto|all` filters guidance by review status; `diff --vs prior` is the only comparison base.
|
|
285
|
+
- Every `*_ms` field is milliseconds from the call's start: cite it as `[m:ss]`.
|
|
286
|
+
- The live transcript (`ws listen --earnings`), audio, slides, the live stream and webhooks need the PRO plan (calendar, events and `live` need LITE, the other reads STANDARD); a `403` names the plan a route needs.
|
|
287
|
+
|
|
288
|
+
### Live transcripts and webhooks
|
|
289
|
+
|
|
290
|
+
```bash
|
|
291
|
+
# Follow a live call over the WebSocket (event ID or CIK; NDJSON with --json)
|
|
292
|
+
invd ws listen --earnings <event_id> --json
|
|
293
|
+
invd ws listen --earnings 320193 --names
|
|
294
|
+
|
|
295
|
+
# Keyword alerts on a live call, or across every live call (--all-live needs --keywords)
|
|
296
|
+
invd ws listen --earnings 320193 --keywords tariffs,china --keyword-match stem --json
|
|
297
|
+
invd ws listen --all-live --keywords tariffs --json
|
|
298
|
+
|
|
299
|
+
# Earnings-call webhook subscriptions (the secret is printed once)
|
|
300
|
+
invd webhooks list --json
|
|
301
|
+
invd webhooks create --url https://hooks.example.com/invinite --events earnings_call.transcript_ready --ciks 320193
|
|
302
|
+
invd webhooks create --url https://hooks.example.com/alerts --events earnings_call.keyword_hit --keywords tariffs # every company
|
|
303
|
+
invd webhooks update <id> --keywords tariffs,buyback --json
|
|
304
|
+
invd webhooks deliveries <id> --json
|
|
305
|
+
```
|
|
306
|
+
|
|
307
|
+
Keyword / guidance alerts (PRO) are webhook subscriptions: `earnings_call.keyword_hit` delivers one POST per mention of a keyword on any live call (speaker, `start_ms`, sentence), `earnings_call.guidance_flash` one per guidance number spoken live. "Alert me when any call mentions 'tariffs'" → `earnings_call_alert_create` with `keywords: ["tariffs"]`, `events: ["earnings_call.keyword_hit"]`, the user's HTTPS endpoint and no `ciks` (every company); later changes go through `earnings_call_alert_update` (keywords, ciks, events, active). CLI: `invd webhooks create --url <url> --events earnings_call.keyword_hit --keywords tariffs`.
|
|
308
|
+
|
|
230
309
|
### Health Check
|
|
231
310
|
|
|
232
311
|
```bash
|
|
@@ -264,6 +343,15 @@ invd ownership holdings-by-company -i AAPL --min-value 10000000 --json
|
|
|
264
343
|
invd filings search -r "artificial intelligence strategy" -i MSFT --json
|
|
265
344
|
```
|
|
266
345
|
|
|
346
|
+
### Reading an earnings call
|
|
347
|
+
Find the call, then read it from the cheapest source to the most detailed:
|
|
348
|
+
```bash
|
|
349
|
+
invd earnings events -i NVDA -s desc -l 4 --json # pick the event_id
|
|
350
|
+
invd earnings transcript --event <event_id> --format sections --json
|
|
351
|
+
invd earnings extractions --event <event_id> --kind guidance --json
|
|
352
|
+
invd earnings search -q "gross margin outlook" --event <event_id> --json
|
|
353
|
+
```
|
|
354
|
+
|
|
267
355
|
### Reading specific filing sections
|
|
268
356
|
First find section IDs, then fetch the section:
|
|
269
357
|
```bash
|
|
@@ -279,3 +367,5 @@ invd filings sections -i AAPL --form-type 10-K --section-id risk_factors --json
|
|
|
279
367
|
- For financial statements, `annual` gives the full year, `quarterly` gives each quarter, `ttm` gives trailing twelve months, `ytd` gives year-to-date
|
|
280
368
|
- The `snapshot` command is the most efficient way to get complete financials for one or more companies at once
|
|
281
369
|
- Filing sections return full text — great for detailed analysis of risk factors, MD&A, business descriptions, etc.
|
|
370
|
+
- Following a live call: `invd earnings live --json` lists the calls in progress; `invd ws listen --earnings <event_id>` streams the transcript (PRO) and exits once the final transcript is ready
|
|
371
|
+
- Earnings-call identifiers: `event_id` (UUID) from `invd earnings events` / `calendar` is the most precise selector; ticker + `--year` + `--quarter` uses the company's fiscal quarter
|
package/dist/src/cli.d.ts
CHANGED
package/dist/src/cli.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { createRequire } from 'node:module';
|
|
1
2
|
import { Command } from 'commander';
|
|
2
3
|
import { setJsonMode } from './shared/spinner.js';
|
|
3
4
|
import { registerConfigCommands } from './commands/config.js';
|
|
@@ -10,17 +11,35 @@ import { registerIposCommands } from './commands/ipos.js';
|
|
|
10
11
|
import { registerOwnershipCommands } from './commands/ownership.js';
|
|
11
12
|
import { registerInsiderTradesCommands } from './commands/insider-trades.js';
|
|
12
13
|
import { registerFilingsCommands } from './commands/filings.js';
|
|
14
|
+
import { registerEarningsCommands } from './commands/earnings.js';
|
|
13
15
|
import { registerMarketCommands } from './commands/market.js';
|
|
14
16
|
import { registerMetadataCommands } from './commands/metadata.js';
|
|
17
|
+
import { registerWebhooksCommands } from './commands/webhooks.js';
|
|
15
18
|
import { registerWsCommands } from './commands/ws.js';
|
|
16
19
|
import { registerPluginCommands } from './commands/plugin.js';
|
|
17
20
|
import { registerLoginCommands } from './commands/login.js';
|
|
21
|
+
const PACKAGE_NAME = '@invinite-org/invinite-data-cli';
|
|
22
|
+
/** `package.json` sits one level up under tsx (`src/cli.ts`), two in the build (`dist/src/cli.js`). */
|
|
23
|
+
export function packageVersion() {
|
|
24
|
+
const requireJson = createRequire(import.meta.url);
|
|
25
|
+
for (const candidate of ['../package.json', '../../package.json']) {
|
|
26
|
+
try {
|
|
27
|
+
const pkg = requireJson(candidate);
|
|
28
|
+
if (pkg.name === PACKAGE_NAME && pkg.version)
|
|
29
|
+
return pkg.version;
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
// not at this level
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
return '0.0.0';
|
|
36
|
+
}
|
|
18
37
|
export function createProgram() {
|
|
19
38
|
const program = new Command();
|
|
20
39
|
program
|
|
21
40
|
.name('invd')
|
|
22
41
|
.description('CLI for the Invinite financial data API')
|
|
23
|
-
.version(
|
|
42
|
+
.version(packageVersion())
|
|
24
43
|
.option('--json', 'Output raw JSON (pipe-friendly)')
|
|
25
44
|
.option('--all', 'Auto-paginate through all results')
|
|
26
45
|
.hook('preAction', (thisCommand) => {
|
|
@@ -39,8 +58,10 @@ export function createProgram() {
|
|
|
39
58
|
registerOwnershipCommands(program);
|
|
40
59
|
registerInsiderTradesCommands(program);
|
|
41
60
|
registerFilingsCommands(program);
|
|
61
|
+
registerEarningsCommands(program);
|
|
42
62
|
registerMarketCommands(program);
|
|
43
63
|
registerMetadataCommands(program);
|
|
64
|
+
registerWebhooksCommands(program);
|
|
44
65
|
registerWsCommands(program);
|
|
45
66
|
registerPluginCommands(program);
|
|
46
67
|
registerLoginCommands(program);
|
package/dist/src/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AACtE,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,EAAE,6BAA6B,EAAE,MAAM,8BAA8B,CAAC;AAC7E,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAE5D,MAAM,UAAU,aAAa;IAC3B,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAE9B,OAAO;SACJ,IAAI,CAAC,MAAM,CAAC;SACZ,WAAW,CAAC,yCAAyC,CAAC;SACtD,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":"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"}
|