opencandle 0.1.1 → 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.
Files changed (278) hide show
  1. package/README.md +111 -79
  2. package/dist/analysts/contracts.d.ts +31 -0
  3. package/dist/analysts/contracts.js +158 -0
  4. package/dist/analysts/contracts.js.map +1 -0
  5. package/dist/analysts/orchestrator.d.ts +11 -2
  6. package/dist/analysts/orchestrator.js +156 -9
  7. package/dist/analysts/orchestrator.js.map +1 -1
  8. package/dist/cli.js +26 -10
  9. package/dist/cli.js.map +1 -1
  10. package/dist/config.d.ts +29 -5
  11. package/dist/config.js +18 -8
  12. package/dist/config.js.map +1 -1
  13. package/dist/index.d.ts +1 -1
  14. package/dist/index.js +1 -1
  15. package/dist/index.js.map +1 -1
  16. package/dist/infra/cache.d.ts +34 -0
  17. package/dist/infra/cache.js +44 -3
  18. package/dist/infra/cache.js.map +1 -1
  19. package/dist/infra/index.d.ts +1 -1
  20. package/dist/infra/index.js +1 -1
  21. package/dist/infra/index.js.map +1 -1
  22. package/dist/infra/opencandle-paths.d.ts +1 -0
  23. package/dist/infra/opencandle-paths.js +3 -0
  24. package/dist/infra/opencandle-paths.js.map +1 -1
  25. package/dist/infra/rate-limiter.js +7 -0
  26. package/dist/infra/rate-limiter.js.map +1 -1
  27. package/dist/memory/index.d.ts +3 -0
  28. package/dist/memory/index.js +2 -0
  29. package/dist/memory/index.js.map +1 -1
  30. package/dist/memory/manager.d.ts +19 -0
  31. package/dist/memory/manager.js +132 -0
  32. package/dist/memory/manager.js.map +1 -0
  33. package/dist/memory/sqlite.js +12 -1
  34. package/dist/memory/sqlite.js.map +1 -1
  35. package/dist/memory/types.d.ts +21 -0
  36. package/dist/memory/types.js +47 -0
  37. package/dist/memory/types.js.map +1 -0
  38. package/dist/onboarding/connect.d.ts +23 -0
  39. package/dist/onboarding/connect.js +107 -0
  40. package/dist/onboarding/connect.js.map +1 -0
  41. package/dist/onboarding/credential-interceptor.d.ts +44 -0
  42. package/dist/onboarding/credential-interceptor.js +72 -0
  43. package/dist/onboarding/credential-interceptor.js.map +1 -0
  44. package/dist/onboarding/degradation-accumulator.d.ts +21 -0
  45. package/dist/onboarding/degradation-accumulator.js +55 -0
  46. package/dist/onboarding/degradation-accumulator.js.map +1 -0
  47. package/dist/onboarding/prompt-user.d.ts +23 -0
  48. package/dist/onboarding/prompt-user.js +61 -0
  49. package/dist/onboarding/prompt-user.js.map +1 -0
  50. package/dist/onboarding/providers.d.ts +109 -0
  51. package/dist/onboarding/providers.js +236 -0
  52. package/dist/onboarding/providers.js.map +1 -0
  53. package/dist/onboarding/state.d.ts +31 -2
  54. package/dist/onboarding/state.js +141 -13
  55. package/dist/onboarding/state.js.map +1 -1
  56. package/dist/onboarding/tool-helpers.d.ts +34 -0
  57. package/dist/onboarding/tool-helpers.js +80 -0
  58. package/dist/onboarding/tool-helpers.js.map +1 -0
  59. package/dist/onboarding/tool-tags.d.ts +37 -0
  60. package/dist/onboarding/tool-tags.js +149 -0
  61. package/dist/onboarding/tool-tags.js.map +1 -0
  62. package/dist/onboarding/validation.d.ts +19 -0
  63. package/dist/onboarding/validation.js +117 -0
  64. package/dist/onboarding/validation.js.map +1 -0
  65. package/dist/pi/opencandle-extension.d.ts +5 -1
  66. package/dist/pi/opencandle-extension.js +345 -143
  67. package/dist/pi/opencandle-extension.js.map +1 -1
  68. package/dist/pi/session.d.ts +2 -0
  69. package/dist/pi/session.js +1 -1
  70. package/dist/pi/session.js.map +1 -1
  71. package/dist/pi/setup.d.ts +0 -1
  72. package/dist/pi/setup.js +66 -119
  73. package/dist/pi/setup.js.map +1 -1
  74. package/dist/prompts/context-builder.d.ts +26 -0
  75. package/dist/prompts/context-builder.js +127 -0
  76. package/dist/prompts/context-builder.js.map +1 -0
  77. package/dist/prompts/sections.d.ts +13 -0
  78. package/dist/prompts/sections.js +35 -0
  79. package/dist/prompts/sections.js.map +1 -0
  80. package/dist/providers/alpha-vantage.d.ts +3 -0
  81. package/dist/providers/alpha-vantage.js +204 -77
  82. package/dist/providers/alpha-vantage.js.map +1 -1
  83. package/dist/providers/coingecko.js +53 -37
  84. package/dist/providers/coingecko.js.map +1 -1
  85. package/dist/providers/exa-search.d.ts +39 -0
  86. package/dist/providers/exa-search.js +276 -0
  87. package/dist/providers/exa-search.js.map +1 -0
  88. package/dist/providers/fear-greed.js +23 -15
  89. package/dist/providers/fear-greed.js.map +1 -1
  90. package/dist/providers/finnhub.d.ts +17 -0
  91. package/dist/providers/finnhub.js +94 -0
  92. package/dist/providers/finnhub.js.map +1 -0
  93. package/dist/providers/fred.js +48 -28
  94. package/dist/providers/fred.js.map +1 -1
  95. package/dist/providers/index.d.ts +2 -0
  96. package/dist/providers/index.js +1 -0
  97. package/dist/providers/index.js.map +1 -1
  98. package/dist/providers/provider-credential-error.d.ts +8 -0
  99. package/dist/providers/provider-credential-error.js +22 -0
  100. package/dist/providers/provider-credential-error.js.map +1 -0
  101. package/dist/providers/reddit.d.ts +8 -0
  102. package/dist/providers/reddit.js +78 -43
  103. package/dist/providers/reddit.js.map +1 -1
  104. package/dist/providers/twitter.d.ts +20 -0
  105. package/dist/providers/twitter.js +137 -0
  106. package/dist/providers/twitter.js.map +1 -0
  107. package/dist/providers/web-search.d.ts +17 -0
  108. package/dist/providers/web-search.js +224 -0
  109. package/dist/providers/web-search.js.map +1 -0
  110. package/dist/providers/with-fallback.d.ts +15 -0
  111. package/dist/providers/with-fallback.js +32 -0
  112. package/dist/providers/with-fallback.js.map +1 -0
  113. package/dist/providers/wrap-provider.d.ts +20 -0
  114. package/dist/providers/wrap-provider.js +58 -0
  115. package/dist/providers/wrap-provider.js.map +1 -0
  116. package/dist/providers/yahoo-finance.js +77 -57
  117. package/dist/providers/yahoo-finance.js.map +1 -1
  118. package/dist/routing/classify-intent.js +22 -0
  119. package/dist/routing/classify-intent.js.map +1 -1
  120. package/dist/runtime/evidence.d.ts +35 -0
  121. package/dist/runtime/evidence.js +29 -0
  122. package/dist/runtime/evidence.js.map +1 -0
  123. package/dist/runtime/index.d.ts +16 -0
  124. package/dist/runtime/index.js +10 -0
  125. package/dist/runtime/index.js.map +1 -0
  126. package/dist/runtime/prompt-step.d.ts +41 -0
  127. package/dist/runtime/prompt-step.js +42 -0
  128. package/dist/runtime/prompt-step.js.map +1 -0
  129. package/dist/runtime/provider-ids.d.ts +14 -0
  130. package/dist/runtime/provider-ids.js +14 -0
  131. package/dist/runtime/provider-ids.js.map +1 -0
  132. package/dist/runtime/provider-tracker.d.ts +20 -0
  133. package/dist/runtime/provider-tracker.js +36 -0
  134. package/dist/runtime/provider-tracker.js.map +1 -0
  135. package/dist/runtime/run-context.d.ts +11 -0
  136. package/dist/runtime/run-context.js +14 -0
  137. package/dist/runtime/run-context.js.map +1 -0
  138. package/dist/runtime/session-coordinator.d.ts +47 -0
  139. package/dist/runtime/session-coordinator.js +171 -0
  140. package/dist/runtime/session-coordinator.js.map +1 -0
  141. package/dist/runtime/validation.d.ts +44 -0
  142. package/dist/runtime/validation.js +157 -0
  143. package/dist/runtime/validation.js.map +1 -0
  144. package/dist/runtime/workflow-events.d.ts +21 -0
  145. package/dist/runtime/workflow-events.js +31 -0
  146. package/dist/runtime/workflow-events.js.map +1 -0
  147. package/dist/runtime/workflow-runner.d.ts +36 -0
  148. package/dist/runtime/workflow-runner.js +129 -0
  149. package/dist/runtime/workflow-runner.js.map +1 -0
  150. package/dist/runtime/workflow-types.d.ts +60 -0
  151. package/dist/runtime/workflow-types.js +32 -0
  152. package/dist/runtime/workflow-types.js.map +1 -0
  153. package/dist/sentiment/adapters/finnhub.d.ts +7 -0
  154. package/dist/sentiment/adapters/finnhub.js +39 -0
  155. package/dist/sentiment/adapters/finnhub.js.map +1 -0
  156. package/dist/sentiment/adapters/reddit.d.ts +11 -0
  157. package/dist/sentiment/adapters/reddit.js +54 -0
  158. package/dist/sentiment/adapters/reddit.js.map +1 -0
  159. package/dist/sentiment/adapters/twitter.d.ts +9 -0
  160. package/dist/sentiment/adapters/twitter.js +32 -0
  161. package/dist/sentiment/adapters/twitter.js.map +1 -0
  162. package/dist/sentiment/adapters/web.d.ts +9 -0
  163. package/dist/sentiment/adapters/web.js +40 -0
  164. package/dist/sentiment/adapters/web.js.map +1 -0
  165. package/dist/sentiment/index.d.ts +16 -0
  166. package/dist/sentiment/index.js +44 -0
  167. package/dist/sentiment/index.js.map +1 -0
  168. package/dist/sentiment/keywords.d.ts +2 -0
  169. package/dist/sentiment/keywords.js +9 -0
  170. package/dist/sentiment/keywords.js.map +1 -0
  171. package/dist/sentiment/pipeline.d.ts +9 -0
  172. package/dist/sentiment/pipeline.js +57 -0
  173. package/dist/sentiment/pipeline.js.map +1 -0
  174. package/dist/sentiment/scorer.d.ts +9 -0
  175. package/dist/sentiment/scorer.js +64 -0
  176. package/dist/sentiment/scorer.js.map +1 -0
  177. package/dist/sentiment/store.d.ts +24 -0
  178. package/dist/sentiment/store.js +177 -0
  179. package/dist/sentiment/store.js.map +1 -0
  180. package/dist/sentiment/trends.d.ts +13 -0
  181. package/dist/sentiment/trends.js +73 -0
  182. package/dist/sentiment/trends.js.map +1 -0
  183. package/dist/sentiment/types.d.ts +66 -0
  184. package/dist/sentiment/types.js +54 -0
  185. package/dist/sentiment/types.js.map +1 -0
  186. package/dist/system-prompt.js +60 -2
  187. package/dist/system-prompt.js.map +1 -1
  188. package/dist/tool-kit.d.ts +9 -5
  189. package/dist/tool-kit.js +29 -6
  190. package/dist/tool-kit.js.map +1 -1
  191. package/dist/tools/fundamentals/company-overview.d.ts +3 -1
  192. package/dist/tools/fundamentals/company-overview.js +28 -17
  193. package/dist/tools/fundamentals/company-overview.js.map +1 -1
  194. package/dist/tools/fundamentals/comps.js +47 -39
  195. package/dist/tools/fundamentals/comps.js.map +1 -1
  196. package/dist/tools/fundamentals/dcf.js +83 -65
  197. package/dist/tools/fundamentals/dcf.js.map +1 -1
  198. package/dist/tools/fundamentals/earnings.d.ts +3 -1
  199. package/dist/tools/fundamentals/earnings.js +26 -18
  200. package/dist/tools/fundamentals/earnings.js.map +1 -1
  201. package/dist/tools/fundamentals/financials.d.ts +3 -1
  202. package/dist/tools/fundamentals/financials.js +24 -16
  203. package/dist/tools/fundamentals/financials.js.map +1 -1
  204. package/dist/tools/fundamentals/sec-filings.js +9 -1
  205. package/dist/tools/fundamentals/sec-filings.js.map +1 -1
  206. package/dist/tools/index.js +10 -2
  207. package/dist/tools/index.js.map +1 -1
  208. package/dist/tools/interaction/ask-user.d.ts +3 -0
  209. package/dist/tools/interaction/ask-user.js +51 -0
  210. package/dist/tools/interaction/ask-user.js.map +1 -0
  211. package/dist/tools/interaction/twitter-login.d.ts +8 -0
  212. package/dist/tools/interaction/twitter-login.js +77 -0
  213. package/dist/tools/interaction/twitter-login.js.map +1 -0
  214. package/dist/tools/macro/fear-greed.js +9 -1
  215. package/dist/tools/macro/fear-greed.js.map +1 -1
  216. package/dist/tools/macro/fred-data.d.ts +3 -1
  217. package/dist/tools/macro/fred-data.js +27 -16
  218. package/dist/tools/macro/fred-data.js.map +1 -1
  219. package/dist/tools/market/crypto-history.js +9 -1
  220. package/dist/tools/market/crypto-history.js.map +1 -1
  221. package/dist/tools/market/crypto-price.js +9 -1
  222. package/dist/tools/market/crypto-price.js.map +1 -1
  223. package/dist/tools/market/stock-history.js +28 -1
  224. package/dist/tools/market/stock-history.js.map +1 -1
  225. package/dist/tools/market/stock-quote.js +29 -4
  226. package/dist/tools/market/stock-quote.js.map +1 -1
  227. package/dist/tools/options/option-chain.js +9 -1
  228. package/dist/tools/options/option-chain.js.map +1 -1
  229. package/dist/tools/portfolio/correlation.js +15 -3
  230. package/dist/tools/portfolio/correlation.js.map +1 -1
  231. package/dist/tools/portfolio/predictions.js +6 -5
  232. package/dist/tools/portfolio/predictions.js.map +1 -1
  233. package/dist/tools/portfolio/risk-analysis.js +9 -1
  234. package/dist/tools/portfolio/risk-analysis.js.map +1 -1
  235. package/dist/tools/portfolio/tracker.js +6 -3
  236. package/dist/tools/portfolio/tracker.js.map +1 -1
  237. package/dist/tools/portfolio/watchlist.js +6 -1
  238. package/dist/tools/portfolio/watchlist.js.map +1 -1
  239. package/dist/tools/sentiment/reddit-sentiment.d.ts +3 -1
  240. package/dist/tools/sentiment/reddit-sentiment.js +112 -19
  241. package/dist/tools/sentiment/reddit-sentiment.js.map +1 -1
  242. package/dist/tools/sentiment/sentiment-summary.d.ts +7 -0
  243. package/dist/tools/sentiment/sentiment-summary.js +230 -0
  244. package/dist/tools/sentiment/sentiment-summary.js.map +1 -0
  245. package/dist/tools/sentiment/sentiment-trend.d.ts +22 -0
  246. package/dist/tools/sentiment/sentiment-trend.js +39 -0
  247. package/dist/tools/sentiment/sentiment-trend.js.map +1 -0
  248. package/dist/tools/sentiment/twitter-sentiment.d.ts +9 -0
  249. package/dist/tools/sentiment/twitter-sentiment.js +75 -0
  250. package/dist/tools/sentiment/twitter-sentiment.js.map +1 -0
  251. package/dist/tools/sentiment/web-search.d.ts +11 -0
  252. package/dist/tools/sentiment/web-search.js +115 -0
  253. package/dist/tools/sentiment/web-search.js.map +1 -0
  254. package/dist/tools/sentiment/web-sentiment.d.ts +8 -0
  255. package/dist/tools/sentiment/web-sentiment.js +66 -0
  256. package/dist/tools/sentiment/web-sentiment.js.map +1 -0
  257. package/dist/tools/technical/backtest.js +9 -1
  258. package/dist/tools/technical/backtest.js.map +1 -1
  259. package/dist/tools/technical/indicators.js +9 -1
  260. package/dist/tools/technical/indicators.js.map +1 -1
  261. package/dist/types/index.d.ts +16 -1
  262. package/dist/types/sentiment.d.ts +41 -0
  263. package/dist/workflows/compare-assets.d.ts +3 -0
  264. package/dist/workflows/compare-assets.js +21 -5
  265. package/dist/workflows/compare-assets.js.map +1 -1
  266. package/dist/workflows/index.d.ts +3 -3
  267. package/dist/workflows/index.js +3 -3
  268. package/dist/workflows/index.js.map +1 -1
  269. package/dist/workflows/options-screener.d.ts +3 -0
  270. package/dist/workflows/options-screener.js +24 -7
  271. package/dist/workflows/options-screener.js.map +1 -1
  272. package/dist/workflows/portfolio-builder.d.ts +3 -0
  273. package/dist/workflows/portfolio-builder.js +30 -9
  274. package/dist/workflows/portfolio-builder.js.map +1 -1
  275. package/package.json +27 -7
  276. package/dist/tools/sentiment/news-sentiment.d.ts +0 -7
  277. package/dist/tools/sentiment/news-sentiment.js +0 -57
  278. package/dist/tools/sentiment/news-sentiment.js.map +0 -1
