opencandle 0.6.0 → 0.8.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 +43 -23
- package/dist/cli-main.d.ts +1 -0
- package/dist/cli-main.js +200 -0
- package/dist/cli-main.js.map +1 -0
- package/dist/cli.d.ts +1 -1
- package/dist/cli.js +14 -194
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +10 -0
- package/dist/config.js +13 -0
- package/dist/config.js.map +1 -1
- package/dist/doctor/cli-command.d.ts +1 -0
- package/dist/doctor/cli-command.js +69 -0
- package/dist/doctor/cli-command.js.map +1 -0
- package/dist/doctor/render.d.ts +2 -0
- package/dist/doctor/render.js +32 -0
- package/dist/doctor/render.js.map +1 -0
- package/dist/doctor/report.d.ts +63 -0
- package/dist/doctor/report.js +500 -0
- package/dist/doctor/report.js.map +1 -0
- package/dist/infra/index.d.ts +0 -1
- package/dist/infra/index.js +0 -1
- package/dist/infra/index.js.map +1 -1
- package/dist/infra/native-dependencies.d.ts +8 -0
- package/dist/infra/native-dependencies.js +49 -0
- package/dist/infra/native-dependencies.js.map +1 -1
- package/dist/infra/node-version.js +2 -5
- package/dist/infra/node-version.js.map +1 -1
- package/dist/monitor.d.ts +1 -1
- package/dist/monitor.js +2 -1
- package/dist/monitor.js.map +1 -1
- package/dist/onboarding/connect.d.ts +2 -2
- package/dist/onboarding/connect.js +10 -3
- package/dist/onboarding/connect.js.map +1 -1
- package/dist/onboarding/provider-status.d.ts +46 -0
- package/dist/onboarding/provider-status.js +256 -0
- package/dist/onboarding/provider-status.js.map +1 -0
- package/dist/onboarding/providers.d.ts +85 -8
- package/dist/onboarding/providers.js +87 -9
- package/dist/onboarding/providers.js.map +1 -1
- package/dist/onboarding/state.d.ts +1 -0
- package/dist/onboarding/state.js +5 -0
- package/dist/onboarding/state.js.map +1 -1
- package/dist/onboarding/tool-tags.d.ts +12 -1
- package/dist/onboarding/tool-tags.js +31 -1
- package/dist/onboarding/tool-tags.js.map +1 -1
- package/dist/onboarding/validation.d.ts +2 -2
- package/dist/onboarding/validation.js.map +1 -1
- package/dist/pi/opencandle-extension.js +91 -15
- package/dist/pi/opencandle-extension.js.map +1 -1
- package/dist/pi/session.d.ts +0 -1
- package/dist/pi/session.js +2 -1
- package/dist/pi/session.js.map +1 -1
- package/dist/pi/tool-adapter.d.ts +4 -1
- package/dist/pi/tool-adapter.js +5 -4
- package/dist/pi/tool-adapter.js.map +1 -1
- package/dist/prompts/context-builder.js +1 -1
- package/dist/prompts/policy-cards.js +9 -5
- package/dist/prompts/policy-cards.js.map +1 -1
- package/dist/prompts/workflow-prompts.js +10 -6
- package/dist/prompts/workflow-prompts.js.map +1 -1
- package/dist/providers/external-tool-command.d.ts +17 -0
- package/dist/providers/external-tool-command.js +114 -0
- package/dist/providers/external-tool-command.js.map +1 -0
- package/dist/providers/external-tool-error.d.ts +10 -0
- package/dist/providers/external-tool-error.js +21 -0
- package/dist/providers/external-tool-error.js.map +1 -0
- package/dist/providers/reddit-cli.d.ts +32 -0
- package/dist/providers/reddit-cli.js +172 -0
- package/dist/providers/reddit-cli.js.map +1 -0
- package/dist/providers/reddit.d.ts +1 -1
- package/dist/providers/reddit.js +7 -35
- package/dist/providers/reddit.js.map +1 -1
- package/dist/providers/twitter-cli.d.ts +36 -0
- package/dist/providers/twitter-cli.js +124 -0
- package/dist/providers/twitter-cli.js.map +1 -0
- package/dist/providers/twitter.d.ts +0 -8
- package/dist/providers/twitter.js +4 -54
- package/dist/providers/twitter.js.map +1 -1
- package/dist/providers/wrap-provider.js +30 -0
- package/dist/providers/wrap-provider.js.map +1 -1
- package/dist/providers/yahoo-finance.js +53 -32
- package/dist/providers/yahoo-finance.js.map +1 -1
- package/dist/routing/classify-intent.js +7 -3
- package/dist/routing/classify-intent.js.map +1 -1
- package/dist/routing/planning.d.ts +1 -1
- package/dist/routing/planning.js +9 -6
- package/dist/routing/planning.js.map +1 -1
- package/dist/routing/router.js +7 -3
- package/dist/routing/router.js.map +1 -1
- package/dist/runtime/answer-contracts.d.ts +1 -1
- package/dist/runtime/answer-contracts.js +12 -1
- package/dist/runtime/answer-contracts.js.map +1 -1
- package/dist/runtime/tool-defaults-wrapper.js +6 -2
- package/dist/runtime/tool-defaults-wrapper.js.map +1 -1
- package/dist/sentiment/index.d.ts +1 -0
- package/dist/sentiment/index.js +1 -0
- package/dist/sentiment/index.js.map +1 -1
- package/dist/sentiment/insights.d.ts +17 -0
- package/dist/sentiment/insights.js +206 -0
- package/dist/sentiment/insights.js.map +1 -0
- package/dist/sentiment/pipeline.js +13 -1
- package/dist/sentiment/pipeline.js.map +1 -1
- package/dist/sentiment/scorer.d.ts +2 -0
- package/dist/sentiment/scorer.js +10 -1
- package/dist/sentiment/scorer.js.map +1 -1
- package/dist/sentiment/types.d.ts +2 -0
- package/dist/sentiment/types.js.map +1 -1
- package/dist/system-prompt.js +3 -7
- package/dist/system-prompt.js.map +1 -1
- package/dist/tools/index.d.ts +5 -2
- package/dist/tools/index.js +8 -8
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/sentiment/insight-format.d.ts +2 -0
- package/dist/tools/sentiment/insight-format.js +36 -0
- package/dist/tools/sentiment/insight-format.js.map +1 -0
- package/dist/tools/sentiment/query-match.d.ts +3 -0
- package/dist/tools/sentiment/query-match.js +113 -0
- package/dist/tools/sentiment/query-match.js.map +1 -0
- package/dist/tools/sentiment/reddit-sentiment.d.ts +12 -1
- package/dist/tools/sentiment/reddit-sentiment.js +263 -117
- package/dist/tools/sentiment/reddit-sentiment.js.map +1 -1
- package/dist/tools/sentiment/sentiment-summary.d.ts +9 -1
- package/dist/tools/sentiment/sentiment-summary.js +217 -201
- package/dist/tools/sentiment/sentiment-summary.js.map +1 -1
- package/dist/tools/sentiment/twitter-sentiment.d.ts +11 -1
- package/dist/tools/sentiment/twitter-sentiment.js +187 -64
- package/dist/tools/sentiment/twitter-sentiment.js.map +1 -1
- package/dist/tools/sentiment/web-sentiment.js +4 -0
- package/dist/tools/sentiment/web-sentiment.js.map +1 -1
- package/dist/types/sentiment.d.ts +52 -0
- package/gui/server/http-routes.ts +419 -0
- package/gui/server/invoke-tool.ts +17 -3
- package/gui/server/model-setup.ts +10 -3
- package/gui/server/projector.ts +6 -2
- package/gui/server/server.ts +30 -275
- package/gui/server/tool-metadata.ts +80 -16
- package/gui/server/ws-hub.ts +19 -0
- package/gui/web/dist/assets/CatalogOverlay-CCVKwBUB.js +1 -0
- package/gui/web/dist/assets/index-Dm4Aom2_.js +69 -0
- package/gui/web/dist/assets/{index-2KZtKBmu.css → index-UzZUg3dx.css} +1 -1
- package/gui/web/dist/index.html +2 -2
- package/package.json +17 -14
- package/src/cli-main.ts +233 -0
- package/src/cli.ts +14 -226
- package/src/config.ts +27 -0
- package/src/doctor/cli-command.ts +83 -0
- package/src/doctor/render.ts +37 -0
- package/src/doctor/report.ts +638 -0
- package/src/infra/index.ts +0 -1
- package/src/infra/native-dependencies.ts +67 -0
- package/src/infra/node-version.ts +2 -5
- package/src/monitor.ts +3 -1
- package/src/onboarding/connect.ts +20 -4
- package/src/onboarding/provider-status.ts +382 -0
- package/src/onboarding/providers.ts +148 -18
- package/src/onboarding/state.ts +9 -0
- package/src/onboarding/tool-tags.ts +45 -2
- package/src/onboarding/validation.ts +2 -2
- package/src/pi/opencandle-extension.ts +115 -17
- package/src/pi/session.ts +2 -1
- package/src/pi/tool-adapter.ts +14 -4
- package/src/prompts/context-builder.ts +1 -1
- package/src/prompts/policy-cards.ts +13 -5
- package/src/prompts/workflow-prompts.ts +13 -6
- package/src/providers/external-tool-command.ts +164 -0
- package/src/providers/external-tool-error.ts +20 -0
- package/src/providers/reddit-cli.ts +286 -0
- package/src/providers/reddit.ts +7 -63
- package/src/providers/twitter-cli.ts +202 -0
- package/src/providers/twitter.ts +4 -73
- package/src/providers/wrap-provider.ts +34 -0
- package/src/providers/yahoo-finance.ts +65 -32
- package/src/routing/classify-intent.ts +11 -6
- package/src/routing/planning.ts +16 -10
- package/src/routing/router.ts +11 -6
- package/src/runtime/answer-contracts.ts +23 -2
- package/src/runtime/tool-defaults-wrapper.ts +12 -2
- package/src/sentiment/index.ts +1 -0
- package/src/sentiment/insights.ts +269 -0
- package/src/sentiment/pipeline.ts +13 -1
- package/src/sentiment/scorer.ts +12 -1
- package/src/sentiment/types.ts +3 -0
- package/src/system-prompt.ts +3 -7
- package/src/tools/index.ts +9 -8
- package/src/tools/sentiment/insight-format.ts +50 -0
- package/src/tools/sentiment/query-match.ts +117 -0
- package/src/tools/sentiment/reddit-sentiment.ts +354 -141
- package/src/tools/sentiment/sentiment-summary.ts +283 -237
- package/src/tools/sentiment/twitter-sentiment.ts +262 -78
- package/src/tools/sentiment/web-sentiment.ts +4 -0
- package/src/types/sentiment.ts +59 -0
- package/dist/infra/browser.d.ts +0 -35
- package/dist/infra/browser.js +0 -105
- package/dist/infra/browser.js.map +0 -1
- package/dist/tools/interaction/twitter-login.d.ts +0 -8
- package/dist/tools/interaction/twitter-login.js +0 -87
- package/dist/tools/interaction/twitter-login.js.map +0 -1
- package/gui/web/dist/assets/CatalogOverlay-eJ2cBk33.js +0 -1
- package/gui/web/dist/assets/index-CveNgtDg.js +0 -69
- package/src/infra/browser.ts +0 -113
- package/src/tools/interaction/twitter-login.ts +0 -105
package/dist/config.js
CHANGED
|
@@ -28,6 +28,11 @@ const SENTIMENT_DEFAULTS = {
|
|
|
28
28
|
defaultSubreddits: ["wallstreetbets", "stocks", "investing", "options"],
|
|
29
29
|
commentsPerPost: 5,
|
|
30
30
|
divergenceThreshold: 0.4,
|
|
31
|
+
minUsefulSampleSize: 10,
|
|
32
|
+
maxInsightDriversPerPolarity: 3,
|
|
33
|
+
maxRepresentativeItemsPerSource: 5,
|
|
34
|
+
maxAggregateRepresentativeItems: 8,
|
|
35
|
+
maxNotableClaims: 5,
|
|
31
36
|
};
|
|
32
37
|
const PLANNING_TASK_FAMILIES = [
|
|
33
38
|
"single_asset_decision",
|
|
@@ -114,6 +119,14 @@ function resolveConfig(fileConfig) {
|
|
|
114
119
|
defaultSubreddits: fileSentiment?.defaultSubreddits ?? SENTIMENT_DEFAULTS.defaultSubreddits,
|
|
115
120
|
commentsPerPost: fileSentiment?.commentsPerPost ?? SENTIMENT_DEFAULTS.commentsPerPost,
|
|
116
121
|
divergenceThreshold: fileSentiment?.divergenceThreshold ?? SENTIMENT_DEFAULTS.divergenceThreshold,
|
|
122
|
+
minUsefulSampleSize: fileSentiment?.minUsefulSampleSize ?? SENTIMENT_DEFAULTS.minUsefulSampleSize,
|
|
123
|
+
maxInsightDriversPerPolarity: fileSentiment?.maxInsightDriversPerPolarity ??
|
|
124
|
+
SENTIMENT_DEFAULTS.maxInsightDriversPerPolarity,
|
|
125
|
+
maxRepresentativeItemsPerSource: fileSentiment?.maxRepresentativeItemsPerSource ??
|
|
126
|
+
SENTIMENT_DEFAULTS.maxRepresentativeItemsPerSource,
|
|
127
|
+
maxAggregateRepresentativeItems: fileSentiment?.maxAggregateRepresentativeItems ??
|
|
128
|
+
SENTIMENT_DEFAULTS.maxAggregateRepresentativeItems,
|
|
129
|
+
maxNotableClaims: fileSentiment?.maxNotableClaims ?? SENTIMENT_DEFAULTS.maxNotableClaims,
|
|
117
130
|
},
|
|
118
131
|
};
|
|
119
132
|
}
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function handleDoctorCommand(args: string[], cwd: string, agentDir: string): Promise<boolean>;
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { AuthStorage, ModelRegistry, SettingsManager } from "@earendil-works/pi-coding-agent";
|
|
2
|
+
import { getProvider } from "../onboarding/providers.js";
|
|
3
|
+
import { clearProviderOnboardingEntry, loadOnboardingState, saveOnboardingState, } from "../onboarding/state.js";
|
|
4
|
+
import { renderDoctorReport } from "./render.js";
|
|
5
|
+
import { buildDoctorReport } from "./report.js";
|
|
6
|
+
export async function handleDoctorCommand(args, cwd, agentDir) {
|
|
7
|
+
if (args[0] !== "doctor")
|
|
8
|
+
return false;
|
|
9
|
+
const json = args.includes("--json");
|
|
10
|
+
const enableFlag = args.findIndex((arg) => arg === "--enable" || arg === "--reenable");
|
|
11
|
+
if (enableFlag >= 0) {
|
|
12
|
+
const providerId = args[enableFlag + 1];
|
|
13
|
+
if (!providerId) {
|
|
14
|
+
console.error("Usage: opencandle doctor --enable <provider>");
|
|
15
|
+
process.exitCode = 1;
|
|
16
|
+
return true;
|
|
17
|
+
}
|
|
18
|
+
try {
|
|
19
|
+
getProvider(providerId);
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
console.error(`Unknown provider: ${providerId}`);
|
|
23
|
+
process.exitCode = 1;
|
|
24
|
+
return true;
|
|
25
|
+
}
|
|
26
|
+
saveOnboardingState(clearProviderOnboardingEntry(loadOnboardingState(), providerId));
|
|
27
|
+
if (!json)
|
|
28
|
+
console.log(`Re-enabled ${providerId}.`);
|
|
29
|
+
}
|
|
30
|
+
const authStorage = AuthStorage.create();
|
|
31
|
+
const modelRegistry = ModelRegistry.create(authStorage);
|
|
32
|
+
const settingsManager = SettingsManager.create(cwd, agentDir);
|
|
33
|
+
const includeSessions = args.includes("--sessions");
|
|
34
|
+
if (includeSessions) {
|
|
35
|
+
console.error("Session checks may read browser cookies or trigger platform permission prompts for Reddit and X/Twitter.");
|
|
36
|
+
}
|
|
37
|
+
const report = await buildDoctorReport({
|
|
38
|
+
cwd,
|
|
39
|
+
agentDir,
|
|
40
|
+
includeSessions,
|
|
41
|
+
includeGui: args.includes("--full"),
|
|
42
|
+
modelSetup: buildCliModelSetupState(modelRegistry, settingsManager),
|
|
43
|
+
});
|
|
44
|
+
console.log(json ? JSON.stringify(report, null, 2) : renderDoctorReport(report));
|
|
45
|
+
return true;
|
|
46
|
+
}
|
|
47
|
+
function buildCliModelSetupState(modelRegistry, settingsManager) {
|
|
48
|
+
modelRegistry.refresh();
|
|
49
|
+
const provider = settingsManager.getDefaultProvider();
|
|
50
|
+
const modelId = settingsManager.getDefaultModel();
|
|
51
|
+
const activeModel = provider && modelId ? modelRegistry.find(provider, modelId) : undefined;
|
|
52
|
+
if (activeModel && modelRegistry.hasConfiguredAuth(activeModel)) {
|
|
53
|
+
return {
|
|
54
|
+
requirement: "ready",
|
|
55
|
+
currentModel: `${activeModel.provider}/${activeModel.id}`,
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
const availableModels = modelRegistry.getAvailable().map((model) => ({
|
|
59
|
+
provider: model.provider,
|
|
60
|
+
id: model.id,
|
|
61
|
+
label: `${model.provider}/${model.id}`,
|
|
62
|
+
}));
|
|
63
|
+
return {
|
|
64
|
+
requirement: availableModels.length > 0 ? "select_model" : "connect_auth",
|
|
65
|
+
currentModel: activeModel ? `${activeModel.provider}/${activeModel.id}` : undefined,
|
|
66
|
+
availableModels,
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=cli-command.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-command.js","sourceRoot":"","sources":["../../src/doctor/cli-command.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
const STATUS_SYMBOLS = {
|
|
2
|
+
pass: "PASS",
|
|
3
|
+
warn: "WARN",
|
|
4
|
+
fail: "FAIL",
|
|
5
|
+
skip: "SKIP",
|
|
6
|
+
unknown: "INFO",
|
|
7
|
+
};
|
|
8
|
+
export function renderDoctorReport(report) {
|
|
9
|
+
const lines = [
|
|
10
|
+
`OpenCandle health: ${report.status.toUpperCase()}`,
|
|
11
|
+
report.summary,
|
|
12
|
+
`Generated: ${report.generatedAt}`,
|
|
13
|
+
`OC home: ${report.metadata.opencandleHome} (${report.metadata.opencandleHomeSource})`,
|
|
14
|
+
`CWD: ${report.metadata.cwd}`,
|
|
15
|
+
"",
|
|
16
|
+
];
|
|
17
|
+
for (const section of report.sections) {
|
|
18
|
+
lines.push(`${section.label} - ${section.status.toUpperCase()}`);
|
|
19
|
+
for (const check of section.checks) {
|
|
20
|
+
lines.push(` [${STATUS_SYMBOLS[check.status]}] ${check.label}: ${check.summary}`);
|
|
21
|
+
if (isActionable(check)) {
|
|
22
|
+
lines.push(` Fix: ${check.remediation}`);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
lines.push("");
|
|
26
|
+
}
|
|
27
|
+
return lines.join("\n").trimEnd();
|
|
28
|
+
}
|
|
29
|
+
function isActionable(check) {
|
|
30
|
+
return check.status !== "pass" && Boolean(check.remediation);
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=render.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/doctor/render.ts"],"names":[],"mappings":"AAEA,MAAM,cAAc,GAAsC;IACxD,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,MAAM;IACZ,OAAO,EAAE,MAAM;CAChB,CAAC;AAEF,MAAM,UAAU,kBAAkB,CAAC,MAAoB;IACrD,MAAM,KAAK,GAAG;QACZ,sBAAsB,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE;QACnD,MAAM,CAAC,OAAO;QACd,cAAc,MAAM,CAAC,WAAW,EAAE;QAClC,YAAY,MAAM,CAAC,QAAQ,CAAC,cAAc,KAAK,MAAM,CAAC,QAAQ,CAAC,oBAAoB,GAAG;QACtF,QAAQ,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE;QAC7B,EAAE;KACH,CAAC;IAEF,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QACtC,KAAK,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,KAAK,MAAM,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;QACjE,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACnC,KAAK,CAAC,IAAI,CAAC,MAAM,cAAc,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,KAAK,CAAC,KAAK,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YACnF,IAAI,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;gBACxB,KAAK,CAAC,IAAI,CAAC,cAAc,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;YAChD,CAAC;QACH,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;AACpC,CAAC;AAED,SAAS,YAAY,CAAC,KAAkB;IACtC,OAAO,KAAK,CAAC,MAAM,KAAK,MAAM,IAAI,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;AAC/D,CAAC"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { type CommandRunner, type ProviderStatus } from "../onboarding/provider-status.js";
|
|
2
|
+
export declare const DOCTOR_REPORT_SCHEMA_VERSION = 1;
|
|
3
|
+
export type DoctorCheckStatus = "pass" | "warn" | "fail" | "skip" | "unknown";
|
|
4
|
+
export type DoctorCapabilityImpact = "core" | "optional";
|
|
5
|
+
export type DoctorOverallStatus = "ready" | "degraded" | "blocked";
|
|
6
|
+
export interface DoctorCheck {
|
|
7
|
+
readonly id: string;
|
|
8
|
+
readonly label: string;
|
|
9
|
+
readonly status: DoctorCheckStatus;
|
|
10
|
+
readonly capability: DoctorCapabilityImpact;
|
|
11
|
+
readonly summary: string;
|
|
12
|
+
readonly remediation?: string;
|
|
13
|
+
readonly metadata?: Record<string, unknown>;
|
|
14
|
+
}
|
|
15
|
+
export interface DoctorSection {
|
|
16
|
+
readonly id: string;
|
|
17
|
+
readonly label: string;
|
|
18
|
+
readonly status: DoctorOverallStatus;
|
|
19
|
+
readonly checks: DoctorCheck[];
|
|
20
|
+
}
|
|
21
|
+
export interface DoctorModelSetupState {
|
|
22
|
+
readonly requirement: "ready" | "select_model" | "connect_auth" | "unknown";
|
|
23
|
+
readonly currentModel?: string;
|
|
24
|
+
readonly availableModels?: readonly {
|
|
25
|
+
provider: string;
|
|
26
|
+
id: string;
|
|
27
|
+
label?: string;
|
|
28
|
+
}[];
|
|
29
|
+
}
|
|
30
|
+
export interface DoctorGuiStatusInput {
|
|
31
|
+
readonly host: string;
|
|
32
|
+
readonly port: number;
|
|
33
|
+
readonly role?: string;
|
|
34
|
+
readonly reachable?: boolean;
|
|
35
|
+
readonly healthEndpoint?: string;
|
|
36
|
+
}
|
|
37
|
+
export interface BuildDoctorReportOptions {
|
|
38
|
+
readonly cwd?: string;
|
|
39
|
+
readonly agentDir?: string;
|
|
40
|
+
readonly now?: Date;
|
|
41
|
+
readonly includeSessions?: boolean;
|
|
42
|
+
readonly includeGui?: boolean;
|
|
43
|
+
readonly gui?: DoctorGuiStatusInput;
|
|
44
|
+
readonly modelSetup?: DoctorModelSetupState;
|
|
45
|
+
readonly commandRunner?: CommandRunner;
|
|
46
|
+
readonly fetchImpl?: typeof fetch;
|
|
47
|
+
readonly providerStatuses?: readonly ProviderStatus[];
|
|
48
|
+
}
|
|
49
|
+
export interface DoctorReport {
|
|
50
|
+
readonly schemaVersion: number;
|
|
51
|
+
readonly generatedAt: string;
|
|
52
|
+
readonly status: DoctorOverallStatus;
|
|
53
|
+
readonly summary: string;
|
|
54
|
+
readonly sections: DoctorSection[];
|
|
55
|
+
readonly metadata: {
|
|
56
|
+
readonly cwd: string;
|
|
57
|
+
readonly agentDir?: string;
|
|
58
|
+
readonly opencandleHome: string;
|
|
59
|
+
readonly opencandleHomeSource: "default" | "env";
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
export declare function buildDoctorReport(options?: BuildDoctorReportOptions): Promise<DoctorReport>;
|
|
63
|
+
export declare function deriveDoctorStatus(checks: readonly DoctorCheck[]): DoctorOverallStatus;
|