opencandle 0.2.0 → 0.3.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 +110 -87
- package/dist/analysts/orchestrator.js +1 -2
- package/dist/analysts/orchestrator.js.map +1 -1
- package/dist/config.d.ts +25 -5
- package/dist/config.js +16 -8
- package/dist/config.js.map +1 -1
- package/dist/infra/cache.d.ts +4 -0
- package/dist/infra/cache.js +4 -0
- package/dist/infra/cache.js.map +1 -1
- package/dist/infra/rate-limiter.js +6 -0
- package/dist/infra/rate-limiter.js.map +1 -1
- package/dist/onboarding/connect.d.ts +23 -0
- package/dist/onboarding/connect.js +107 -0
- package/dist/onboarding/connect.js.map +1 -0
- package/dist/onboarding/credential-interceptor.d.ts +44 -0
- package/dist/onboarding/credential-interceptor.js +72 -0
- package/dist/onboarding/credential-interceptor.js.map +1 -0
- package/dist/onboarding/degradation-accumulator.d.ts +21 -0
- package/dist/onboarding/degradation-accumulator.js +55 -0
- package/dist/onboarding/degradation-accumulator.js.map +1 -0
- package/dist/onboarding/prompt-user.d.ts +23 -0
- package/dist/onboarding/prompt-user.js +61 -0
- package/dist/onboarding/prompt-user.js.map +1 -0
- package/dist/onboarding/providers.d.ts +109 -0
- package/dist/onboarding/providers.js +236 -0
- package/dist/onboarding/providers.js.map +1 -0
- package/dist/onboarding/state.d.ts +31 -2
- package/dist/onboarding/state.js +141 -13
- package/dist/onboarding/state.js.map +1 -1
- package/dist/onboarding/tool-helpers.d.ts +34 -0
- package/dist/onboarding/tool-helpers.js +80 -0
- package/dist/onboarding/tool-helpers.js.map +1 -0
- package/dist/onboarding/tool-tags.d.ts +37 -0
- package/dist/onboarding/tool-tags.js +149 -0
- package/dist/onboarding/tool-tags.js.map +1 -0
- package/dist/onboarding/validation.d.ts +19 -0
- package/dist/onboarding/validation.js +117 -0
- package/dist/onboarding/validation.js.map +1 -0
- package/dist/pi/opencandle-extension.js +303 -4
- package/dist/pi/opencandle-extension.js.map +1 -1
- package/dist/pi/setup.d.ts +0 -1
- package/dist/pi/setup.js +66 -119
- package/dist/pi/setup.js.map +1 -1
- package/dist/prompts/context-builder.js +2 -1
- package/dist/prompts/context-builder.js.map +1 -1
- package/dist/providers/alpha-vantage.js +20 -1
- package/dist/providers/alpha-vantage.js.map +1 -1
- package/dist/providers/exa-search.d.ts +39 -0
- package/dist/providers/exa-search.js +276 -0
- package/dist/providers/exa-search.js.map +1 -0
- package/dist/providers/finnhub.d.ts +17 -0
- package/dist/providers/finnhub.js +94 -0
- package/dist/providers/finnhub.js.map +1 -0
- package/dist/providers/fred.js +13 -1
- package/dist/providers/fred.js.map +1 -1
- package/dist/providers/index.d.ts +2 -0
- package/dist/providers/index.js +1 -0
- package/dist/providers/index.js.map +1 -1
- package/dist/providers/provider-credential-error.d.ts +8 -0
- package/dist/providers/provider-credential-error.js +22 -0
- package/dist/providers/provider-credential-error.js.map +1 -0
- package/dist/providers/reddit.d.ts +8 -0
- package/dist/providers/reddit.js +36 -9
- package/dist/providers/reddit.js.map +1 -1
- package/dist/providers/twitter.js +2 -8
- package/dist/providers/twitter.js.map +1 -1
- package/dist/providers/web-search.d.ts +17 -0
- package/dist/providers/web-search.js +224 -0
- package/dist/providers/web-search.js.map +1 -0
- package/dist/providers/wrap-provider.d.ts +7 -0
- package/dist/providers/wrap-provider.js +15 -0
- package/dist/providers/wrap-provider.js.map +1 -1
- package/dist/routing/classify-intent.js +22 -0
- package/dist/routing/classify-intent.js.map +1 -1
- package/dist/runtime/session-coordinator.d.ts +0 -1
- package/dist/runtime/session-coordinator.js.map +1 -1
- package/dist/sentiment/adapters/finnhub.d.ts +7 -0
- package/dist/sentiment/adapters/finnhub.js +39 -0
- package/dist/sentiment/adapters/finnhub.js.map +1 -0
- package/dist/sentiment/adapters/reddit.d.ts +11 -0
- package/dist/sentiment/adapters/reddit.js +54 -0
- package/dist/sentiment/adapters/reddit.js.map +1 -0
- package/dist/sentiment/adapters/twitter.d.ts +9 -0
- package/dist/sentiment/adapters/twitter.js +32 -0
- package/dist/sentiment/adapters/twitter.js.map +1 -0
- package/dist/sentiment/adapters/web.d.ts +9 -0
- package/dist/sentiment/adapters/web.js +40 -0
- package/dist/sentiment/adapters/web.js.map +1 -0
- package/dist/sentiment/index.d.ts +16 -0
- package/dist/sentiment/index.js +44 -0
- package/dist/sentiment/index.js.map +1 -0
- package/dist/sentiment/keywords.d.ts +2 -0
- package/dist/sentiment/keywords.js +9 -0
- package/dist/sentiment/keywords.js.map +1 -0
- package/dist/sentiment/pipeline.d.ts +9 -0
- package/dist/sentiment/pipeline.js +57 -0
- package/dist/sentiment/pipeline.js.map +1 -0
- package/dist/sentiment/scorer.d.ts +9 -0
- package/dist/sentiment/scorer.js +64 -0
- package/dist/sentiment/scorer.js.map +1 -0
- package/dist/sentiment/store.d.ts +24 -0
- package/dist/sentiment/store.js +177 -0
- package/dist/sentiment/store.js.map +1 -0
- package/dist/sentiment/trends.d.ts +13 -0
- package/dist/sentiment/trends.js +73 -0
- package/dist/sentiment/trends.js.map +1 -0
- package/dist/sentiment/types.d.ts +66 -0
- package/dist/sentiment/types.js +54 -0
- package/dist/sentiment/types.js.map +1 -0
- package/dist/system-prompt.js +9 -1
- package/dist/system-prompt.js.map +1 -1
- package/dist/tools/fundamentals/company-overview.d.ts +3 -1
- package/dist/tools/fundamentals/company-overview.js +27 -27
- package/dist/tools/fundamentals/company-overview.js.map +1 -1
- package/dist/tools/fundamentals/comps.js +45 -45
- package/dist/tools/fundamentals/comps.js.map +1 -1
- package/dist/tools/fundamentals/dcf.js +82 -82
- package/dist/tools/fundamentals/dcf.js.map +1 -1
- package/dist/tools/fundamentals/earnings.d.ts +3 -1
- package/dist/tools/fundamentals/earnings.js +25 -25
- package/dist/tools/fundamentals/earnings.js.map +1 -1
- package/dist/tools/fundamentals/financials.d.ts +3 -1
- package/dist/tools/fundamentals/financials.js +23 -23
- package/dist/tools/fundamentals/financials.js.map +1 -1
- package/dist/tools/index.js +8 -2
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/interaction/ask-user.js +28 -64
- package/dist/tools/interaction/ask-user.js.map +1 -1
- package/dist/tools/macro/fred-data.d.ts +3 -1
- package/dist/tools/macro/fred-data.js +26 -26
- package/dist/tools/macro/fred-data.js.map +1 -1
- package/dist/tools/sentiment/reddit-sentiment.d.ts +3 -1
- package/dist/tools/sentiment/reddit-sentiment.js +107 -22
- package/dist/tools/sentiment/reddit-sentiment.js.map +1 -1
- package/dist/tools/sentiment/sentiment-summary.d.ts +7 -0
- package/dist/tools/sentiment/sentiment-summary.js +230 -0
- package/dist/tools/sentiment/sentiment-summary.js.map +1 -0
- package/dist/tools/sentiment/sentiment-trend.d.ts +22 -0
- package/dist/tools/sentiment/sentiment-trend.js +39 -0
- package/dist/tools/sentiment/sentiment-trend.js.map +1 -0
- package/dist/tools/sentiment/twitter-sentiment.js +17 -0
- package/dist/tools/sentiment/twitter-sentiment.js.map +1 -1
- package/dist/tools/sentiment/web-search.d.ts +11 -0
- package/dist/tools/sentiment/web-search.js +115 -0
- package/dist/tools/sentiment/web-search.js.map +1 -0
- package/dist/tools/sentiment/web-sentiment.d.ts +8 -0
- package/dist/tools/sentiment/web-sentiment.js +66 -0
- package/dist/tools/sentiment/web-sentiment.js.map +1 -0
- package/dist/types/index.d.ts +1 -1
- package/dist/types/sentiment.d.ts +21 -0
- package/package.json +19 -3
- package/dist/tools/sentiment/news-sentiment.d.ts +0 -7
- package/dist/tools/sentiment/news-sentiment.js +0 -55
- package/dist/tools/sentiment/news-sentiment.js.map +0 -1
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
// Pre-persist credential validation for OpenCandle data providers.
|
|
2
|
+
//
|
|
3
|
+
// Each `validateCredential` call makes a single cheap request to the
|
|
4
|
+
// provider's canonical API with the pasted key and classifies the response
|
|
5
|
+
// into one of three states:
|
|
6
|
+
//
|
|
7
|
+
// - `valid` — provider accepted the credential (persist it)
|
|
8
|
+
// - `invalid` — provider rejected the credential (do NOT persist;
|
|
9
|
+
// re-prompt or return a classified failure)
|
|
10
|
+
// - `transient` — network/timeout/server error (persist anyway; the next
|
|
11
|
+
// tool call will surface any real issue and re-open the
|
|
12
|
+
// prompt via the credential-required tag)
|
|
13
|
+
//
|
|
14
|
+
// The endpoint chosen for each provider is the cheapest one available that
|
|
15
|
+
// also exercises the auth header/query param — we don't pay for meaningful
|
|
16
|
+
// data, just "did the server like the key". Alpha Vantage is a special case:
|
|
17
|
+
// it returns HTTP 200 even for bad keys, with an `Error Message` or
|
|
18
|
+
// `Information` field in the JSON body, so the body must be inspected.
|
|
19
|
+
//
|
|
20
|
+
// All validators share a 5-second timeout via `AbortSignal.timeout` so the
|
|
21
|
+
// connect flow cannot hang if a provider is unreachable.
|
|
22
|
+
const VALIDATION_TIMEOUT_MS = 5_000;
|
|
23
|
+
async function validateWithFetch(url, init, classifyBody) {
|
|
24
|
+
try {
|
|
25
|
+
const response = await fetch(url, {
|
|
26
|
+
...init,
|
|
27
|
+
signal: AbortSignal.timeout(VALIDATION_TIMEOUT_MS),
|
|
28
|
+
});
|
|
29
|
+
// Hard auth failures — the key is definitively bad.
|
|
30
|
+
if (response.status === 401 || response.status === 403) {
|
|
31
|
+
return { status: "invalid", httpStatus: response.status };
|
|
32
|
+
}
|
|
33
|
+
// FRED returns 400 with an `error_message` for bad keys.
|
|
34
|
+
if (response.status === 400) {
|
|
35
|
+
return { status: "invalid", httpStatus: 400 };
|
|
36
|
+
}
|
|
37
|
+
// 5xx and other non-2xx — treat as transient. Don't block the user on a
|
|
38
|
+
// provider outage; the next real tool call will surface a fresh error.
|
|
39
|
+
if (!response.ok) {
|
|
40
|
+
return { status: "transient", reason: `HTTP ${response.status}` };
|
|
41
|
+
}
|
|
42
|
+
// Body-level classification for providers that return 200 with an error
|
|
43
|
+
// shape (Alpha Vantage).
|
|
44
|
+
if (classifyBody) {
|
|
45
|
+
const body = await response.text();
|
|
46
|
+
const classified = classifyBody(body);
|
|
47
|
+
if (classified)
|
|
48
|
+
return classified;
|
|
49
|
+
}
|
|
50
|
+
return { status: "valid" };
|
|
51
|
+
}
|
|
52
|
+
catch (err) {
|
|
53
|
+
const reason = err instanceof Error ? err.message : String(err);
|
|
54
|
+
return { status: "transient", reason };
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Alpha Vantage returns HTTP 200 with an error shape in the JSON body when
|
|
59
|
+
* the key is bad. Two fields to watch for:
|
|
60
|
+
* - `Error Message`: indicates a malformed query OR an invalid key
|
|
61
|
+
* - `Information`: used for rate-limit messages AND for "Invalid API key"
|
|
62
|
+
*
|
|
63
|
+
* The rate-limit form of `Information` is NOT an invalid-key signal, so we
|
|
64
|
+
* only match when the string mentions "invalid api".
|
|
65
|
+
*/
|
|
66
|
+
function classifyAlphaVantageBody(body) {
|
|
67
|
+
try {
|
|
68
|
+
const parsed = JSON.parse(body);
|
|
69
|
+
const errorMessage = parsed["Error Message"];
|
|
70
|
+
if (typeof errorMessage === "string" && errorMessage.length > 0) {
|
|
71
|
+
return { status: "invalid", message: errorMessage };
|
|
72
|
+
}
|
|
73
|
+
const information = parsed["Information"];
|
|
74
|
+
if (typeof information === "string" && /invalid api/i.test(information)) {
|
|
75
|
+
return { status: "invalid", message: information };
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
catch {
|
|
79
|
+
// Non-JSON body — fall through and trust the HTTP status.
|
|
80
|
+
}
|
|
81
|
+
return undefined;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Validate a pasted credential against the provider's API. Returns a
|
|
85
|
+
* ValidationResult describing whether the key should be persisted.
|
|
86
|
+
*
|
|
87
|
+
* This function is side-effect-free beyond the network call: it does not
|
|
88
|
+
* touch the config file, onboarding state, or any in-memory cache.
|
|
89
|
+
*/
|
|
90
|
+
export async function validateCredential(providerId, key) {
|
|
91
|
+
switch (providerId) {
|
|
92
|
+
case "alpha_vantage":
|
|
93
|
+
return validateWithFetch(`https://www.alphavantage.co/query?function=GLOBAL_QUOTE&symbol=IBM&apikey=${encodeURIComponent(key)}`, { method: "GET" }, classifyAlphaVantageBody);
|
|
94
|
+
case "fred":
|
|
95
|
+
return validateWithFetch(`https://api.stlouisfed.org/fred/series?series_id=GDP&api_key=${encodeURIComponent(key)}&file_type=json`, { method: "GET" });
|
|
96
|
+
case "finnhub":
|
|
97
|
+
return validateWithFetch(`https://finnhub.io/api/v1/quote?symbol=AAPL&token=${encodeURIComponent(key)}`, { method: "GET" });
|
|
98
|
+
case "brave":
|
|
99
|
+
return validateWithFetch("https://api.search.brave.com/res/v1/web/search?q=test&count=1", {
|
|
100
|
+
method: "GET",
|
|
101
|
+
headers: {
|
|
102
|
+
"X-Subscription-Token": key,
|
|
103
|
+
Accept: "application/json",
|
|
104
|
+
},
|
|
105
|
+
});
|
|
106
|
+
case "exa":
|
|
107
|
+
return validateWithFetch("https://api.exa.ai/search", {
|
|
108
|
+
method: "POST",
|
|
109
|
+
headers: {
|
|
110
|
+
"Content-Type": "application/json",
|
|
111
|
+
"x-api-key": key,
|
|
112
|
+
},
|
|
113
|
+
body: JSON.stringify({ query: "test", numResults: 1 }),
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=validation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/onboarding/validation.ts"],"names":[],"mappings":"AAAA,mEAAmE;AACnE,EAAE;AACF,qEAAqE;AACrE,2EAA2E;AAC3E,4BAA4B;AAC5B,EAAE;AACF,mEAAmE;AACnE,uEAAuE;AACvE,+DAA+D;AAC/D,4EAA4E;AAC5E,2EAA2E;AAC3E,6DAA6D;AAC7D,EAAE;AACF,2EAA2E;AAC3E,2EAA2E;AAC3E,6EAA6E;AAC7E,oEAAoE;AACpE,uEAAuE;AACvE,EAAE;AACF,2EAA2E;AAC3E,yDAAyD;AAIzD,MAAM,qBAAqB,GAAG,KAAK,CAAC;AASpC,KAAK,UAAU,iBAAiB,CAC9B,GAAW,EACX,IAAiB,EACjB,YAA6B;IAE7B,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAChC,GAAG,IAAI;YACP,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,qBAAqB,CAAC;SACnD,CAAC,CAAC;QAEH,oDAAoD;QACpD,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YACvD,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC;QAC5D,CAAC;QAED,yDAAyD;QACzD,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YAC5B,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC;QAChD,CAAC;QAED,wEAAwE;QACxE,uEAAuE;QACvE,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;QACpE,CAAC;QAED,wEAAwE;QACxE,yBAAyB;QACzB,IAAI,YAAY,EAAE,CAAC;YACjB,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACnC,MAAM,UAAU,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;YACtC,IAAI,UAAU;gBAAE,OAAO,UAAU,CAAC;QACpC,CAAC;QAED,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;IAC7B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,MAAM,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAChE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC;IACzC,CAAC;AACH,CAAC;AAED;;;;;;;;GAQG;AACH,SAAS,wBAAwB,CAAC,IAAY;IAC5C,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAA4B,CAAC;QAC3D,MAAM,YAAY,GAAG,MAAM,CAAC,eAAe,CAAC,CAAC;QAC7C,IAAI,OAAO,YAAY,KAAK,QAAQ,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAChE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC;QACtD,CAAC;QACD,MAAM,WAAW,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC;QAC1C,IAAI,OAAO,WAAW,KAAK,QAAQ,IAAI,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;YACxE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC;QACrD,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,0DAA0D;IAC5D,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,UAAsB,EACtB,GAAW;IAEX,QAAQ,UAAU,EAAE,CAAC;QACnB,KAAK,eAAe;YAClB,OAAO,iBAAiB,CACtB,6EAA6E,kBAAkB,CAAC,GAAG,CAAC,EAAE,EACtG,EAAE,MAAM,EAAE,KAAK,EAAE,EACjB,wBAAwB,CACzB,CAAC;QAEJ,KAAK,MAAM;YACT,OAAO,iBAAiB,CACtB,gEAAgE,kBAAkB,CAAC,GAAG,CAAC,iBAAiB,EACxG,EAAE,MAAM,EAAE,KAAK,EAAE,CAClB,CAAC;QAEJ,KAAK,SAAS;YACZ,OAAO,iBAAiB,CACtB,qDAAqD,kBAAkB,CAAC,GAAG,CAAC,EAAE,EAC9E,EAAE,MAAM,EAAE,KAAK,EAAE,CAClB,CAAC;QAEJ,KAAK,OAAO;YACV,OAAO,iBAAiB,CACtB,+DAA+D,EAC/D;gBACE,MAAM,EAAE,KAAK;gBACb,OAAO,EAAE;oBACP,sBAAsB,EAAE,GAAG;oBAC3B,MAAM,EAAE,kBAAkB;iBAC3B;aACF,CACF,CAAC;QAEJ,KAAK,KAAK;YACR,OAAO,iBAAiB,CACtB,2BAA2B,EAC3B;gBACE,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACP,cAAc,EAAE,kBAAkB;oBAClC,WAAW,EAAE,GAAG;iBACjB;gBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC;aACvD,CACF,CAAC;IACN,CAAC;AACH,CAAC"}
|
|
@@ -7,8 +7,31 @@ import { getOpenCandleToolDefinitions } from "./tool-adapter.js";
|
|
|
7
7
|
import { registerAskUserTool } from "../tools/interaction/ask-user.js";
|
|
8
8
|
import { registerTwitterLoginTool } from "../tools/interaction/twitter-login.js";
|
|
9
9
|
import { SessionCoordinator } from "../runtime/session-coordinator.js";
|
|
10
|
+
import { getProvider, } from "../onboarding/providers.js";
|
|
11
|
+
import { loadOnboardingState, saveOnboardingState, markProviderSnoozed, markProviderNeverAsk, markWelcomeShown, shouldShowWelcome, } from "../onboarding/state.js";
|
|
12
|
+
import { parseToolTag, buildSkippedTag, buildConnectedTag } from "../onboarding/tool-tags.js";
|
|
13
|
+
import { resolveCredentialRequired } from "../onboarding/credential-interceptor.js";
|
|
14
|
+
import { createDegradationAccumulator } from "../onboarding/degradation-accumulator.js";
|
|
15
|
+
import { promptUser } from "../onboarding/prompt-user.js";
|
|
16
|
+
import { runProviderConnect } from "../onboarding/connect.js";
|
|
10
17
|
export default function openCandleExtension(pi, options) {
|
|
11
18
|
const coordinator = new SessionCoordinator();
|
|
19
|
+
// Credential-interception state. Lifetime:
|
|
20
|
+
// `sessionPromptedSet` — cleared on session_start, persists across turns
|
|
21
|
+
// within a session so users don't get re-prompted after picking
|
|
22
|
+
// "continue without".
|
|
23
|
+
// `hardPromptFiredInWorkflow` — reset on turn_start (the nearest clean
|
|
24
|
+
// boundary for a single user request). Enforces the "at most one hard
|
|
25
|
+
// prompt per workflow" cap.
|
|
26
|
+
// `degradationAccumulator` — per-turn record of soft-tier providers that
|
|
27
|
+
// fell back to their keyless alternative. Reset on turn_start; flushed
|
|
28
|
+
// on turn_end via `pi.appendEntry("opencandle-turn-gap", ...)` for
|
|
29
|
+
// session observability. Does NOT pause the workflow or mutate tool
|
|
30
|
+
// results inline — soft-degraded tags remain visible to the LLM so its
|
|
31
|
+
// final answer can surface them in a **Data gaps** section.
|
|
32
|
+
const sessionPromptedSet = new Set();
|
|
33
|
+
let hardPromptFiredInWorkflow = false;
|
|
34
|
+
const degradationAccumulator = createDegradationAccumulator();
|
|
12
35
|
// Register tools
|
|
13
36
|
for (const tool of getOpenCandleToolDefinitions()) {
|
|
14
37
|
pi.registerTool(tool);
|
|
@@ -28,26 +51,302 @@ export default function openCandleExtension(pi, options) {
|
|
|
28
51
|
coordinator.executeWorkflow(pi, definition, ctx);
|
|
29
52
|
},
|
|
30
53
|
});
|
|
31
|
-
// /setup command
|
|
54
|
+
// /setup command — reconfigure the OpenCandle AI model (sign-in / API key).
|
|
55
|
+
// Data providers are configured separately via `/connect`.
|
|
32
56
|
pi.registerCommand("setup", {
|
|
33
|
-
description: "
|
|
57
|
+
description: "Reconfigure the OpenCandle AI model (sign-in or API key)",
|
|
34
58
|
handler: async (_args, ctx) => {
|
|
35
|
-
const result = await coordinator.runSetup(pi, ctx, { mode: "manual"
|
|
59
|
+
const result = await coordinator.runSetup(pi, ctx, { mode: "manual" });
|
|
36
60
|
if (result === "ready") {
|
|
37
61
|
ctx.ui.notify("OpenCandle setup complete.", "info");
|
|
38
62
|
}
|
|
39
63
|
},
|
|
40
64
|
});
|
|
65
|
+
// /connect command — reconfigurable sectioned setup for data providers.
|
|
66
|
+
// `/connect` with no args opens a picker listing all providers.
|
|
67
|
+
// `/connect <alias|id|category>` routes to a specific provider (or a
|
|
68
|
+
// sub-picker for multi-provider categories like "search").
|
|
69
|
+
pi.registerCommand("connect", {
|
|
70
|
+
description: "Connect a data provider (Alpha Vantage, FRED, Finnhub, Brave, Exa)",
|
|
71
|
+
handler: async (args, ctx) => {
|
|
72
|
+
const { listAllProviders, resolveProviderFromArgument, hasCredential } = await import("../onboarding/providers.js");
|
|
73
|
+
const formatState = (id) => {
|
|
74
|
+
const state = loadOnboardingState().providers[id];
|
|
75
|
+
if (state?.status === "completed")
|
|
76
|
+
return "Configured";
|
|
77
|
+
if (state?.status === "snoozed") {
|
|
78
|
+
return `Snoozed until ${state.snoozeUntil.slice(0, 10)}`;
|
|
79
|
+
}
|
|
80
|
+
if (state?.status === "never_ask")
|
|
81
|
+
return "Never-ask";
|
|
82
|
+
if (hasCredential(id))
|
|
83
|
+
return "Configured (via env)";
|
|
84
|
+
return "Not configured";
|
|
85
|
+
};
|
|
86
|
+
const pickProvider = async (providers) => {
|
|
87
|
+
const labels = providers.map((p) => `${p.displayName} — ${p.unlocks.slice(0, 2).join(", ")} [${formatState(p.id)}]`);
|
|
88
|
+
const choice = await ctx.ui.select("Which provider would you like to connect?", labels);
|
|
89
|
+
if (choice === undefined)
|
|
90
|
+
return undefined;
|
|
91
|
+
const index = labels.indexOf(choice);
|
|
92
|
+
return providers[index]?.id;
|
|
93
|
+
};
|
|
94
|
+
const trimmed = args.trim();
|
|
95
|
+
let targetId;
|
|
96
|
+
if (trimmed === "") {
|
|
97
|
+
// Bare /connect → full picker.
|
|
98
|
+
targetId = await pickProvider(listAllProviders());
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
const resolved = resolveProviderFromArgument(trimmed);
|
|
102
|
+
if (!resolved) {
|
|
103
|
+
const all = listAllProviders()
|
|
104
|
+
.map((p) => ` ${p.displayName} (${p.aliases.join(", ")})`)
|
|
105
|
+
.join("\n");
|
|
106
|
+
ctx.ui.notify(`Unknown provider: "${trimmed}". Available:\n${all}`, "warning");
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
if (Array.isArray(resolved)) {
|
|
110
|
+
// Multi-provider category — show a sub-picker.
|
|
111
|
+
targetId = await pickProvider(resolved);
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
targetId = resolved.id;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
if (!targetId) {
|
|
118
|
+
ctx.ui.notify("Connect cancelled.", "info");
|
|
119
|
+
return;
|
|
120
|
+
}
|
|
121
|
+
const result = await runProviderConnect(ctx, targetId);
|
|
122
|
+
if (result.status === "connected") {
|
|
123
|
+
ctx.ui.notify(`${getProvider(targetId).displayName} is now connected.`, "info");
|
|
124
|
+
}
|
|
125
|
+
else if (result.status === "cancelled") {
|
|
126
|
+
ctx.ui.notify("Connect cancelled.", "info");
|
|
127
|
+
}
|
|
128
|
+
// "blocked_by_env" already notifies from inside runProviderConnect.
|
|
129
|
+
},
|
|
130
|
+
});
|
|
41
131
|
// Session start
|
|
42
132
|
pi.on("session_start", async (_event, ctx) => {
|
|
43
133
|
coordinator.initSession(ctx.sessionManager.getSessionId());
|
|
134
|
+
sessionPromptedSet.clear();
|
|
135
|
+
hardPromptFiredInWorkflow = false;
|
|
44
136
|
if (!ctx.hasUI)
|
|
45
137
|
return;
|
|
46
138
|
const result = await coordinator.runSetup(pi, ctx, { mode: "startup" });
|
|
47
139
|
if (result === "shutdown") {
|
|
48
140
|
return;
|
|
49
141
|
}
|
|
50
|
-
|
|
142
|
+
// One-shot welcome on the very first session (gated on welcomeShownAt).
|
|
143
|
+
// Uses `pi.sendMessage` with `display: true` so the welcome lands in the
|
|
144
|
+
// chat transcript (persistent, scrollable) rather than a transient
|
|
145
|
+
// `ctx.ui.notify` banner.
|
|
146
|
+
const state = loadOnboardingState();
|
|
147
|
+
if (shouldShowWelcome(state, ctx.hasUI)) {
|
|
148
|
+
const WELCOME_BODY = "Welcome to OpenCandle. I'm your AI copilot for market analysis.\n\n" +
|
|
149
|
+
"Try something like:\n" +
|
|
150
|
+
" • analyze NVDA — full deep-dive on a ticker\n" +
|
|
151
|
+
" • quote TSLA — just the price and daily move\n" +
|
|
152
|
+
" • how's bitcoin? — crypto\n" +
|
|
153
|
+
" • what's r/wallstreetbets saying about META? — social sentiment\n\n" +
|
|
154
|
+
"You're running with just an LLM right now, which covers most of what\n" +
|
|
155
|
+
"people want. For fundamentals, economic data, or premium news you'll\n" +
|
|
156
|
+
"need a few free API keys — I'll offer to help when they'd actually\n" +
|
|
157
|
+
"make a difference, or run /connect anytime.";
|
|
158
|
+
pi.sendMessage({
|
|
159
|
+
customType: "opencandle-welcome",
|
|
160
|
+
content: [{ type: "text", text: WELCOME_BODY }],
|
|
161
|
+
display: true,
|
|
162
|
+
});
|
|
163
|
+
saveOnboardingState(markWelcomeShown(state));
|
|
164
|
+
}
|
|
165
|
+
else {
|
|
166
|
+
ctx.ui.notify("OpenCandle ready. Try /analyze NVDA or /connect to add data providers.", "info");
|
|
167
|
+
}
|
|
168
|
+
});
|
|
169
|
+
// Reset the per-workflow prompt cap AND the degradation accumulator on each
|
|
170
|
+
// new turn. One user request = one workflow invocation = at most one hard
|
|
171
|
+
// prompt and one combined soft-degradation annotation.
|
|
172
|
+
pi.on("turn_start", async () => {
|
|
173
|
+
hardPromptFiredInWorkflow = false;
|
|
174
|
+
degradationAccumulator.reset();
|
|
175
|
+
});
|
|
176
|
+
// At turn_end, flush the soft-degradation accumulator to a session entry so
|
|
177
|
+
// downstream consumers (UI renderers, debug inspectors, later turns) can see
|
|
178
|
+
// which soft providers fell back during this turn. The LLM has already
|
|
179
|
+
// emitted its answer by the time this fires, so the per-tool-result
|
|
180
|
+
// soft-degraded tags remain the primary carrier for the in-turn gap note.
|
|
181
|
+
pi.on("turn_end", async () => {
|
|
182
|
+
if (degradationAccumulator.isEmpty())
|
|
183
|
+
return;
|
|
184
|
+
const state = loadOnboardingState();
|
|
185
|
+
const annotation = degradationAccumulator.buildCombinedAnnotation(state);
|
|
186
|
+
if (annotation !== null) {
|
|
187
|
+
pi.appendEntry("opencandle-turn-gap", { annotation });
|
|
188
|
+
}
|
|
189
|
+
degradationAccumulator.reset();
|
|
190
|
+
});
|
|
191
|
+
// Intercept tool results for credential-required and soft-degraded tags.
|
|
192
|
+
pi.on("tool_result", async (event, ctx) => {
|
|
193
|
+
// First pass: record any soft-degradation tags in the per-turn accumulator
|
|
194
|
+
// WITHOUT mutating the tool result (the inline tag stays visible to the
|
|
195
|
+
// LLM so it can surface the gap in its final answer). Multiple tags per
|
|
196
|
+
// tool-result block are deduplicated by the accumulator's Set.
|
|
197
|
+
for (const block of event.content) {
|
|
198
|
+
if (block.type !== "text")
|
|
199
|
+
continue;
|
|
200
|
+
const parsed = parseToolTag(block.text);
|
|
201
|
+
if (parsed?.kind === "soft_degraded") {
|
|
202
|
+
degradationAccumulator.record(parsed.provider);
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
// Second pass: look for a credential-required tag; on match, run the
|
|
206
|
+
// interception decision and either replace the tool result or prompt
|
|
207
|
+
// the user. Only the first credential_required tag in the content list
|
|
208
|
+
// is acted on — subsequent hard-tier prompts are silenced by the
|
|
209
|
+
// per-workflow cap at the decision-function level.
|
|
210
|
+
for (const block of event.content) {
|
|
211
|
+
if (block.type !== "text")
|
|
212
|
+
continue;
|
|
213
|
+
const parsed = parseToolTag(block.text);
|
|
214
|
+
if (!parsed || parsed.kind !== "credential_required")
|
|
215
|
+
continue;
|
|
216
|
+
const state = loadOnboardingState();
|
|
217
|
+
const action = resolveCredentialRequired({
|
|
218
|
+
provider: parsed.provider,
|
|
219
|
+
reason: parsed.reason,
|
|
220
|
+
state,
|
|
221
|
+
sessionPromptedSet,
|
|
222
|
+
hardPromptFiredInWorkflow,
|
|
223
|
+
now: new Date(),
|
|
224
|
+
});
|
|
225
|
+
if (action.action === "skip") {
|
|
226
|
+
// Replace content with a skipped placeholder so the LLM sees a
|
|
227
|
+
// neutral gap note instead of the credential-required tag.
|
|
228
|
+
const descriptor = getProvider(parsed.provider);
|
|
229
|
+
const remediation = action.silenced
|
|
230
|
+
? `${action.remediation} (silenced)`
|
|
231
|
+
: action.remediation;
|
|
232
|
+
const tag = buildSkippedTag({
|
|
233
|
+
provider: parsed.provider,
|
|
234
|
+
reason: "credential_not_provided",
|
|
235
|
+
remediation,
|
|
236
|
+
silenced: action.silenced,
|
|
237
|
+
});
|
|
238
|
+
return {
|
|
239
|
+
content: [
|
|
240
|
+
{
|
|
241
|
+
type: "text",
|
|
242
|
+
text: `${tag}\n\n${descriptor.displayName} data was not fetched for this request. ` +
|
|
243
|
+
(action.silenced
|
|
244
|
+
? `You previously asked not to be reminded about this provider.`
|
|
245
|
+
: `To unlock ${descriptor.unlocks.join(", ")}, ${action.remediation}.`),
|
|
246
|
+
},
|
|
247
|
+
],
|
|
248
|
+
};
|
|
249
|
+
}
|
|
250
|
+
// action === "prompt": pause and ask the user via promptUser.
|
|
251
|
+
const descriptor = getProvider(parsed.provider);
|
|
252
|
+
const connectLabel = `Connect now — ${descriptor.instructionsHint}`;
|
|
253
|
+
const continueLabel = descriptor.fallbackDescription
|
|
254
|
+
? `Continue with ${descriptor.fallbackDescription} for this run`
|
|
255
|
+
: `Continue without ${descriptor.displayName} for this run`;
|
|
256
|
+
const snoozeLabel = `Snooze ${descriptor.snoozeDurationDays} days`;
|
|
257
|
+
const neverLabel = `Never ask again`;
|
|
258
|
+
const questionBody = `${descriptor.displayName} unlocks ${descriptor.unlocks.join(", ")}. ` +
|
|
259
|
+
`Free signup takes about 30 seconds. How would you like to proceed?`;
|
|
260
|
+
// Mark that a hard-tier prompt has now fired in this workflow (for the cap).
|
|
261
|
+
if (descriptor.tier === "hard") {
|
|
262
|
+
hardPromptFiredInWorkflow = true;
|
|
263
|
+
}
|
|
264
|
+
sessionPromptedSet.add(parsed.provider);
|
|
265
|
+
const promptResult = await promptUser(ctx, {
|
|
266
|
+
question: questionBody,
|
|
267
|
+
questionType: "select",
|
|
268
|
+
options: [connectLabel, continueLabel, snoozeLabel, neverLabel],
|
|
269
|
+
}, options?.askUserHandler);
|
|
270
|
+
if (promptResult.cancelled) {
|
|
271
|
+
// Treat cancel like "continue without".
|
|
272
|
+
return {
|
|
273
|
+
content: [
|
|
274
|
+
{
|
|
275
|
+
type: "text",
|
|
276
|
+
text: `${buildSkippedTag({
|
|
277
|
+
provider: parsed.provider,
|
|
278
|
+
reason: "credential_not_provided",
|
|
279
|
+
remediation: `run /connect ${descriptor.aliases[0] ?? descriptor.id} to unlock`,
|
|
280
|
+
})}\n\nPrompt was cancelled.`,
|
|
281
|
+
},
|
|
282
|
+
],
|
|
283
|
+
};
|
|
284
|
+
}
|
|
285
|
+
const answer = promptResult.answer ?? "";
|
|
286
|
+
if (answer.startsWith("Connect")) {
|
|
287
|
+
const connectResult = await runProviderConnect(ctx, parsed.provider);
|
|
288
|
+
if (connectResult.status === "connected") {
|
|
289
|
+
// Pi has no tool re-dispatch API — emit a CONNECTED placeholder so
|
|
290
|
+
// the LLM knows the key was just saved and can retry on the next
|
|
291
|
+
// turn (or use whatever partial data is in context).
|
|
292
|
+
return {
|
|
293
|
+
content: [
|
|
294
|
+
{
|
|
295
|
+
type: "text",
|
|
296
|
+
text: `${buildConnectedTag({ provider: parsed.provider })}\n\n` +
|
|
297
|
+
`${descriptor.displayName} was just connected. Please re-run the previous request to fetch the data now that the credential is available.`,
|
|
298
|
+
},
|
|
299
|
+
],
|
|
300
|
+
};
|
|
301
|
+
}
|
|
302
|
+
// Cancelled, blocked-by-env, or invalid_key: fall through to skipped
|
|
303
|
+
// with a result-specific explanation so the LLM can describe what
|
|
304
|
+
// just happened in its final answer.
|
|
305
|
+
const connectOutcomeDescription = connectResult.status === "blocked_by_env"
|
|
306
|
+
? "blocked by an existing environment variable"
|
|
307
|
+
: connectResult.status === "invalid_key"
|
|
308
|
+
? `rejected by ${descriptor.displayName} (the key was invalid and nothing was saved)`
|
|
309
|
+
: "cancelled";
|
|
310
|
+
return {
|
|
311
|
+
content: [
|
|
312
|
+
{
|
|
313
|
+
type: "text",
|
|
314
|
+
text: `${buildSkippedTag({
|
|
315
|
+
provider: parsed.provider,
|
|
316
|
+
reason: "credential_not_provided",
|
|
317
|
+
remediation: `run /connect ${descriptor.aliases[0] ?? descriptor.id} to unlock`,
|
|
318
|
+
})}\n\n${descriptor.displayName} connect was ${connectOutcomeDescription}.`,
|
|
319
|
+
},
|
|
320
|
+
],
|
|
321
|
+
};
|
|
322
|
+
}
|
|
323
|
+
if (answer.startsWith("Snooze")) {
|
|
324
|
+
saveOnboardingState(markProviderSnoozed(state, parsed.provider, descriptor.snoozeDurationDays));
|
|
325
|
+
}
|
|
326
|
+
else if (answer.startsWith("Never")) {
|
|
327
|
+
saveOnboardingState(markProviderNeverAsk(state, parsed.provider));
|
|
328
|
+
}
|
|
329
|
+
// "Continue" / fallthrough: no state mutation, just skip.
|
|
330
|
+
const silenced = answer.startsWith("Never");
|
|
331
|
+
const remediation = silenced
|
|
332
|
+
? `run /connect ${descriptor.aliases[0] ?? descriptor.id} to unlock (silenced)`
|
|
333
|
+
: `run /connect ${descriptor.aliases[0] ?? descriptor.id} to unlock`;
|
|
334
|
+
return {
|
|
335
|
+
content: [
|
|
336
|
+
{
|
|
337
|
+
type: "text",
|
|
338
|
+
text: `${buildSkippedTag({
|
|
339
|
+
provider: parsed.provider,
|
|
340
|
+
reason: "credential_not_provided",
|
|
341
|
+
remediation,
|
|
342
|
+
silenced,
|
|
343
|
+
})}\n\n${descriptor.displayName} data was omitted per your choice.`,
|
|
344
|
+
},
|
|
345
|
+
],
|
|
346
|
+
};
|
|
347
|
+
}
|
|
348
|
+
// No OpenCandle tag in this tool result — pass through.
|
|
349
|
+
return undefined;
|
|
51
350
|
});
|
|
52
351
|
// Input handling — classify intent and dispatch workflows
|
|
53
352
|
pi.on("input", async (event, ctx) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"opencandle-extension.js","sourceRoot":"","sources":["../../src/pi/opencandle-extension.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"opencandle-extension.js","sourceRoot":"","sources":["../../src/pi/opencandle-extension.ts"],"names":[],"mappings":"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"}
|
package/dist/pi/setup.d.ts
CHANGED
|
@@ -5,6 +5,5 @@ type SetupResult = "ready" | "shutdown" | "cancelled";
|
|
|
5
5
|
export declare function getLlmSetupRequirement(ctx: Pick<ExtensionContext, "model" | "modelRegistry">): SetupRequirement;
|
|
6
6
|
export declare function runOpenCandleSetup(api: ExtensionAPI, ctx: ExtensionContext, options?: {
|
|
7
7
|
mode: SetupMode;
|
|
8
|
-
forceFinancePrompt?: boolean;
|
|
9
8
|
}): Promise<SetupResult>;
|
|
10
9
|
export {};
|