@veroq/sdk 1.0.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/LICENSE +21 -0
- package/README.md +108 -0
- package/dist/cjs/agent.d.ts +144 -0
- package/dist/cjs/agent.d.ts.map +1 -0
- package/dist/cjs/agent.js +143 -0
- package/dist/cjs/agent.js.map +1 -0
- package/dist/cjs/cli.d.ts +3 -0
- package/dist/cjs/cli.d.ts.map +1 -0
- package/dist/cjs/cli.js +206 -0
- package/dist/cjs/cli.js.map +1 -0
- package/dist/cjs/client.d.ts +153 -0
- package/dist/cjs/client.d.ts.map +1 -0
- package/dist/cjs/client.js +800 -0
- package/dist/cjs/client.js.map +1 -0
- package/dist/cjs/errors.d.ts +21 -0
- package/dist/cjs/errors.d.ts.map +1 -0
- package/dist/cjs/errors.js +44 -0
- package/dist/cjs/errors.js.map +1 -0
- package/dist/cjs/index.d.ts +6 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +16 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/types.d.ts +779 -0
- package/dist/cjs/types.d.ts.map +1 -0
- package/dist/cjs/types.js +3 -0
- package/dist/cjs/types.js.map +1 -0
- package/dist/esm/agent.d.ts +144 -0
- package/dist/esm/agent.d.ts.map +1 -0
- package/dist/esm/agent.js +139 -0
- package/dist/esm/agent.js.map +1 -0
- package/dist/esm/cli.d.ts +3 -0
- package/dist/esm/cli.d.ts.map +1 -0
- package/dist/esm/cli.js +204 -0
- package/dist/esm/cli.js.map +1 -0
- package/dist/esm/client.d.ts +153 -0
- package/dist/esm/client.d.ts.map +1 -0
- package/dist/esm/client.js +796 -0
- package/dist/esm/client.js.map +1 -0
- package/dist/esm/errors.d.ts +21 -0
- package/dist/esm/errors.d.ts.map +1 -0
- package/dist/esm/errors.js +36 -0
- package/dist/esm/errors.js.map +1 -0
- package/dist/esm/index.d.ts +6 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +4 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/types.d.ts +779 -0
- package/dist/esm/types.d.ts.map +1 -0
- package/dist/esm/types.js +2 -0
- package/dist/esm/types.js.map +1 -0
- package/package.json +74 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 VEROQ
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
# @veroq/sdk
|
|
2
|
+
|
|
3
|
+
Official TypeScript SDK for [VEROQ](https://veroq.ai) — verified intelligence for AI agents.
|
|
4
|
+
|
|
5
|
+
> **Migrating from `polaris-news-api`?** This is the same SDK, rebranded. Drop-in replacement — just change your import.
|
|
6
|
+
|
|
7
|
+
## Installation
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
npm install @veroq/sdk
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
## Quick Start
|
|
14
|
+
|
|
15
|
+
### Authenticate via CLI
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
veroq login # opens GitHub in your browser — API key saved automatically
|
|
19
|
+
veroq whoami # check your auth status
|
|
20
|
+
veroq logout # remove saved credentials
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
### Use the client
|
|
24
|
+
|
|
25
|
+
```typescript
|
|
26
|
+
import { VeroqClient } from "@veroq/sdk";
|
|
27
|
+
|
|
28
|
+
const client = new VeroqClient(); // auto-reads saved credentials
|
|
29
|
+
const feed = await client.feed({ category: "technology", limit: 10 });
|
|
30
|
+
feed.briefs.forEach((brief) => console.log(brief.headline));
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
You can also pass a key explicitly or set the `VEROQ_API_KEY` (or `POLARIS_API_KEY`) environment variable.
|
|
34
|
+
|
|
35
|
+
## Universal Agent
|
|
36
|
+
|
|
37
|
+
```typescript
|
|
38
|
+
import { Agent } from '@veroq/sdk';
|
|
39
|
+
|
|
40
|
+
const agent = new Agent({ apiKey: 'pr_live_...' });
|
|
41
|
+
const result = await agent.ask("What's happening with NVDA?");
|
|
42
|
+
console.log(result.summary);
|
|
43
|
+
|
|
44
|
+
const full = await agent.full('AAPL');
|
|
45
|
+
console.log(full.price, full.technicals, full.earnings);
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
## Methods
|
|
49
|
+
|
|
50
|
+
| Method | Description |
|
|
51
|
+
|--------|-------------|
|
|
52
|
+
| `feed(options?)` | Get the news feed |
|
|
53
|
+
| `brief(id, options?)` | Get a single brief by ID |
|
|
54
|
+
| `search(query, options?)` | Search briefs |
|
|
55
|
+
| `generate(topic, category?)` | Generate a brief on a topic |
|
|
56
|
+
| `entities(options?)` | List entities |
|
|
57
|
+
| `entityBriefs(name, options?)` | Get briefs for an entity |
|
|
58
|
+
| `trendingEntities(limit?)` | Get trending entities |
|
|
59
|
+
| `similar(id, options?)` | Get similar briefs |
|
|
60
|
+
| `clusters(options?)` | Get brief clusters |
|
|
61
|
+
| `data(options?)` | Get structured data points |
|
|
62
|
+
| `agentFeed(options?)` | Get agent-optimized feed |
|
|
63
|
+
| `compareSources(briefId)` | Compare sources for a brief |
|
|
64
|
+
| `trending(options?)` | Get trending briefs |
|
|
65
|
+
| `verify(claim, options?)` | Fact-check a claim against briefs |
|
|
66
|
+
| `stream(options?)` | Stream briefs via SSE |
|
|
67
|
+
|
|
68
|
+
## Error Handling
|
|
69
|
+
|
|
70
|
+
```typescript
|
|
71
|
+
import { VeroqClient, AuthenticationError, RateLimitError, NotFoundError } from "@veroq/sdk";
|
|
72
|
+
|
|
73
|
+
const client = new VeroqClient();
|
|
74
|
+
|
|
75
|
+
try {
|
|
76
|
+
const brief = await client.brief("abc123");
|
|
77
|
+
} catch (e) {
|
|
78
|
+
if (e instanceof AuthenticationError) {
|
|
79
|
+
console.log("Invalid API key");
|
|
80
|
+
} else if (e instanceof NotFoundError) {
|
|
81
|
+
console.log("Brief not found");
|
|
82
|
+
} else if (e instanceof RateLimitError) {
|
|
83
|
+
console.log(`Rate limited. Retry after: ${e.retryAfter}s`);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
## Streaming
|
|
89
|
+
|
|
90
|
+
```typescript
|
|
91
|
+
const client = new VeroqClient();
|
|
92
|
+
|
|
93
|
+
const stream = client.stream({ categories: "technology,science" });
|
|
94
|
+
stream.start(
|
|
95
|
+
(brief) => console.log(`[${brief.category}] ${brief.headline}`),
|
|
96
|
+
(error) => console.error("Stream error:", error)
|
|
97
|
+
);
|
|
98
|
+
|
|
99
|
+
// Later: stream.stop();
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
## Backward Compatibility
|
|
103
|
+
|
|
104
|
+
Both `VeroqClient` and `PolarisClient` are exported. The SDK reads credentials from both `VEROQ_API_KEY` and `POLARIS_API_KEY`, and checks both `~/.veroq/` and `~/.polaris/` for saved credentials.
|
|
105
|
+
|
|
106
|
+
## Documentation
|
|
107
|
+
|
|
108
|
+
Full API documentation: https://veroq.ai/docs
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* VEROQ Universal Agent Connector (TypeScript)
|
|
3
|
+
*
|
|
4
|
+
* The simplest way to give any AI agent financial intelligence.
|
|
5
|
+
*
|
|
6
|
+
* import { Agent } from '@veroq/sdk';
|
|
7
|
+
*
|
|
8
|
+
* const agent = new Agent({ apiKey: 'pr_live_...' });
|
|
9
|
+
* const result = await agent.ask("What's happening with NVDA?");
|
|
10
|
+
* console.log(result.summary);
|
|
11
|
+
*
|
|
12
|
+
* const full = await agent.full('AAPL');
|
|
13
|
+
* console.log(full.price, full.technicals, full.earnings);
|
|
14
|
+
*/
|
|
15
|
+
export interface AskResult {
|
|
16
|
+
question: string;
|
|
17
|
+
intents: string[];
|
|
18
|
+
tickers: string[];
|
|
19
|
+
reasoning: string[];
|
|
20
|
+
summary: string;
|
|
21
|
+
data: Record<string, any>;
|
|
22
|
+
credits_used: number;
|
|
23
|
+
endpoints_called: string[];
|
|
24
|
+
}
|
|
25
|
+
export interface FullResult {
|
|
26
|
+
ticker: string;
|
|
27
|
+
entity_name: string;
|
|
28
|
+
sector: string;
|
|
29
|
+
asset_type: string;
|
|
30
|
+
price: {
|
|
31
|
+
current?: number;
|
|
32
|
+
change_pct?: number;
|
|
33
|
+
market_state?: string;
|
|
34
|
+
};
|
|
35
|
+
sentiment: {
|
|
36
|
+
score?: number;
|
|
37
|
+
label?: string;
|
|
38
|
+
briefs_24h?: number;
|
|
39
|
+
signals?: any[];
|
|
40
|
+
current_streak?: any;
|
|
41
|
+
};
|
|
42
|
+
technicals: {
|
|
43
|
+
signal?: string;
|
|
44
|
+
rsi_14?: number;
|
|
45
|
+
sma_20?: number;
|
|
46
|
+
macd?: any;
|
|
47
|
+
bollinger?: any;
|
|
48
|
+
};
|
|
49
|
+
earnings: {
|
|
50
|
+
next_date?: string;
|
|
51
|
+
fiscal_quarter?: string;
|
|
52
|
+
eps_estimate?: number;
|
|
53
|
+
revenue_estimate?: number;
|
|
54
|
+
};
|
|
55
|
+
news: {
|
|
56
|
+
total: number;
|
|
57
|
+
briefs: {
|
|
58
|
+
id: string;
|
|
59
|
+
headline: string;
|
|
60
|
+
deck: string;
|
|
61
|
+
category: string;
|
|
62
|
+
published_at: string;
|
|
63
|
+
}[];
|
|
64
|
+
};
|
|
65
|
+
insider: {
|
|
66
|
+
transactions: any[];
|
|
67
|
+
total: number;
|
|
68
|
+
};
|
|
69
|
+
filings: {
|
|
70
|
+
recent: any[];
|
|
71
|
+
total: number;
|
|
72
|
+
};
|
|
73
|
+
analysts: {
|
|
74
|
+
consensus: any;
|
|
75
|
+
ratings: any[];
|
|
76
|
+
total: number;
|
|
77
|
+
};
|
|
78
|
+
institutions: {
|
|
79
|
+
holders: any[];
|
|
80
|
+
total: number;
|
|
81
|
+
};
|
|
82
|
+
data_sources: string[];
|
|
83
|
+
fetched_at: string;
|
|
84
|
+
}
|
|
85
|
+
export interface SubscribeEvent {
|
|
86
|
+
type: string;
|
|
87
|
+
ticker: string | null;
|
|
88
|
+
data: Record<string, any>;
|
|
89
|
+
timestamp: string;
|
|
90
|
+
}
|
|
91
|
+
export interface AgentOptions {
|
|
92
|
+
apiKey?: string;
|
|
93
|
+
baseUrl?: string;
|
|
94
|
+
timeout?: number;
|
|
95
|
+
}
|
|
96
|
+
export declare class Agent {
|
|
97
|
+
private apiKey;
|
|
98
|
+
private baseUrl;
|
|
99
|
+
private timeout;
|
|
100
|
+
constructor(options?: AgentOptions);
|
|
101
|
+
private request;
|
|
102
|
+
/**
|
|
103
|
+
* Ask any financial question. Returns structured data + markdown summary.
|
|
104
|
+
*
|
|
105
|
+
* const result = await agent.ask("What's happening with NVDA?");
|
|
106
|
+
* console.log(result.summary);
|
|
107
|
+
* console.log(result.tickers); // ['NVDA']
|
|
108
|
+
* console.log(result.reasoning); // ['Identified ticker: NVDA', ...]
|
|
109
|
+
*/
|
|
110
|
+
ask(question: string): Promise<AskResult>;
|
|
111
|
+
/**
|
|
112
|
+
* Get EVERYTHING about a ticker in one call.
|
|
113
|
+
*
|
|
114
|
+
* const result = await agent.full('NVDA');
|
|
115
|
+
* console.log(result.price); // { current: 178.68, change_pct: -0.95 }
|
|
116
|
+
* console.log(result.technicals); // { signal: 'neutral', rsi_14: 46.4 }
|
|
117
|
+
* console.log(result.insider); // { transactions: [...], total: 20 }
|
|
118
|
+
*/
|
|
119
|
+
full(ticker: string): Promise<FullResult>;
|
|
120
|
+
/**
|
|
121
|
+
* Subscribe to real-time financial events via SSE.
|
|
122
|
+
*
|
|
123
|
+
* const stream = agent.subscribe({ tickers: ['NVDA', 'AAPL'], events: ['brief'] });
|
|
124
|
+
* for await (const event of stream) {
|
|
125
|
+
* console.log(event.type, event.ticker, event.data);
|
|
126
|
+
* }
|
|
127
|
+
*/
|
|
128
|
+
subscribe(options?: {
|
|
129
|
+
tickers?: string[];
|
|
130
|
+
events?: string[];
|
|
131
|
+
}): AsyncGenerator<SubscribeEvent>;
|
|
132
|
+
/**
|
|
133
|
+
* Run a marketplace agent.
|
|
134
|
+
*
|
|
135
|
+
* const result = await agent.runAgent('sector-pulse', { sector: 'Technology' });
|
|
136
|
+
* console.log(result.summary);
|
|
137
|
+
*/
|
|
138
|
+
runAgent(slug: string, inputs?: Record<string, any>): Promise<any>;
|
|
139
|
+
/** Search intelligence briefs. */
|
|
140
|
+
search(query: string, perPage?: number): Promise<any>;
|
|
141
|
+
/** Fact-check a claim against the intelligence corpus. */
|
|
142
|
+
verify(claim: string): Promise<any>;
|
|
143
|
+
}
|
|
144
|
+
//# sourceMappingURL=agent.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../src/agent.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* VEROQ Universal Agent Connector (TypeScript)
|
|
4
|
+
*
|
|
5
|
+
* The simplest way to give any AI agent financial intelligence.
|
|
6
|
+
*
|
|
7
|
+
* import { Agent } from '@veroq/sdk';
|
|
8
|
+
*
|
|
9
|
+
* const agent = new Agent({ apiKey: 'pr_live_...' });
|
|
10
|
+
* const result = await agent.ask("What's happening with NVDA?");
|
|
11
|
+
* console.log(result.summary);
|
|
12
|
+
*
|
|
13
|
+
* const full = await agent.full('AAPL');
|
|
14
|
+
* console.log(full.price, full.technicals, full.earnings);
|
|
15
|
+
*/
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.Agent = void 0;
|
|
18
|
+
class Agent {
|
|
19
|
+
constructor(options = {}) {
|
|
20
|
+
this.apiKey = options.apiKey || process.env.VEROQ_API_KEY || process.env.POLARIS_API_KEY || '';
|
|
21
|
+
this.baseUrl = (options.baseUrl || 'https://api.thepolarisreport.com').replace(/\/$/, '');
|
|
22
|
+
this.timeout = options.timeout || 30000;
|
|
23
|
+
}
|
|
24
|
+
async request(method, path, body) {
|
|
25
|
+
const controller = new AbortController();
|
|
26
|
+
const timer = setTimeout(() => controller.abort(), this.timeout);
|
|
27
|
+
try {
|
|
28
|
+
const resp = await fetch(`${this.baseUrl}${path}`, {
|
|
29
|
+
method,
|
|
30
|
+
headers: {
|
|
31
|
+
'Authorization': `Bearer ${this.apiKey}`,
|
|
32
|
+
'Content-Type': 'application/json',
|
|
33
|
+
'User-Agent': 'veroq-agent/1.0',
|
|
34
|
+
},
|
|
35
|
+
...(body ? { body: JSON.stringify(body) } : {}),
|
|
36
|
+
signal: controller.signal,
|
|
37
|
+
});
|
|
38
|
+
if (!resp.ok) {
|
|
39
|
+
const error = await resp.json().catch(() => ({ message: `HTTP ${resp.status}` }));
|
|
40
|
+
throw new Error(error.message || `HTTP ${resp.status}`);
|
|
41
|
+
}
|
|
42
|
+
return resp.json();
|
|
43
|
+
}
|
|
44
|
+
finally {
|
|
45
|
+
clearTimeout(timer);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Ask any financial question. Returns structured data + markdown summary.
|
|
50
|
+
*
|
|
51
|
+
* const result = await agent.ask("What's happening with NVDA?");
|
|
52
|
+
* console.log(result.summary);
|
|
53
|
+
* console.log(result.tickers); // ['NVDA']
|
|
54
|
+
* console.log(result.reasoning); // ['Identified ticker: NVDA', ...]
|
|
55
|
+
*/
|
|
56
|
+
async ask(question) {
|
|
57
|
+
return this.request('POST', '/api/v1/ask', { question });
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Get EVERYTHING about a ticker in one call.
|
|
61
|
+
*
|
|
62
|
+
* const result = await agent.full('NVDA');
|
|
63
|
+
* console.log(result.price); // { current: 178.68, change_pct: -0.95 }
|
|
64
|
+
* console.log(result.technicals); // { signal: 'neutral', rsi_14: 46.4 }
|
|
65
|
+
* console.log(result.insider); // { transactions: [...], total: 20 }
|
|
66
|
+
*/
|
|
67
|
+
async full(ticker) {
|
|
68
|
+
return this.request('GET', `/api/v1/ticker/${ticker.toUpperCase()}/full`);
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Subscribe to real-time financial events via SSE.
|
|
72
|
+
*
|
|
73
|
+
* const stream = agent.subscribe({ tickers: ['NVDA', 'AAPL'], events: ['brief'] });
|
|
74
|
+
* for await (const event of stream) {
|
|
75
|
+
* console.log(event.type, event.ticker, event.data);
|
|
76
|
+
* }
|
|
77
|
+
*/
|
|
78
|
+
async *subscribe(options = {}) {
|
|
79
|
+
const params = new URLSearchParams();
|
|
80
|
+
params.set('tickers', options.tickers?.map(t => t.toUpperCase()).join(',') || '*');
|
|
81
|
+
if (options.events)
|
|
82
|
+
params.set('events', options.events.join(','));
|
|
83
|
+
const resp = await fetch(`${this.baseUrl}/api/v1/subscribe?${params}`, {
|
|
84
|
+
headers: {
|
|
85
|
+
'Authorization': `Bearer ${this.apiKey}`,
|
|
86
|
+
'Accept': 'text/event-stream',
|
|
87
|
+
'User-Agent': 'veroq-agent/1.0',
|
|
88
|
+
},
|
|
89
|
+
});
|
|
90
|
+
if (!resp.ok || !resp.body)
|
|
91
|
+
throw new Error(`Subscribe failed: ${resp.status}`);
|
|
92
|
+
const reader = resp.body.getReader();
|
|
93
|
+
const decoder = new TextDecoder();
|
|
94
|
+
let buffer = '';
|
|
95
|
+
let eventType = '';
|
|
96
|
+
let dataLines = [];
|
|
97
|
+
while (true) {
|
|
98
|
+
const { done, value } = await reader.read();
|
|
99
|
+
if (done)
|
|
100
|
+
break;
|
|
101
|
+
buffer += decoder.decode(value, { stream: true });
|
|
102
|
+
const lines = buffer.split('\n');
|
|
103
|
+
buffer = lines.pop() || '';
|
|
104
|
+
for (const line of lines) {
|
|
105
|
+
const trimmed = line.trim();
|
|
106
|
+
if (trimmed.startsWith('event:')) {
|
|
107
|
+
eventType = trimmed.slice(6).trim();
|
|
108
|
+
}
|
|
109
|
+
else if (trimmed.startsWith('data:')) {
|
|
110
|
+
dataLines.push(trimmed.slice(5).trim());
|
|
111
|
+
}
|
|
112
|
+
else if (trimmed === '' && eventType && dataLines.length > 0) {
|
|
113
|
+
try {
|
|
114
|
+
const data = JSON.parse(dataLines.join(''));
|
|
115
|
+
yield { type: eventType, ticker: data.ticker || null, data: data.data || data, timestamp: data.timestamp || '' };
|
|
116
|
+
}
|
|
117
|
+
catch { /* ignore parse errors */ }
|
|
118
|
+
eventType = '';
|
|
119
|
+
dataLines = [];
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Run a marketplace agent.
|
|
126
|
+
*
|
|
127
|
+
* const result = await agent.runAgent('sector-pulse', { sector: 'Technology' });
|
|
128
|
+
* console.log(result.summary);
|
|
129
|
+
*/
|
|
130
|
+
async runAgent(slug, inputs = {}) {
|
|
131
|
+
return this.request('POST', `/api/v1/agents/run/${slug}`, inputs);
|
|
132
|
+
}
|
|
133
|
+
/** Search intelligence briefs. */
|
|
134
|
+
async search(query, perPage = 10) {
|
|
135
|
+
return this.request('GET', `/api/v1/search?q=${encodeURIComponent(query)}&per_page=${perPage}`);
|
|
136
|
+
}
|
|
137
|
+
/** Fact-check a claim against the intelligence corpus. */
|
|
138
|
+
async verify(claim) {
|
|
139
|
+
return this.request('POST', '/api/v1/verify', { claim });
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
exports.Agent = Agent;
|
|
143
|
+
//# sourceMappingURL=agent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/agent.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":""}
|
package/dist/cjs/cli.js
ADDED
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
const fs_1 = require("fs");
|
|
5
|
+
const os_1 = require("os");
|
|
6
|
+
const path_1 = require("path");
|
|
7
|
+
const child_process_1 = require("child_process");
|
|
8
|
+
const GITHUB_CLIENT_ID = "Ov23ligfgbZkJDvu8JwO";
|
|
9
|
+
const GITHUB_DEVICE_CODE_URL = "https://github.com/login/device/code";
|
|
10
|
+
const GITHUB_ACCESS_TOKEN_URL = "https://github.com/login/oauth/access_token";
|
|
11
|
+
const VEROQ_API_URL = "https://api.thepolarisreport.com";
|
|
12
|
+
const CREDENTIALS_DIR = (0, path_1.join)((0, os_1.homedir)(), ".veroq");
|
|
13
|
+
const CREDENTIALS_FILE = (0, path_1.join)(CREDENTIALS_DIR, "credentials");
|
|
14
|
+
// Legacy fallback
|
|
15
|
+
const LEGACY_CREDENTIALS_FILE = (0, path_1.join)((0, os_1.homedir)(), ".polaris", "credentials");
|
|
16
|
+
function readCredentials() {
|
|
17
|
+
try {
|
|
18
|
+
const key = (0, fs_1.readFileSync)(CREDENTIALS_FILE, "utf-8").trim();
|
|
19
|
+
return key || null;
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
// Fall back to legacy location
|
|
23
|
+
try {
|
|
24
|
+
const key = (0, fs_1.readFileSync)(LEGACY_CREDENTIALS_FILE, "utf-8").trim();
|
|
25
|
+
return key || null;
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
return null;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
function sleep(ms) {
|
|
33
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
34
|
+
}
|
|
35
|
+
function openBrowser(url) {
|
|
36
|
+
const cmd = process.platform === "darwin"
|
|
37
|
+
? `open "${url}"`
|
|
38
|
+
: process.platform === "win32"
|
|
39
|
+
? `start "${url}"`
|
|
40
|
+
: `xdg-open "${url}"`;
|
|
41
|
+
(0, child_process_1.exec)(cmd, () => { });
|
|
42
|
+
}
|
|
43
|
+
async function login() {
|
|
44
|
+
// Step 1: Request device code
|
|
45
|
+
const codeResp = await fetch(GITHUB_DEVICE_CODE_URL, {
|
|
46
|
+
method: "POST",
|
|
47
|
+
headers: { "Content-Type": "application/json", Accept: "application/json" },
|
|
48
|
+
body: JSON.stringify({ client_id: GITHUB_CLIENT_ID, scope: "user:email" }),
|
|
49
|
+
});
|
|
50
|
+
if (!codeResp.ok) {
|
|
51
|
+
console.error("Failed to initiate GitHub device flow.");
|
|
52
|
+
process.exit(1);
|
|
53
|
+
}
|
|
54
|
+
const codeData = await codeResp.json();
|
|
55
|
+
const { device_code, user_code, verification_uri } = codeData;
|
|
56
|
+
let interval = (codeData.interval ?? 5) * 1000;
|
|
57
|
+
const expiresIn = (codeData.expires_in ?? 900) * 1000;
|
|
58
|
+
console.log();
|
|
59
|
+
console.log(` Go to: ${verification_uri}`);
|
|
60
|
+
console.log(` Enter code: ${user_code}`);
|
|
61
|
+
console.log();
|
|
62
|
+
openBrowser(verification_uri);
|
|
63
|
+
process.stdout.write("Waiting for authorization...");
|
|
64
|
+
// Step 2: Poll for access token
|
|
65
|
+
const deadline = Date.now() + expiresIn;
|
|
66
|
+
let ghAccessToken = null;
|
|
67
|
+
while (Date.now() < deadline) {
|
|
68
|
+
await sleep(interval);
|
|
69
|
+
process.stdout.write(".");
|
|
70
|
+
const tokenResp = await fetch(GITHUB_ACCESS_TOKEN_URL, {
|
|
71
|
+
method: "POST",
|
|
72
|
+
headers: { "Content-Type": "application/json", Accept: "application/json" },
|
|
73
|
+
body: JSON.stringify({
|
|
74
|
+
client_id: GITHUB_CLIENT_ID,
|
|
75
|
+
device_code,
|
|
76
|
+
grant_type: "urn:ietf:params:oauth:grant-type:device_code",
|
|
77
|
+
}),
|
|
78
|
+
});
|
|
79
|
+
const tokenData = await tokenResp.json();
|
|
80
|
+
const error = tokenData.error;
|
|
81
|
+
if (error === "authorization_pending")
|
|
82
|
+
continue;
|
|
83
|
+
if (error === "slow_down") {
|
|
84
|
+
interval = (tokenData.interval ?? interval / 1000 + 5) * 1000;
|
|
85
|
+
continue;
|
|
86
|
+
}
|
|
87
|
+
if (error === "expired_token") {
|
|
88
|
+
console.error("\nDevice code expired. Please try again.");
|
|
89
|
+
process.exit(1);
|
|
90
|
+
}
|
|
91
|
+
if (error === "access_denied") {
|
|
92
|
+
console.error("\nAuthorization denied.");
|
|
93
|
+
process.exit(1);
|
|
94
|
+
}
|
|
95
|
+
if (error) {
|
|
96
|
+
console.error(`\nGitHub error: ${error}`);
|
|
97
|
+
process.exit(1);
|
|
98
|
+
}
|
|
99
|
+
if (tokenData.access_token) {
|
|
100
|
+
ghAccessToken = tokenData.access_token;
|
|
101
|
+
break;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
if (!ghAccessToken) {
|
|
105
|
+
console.error("\nTimed out waiting for authorization.");
|
|
106
|
+
process.exit(1);
|
|
107
|
+
}
|
|
108
|
+
console.log(" authorized!");
|
|
109
|
+
// Step 3: Exchange GitHub token for API JWT
|
|
110
|
+
const authResp = await fetch(`${VEROQ_API_URL}/api/v1/auth/github/device`, {
|
|
111
|
+
method: "POST",
|
|
112
|
+
headers: { "Content-Type": "application/json" },
|
|
113
|
+
body: JSON.stringify({ access_token: ghAccessToken }),
|
|
114
|
+
});
|
|
115
|
+
if (!authResp.ok) {
|
|
116
|
+
const errData = await authResp.json();
|
|
117
|
+
console.error(`Auth error: ${errData.message || "Authentication failed"}`);
|
|
118
|
+
process.exit(1);
|
|
119
|
+
}
|
|
120
|
+
const authData = await authResp.json();
|
|
121
|
+
const jwtToken = authData.token;
|
|
122
|
+
const email = authData.email || "";
|
|
123
|
+
// Step 4: Create an API key
|
|
124
|
+
const keyResp = await fetch(`${VEROQ_API_URL}/api/v1/keys/create`, {
|
|
125
|
+
method: "POST",
|
|
126
|
+
headers: {
|
|
127
|
+
"Content-Type": "application/json",
|
|
128
|
+
Authorization: `Bearer ${jwtToken}`,
|
|
129
|
+
},
|
|
130
|
+
body: JSON.stringify({ name: `CLI (${(0, os_1.hostname)()})` }),
|
|
131
|
+
});
|
|
132
|
+
if (!keyResp.ok) {
|
|
133
|
+
const errData = await keyResp.json();
|
|
134
|
+
console.error(`Key creation error: ${errData.message || "Failed to create API key"}`);
|
|
135
|
+
process.exit(1);
|
|
136
|
+
}
|
|
137
|
+
const keyData = await keyResp.json();
|
|
138
|
+
const apiKey = keyData.key;
|
|
139
|
+
// Step 5: Save credentials
|
|
140
|
+
(0, fs_1.mkdirSync)(CREDENTIALS_DIR, { recursive: true, mode: 0o700 });
|
|
141
|
+
(0, fs_1.writeFileSync)(CREDENTIALS_FILE, apiKey, { mode: 0o600 });
|
|
142
|
+
console.log();
|
|
143
|
+
console.log(`Authenticated as ${email} — API key saved to ~/.veroq/credentials`);
|
|
144
|
+
}
|
|
145
|
+
async function whoami() {
|
|
146
|
+
const apiKey = process.env.VEROQ_API_KEY || process.env.POLARIS_API_KEY || readCredentials();
|
|
147
|
+
if (!apiKey) {
|
|
148
|
+
console.error("Not logged in. Run `veroq login` to authenticate.");
|
|
149
|
+
process.exit(1);
|
|
150
|
+
}
|
|
151
|
+
const resp = await fetch(`${VEROQ_API_URL}/api/v1/user/api-keys`, {
|
|
152
|
+
headers: { Authorization: `Bearer ${apiKey}` },
|
|
153
|
+
});
|
|
154
|
+
if (resp.status === 401) {
|
|
155
|
+
console.error("Invalid or expired API key. Run `veroq login` to re-authenticate.");
|
|
156
|
+
process.exit(1);
|
|
157
|
+
}
|
|
158
|
+
if (!resp.ok) {
|
|
159
|
+
console.error(`Error checking credentials (HTTP ${resp.status}).`);
|
|
160
|
+
process.exit(1);
|
|
161
|
+
}
|
|
162
|
+
const data = await resp.json();
|
|
163
|
+
console.log(`Logged in — key prefix: ${apiKey.slice(0, 12)}`);
|
|
164
|
+
if (data.keys) {
|
|
165
|
+
console.log(`Active keys: ${data.keys.length}`);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
function logout() {
|
|
169
|
+
let removed = false;
|
|
170
|
+
if ((0, fs_1.existsSync)(CREDENTIALS_FILE)) {
|
|
171
|
+
(0, fs_1.unlinkSync)(CREDENTIALS_FILE);
|
|
172
|
+
removed = true;
|
|
173
|
+
}
|
|
174
|
+
// Also clean up legacy credentials
|
|
175
|
+
if ((0, fs_1.existsSync)(LEGACY_CREDENTIALS_FILE)) {
|
|
176
|
+
(0, fs_1.unlinkSync)(LEGACY_CREDENTIALS_FILE);
|
|
177
|
+
removed = true;
|
|
178
|
+
}
|
|
179
|
+
if (removed) {
|
|
180
|
+
console.log("Logged out — credentials removed.");
|
|
181
|
+
}
|
|
182
|
+
else {
|
|
183
|
+
console.log("No credentials found.");
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
const command = process.argv[2];
|
|
187
|
+
switch (command) {
|
|
188
|
+
case "login":
|
|
189
|
+
login();
|
|
190
|
+
break;
|
|
191
|
+
case "whoami":
|
|
192
|
+
whoami();
|
|
193
|
+
break;
|
|
194
|
+
case "logout":
|
|
195
|
+
logout();
|
|
196
|
+
break;
|
|
197
|
+
default:
|
|
198
|
+
console.log("Usage: veroq <command>");
|
|
199
|
+
console.log();
|
|
200
|
+
console.log("Commands:");
|
|
201
|
+
console.log(" login Authenticate via GitHub");
|
|
202
|
+
console.log(" whoami Show current authentication status");
|
|
203
|
+
console.log(" logout Remove stored credentials");
|
|
204
|
+
process.exit(1);
|
|
205
|
+
}
|
|
206
|
+
//# sourceMappingURL=cli.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":"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"}
|