@@ -1,90 +1,44 @@
1
- import { buildSystemPrompt } from "../system-prompt.js";
2
- import { getComprehensiveAnalysisPrompts, isAnalysisRequest, normalizeSymbol, } from "../analysts/orchestrator.js";
1
+ import { isAnalysisRequest, normalizeSymbol, } from "../analysts/orchestrator.js";
2
+ import { buildComprehensiveAnalysisDefinition } from "../analysts/orchestrator.js";
3
+ import { getConfig } from "../config.js";
3
4
  import { classifyIntent, resolveOptionsScreenerSlots, resolvePortfolioSlots } from "../routing/index.js";
4
- import { buildCompareAssetsWorkflow, buildOptionsScreenerWorkflow, buildPortfolioWorkflow } from "../workflows/index.js";
5
+ import { buildPortfolioWorkflowDefinition, buildOptionsScreenerWorkflowDefinition, buildCompareAssetsWorkflowDefinition, } from "../workflows/index.js";
5
6
  import { getOpenCandleToolDefinitions } from "./tool-adapter.js";
6
- import { getThirdPartyToolDescriptions } from "../tool-kit.js";
7
- import { runOpenCandleSetup } from "./setup.js";
8
- import { initDefaultDatabase, MemoryStorage, buildMemoryContext, extractPreferences } from "../memory/index.js";
9
- const PROMPT_SETTLE_POLL_MS = 25;
10
- const IMMEDIATE_IDLE_GRACE_MS = 100;
11
- function hasPendingMessages(ctx) {
12
- return ctx.hasPendingMessages?.() ?? false;
13
- }
14
- function isReadyForNextPrompt(ctx) {
15
- return ctx.isIdle() && !hasPendingMessages(ctx);
16
- }
17
- function sleep(ms) {
18
- return new Promise((resolve) => setTimeout(resolve, ms));
19
- }
20
- async function waitForPromptSettlement(ctx, isCurrentSequence) {
21
- let sawBusyOrPending = !isReadyForNextPrompt(ctx);
22
- const startedAt = Date.now();
23
- while (isCurrentSequence()) {
24
- const ready = isReadyForNextPrompt(ctx);
25
- if (!ready) {
26
- sawBusyOrPending = true;
27
- }
28
- if (sawBusyOrPending && ready) {
29
- return true;
30
- }
31
- if (!sawBusyOrPending && ready && Date.now() - startedAt >= IMMEDIATE_IDLE_GRACE_MS) {
32
- return true;
33
- }
34
- await sleep(PROMPT_SETTLE_POLL_MS);
35
- }
36
- return false;
37
- }
38
- function queuePromptSequence(pi, prompts, ctx, beginSequence, isCurrentSequence) {
39
- if (prompts.length === 0)
40
- return;
41
- const [initialPrompt, ...followUps] = prompts;
42
- const sequenceId = beginSequence();
43
- const startedBusy = !isReadyForNextPrompt(ctx);
44
- if (startedBusy) {
45
- pi.sendUserMessage(initialPrompt, { deliverAs: "followUp" });
46
- ctx.ui?.notify?.("Analysis queued as follow-up.", "info");
47
- }
48
- else {
49
- pi.sendUserMessage(initialPrompt);
50
- }
51
- // Submit workflow prompts one turn at a time so a newer workflow can cancel
52
- // the remaining prompts before they are handed to Pi's internal follow-up queue.
53
- void (async () => {
54
- for (const prompt of followUps) {
55
- const settled = await waitForPromptSettlement(ctx, () => isCurrentSequence(sequenceId));
56
- if (!settled || !isCurrentSequence(sequenceId)) {
57
- return;
58
- }
59
- pi.sendUserMessage(prompt);
60
- }
61
- })();
62
- }
63
- function queueComprehensiveAnalysis(pi, symbol, ctx, beginSequence, isCurrentSequence) {
64
- queuePromptSequence(pi, getComprehensiveAnalysisPrompts(symbol), ctx, beginSequence, isCurrentSequence);
65
- }
66
- function queueCompareWorkflow(pi, symbols, ctx, beginSequence, isCurrentSequence) {
67
- const resolution = {
68
- resolved: { symbols },
69
- sources: { symbols: "user" },
70
- defaultsUsed: [],
71
- missingRequired: [],
72
- };
73
- const workflow = buildCompareAssetsWorkflow(resolution);
74
- queuePromptSequence(pi, [workflow.initialPrompt, ...workflow.followUps], ctx, beginSequence, isCurrentSequence);
75
- }
76
- export default function openCandleExtension(pi) {
77
- let activeSequenceId = 0;
78
- let storage = null;
79
- let sessionId = "unknown";
80
- const beginSequence = () => {
81
- activeSequenceId += 1;
82
- return activeSequenceId;
83
- };
84
- const isCurrentSequence = (sequenceId) => sequenceId === activeSequenceId;
7
+ import { registerAskUserTool } from "../tools/interaction/ask-user.js";
8
+ import { registerTwitterLoginTool } from "../tools/interaction/twitter-login.js";
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";
17
+ export default function openCandleExtension(pi, options) {
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();
35
+ // Register tools
85
36
  for (const tool of getOpenCandleToolDefinitions()) {
86
37
  pi.registerTool(tool);
87
38
  }
39
+ registerAskUserTool(pi, options?.askUserHandler);
40
+ registerTwitterLoginTool(pi);
41
+ // /analyze command
88
42
  pi.registerCommand("analyze", {
89
43
  description: "Run the multi-analyst OpenCandle workflow for a ticker symbol",
90
44
  handler: async (args, ctx) => {
@@ -93,112 +47,360 @@ export default function openCandleExtension(pi) {
93
47
  ctx.ui.notify("Usage: /analyze <ticker>", "warning");
94
48
  return;
95
49
  }
96
- queueComprehensiveAnalysis(pi, symbol, ctx, beginSequence, isCurrentSequence);
50
+ const definition = buildComprehensiveAnalysisDefinition(symbol, { debate: getConfig().debate });
51
+ coordinator.executeWorkflow(pi, definition, ctx);
97
52
  },
98
53
  });
54
+ // /setup command — reconfigure the OpenCandle AI model (sign-in / API key).
55
+ // Data providers are configured separately via `/connect`.
99
56
  pi.registerCommand("setup", {
100
- description: "Run OpenCandle setup for your AI model and market data providers",
57
+ description: "Reconfigure the OpenCandle AI model (sign-in or API key)",
101
58
  handler: async (_args, ctx) => {
102
- const result = await runOpenCandleSetup(pi, ctx, { mode: "manual", forceFinancePrompt: true });
59
+ const result = await coordinator.runSetup(pi, ctx, { mode: "manual" });
103
60
  if (result === "ready") {
104
61
  ctx.ui.notify("OpenCandle setup complete.", "info");
105
62
  }
106
63
  },
107
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
+ });
131
+ // Session start
108
132
  pi.on("session_start", async (_event, ctx) => {
109
- const db = initDefaultDatabase();
110
- storage = new MemoryStorage(db);
111
- sessionId = ctx.sessionManager.getSessionId();
133
+ coordinator.initSession(ctx.sessionManager.getSessionId());
134
+ sessionPromptedSet.clear();
135
+ hardPromptFiredInWorkflow = false;
112
136
  if (!ctx.hasUI)
113
137
  return;
114
- const result = await runOpenCandleSetup(pi, ctx, { mode: "startup" });
138
+ const result = await coordinator.runSetup(pi, ctx, { mode: "startup" });
115
139
  if (result === "shutdown") {
116
140
  return;
117
141
  }
118
- ctx.ui.notify("OpenCandle finance mode. Try /analyze NVDA or ask for quotes, options, macro, or portfolio analysis.", "info");
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
+ }
119
168
  });
120
- pi.on("input", async (event, ctx) => {
121
- if (event.source === "extension")
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())
122
183
  return;
123
- // Extract and persist user preferences from natural language
124
- if (storage) {
125
- for (const pref of extractPreferences(event.text)) {
126
- storage.upsertPreference({
127
- key: pref.key,
128
- valueJson: JSON.stringify(pref.value),
129
- confidence: pref.confidence,
130
- source: "inferred",
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,
131
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
+ };
132
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
+ };
133
347
  }
348
+ // No OpenCandle tag in this tool result — pass through.
349
+ return undefined;
350
+ });
351
+ // Input handling — classify intent and dispatch workflows
352
+ pi.on("input", async (event, ctx) => {
353
+ if (event.source === "extension")
354
+ return;
355
+ // Extract and persist user preferences
356
+ coordinator.extractAndStorePreferences(event.text);
357
+ const storage = coordinator.getStorage();
134
358
  const workflowPrefs = storage?.getWorkflowPreferences("global") ?? {};
359
+ // Check for comprehensive analysis pattern
135
360
  const analysis = isAnalysisRequest(event.text);
136
361
  if (analysis.match && analysis.symbol) {
137
- queueComprehensiveAnalysis(pi, analysis.symbol, ctx, beginSequence, isCurrentSequence);
362
+ const definition = buildComprehensiveAnalysisDefinition(analysis.symbol, { debate: getConfig().debate });
363
+ coordinator.executeWorkflow(pi, definition, ctx);
138
364
  return { action: "handled" };
139
365
  }
366
+ // Classify intent
140
367
  const classification = classifyIntent(event.text);
141
368
  if (classification.workflow === "portfolio_builder") {
142
369
  const resolution = resolvePortfolioSlots(classification.entities, workflowPrefs);
143
- const workflow = buildPortfolioWorkflow(resolution);
144
- if (storage) {
145
- storage.insertWorkflowRun({
146
- sessionId,
147
- workflowType: "portfolio_builder",
148
- inputSlotsJson: JSON.stringify(classification.entities),
149
- resolvedSlotsJson: JSON.stringify(resolution.resolved),
150
- defaultsUsedJson: JSON.stringify(resolution.defaultsUsed),
151
- });
152
- }
370
+ coordinator.recordWorkflowRun("portfolio_builder", classification.entities, resolution.resolved, resolution.defaultsUsed);
153
371
  pi.appendEntry("opencandle-workflow", { workflow: "portfolio_builder", entities: classification.entities, resolved: resolution.resolved });
154
- queuePromptSequence(pi, [workflow.initialPrompt, ...workflow.followUps], ctx, beginSequence, isCurrentSequence);
372
+ const definition = buildPortfolioWorkflowDefinition(resolution);
373
+ coordinator.executeWorkflow(pi, definition, ctx);
155
374
  return { action: "handled" };
156
375
  }
157
376
  if (classification.workflow === "options_screener") {
158
377
  const resolution = resolveOptionsScreenerSlots(classification.entities, workflowPrefs);
159
378
  if (resolution.missingRequired.length === 0) {
160
- const workflow = buildOptionsScreenerWorkflow(resolution);
161
- if (storage) {
162
- storage.insertWorkflowRun({
163
- sessionId,
164
- workflowType: "options_screener",
165
- inputSlotsJson: JSON.stringify(classification.entities),
166
- resolvedSlotsJson: JSON.stringify(resolution.resolved),
167
- defaultsUsedJson: JSON.stringify(resolution.defaultsUsed),
168
- });
169
- }
379
+ coordinator.recordWorkflowRun("options_screener", classification.entities, resolution.resolved, resolution.defaultsUsed);
170
380
  pi.appendEntry("opencandle-workflow", { workflow: "options_screener", entities: classification.entities, resolved: resolution.resolved });
171
- queuePromptSequence(pi, [workflow.initialPrompt, ...workflow.followUps], ctx, beginSequence, isCurrentSequence);
381
+ const definition = buildOptionsScreenerWorkflowDefinition(resolution);
382
+ coordinator.executeWorkflow(pi, definition, ctx);
172
383
  return { action: "handled" };
173
384
  }
174
385
  }
175
386
  if (classification.workflow === "compare_assets" && classification.entities.symbols.length >= 2) {
176
- if (storage) {
177
- storage.insertWorkflowRun({
178
- sessionId,
179
- workflowType: "compare_assets",
180
- inputSlotsJson: JSON.stringify(classification.entities),
181
- resolvedSlotsJson: JSON.stringify({ symbols: classification.entities.symbols }),
182
- defaultsUsedJson: JSON.stringify([]),
183
- });
184
- }
387
+ const resolution = {
388
+ resolved: { symbols: classification.entities.symbols },
389
+ sources: { symbols: "user" },
390
+ defaultsUsed: [],
391
+ missingRequired: [],
392
+ };
393
+ coordinator.recordWorkflowRun("compare_assets", classification.entities, resolution.resolved, resolution.defaultsUsed);
185
394
  pi.appendEntry("opencandle-workflow", { workflow: "compare_assets", symbols: classification.entities.symbols });
186
- queueCompareWorkflow(pi, classification.entities.symbols, ctx, beginSequence, isCurrentSequence);
395
+ const definition = buildCompareAssetsWorkflowDefinition(resolution);
396
+ coordinator.executeWorkflow(pi, definition, ctx);
187
397
  return { action: "handled" };
188
398
  }
189
399
  });
400
+ // System prompt assembly — delegate to coordinator
190
401
  pi.on("before_agent_start", async (event) => {
191
- const memoryContext = storage ? buildMemoryContext(storage) : "";
192
- let thirdPartySection = "";
193
- const thirdPartyTools = getThirdPartyToolDescriptions();
194
- if (thirdPartyTools.length > 0) {
195
- const lines = thirdPartyTools
196
- .map((t) => `- ${t.name}: ${t.description}`)
197
- .join("\n");
198
- thirdPartySection = `\n\n## Third-Party Tools\nThe following community-contributed tools are also available:\n${lines}`;
199
- }
200
402
  return {
201
- systemPrompt: `${event.systemPrompt}\n\n${buildSystemPrompt(memoryContext || undefined)}${thirdPartySection}`,
403
+ systemPrompt: coordinator.buildSystemPrompt(event.systemPrompt),
202
404
  };
203
405
  });
204
406
  }
