sentisense 0.51.0 → 0.53.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 +46 -1
- package/dist/cli.cjs +450 -52
- package/dist/index.cjs +25 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.mts +78 -3
- package/dist/index.d.ts +78 -3
- package/dist/index.mjs +25 -2
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -71,7 +71,8 @@ npx -y sentisense@latest health
|
|
|
71
71
|
| `quote <ticker>...` | Price, day range, 52-week range, market cap, P/E. One request per ticker |
|
|
72
72
|
| `sentiment <ticker>` | SentiSense Score, tone, attention, per-source breakdown, `--days N` history |
|
|
73
73
|
| `mood` | Composite market sentiment, the signals behind it, and the sector map |
|
|
74
|
-
| `analysts <ticker>` | Consensus, price target band, recent upgrades and downgrades |
|
|
74
|
+
| `analysts <ticker>` | Consensus, price target band, recent upgrades and downgrades. `--coverage` for who covers it, by firm |
|
|
75
|
+
| `analyst <slug>` | One analyst: their firms, their coverage book, and `--calls` for their price target notes |
|
|
75
76
|
| `earnings [ticker]` | Forward calendar with no ticker, per-quarter analysis with one (`earnings AAPL`) |
|
|
76
77
|
| `insiders <ticker>` | Filed Form 4 transactions, including whether they were pre-planned |
|
|
77
78
|
| `insights <ticker>` | Generated signals, filterable by `--urgency` and `--type` |
|
|
@@ -80,9 +81,22 @@ npx -y sentisense@latest health
|
|
|
80
81
|
| `flows [ticker]` | Institutional 13F flows, or one ticker's holders and notable changes |
|
|
81
82
|
| `options <ticker>` | End-of-day options positioning, IV rank, walls, unusual contracts |
|
|
82
83
|
| `screen --filter ...` | Screen the universe on Score, analyst, technical, and price fields |
|
|
84
|
+
| `search <name>` | Resolve a name, alias, ticker or slug to a symbol and the entity handle |
|
|
83
85
|
|
|
84
86
|
Run `sentisense help <command>` for its flags and examples.
|
|
85
87
|
|
|
88
|
+
Three of these chain into each other. Start from a name, land on a person:
|
|
89
|
+
|
|
90
|
+
```bash
|
|
91
|
+
npx -y sentisense@latest search Tesla --type company # "Tesla" -> TSLA, plus the entity slug
|
|
92
|
+
npx -y sentisense@latest analysts NVDA --coverage # who covers it, by firm, with analyst slugs
|
|
93
|
+
npx -y sentisense@latest analyst quinn-bolton --calls # that analyst's firms, book, and notes
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
`analyst` takes a slug, not a name: slugs are lowercase and hyphenated, and every named analyst in a `--coverage` row carries the one that addresses them. A name is rejected before a request is spent. What comes back is call history, not accuracy scoring: there is no hit rate, no ranking, and nothing in it rates the person.
|
|
97
|
+
|
|
98
|
+
Ranking on `search` is the API's own, and a company can sort below its own products, so pass `--type company` when what you want is the issuer.
|
|
99
|
+
|
|
86
100
|
### Output modes
|
|
87
101
|
|
|
88
102
|
Readable in a terminal, plain text when piped, and exact API JSON on request:
|
|
@@ -227,6 +241,27 @@ client.documents.getStories({ limit: 10 })
|
|
|
227
241
|
client.documents.getStoryDetail("cluster_abc123")
|
|
228
242
|
```
|
|
229
243
|
|
|
244
|
+
A story's `cluster` says where it came from and whether it has settled. `storySource` is
|
|
245
|
+
`"ORIGINAL"` for an editorially authored SentiSense Original and `"AI"` for a
|
|
246
|
+
pipeline-generated story, and `isLive` is true while the story is still being revised as
|
|
247
|
+
the event develops. Both are optional: against an API build that predates them they are
|
|
248
|
+
`undefined`, which means "not known" rather than `"AI"` or `false`.
|
|
249
|
+
|
|
250
|
+
`getStoryDetail` returns `unknown`, so narrow it yourself. It carries the same two fields
|
|
251
|
+
plus a `timeline` array of dated updates, newest first and empty when a story has none.
|
|
252
|
+
The `StoryTimelineEntry` type is exported for that array:
|
|
253
|
+
|
|
254
|
+
```typescript
|
|
255
|
+
import type { StoryTimelineEntry } from "sentisense";
|
|
256
|
+
|
|
257
|
+
const detail = (await client.documents.getStoryDetail("cluster_abc123")) as {
|
|
258
|
+
timeline: StoryTimelineEntry[];
|
|
259
|
+
};
|
|
260
|
+
for (const update of detail.timeline) {
|
|
261
|
+
console.log(new Date(update.publishedAt), update.updateType, update.content);
|
|
262
|
+
}
|
|
263
|
+
```
|
|
264
|
+
|
|
230
265
|
### Institutional flows (13F)
|
|
231
266
|
|
|
232
267
|
```typescript
|
|
@@ -474,8 +509,18 @@ All five are optional: a response served before they shipped omits them. For the
|
|
|
474
509
|
```typescript
|
|
475
510
|
client.marketMood.get() // Composite market sentiment with sub-signals
|
|
476
511
|
client.kb.getPopularEntities() // Most-tracked entities
|
|
512
|
+
client.kb.searchEntities("Tesla") // Resolve a name, alias, ticker or slug to what we track
|
|
477
513
|
```
|
|
478
514
|
|
|
515
|
+
Entity search is resolution, not enumeration: the query must be at least 2 characters, the match count is capped at 25, and it returns a bare `EntitySearchResult[]` rather than a `PreviewResponse` envelope. Each hit carries `name`, `type`, the `ticker` for a listed entity (`null` for everything else), and the `urlSlug` the metric endpoints address that entity by, which is the only way to get a handle for a person, product or topic with no ticker.
|
|
516
|
+
|
|
517
|
+
```typescript
|
|
518
|
+
const hits = await client.kb.searchEntities("Tesla", { type: "company", limit: 5 });
|
|
519
|
+
const symbol = hits.find((hit) => hit.ticker)?.ticker; // "TSLA"
|
|
520
|
+
```
|
|
521
|
+
|
|
522
|
+
An empty array is the normal answer for a query that matches nothing, so branch on `length` rather than catching.
|
|
523
|
+
|
|
479
524
|
### Screener
|
|
480
525
|
|
|
481
526
|
Filter the tracked universe on the SentiSense Score, attention, analyst consensus, technicals and price in one query. Screening on analyst ratings alone is something a dozen free tools do; screening on analyst ratings *where the Score disagrees* is not.
|