opencandle 0.1.0 → 0.2.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 +13 -4
- package/dist/analysts/contracts.d.ts +31 -0
- package/dist/analysts/contracts.js +158 -0
- package/dist/analysts/contracts.js.map +1 -0
- package/dist/analysts/orchestrator.d.ts +11 -2
- package/dist/analysts/orchestrator.js +155 -7
- package/dist/analysts/orchestrator.js.map +1 -1
- package/dist/cli.js +26 -10
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +4 -0
- package/dist/config.js +2 -0
- package/dist/config.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/infra/cache.d.ts +30 -0
- package/dist/infra/cache.js +40 -3
- package/dist/infra/cache.js.map +1 -1
- package/dist/infra/index.d.ts +1 -1
- package/dist/infra/index.js +1 -1
- package/dist/infra/index.js.map +1 -1
- package/dist/infra/opencandle-paths.d.ts +1 -0
- package/dist/infra/opencandle-paths.js +3 -0
- package/dist/infra/opencandle-paths.js.map +1 -1
- package/dist/infra/rate-limiter.js +1 -0
- package/dist/infra/rate-limiter.js.map +1 -1
- package/dist/memory/index.d.ts +3 -0
- package/dist/memory/index.js +2 -0
- package/dist/memory/index.js.map +1 -1
- package/dist/memory/manager.d.ts +19 -0
- package/dist/memory/manager.js +132 -0
- package/dist/memory/manager.js.map +1 -0
- package/dist/memory/sqlite.js +12 -1
- package/dist/memory/sqlite.js.map +1 -1
- package/dist/memory/types.d.ts +21 -0
- package/dist/memory/types.js +47 -0
- package/dist/memory/types.js.map +1 -0
- package/dist/pi/opencandle-extension.d.ts +5 -1
- package/dist/pi/opencandle-extension.js +45 -142
- package/dist/pi/opencandle-extension.js.map +1 -1
- package/dist/pi/session.d.ts +2 -0
- package/dist/pi/session.js +1 -1
- package/dist/pi/session.js.map +1 -1
- package/dist/prompts/context-builder.d.ts +26 -0
- package/dist/prompts/context-builder.js +126 -0
- package/dist/prompts/context-builder.js.map +1 -0
- package/dist/prompts/sections.d.ts +13 -0
- package/dist/prompts/sections.js +35 -0
- package/dist/prompts/sections.js.map +1 -0
- package/dist/providers/alpha-vantage.d.ts +3 -0
- package/dist/providers/alpha-vantage.js +184 -76
- package/dist/providers/alpha-vantage.js.map +1 -1
- package/dist/providers/coingecko.js +53 -37
- package/dist/providers/coingecko.js.map +1 -1
- package/dist/providers/fear-greed.js +23 -15
- package/dist/providers/fear-greed.js.map +1 -1
- package/dist/providers/fred.js +35 -27
- package/dist/providers/fred.js.map +1 -1
- package/dist/providers/reddit.js +44 -36
- package/dist/providers/reddit.js.map +1 -1
- package/dist/providers/twitter.d.ts +20 -0
- package/dist/providers/twitter.js +143 -0
- package/dist/providers/twitter.js.map +1 -0
- package/dist/providers/with-fallback.d.ts +15 -0
- package/dist/providers/with-fallback.js +32 -0
- package/dist/providers/with-fallback.js.map +1 -0
- package/dist/providers/wrap-provider.d.ts +13 -0
- package/dist/providers/wrap-provider.js +43 -0
- package/dist/providers/wrap-provider.js.map +1 -0
- package/dist/providers/yahoo-finance.js +77 -57
- package/dist/providers/yahoo-finance.js.map +1 -1
- package/dist/runtime/evidence.d.ts +35 -0
- package/dist/runtime/evidence.js +29 -0
- package/dist/runtime/evidence.js.map +1 -0
- package/dist/runtime/index.d.ts +16 -0
- package/dist/runtime/index.js +10 -0
- package/dist/runtime/index.js.map +1 -0
- package/dist/runtime/prompt-step.d.ts +41 -0
- package/dist/runtime/prompt-step.js +42 -0
- package/dist/runtime/prompt-step.js.map +1 -0
- package/dist/runtime/provider-ids.d.ts +14 -0
- package/dist/runtime/provider-ids.js +14 -0
- package/dist/runtime/provider-ids.js.map +1 -0
- package/dist/runtime/provider-tracker.d.ts +20 -0
- package/dist/runtime/provider-tracker.js +36 -0
- package/dist/runtime/provider-tracker.js.map +1 -0
- package/dist/runtime/run-context.d.ts +11 -0
- package/dist/runtime/run-context.js +14 -0
- package/dist/runtime/run-context.js.map +1 -0
- package/dist/runtime/session-coordinator.d.ts +48 -0
- package/dist/runtime/session-coordinator.js +171 -0
- package/dist/runtime/session-coordinator.js.map +1 -0
- package/dist/runtime/validation.d.ts +44 -0
- package/dist/runtime/validation.js +157 -0
- package/dist/runtime/validation.js.map +1 -0
- package/dist/runtime/workflow-events.d.ts +21 -0
- package/dist/runtime/workflow-events.js +31 -0
- package/dist/runtime/workflow-events.js.map +1 -0
- package/dist/runtime/workflow-runner.d.ts +36 -0
- package/dist/runtime/workflow-runner.js +129 -0
- package/dist/runtime/workflow-runner.js.map +1 -0
- package/dist/runtime/workflow-types.d.ts +60 -0
- package/dist/runtime/workflow-types.js +32 -0
- package/dist/runtime/workflow-types.js.map +1 -0
- package/dist/system-prompt.js +52 -2
- package/dist/system-prompt.js.map +1 -1
- package/dist/tool-kit.d.ts +9 -5
- package/dist/tool-kit.js +29 -6
- package/dist/tool-kit.js.map +1 -1
- package/dist/tools/fundamentals/company-overview.js +13 -2
- package/dist/tools/fundamentals/company-overview.js.map +1 -1
- package/dist/tools/fundamentals/comps.js +15 -7
- package/dist/tools/fundamentals/comps.js.map +1 -1
- package/dist/tools/fundamentals/dcf.js +23 -5
- package/dist/tools/fundamentals/dcf.js.map +1 -1
- package/dist/tools/fundamentals/earnings.js +9 -1
- package/dist/tools/fundamentals/earnings.js.map +1 -1
- package/dist/tools/fundamentals/financials.js +9 -1
- package/dist/tools/fundamentals/financials.js.map +1 -1
- package/dist/tools/fundamentals/sec-filings.js +9 -1
- package/dist/tools/fundamentals/sec-filings.js.map +1 -1
- package/dist/tools/index.js +2 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/interaction/ask-user.d.ts +3 -0
- package/dist/tools/interaction/ask-user.js +87 -0
- package/dist/tools/interaction/ask-user.js.map +1 -0
- package/dist/tools/interaction/twitter-login.d.ts +8 -0
- package/dist/tools/interaction/twitter-login.js +77 -0
- package/dist/tools/interaction/twitter-login.js.map +1 -0
- package/dist/tools/macro/fear-greed.js +9 -1
- package/dist/tools/macro/fear-greed.js.map +1 -1
- package/dist/tools/macro/fred-data.js +13 -2
- package/dist/tools/macro/fred-data.js.map +1 -1
- package/dist/tools/market/crypto-history.js +9 -1
- package/dist/tools/market/crypto-history.js.map +1 -1
- package/dist/tools/market/crypto-price.js +9 -1
- package/dist/tools/market/crypto-price.js.map +1 -1
- package/dist/tools/market/stock-history.js +28 -1
- package/dist/tools/market/stock-history.js.map +1 -1
- package/dist/tools/market/stock-quote.js +29 -4
- package/dist/tools/market/stock-quote.js.map +1 -1
- package/dist/tools/options/option-chain.js +9 -1
- package/dist/tools/options/option-chain.js.map +1 -1
- package/dist/tools/portfolio/correlation.js +15 -3
- package/dist/tools/portfolio/correlation.js.map +1 -1
- package/dist/tools/portfolio/predictions.js +6 -5
- package/dist/tools/portfolio/predictions.js.map +1 -1
- package/dist/tools/portfolio/risk-analysis.js +9 -1
- package/dist/tools/portfolio/risk-analysis.js.map +1 -1
- package/dist/tools/portfolio/tracker.js +6 -3
- package/dist/tools/portfolio/tracker.js.map +1 -1
- package/dist/tools/portfolio/watchlist.js +6 -1
- package/dist/tools/portfolio/watchlist.js.map +1 -1
- package/dist/tools/sentiment/news-sentiment.js +8 -10
- package/dist/tools/sentiment/news-sentiment.js.map +1 -1
- package/dist/tools/sentiment/reddit-sentiment.js +9 -1
- package/dist/tools/sentiment/reddit-sentiment.js.map +1 -1
- package/dist/tools/sentiment/twitter-sentiment.d.ts +9 -0
- package/dist/tools/sentiment/twitter-sentiment.js +58 -0
- package/dist/tools/sentiment/twitter-sentiment.js.map +1 -0
- package/dist/tools/technical/backtest.js +9 -1
- package/dist/tools/technical/backtest.js.map +1 -1
- package/dist/tools/technical/indicators.js +9 -1
- package/dist/tools/technical/indicators.js.map +1 -1
- package/dist/types/index.d.ts +15 -0
- package/dist/types/sentiment.d.ts +20 -0
- package/dist/workflows/compare-assets.d.ts +3 -0
- package/dist/workflows/compare-assets.js +21 -5
- package/dist/workflows/compare-assets.js.map +1 -1
- package/dist/workflows/index.d.ts +3 -3
- package/dist/workflows/index.js +3 -3
- package/dist/workflows/index.js.map +1 -1
- package/dist/workflows/options-screener.d.ts +3 -0
- package/dist/workflows/options-screener.js +24 -7
- package/dist/workflows/options-screener.js.map +1 -1
- package/dist/workflows/portfolio-builder.d.ts +3 -0
- package/dist/workflows/portfolio-builder.js +30 -9
- package/dist/workflows/portfolio-builder.js.map +1 -1
- package/package.json +9 -5
package/README.md
CHANGED
|
@@ -12,6 +12,8 @@ Type `analyze TSLA` and it runs a full 5-analyst breakdown — fundamentals, tec
|
|
|
12
12
|
|
|
13
13
|
## Getting Started
|
|
14
14
|
|
|
15
|
+
**Requires Node.js ≥ 20.**
|
|
16
|
+
|
|
15
17
|
### Standalone CLI
|
|
16
18
|
|
|
17
19
|
```bash
|
|
@@ -22,7 +24,13 @@ opencandle
|
|
|
22
24
|
npx opencandle@latest
|
|
23
25
|
```
|
|
24
26
|
|
|
25
|
-
On first run, OpenCandle
|
|
27
|
+
On first run, OpenCandle walks you through setup:
|
|
28
|
+
|
|
29
|
+
1. **Connect an AI provider** — sign in with OAuth (Google, OpenAI, Anthropic) or paste an API key
|
|
30
|
+
2. **Pick a model** — choose from the available models on your connected provider
|
|
31
|
+
3. **Optional: add market-data keys** — Alpha Vantage and FRED for fundamentals and macro data (can skip)
|
|
32
|
+
|
|
33
|
+
To rerun setup later, use `/setup`.
|
|
26
34
|
|
|
27
35
|
### From Source
|
|
28
36
|
|
|
@@ -65,7 +73,8 @@ Pi also supports OAuth-backed and custom providers through `~/.pi/agent/auth.jso
|
|
|
65
73
|
```
|
|
66
74
|
|
|
67
75
|
- Environment variables still work and override `~/.opencandle/config.json`.
|
|
68
|
-
-
|
|
76
|
+
- Set `OPENCANDLE_HOME` to override the default `~/.opencandle/` data directory.
|
|
77
|
+
- OpenCandle user data lives in `~/.opencandle/` (or `$OPENCANDLE_HOME`):
|
|
69
78
|
- `~/.opencandle/watchlist.json`
|
|
70
79
|
- `~/.opencandle/portfolio.json`
|
|
71
80
|
- `~/.opencandle/predictions.json`
|
|
@@ -75,7 +84,7 @@ Pi also supports OAuth-backed and custom providers through `~/.pi/agent/auth.jso
|
|
|
75
84
|
|
|
76
85
|
## Usage
|
|
77
86
|
|
|
78
|
-
OpenCandle
|
|
87
|
+
OpenCandle runs inside Pi's interactive TUI. Useful controls:
|
|
79
88
|
|
|
80
89
|
```text
|
|
81
90
|
/model Switch provider/model
|
|
@@ -130,7 +139,7 @@ Key architectural choices:
|
|
|
130
139
|
## Test
|
|
131
140
|
|
|
132
141
|
```bash
|
|
133
|
-
npm test #
|
|
142
|
+
npm test # unit tests
|
|
134
143
|
npm run test:watch # watch mode
|
|
135
144
|
```
|
|
136
145
|
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { AnalystOutput, AnalystSignal, DebateSide, DebateOutput } from "../runtime/workflow-types.js";
|
|
2
|
+
import type { EvidenceRecord } from "../runtime/evidence.js";
|
|
3
|
+
/** All analyst roles. */
|
|
4
|
+
export type AnalystRole = "valuation" | "momentum" | "options" | "contrarian" | "risk";
|
|
5
|
+
/** Evidence fields expected per analyst role. */
|
|
6
|
+
export declare const ROLE_EXPECTED_EVIDENCE: Record<AnalystRole, string[]>;
|
|
7
|
+
/**
|
|
8
|
+
* Parse an LLM response into a structured AnalystOutput.
|
|
9
|
+
* Falls back to raw text if parsing fails.
|
|
10
|
+
*/
|
|
11
|
+
export declare function parseAnalystOutput(role: string, responseText: string): AnalystOutput;
|
|
12
|
+
/** Build a structured vote tally from analyst outputs. */
|
|
13
|
+
export declare function tallyVotes(outputs: AnalystOutput[]): {
|
|
14
|
+
buy: number;
|
|
15
|
+
hold: number;
|
|
16
|
+
sell: number;
|
|
17
|
+
weightedConviction: number;
|
|
18
|
+
verdict: AnalystSignal;
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* Parse an LLM debate response into a structured DebateOutput.
|
|
22
|
+
* Eval/test helper only — not used in the live workflow path.
|
|
23
|
+
*/
|
|
24
|
+
export declare function parseDebateOutput(side: DebateSide, responseText: string): DebateOutput;
|
|
25
|
+
/**
|
|
26
|
+
* Check whether analysts produced a BUY+SELL split.
|
|
27
|
+
* Eval/test helper only — not used in the live workflow path.
|
|
28
|
+
*/
|
|
29
|
+
export declare function isAnalystSplit(outputs: AnalystOutput[]): boolean;
|
|
30
|
+
/** Collect all evidence from analyst outputs. */
|
|
31
|
+
export declare function collectEvidence(outputs: AnalystOutput[]): EvidenceRecord[];
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
/** Evidence fields expected per analyst role. */
|
|
2
|
+
export const ROLE_EXPECTED_EVIDENCE = {
|
|
3
|
+
valuation: ["P/E Ratio", "Forward P/E", "EPS", "Intrinsic Value", "Revenue Growth"],
|
|
4
|
+
momentum: ["RSI", "MACD", "SMA 50", "SMA 200", "Volume Trend"],
|
|
5
|
+
options: ["Put/Call Ratio", "IV Level", "Unusual Volume", "Max Pain"],
|
|
6
|
+
contrarian: ["Fear & Greed Index", "Reddit Sentiment", "Sentiment Score"],
|
|
7
|
+
risk: ["Annualized Volatility", "Sharpe Ratio", "Max Drawdown", "VaR 95%", "Position Size"],
|
|
8
|
+
};
|
|
9
|
+
/**
|
|
10
|
+
* Parse an LLM response into a structured AnalystOutput.
|
|
11
|
+
* Falls back to raw text if parsing fails.
|
|
12
|
+
*/
|
|
13
|
+
export function parseAnalystOutput(role, responseText) {
|
|
14
|
+
const signal = extractSignal(responseText);
|
|
15
|
+
const conviction = extractConviction(responseText);
|
|
16
|
+
const thesis = extractThesis(responseText);
|
|
17
|
+
return {
|
|
18
|
+
role,
|
|
19
|
+
signal: signal ?? "HOLD",
|
|
20
|
+
conviction: conviction ?? 5,
|
|
21
|
+
thesis: thesis ?? "",
|
|
22
|
+
evidence: [],
|
|
23
|
+
rawText: responseText,
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
function extractSignal(text) {
|
|
27
|
+
const match = text.match(/SIGNAL:\s*(BUY|HOLD|SELL)/i);
|
|
28
|
+
if (match)
|
|
29
|
+
return match[1].toUpperCase();
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
32
|
+
function extractConviction(text) {
|
|
33
|
+
const match = text.match(/CONVICTION:\s*(\d+)/i);
|
|
34
|
+
if (match) {
|
|
35
|
+
const value = parseInt(match[1], 10);
|
|
36
|
+
if (value >= 1 && value <= 10)
|
|
37
|
+
return value;
|
|
38
|
+
}
|
|
39
|
+
return null;
|
|
40
|
+
}
|
|
41
|
+
function extractThesis(text) {
|
|
42
|
+
const match = text.match(/THESIS:\s*(.+)/i);
|
|
43
|
+
return match ? match[1].trim() : null;
|
|
44
|
+
}
|
|
45
|
+
/** Build a structured vote tally from analyst outputs. */
|
|
46
|
+
export function tallyVotes(outputs) {
|
|
47
|
+
let buy = 0;
|
|
48
|
+
let hold = 0;
|
|
49
|
+
let sell = 0;
|
|
50
|
+
let totalWeight = 0;
|
|
51
|
+
let weightedSum = 0;
|
|
52
|
+
for (const output of outputs) {
|
|
53
|
+
switch (output.signal) {
|
|
54
|
+
case "BUY":
|
|
55
|
+
buy++;
|
|
56
|
+
break;
|
|
57
|
+
case "HOLD":
|
|
58
|
+
hold++;
|
|
59
|
+
break;
|
|
60
|
+
case "SELL":
|
|
61
|
+
sell++;
|
|
62
|
+
break;
|
|
63
|
+
}
|
|
64
|
+
totalWeight += output.conviction;
|
|
65
|
+
const signalValue = output.signal === "BUY" ? 1 : output.signal === "SELL" ? -1 : 0;
|
|
66
|
+
weightedSum += signalValue * output.conviction;
|
|
67
|
+
}
|
|
68
|
+
const weightedConviction = totalWeight > 0
|
|
69
|
+
? Math.round((totalWeight / outputs.length) * 10) / 10
|
|
70
|
+
: 0;
|
|
71
|
+
let verdict;
|
|
72
|
+
if (weightedSum > 0)
|
|
73
|
+
verdict = "BUY";
|
|
74
|
+
else if (weightedSum < 0)
|
|
75
|
+
verdict = "SELL";
|
|
76
|
+
else
|
|
77
|
+
verdict = "HOLD";
|
|
78
|
+
return { buy, hold, sell, weightedConviction, verdict };
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Parse an LLM debate response into a structured DebateOutput.
|
|
82
|
+
* Eval/test helper only — not used in the live workflow path.
|
|
83
|
+
*/
|
|
84
|
+
export function parseDebateOutput(side, responseText) {
|
|
85
|
+
// Detect skipped rebuttal
|
|
86
|
+
if (/^rebuttal skipped/i.test(responseText.trim())) {
|
|
87
|
+
return {
|
|
88
|
+
side,
|
|
89
|
+
thesis: "",
|
|
90
|
+
keyRisk: "",
|
|
91
|
+
concessions: [],
|
|
92
|
+
remainingConviction: 0,
|
|
93
|
+
evidence: [],
|
|
94
|
+
rawText: responseText,
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
const thesis = extractDebateThesis(side, responseText);
|
|
98
|
+
const keyRisk = extractKeyRisk(side, responseText);
|
|
99
|
+
const concessions = extractConcessions(responseText);
|
|
100
|
+
const remainingConviction = extractRemainingConviction(responseText);
|
|
101
|
+
return {
|
|
102
|
+
side,
|
|
103
|
+
thesis,
|
|
104
|
+
keyRisk,
|
|
105
|
+
concessions,
|
|
106
|
+
remainingConviction,
|
|
107
|
+
evidence: [],
|
|
108
|
+
rawText: responseText,
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
function extractDebateThesis(side, text) {
|
|
112
|
+
const label = side === "bull" ? "BULL THESIS" : "BEAR THESIS";
|
|
113
|
+
const match = text.match(new RegExp(`${label}:\\s*(.+)`, "i"));
|
|
114
|
+
return match ? match[1].trim() : "";
|
|
115
|
+
}
|
|
116
|
+
function extractKeyRisk(side, text) {
|
|
117
|
+
if (side === "bear") {
|
|
118
|
+
const match = text.match(/WHAT WOULD CHANGE MY MIND:\s*(.+)/i);
|
|
119
|
+
return match ? match[1].trim() : "";
|
|
120
|
+
}
|
|
121
|
+
const match = text.match(/KEY RISK(?:\s+TO THIS THESIS)?:\s*(.+)/i);
|
|
122
|
+
return match ? match[1].trim() : "";
|
|
123
|
+
}
|
|
124
|
+
function extractConcessions(text) {
|
|
125
|
+
const match = text.match(/CONCESSIONS:\s*([\s\S]*?)(?=REMAINING CONVICTION:|$)/i);
|
|
126
|
+
if (!match)
|
|
127
|
+
return [];
|
|
128
|
+
return match[1]
|
|
129
|
+
.split("\n")
|
|
130
|
+
.map((line) => line.replace(/^[-*•]\s*/, "").trim())
|
|
131
|
+
.filter(Boolean);
|
|
132
|
+
}
|
|
133
|
+
function extractRemainingConviction(text) {
|
|
134
|
+
const match = text.match(/REMAINING CONVICTION:\s*(\d+)/i);
|
|
135
|
+
if (match) {
|
|
136
|
+
const value = parseInt(match[1], 10);
|
|
137
|
+
if (value >= 1 && value <= 10)
|
|
138
|
+
return value;
|
|
139
|
+
}
|
|
140
|
+
return 0;
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Check whether analysts produced a BUY+SELL split.
|
|
144
|
+
* Eval/test helper only — not used in the live workflow path.
|
|
145
|
+
*/
|
|
146
|
+
export function isAnalystSplit(outputs) {
|
|
147
|
+
const votes = tallyVotes(outputs);
|
|
148
|
+
return votes.buy > 0 && votes.sell > 0;
|
|
149
|
+
}
|
|
150
|
+
/** Collect all evidence from analyst outputs. */
|
|
151
|
+
export function collectEvidence(outputs) {
|
|
152
|
+
const evidence = [];
|
|
153
|
+
for (const output of outputs) {
|
|
154
|
+
evidence.push(...output.evidence);
|
|
155
|
+
}
|
|
156
|
+
return evidence;
|
|
157
|
+
}
|
|
158
|
+
//# sourceMappingURL=contracts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contracts.js","sourceRoot":"","sources":["../../src/analysts/contracts.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,16 @@
|
|
|
1
1
|
export type AnalystRole = "valuation" | "momentum" | "options" | "contrarian" | "risk";
|
|
2
|
+
export declare function buildBullPrompt(symbol: string): string;
|
|
3
|
+
export declare function buildBearPrompt(symbol: string): string;
|
|
4
|
+
export declare function buildRebuttalPrompt(symbol: string): string;
|
|
5
|
+
export declare function buildSynthesisPrompt(symbol: string): string;
|
|
2
6
|
export declare function getInitialAnalysisPrompt(symbol: string): string;
|
|
3
|
-
export
|
|
4
|
-
|
|
7
|
+
export interface ComprehensiveAnalysisOptions {
|
|
8
|
+
debate?: boolean;
|
|
9
|
+
}
|
|
10
|
+
export declare function getComprehensiveAnalysisPrompts(symbol: string, options?: ComprehensiveAnalysisOptions): string[];
|
|
11
|
+
import type { WorkflowDefinition } from "../runtime/prompt-step.js";
|
|
12
|
+
export declare function buildComprehensiveAnalysisDefinition(symbol: string, options?: ComprehensiveAnalysisOptions): WorkflowDefinition;
|
|
13
|
+
export declare function runComprehensiveAnalysis(enqueueFollowUp: (prompt: string) => void, symbol: string, options?: ComprehensiveAnalysisOptions): void;
|
|
5
14
|
export declare function isAnalysisRequest(input: string): {
|
|
6
15
|
match: boolean;
|
|
7
16
|
symbol?: string;
|
|
@@ -47,7 +47,85 @@ Where is the consensus wrong? What is the market over-pricing or under-pricing?$
|
|
|
47
47
|
5. Scenario analysis: What is the max realistic downside in a 1-sigma and 2-sigma move?
|
|
48
48
|
Be quantitative. Every assessment must include a number.${EXECUTION_GUARDRAILS}${VOTING_INSTRUCTION}`,
|
|
49
49
|
};
|
|
50
|
-
|
|
50
|
+
export function buildBullPrompt(symbol) {
|
|
51
|
+
return `**[Bull Researcher]** You have received five analyst perspectives above for ${symbol}.
|
|
52
|
+
Build the strongest possible case FOR this position.
|
|
53
|
+
|
|
54
|
+
Rules:
|
|
55
|
+
- Cite analyst outputs and underlying tool evidence where available.
|
|
56
|
+
- Address any bearish signals (SELL votes, high VaR, negative sentiment) and explain why they are less concerning than they appear.
|
|
57
|
+
- You may call up to 2 tools if you identify a specific gap in the existing evidence. State the gap before calling the tool.
|
|
58
|
+
- Reuse data already fetched in the session.
|
|
59
|
+
${EXECUTION_GUARDRAILS}
|
|
60
|
+
|
|
61
|
+
End with this exact format:
|
|
62
|
+
BULL THESIS: [2-3 sentences building the case for the position]
|
|
63
|
+
KEY RISK TO THIS THESIS: [one sentence — the single thing that would invalidate your case]`;
|
|
64
|
+
}
|
|
65
|
+
export function buildBearPrompt(symbol) {
|
|
66
|
+
return `**[Bear Researcher]** You have received five analyst perspectives and a bull case above for ${symbol}. Your job is to dismantle the bull thesis.
|
|
67
|
+
|
|
68
|
+
Rules:
|
|
69
|
+
- Attack the weakest assumptions in the bull case above.
|
|
70
|
+
- Cite analyst outputs and underlying tool evidence where available.
|
|
71
|
+
- If the bull case ignored negative data points, surface them.
|
|
72
|
+
- You may call up to 2 tools if you identify a specific gap in the existing evidence. State the gap before calling the tool.
|
|
73
|
+
- Reuse data already fetched in the session.
|
|
74
|
+
${EXECUTION_GUARDRAILS}
|
|
75
|
+
|
|
76
|
+
End with this exact format:
|
|
77
|
+
BEAR THESIS: [2-3 sentences arguing against the position]
|
|
78
|
+
WHAT WOULD CHANGE MY MIND: [one sentence — what data would make you concede to the bull]`;
|
|
79
|
+
}
|
|
80
|
+
export function buildRebuttalPrompt(symbol) {
|
|
81
|
+
return `**[Bull Rebuttal]** First, check the five analyst SIGNAL: lines above for ${symbol} (each analyst ended with "SIGNAL: BUY", "SIGNAL: HOLD", or "SIGNAL: SELL").
|
|
82
|
+
If there is NO case where at least one analyst said SIGNAL: BUY and at least one said SIGNAL: SELL, respond with ONLY:
|
|
83
|
+
REBUTTAL SKIPPED — consensus reached.
|
|
84
|
+
|
|
85
|
+
Otherwise, the bear raised specific concerns above. Address each one directly.
|
|
86
|
+
|
|
87
|
+
Rules:
|
|
88
|
+
- Concede any point where the bear is factually correct.
|
|
89
|
+
- For points you rebut, cite specific data from the analysts above.
|
|
90
|
+
- Do not repeat your original thesis — respond to the bear's NEW arguments.
|
|
91
|
+
- No tool calls in the rebuttal. Work with existing evidence only.
|
|
92
|
+
${EXECUTION_GUARDRAILS}
|
|
93
|
+
|
|
94
|
+
End with this exact format:
|
|
95
|
+
CONCESSIONS: [bullet list of points you concede]
|
|
96
|
+
REMAINING CONVICTION: [1-10, where 10 = fully confident despite bear case]`;
|
|
97
|
+
}
|
|
98
|
+
export function buildSynthesisPrompt(symbol) {
|
|
99
|
+
return `**[Synthesis]** You have received five analyst signals with conviction scores for ${symbol}, a bull case arguing FOR the position, and a bear case arguing AGAINST.
|
|
100
|
+
If a bull rebuttal with concessions appears above (not a line starting with "REBUTTAL SKIPPED"), treat the concessions as validated risks that must be addressed.
|
|
101
|
+
|
|
102
|
+
Your job is NOT to average opinions. Your job is to RESOLVE THE DEBATE.
|
|
103
|
+
|
|
104
|
+
1. **Vote Tally**: X BUY, Y HOLD, Z SELL — weighted average conviction
|
|
105
|
+
2. **Verdict**: BUY, HOLD, or SELL
|
|
106
|
+
3. **Debate winner**: Which side had the stronger argument, and why
|
|
107
|
+
4. **Strongest counterpoint**: Address the losing side's best argument directly — explain why it's outweighed, or acknowledge it as a real risk
|
|
108
|
+
5. **Reversal condition**: State the SPECIFIC, TESTABLE condition under which your verdict would reverse (the bear's "what would change my mind" or the bull's "key risk")
|
|
109
|
+
6. **Key levels**: Entry, stop-loss, and target prices
|
|
110
|
+
7. **Position sizing**: Based on risk manager's analysis
|
|
111
|
+
|
|
112
|
+
Be direct and actionable. This is your final word on ${symbol}.
|
|
113
|
+
|
|
114
|
+
End with this exact format:
|
|
115
|
+
VERDICT: [BUY|HOLD|SELL]
|
|
116
|
+
CONFIDENCE: [1-10]
|
|
117
|
+
DEBATE WINNER: [BULL|BEAR]
|
|
118
|
+
REVERSAL CONDITION: [specific, testable condition]`;
|
|
119
|
+
}
|
|
120
|
+
const VALIDATION_PROMPT_DEBATE = (symbol) => `**[Validation Check]** Review the complete analysis of ${symbol} above, including the debate. For each specific number cited by any analyst, bull, or bear researcher, verify it matches tool output data received in the session. Flag any inconsistencies. If a number was stated without being fetched first, call it out as UNVERIFIED.
|
|
121
|
+
|
|
122
|
+
Additionally check:
|
|
123
|
+
1. Did the bull/bear cite real numbers from analyst outputs (not hallucinated)?
|
|
124
|
+
2. If a rebuttal occurred (not a line starting with "REBUTTAL SKIPPED"), are the concessions genuine (did the bull actually give ground on the bear's specific points)?
|
|
125
|
+
3. Is the reversal condition specific and testable (not vague like "if macro deteriorates")?
|
|
126
|
+
|
|
127
|
+
Output: VALIDATED if all checks pass, or list specific corrections needed.`;
|
|
128
|
+
const SYNTHESIS_PROMPT_NO_DEBATE = (symbol) => `**[Synthesis]** You have received five analyst signals above for ${symbol}. Tally the SIGNAL votes (BUY/HOLD/SELL) and weight them by CONVICTION scores. Then provide:
|
|
51
129
|
1. **Vote Tally**: X BUY, Y HOLD, Z SELL — weighted average conviction
|
|
52
130
|
2. **Verdict**: Buy, Hold, or Sell — based on the signal consensus
|
|
53
131
|
3. **Key thesis** in 2-3 sentences
|
|
@@ -57,22 +135,92 @@ const SYNTHESIS_PROMPT = (symbol) => `**[Synthesis]** You have received five ana
|
|
|
57
135
|
7. **Position sizing recommendation** based on risk profile
|
|
58
136
|
|
|
59
137
|
Be direct and actionable. This is your final word on ${symbol}.`;
|
|
60
|
-
const
|
|
138
|
+
const VALIDATION_PROMPT_NO_DEBATE = (symbol) => `**[Validation Check]** Review your complete analysis of ${symbol} above. For each specific number you cited (price, P/E, revenue, RSI, intrinsic value, etc.), verify it matches the tool output data you received. Flag any inconsistencies. If you stated a number without fetching it first, call that out as UNVERIFIED. Output: VALIDATED if all numbers check out, or list specific corrections needed.`;
|
|
61
139
|
export function getInitialAnalysisPrompt(symbol) {
|
|
62
140
|
return `Begin comprehensive analysis of ${symbol}. Start by getting the current stock quote.`;
|
|
63
141
|
}
|
|
64
|
-
export function getComprehensiveAnalysisPrompts(symbol) {
|
|
142
|
+
export function getComprehensiveAnalysisPrompts(symbol, options) {
|
|
143
|
+
const debate = options?.debate ?? true;
|
|
65
144
|
const roles = ["valuation", "momentum", "options", "contrarian", "risk"];
|
|
66
145
|
const prompts = [getInitialAnalysisPrompt(symbol)];
|
|
67
146
|
for (const role of roles) {
|
|
68
147
|
prompts.push(ANALYST_PROMPTS[role](symbol));
|
|
69
148
|
}
|
|
70
|
-
|
|
71
|
-
|
|
149
|
+
if (debate) {
|
|
150
|
+
prompts.push(buildBullPrompt(symbol));
|
|
151
|
+
prompts.push(buildBearPrompt(symbol));
|
|
152
|
+
prompts.push(buildRebuttalPrompt(symbol));
|
|
153
|
+
prompts.push(buildSynthesisPrompt(symbol));
|
|
154
|
+
prompts.push(VALIDATION_PROMPT_DEBATE(symbol));
|
|
155
|
+
}
|
|
156
|
+
else {
|
|
157
|
+
prompts.push(SYNTHESIS_PROMPT_NO_DEBATE(symbol));
|
|
158
|
+
prompts.push(VALIDATION_PROMPT_NO_DEBATE(symbol));
|
|
159
|
+
}
|
|
72
160
|
return prompts;
|
|
73
161
|
}
|
|
74
|
-
|
|
75
|
-
|
|
162
|
+
import { promptStep } from "../runtime/prompt-step.js";
|
|
163
|
+
export function buildComprehensiveAnalysisDefinition(symbol, options) {
|
|
164
|
+
const debate = options?.debate ?? true;
|
|
165
|
+
const roles = ["valuation", "momentum", "options", "contrarian", "risk"];
|
|
166
|
+
const analystOutputs = roles.map((r) => `${r}_signal`);
|
|
167
|
+
const analystSteps = [
|
|
168
|
+
promptStep("initial_fetch", "Fetch initial quote data", getInitialAnalysisPrompt(symbol), {
|
|
169
|
+
expectedOutputs: ["quote"],
|
|
170
|
+
}),
|
|
171
|
+
...roles.map((role) => promptStep(`analyst_${role}`, `${role} analysis`, ANALYST_PROMPTS[role](symbol), {
|
|
172
|
+
skippable: true,
|
|
173
|
+
requiredInputs: ["quote"],
|
|
174
|
+
expectedOutputs: [`${role}_signal`],
|
|
175
|
+
})),
|
|
176
|
+
];
|
|
177
|
+
if (debate) {
|
|
178
|
+
return {
|
|
179
|
+
workflowType: "comprehensive_analysis",
|
|
180
|
+
steps: [
|
|
181
|
+
...analystSteps,
|
|
182
|
+
promptStep("debate_bull", "Bull researcher case", buildBullPrompt(symbol), {
|
|
183
|
+
requiredInputs: analystOutputs,
|
|
184
|
+
expectedOutputs: ["bull_thesis"],
|
|
185
|
+
}),
|
|
186
|
+
promptStep("debate_bear", "Bear researcher case", buildBearPrompt(symbol), {
|
|
187
|
+
requiredInputs: [...analystOutputs, "bull_thesis"],
|
|
188
|
+
expectedOutputs: ["bear_thesis"],
|
|
189
|
+
}),
|
|
190
|
+
promptStep("debate_rebuttal", "Bull rebuttal (self-gating)", buildRebuttalPrompt(symbol), {
|
|
191
|
+
requiredInputs: [...analystOutputs, "bull_thesis", "bear_thesis"],
|
|
192
|
+
expectedOutputs: ["rebuttal"],
|
|
193
|
+
}),
|
|
194
|
+
promptStep("synthesis", "Resolve the debate", buildSynthesisPrompt(symbol), {
|
|
195
|
+
requiredInputs: [...analystOutputs, "bull_thesis", "bear_thesis", "rebuttal"],
|
|
196
|
+
expectedOutputs: ["verdict"],
|
|
197
|
+
}),
|
|
198
|
+
promptStep("validation", "Validate cited numbers", VALIDATION_PROMPT_DEBATE(symbol), {
|
|
199
|
+
skippable: true,
|
|
200
|
+
requiredInputs: ["verdict"],
|
|
201
|
+
expectedOutputs: ["validation_result"],
|
|
202
|
+
}),
|
|
203
|
+
],
|
|
204
|
+
};
|
|
205
|
+
}
|
|
206
|
+
return {
|
|
207
|
+
workflowType: "comprehensive_analysis",
|
|
208
|
+
steps: [
|
|
209
|
+
...analystSteps,
|
|
210
|
+
promptStep("synthesis", "Synthesize analyst signals", SYNTHESIS_PROMPT_NO_DEBATE(symbol), {
|
|
211
|
+
requiredInputs: analystOutputs,
|
|
212
|
+
expectedOutputs: ["verdict"],
|
|
213
|
+
}),
|
|
214
|
+
promptStep("validation", "Validate cited numbers", VALIDATION_PROMPT_NO_DEBATE(symbol), {
|
|
215
|
+
skippable: true,
|
|
216
|
+
requiredInputs: ["verdict"],
|
|
217
|
+
expectedOutputs: ["validation_result"],
|
|
218
|
+
}),
|
|
219
|
+
],
|
|
220
|
+
};
|
|
221
|
+
}
|
|
222
|
+
export function runComprehensiveAnalysis(enqueueFollowUp, symbol, options) {
|
|
223
|
+
for (const prompt of getComprehensiveAnalysisPrompts(symbol, options).slice(1)) {
|
|
76
224
|
enqueueFollowUp(prompt);
|
|
77
225
|
}
|
|
78
226
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"orchestrator.js","sourceRoot":"","sources":["../../src/analysts/orchestrator.ts"],"names":[],"mappings":"AAOA,MAAM,cAAc,GAAG,4CAA4C,CAAC;AACpE,MAAM,yBAAyB,GAAG,kCAAkC,CAAC;AAErE,MAAM,kBAAkB,GAAG;;;;;gDAKqB,CAAC;AAEjD,MAAM,oBAAoB,GAAG;;;;kEAIqC,CAAC;AAEnE,MAAM,eAAe,GAAoD;IACvE,SAAS,EAAE,CAAC,MAAM,EAAE,EAAE,CACpB,yKAAyK,MAAM;;;;;uPAKoE,oBAAoB,GAAG,kBAAkB,EAAE;IAEhS,QAAQ,EAAE,CAAC,MAAM,EAAE,EAAE,CACnB,gIAAgI,MAAM;;;;;;mJAMS,oBAAoB,GAAG,kBAAkB,EAAE;IAE5L,OAAO,EAAE,CAAC,MAAM,EAAE,EAAE,CAClB,wFAAwF,MAAM;;;;;;gFAMlB,oBAAoB,GAAG,kBAAkB,EAAE;IAEzH,UAAU,EAAE,CAAC,MAAM,EAAE,EAAE,CACrB,0NAA0N,MAAM;;;oCAGhM,MAAM;;;iFAGuC,oBAAoB,GAAG,kBAAkB,EAAE;IAE1H,IAAI,EAAE,CAAC,MAAM,EAAE,EAAE,CACf,yJAAyJ,MAAM;;;;;;0DAMzG,oBAAoB,GAAG,kBAAkB,EAAE;CACpG,CAAC;AAEF,MAAM,
|
|
1
|
+
{"version":3,"file":"orchestrator.js","sourceRoot":"","sources":["../../src/analysts/orchestrator.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { parseArgs } from "node:util";
|
|
3
|
-
import { AuthStorage, DefaultPackageManager, InteractiveMode, ModelRegistry, SettingsManager, getAgentDir, initTheme, } from "@mariozechner/pi-coding-agent";
|
|
3
|
+
import { AuthStorage, DefaultPackageManager, InteractiveMode, ModelRegistry, SettingsManager, SessionManager, createAgentSessionRuntime, createAgentSessionServices, getAgentDir, initTheme, } from "@mariozechner/pi-coding-agent";
|
|
4
4
|
import { createOpenCandleSession } from "./pi/session.js";
|
|
5
5
|
import { loadEnv } from "./config.js";
|
|
6
6
|
async function handlePackageCommand(args, cwd, agentDir) {
|
|
@@ -100,22 +100,38 @@ async function main() {
|
|
|
100
100
|
const modelRegistry = ModelRegistry.create(authStorage);
|
|
101
101
|
const shouldSuppressFallbackMessage = modelRegistry.getAvailable().length === 0;
|
|
102
102
|
initTheme(settingsManager.getTheme(), true);
|
|
103
|
-
const
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
103
|
+
const sessionManager = SessionManager.create(agentDir);
|
|
104
|
+
const runtime = await createAgentSessionRuntime(async (opts) => {
|
|
105
|
+
const services = await createAgentSessionServices({
|
|
106
|
+
cwd: opts.cwd,
|
|
107
|
+
agentDir: opts.agentDir,
|
|
108
|
+
authStorage,
|
|
109
|
+
settingsManager,
|
|
110
|
+
modelRegistry,
|
|
111
|
+
});
|
|
112
|
+
const result = await createOpenCandleSession({
|
|
113
|
+
cwd: opts.cwd,
|
|
114
|
+
settingsManager,
|
|
115
|
+
authStorage,
|
|
116
|
+
modelRegistry,
|
|
117
|
+
sessionManager: opts.sessionManager,
|
|
118
|
+
});
|
|
119
|
+
return {
|
|
120
|
+
...result,
|
|
121
|
+
services,
|
|
122
|
+
diagnostics: services.diagnostics,
|
|
123
|
+
};
|
|
124
|
+
}, { cwd, agentDir, sessionManager });
|
|
109
125
|
try {
|
|
110
|
-
const interactiveMode = new InteractiveMode(
|
|
126
|
+
const interactiveMode = new InteractiveMode(runtime, {
|
|
111
127
|
modelFallbackMessage: shouldSuppressFallbackMessage
|
|
112
128
|
? undefined
|
|
113
|
-
: modelFallbackMessage,
|
|
129
|
+
: runtime.modelFallbackMessage,
|
|
114
130
|
});
|
|
115
131
|
await interactiveMode.run();
|
|
116
132
|
}
|
|
117
133
|
finally {
|
|
118
|
-
|
|
134
|
+
await runtime.dispose();
|
|
119
135
|
}
|
|
120
136
|
}
|
|
121
137
|
await main();
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/config.d.ts
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
export interface Config {
|
|
2
2
|
alphaVantageApiKey?: string;
|
|
3
3
|
fredApiKey?: string;
|
|
4
|
+
/** Enable adversarial bull/bear debate in comprehensive analysis. Default: true. */
|
|
5
|
+
debate?: boolean;
|
|
4
6
|
}
|
|
5
7
|
export interface OpenCandleFileConfig {
|
|
6
8
|
providers?: {
|
|
@@ -11,6 +13,8 @@ export interface OpenCandleFileConfig {
|
|
|
11
13
|
apiKey?: string;
|
|
12
14
|
};
|
|
13
15
|
};
|
|
16
|
+
/** Enable adversarial bull/bear debate in comprehensive analysis. Default: true. */
|
|
17
|
+
debate?: boolean;
|
|
14
18
|
}
|
|
15
19
|
export interface FinanceProviderReadiness {
|
|
16
20
|
hasAlphaVantage: boolean;
|
package/dist/config.js
CHANGED
|
@@ -24,9 +24,11 @@ export function loadEnv(path = ".env") {
|
|
|
24
24
|
}
|
|
25
25
|
let cachedConfig = null;
|
|
26
26
|
function resolveConfig(fileConfig) {
|
|
27
|
+
const debateEnv = process.env.OPENCANDLE_DEBATE;
|
|
27
28
|
return {
|
|
28
29
|
alphaVantageApiKey: process.env.ALPHA_VANTAGE_API_KEY ?? fileConfig.providers?.alphaVantage?.apiKey,
|
|
29
30
|
fredApiKey: process.env.FRED_API_KEY ?? fileConfig.providers?.fred?.apiKey,
|
|
31
|
+
debate: debateEnv !== undefined ? debateEnv !== "false" && debateEnv !== "0" : fileConfig.debate ?? true,
|
|
30
32
|
};
|
|
31
33
|
}
|
|
32
34
|
export function loadFileConfig(path = getConfigPath()) {
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { createOpenCandleSession, type CreateOpenCandleSessionOptions } from "./pi/session.js";
|
|
2
2
|
export { default as openCandleExtension } from "./pi/opencandle-extension.js";
|
|
3
3
|
export { agentToolToPiTool, getOpenCandleToolDefinitions } from "./pi/tool-adapter.js";
|
|
4
|
-
export {
|
|
4
|
+
export { registerTools } from "./tool-kit.js";
|
|
5
5
|
export { getAllTools } from "./tools/index.js";
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export { createOpenCandleSession } from "./pi/session.js";
|
|
2
2
|
export { default as openCandleExtension } from "./pi/opencandle-extension.js";
|
|
3
3
|
export { agentToolToPiTool, getOpenCandleToolDefinitions } from "./pi/tool-adapter.js";
|
|
4
|
-
export {
|
|
4
|
+
export { registerTools } from "./tool-kit.js";
|
|
5
5
|
export { getAllTools } from "./tools/index.js";
|
|
6
6
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAuC,MAAM,iBAAiB,CAAC;AAC/F,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AAC9E,OAAO,EAAE,iBAAiB,EAAE,4BAA4B,EAAE,MAAM,sBAAsB,CAAC;AACvF,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAuC,MAAM,iBAAiB,CAAC;AAC/F,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AAC9E,OAAO,EAAE,iBAAiB,EAAE,4BAA4B,EAAE,MAAM,sBAAsB,CAAC;AACvF,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC"}
|