@@ -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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"}
@@ -1,4 +1,5 @@
1
1
  import { type AuthStorage, type ModelRegistry, type CreateAgentSessionResult, type SettingsManager, type SessionManager } from "@mariozechner/pi-coding-agent";
2
+ import type { AskUserHandler } from "../types/index.js";
2
3
  export interface CreateOpenCandleSessionOptions {
3
4
  cwd?: string;
4
5
  authStorage?: AuthStorage;
@@ -6,5 +7,6 @@ export interface CreateOpenCandleSessionOptions {
6
7
  settingsManager?: SettingsManager;
7
8
  sessionManager?: SessionManager;
8
9
  useInlineExtension?: boolean;
10
+ askUserHandler?: AskUserHandler;
9
11
  }
10
12
  export declare function createOpenCandleSession(options?: CreateOpenCandleSessionOptions): Promise<CreateAgentSessionResult>;
@@ -9,7 +9,7 @@ export async function createOpenCandleSession(options = {}) {
9
9
  ? new DefaultResourceLoader({
10
10
  cwd,
11
11
  settingsManager: options.settingsManager,
12
- extensionFactories: [openCandleExtension],
12
+ extensionFactories: [(pi) => openCandleExtension(pi, { askUserHandler: options.askUserHandler })],
13
13
  })
14
14
  : undefined;
15
15
  if (resourceLoader) {
@@ -1 +1 @@
1
- {"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/pi/session.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,kBAAkB,EAClB,qBAAqB,GAKtB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,mBAAmB,MAAM,2BAA2B,CAAC;AAW5D,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,UAA0C,EAAE;IAE5C,OAAO,EAAE,CAAC;IAEV,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IACzC,MAAM,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,IAAI,IAAI,CAAC;IAC9D,MAAM,cAAc,GAAG,kBAAkB;QACvC,CAAC,CAAC,IAAI,qBAAqB,CAAC;YACxB,GAAG;YACH,eAAe,EAAE,OAAO,CAAC,eAAe;YACxC,kBAAkB,EAAE,CAAC,mBAAmB,CAAC;SAC1C,CAAC;QACJ,CAAC,CAAC,SAAS,CAAC;IAEd,IAAI,cAAc,EAAE,CAAC;QACnB,MAAM,cAAc,CAAC,MAAM,EAAE,CAAC;IAChC,CAAC;IAED,OAAO,kBAAkB,CAAC;QACxB,GAAG;QACH,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,aAAa,EAAE,OAAO,CAAC,aAAa;QACpC,cAAc,EAAE,OAAO,CAAC,cAAc;QACtC,eAAe,EAAE,OAAO,CAAC,eAAe;QACxC,cAAc;QACd,KAAK,EAAE,EAAE;KACV,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/pi/session.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,kBAAkB,EAClB,qBAAqB,GAKtB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,mBAAmB,MAAM,2BAA2B,CAAC;AAa5D,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,UAA0C,EAAE;IAE5C,OAAO,EAAE,CAAC;IAEV,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IACzC,MAAM,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,IAAI,IAAI,CAAC;IAC9D,MAAM,cAAc,GAAG,kBAAkB;QACvC,CAAC,CAAC,IAAI,qBAAqB,CAAC;YACxB,GAAG;YACH,eAAe,EAAE,OAAO,CAAC,eAAe;YACxC,kBAAkB,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,mBAAmB,CAAC,EAAE,EAAE,EAAE,cAAc,EAAE,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;SAClG,CAAC;QACJ,CAAC,CAAC,SAAS,CAAC;IAEd,IAAI,cAAc,EAAE,CAAC;QACnB,MAAM,cAAc,CAAC,MAAM,EAAE,CAAC;IAChC,CAAC;IAED,OAAO,kBAAkB,CAAC;QACxB,GAAG;QACH,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,aAAa,EAAE,OAAO,CAAC,aAAa;QACpC,cAAc,EAAE,OAAO,CAAC,cAAc;QACtC,eAAe,EAAE,OAAO,CAAC,eAAe;QACxC,cAAc;QACd,KAAK,EAAE,EAAE;KACV,CAAC,CAAC;AACL,CAAC"}
@@ -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 {};