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.
- package/README.md +111 -79
- 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 +156 -9
- 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 +29 -5
- package/dist/config.js +18 -8
- 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 +34 -0
- package/dist/infra/cache.js +44 -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 +7 -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/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.d.ts +5 -1
- package/dist/pi/opencandle-extension.js +345 -143
- 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/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.d.ts +26 -0
- package/dist/prompts/context-builder.js +127 -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 +204 -77
- 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/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/fear-greed.js +23 -15
- package/dist/providers/fear-greed.js.map +1 -1
- 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 +48 -28
- 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 +78 -43
- package/dist/providers/reddit.js.map +1 -1
- package/dist/providers/twitter.d.ts +20 -0
- package/dist/providers/twitter.js +137 -0
- package/dist/providers/twitter.js.map +1 -0
- 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/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 +20 -0
- package/dist/providers/wrap-provider.js +58 -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/routing/classify-intent.js +22 -0
- package/dist/routing/classify-intent.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 +47 -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/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 +60 -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.d.ts +3 -1
- package/dist/tools/fundamentals/company-overview.js +28 -17
- package/dist/tools/fundamentals/company-overview.js.map +1 -1
- package/dist/tools/fundamentals/comps.js +47 -39
- package/dist/tools/fundamentals/comps.js.map +1 -1
- package/dist/tools/fundamentals/dcf.js +83 -65
- package/dist/tools/fundamentals/dcf.js.map +1 -1
- package/dist/tools/fundamentals/earnings.d.ts +3 -1
- package/dist/tools/fundamentals/earnings.js +26 -18
- package/dist/tools/fundamentals/earnings.js.map +1 -1
- package/dist/tools/fundamentals/financials.d.ts +3 -1
- package/dist/tools/fundamentals/financials.js +24 -16
- 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 +10 -2
- 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 +51 -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.d.ts +3 -1
- package/dist/tools/macro/fred-data.js +27 -16
- 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/reddit-sentiment.d.ts +3 -1
- package/dist/tools/sentiment/reddit-sentiment.js +112 -19
- 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.d.ts +9 -0
- package/dist/tools/sentiment/twitter-sentiment.js +75 -0
- package/dist/tools/sentiment/twitter-sentiment.js.map +1 -0
- 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/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 +16 -1
- package/dist/types/sentiment.d.ts +41 -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 +27 -7
- package/dist/tools/sentiment/news-sentiment.d.ts +0 -7
- package/dist/tools/sentiment/news-sentiment.js +0 -57
- package/dist/tools/sentiment/news-sentiment.js.map +0 -1
|
@@ -1,90 +1,44 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
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 {
|
|
5
|
+
import { buildPortfolioWorkflowDefinition, buildOptionsScreenerWorkflowDefinition, buildCompareAssetsWorkflowDefinition, } from "../workflows/index.js";
|
|
5
6
|
import { getOpenCandleToolDefinitions } from "./tool-adapter.js";
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
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
|
-
|
|
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: "
|
|
57
|
+
description: "Reconfigure the OpenCandle AI model (sign-in or API key)",
|
|
101
58
|
handler: async (_args, ctx) => {
|
|
102
|
-
const result = await
|
|
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
|
-
|
|
110
|
-
|
|
111
|
-
|
|
133
|
+
coordinator.initSession(ctx.sessionManager.getSessionId());
|
|
134
|
+
sessionPromptedSet.clear();
|
|
135
|
+
hardPromptFiredInWorkflow = false;
|
|
112
136
|
if (!ctx.hasUI)
|
|
113
137
|
return;
|
|
114
|
-
const result = await
|
|
138
|
+
const result = await coordinator.runSetup(pi, ctx, { mode: "startup" });
|
|
115
139
|
if (result === "shutdown") {
|
|
116
140
|
return;
|
|
117
141
|
}
|
|
118
|
-
|
|
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
|
-
|
|
121
|
-
|
|
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
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
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
|
-
|
|
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:
|
|
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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"}
|
package/dist/pi/session.d.ts
CHANGED
|
@@ -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>;
|
package/dist/pi/session.js
CHANGED
|
@@ -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) {
|
package/dist/pi/session.js.map
CHANGED
|
@@ -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;
|
|
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"}
|
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 {};
|