@oneuptime/common 11.5.8 → 11.5.9
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/Models/DatabaseModels/AIAgentTaskPullRequest.ts +15 -6
- package/Models/DatabaseModels/AIRun.ts +37 -0
- package/Models/DatabaseModels/AIRunEvent.ts +34 -1
- package/Models/DatabaseModels/NetworkDeviceDiscoveryScan.ts +215 -0
- package/Models/DatabaseModels/Project.ts +25 -0
- package/Models/DatabaseModels/StatusPage.ts +42 -0
- package/Server/API/AIAgentTaskAPI.ts +38 -12
- package/Server/API/AIAgentTaskLogAPI.ts +49 -0
- package/Server/API/AIChatAPI.ts +16 -0
- package/Server/API/AIReadinessAPI.ts +84 -0
- package/Server/API/CodeFixRunAPI.ts +182 -0
- package/Server/API/TelemetryExceptionAPI.ts +6 -1
- package/Server/Infrastructure/Postgres/SchemaMigrations/1784124919694-AddAITaskNumberAndRunTranscript.ts +95 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1784135099754-AllowNullAiAgentOnPullRequest.ts +52 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1784137457184-AddEnableMcpServerToStatusPage.ts +30 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1784200000000-AddSnmpV3ColumnsToNetworkDeviceDiscoveryScan.ts +49 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +8 -0
- package/Server/Services/AIRunEventService.ts +15 -1
- package/Server/Services/AIRunService.ts +38 -1
- package/Server/Services/LlmProviderService.ts +2 -0
- package/Server/Services/ProjectService.ts +42 -0
- package/Server/Services/StatusPageService.ts +87 -0
- package/Server/Services/TelemetryExceptionService.ts +19 -90
- package/Server/Types/Markdown.ts +9 -9
- package/Server/Types/MarkdownSlugify.ts +47 -0
- package/Server/Utils/AI/AIRunTranscript.ts +240 -0
- package/Server/Utils/AI/Chat/ChatAgentRunner.ts +9 -0
- package/Server/Utils/AI/Chat/ObservabilityChatPrompt.ts +119 -5
- package/Server/Utils/AI/CodeFix/CodeFixAgentCompletion.ts +75 -0
- package/Server/Utils/AI/CodeFix/CodeFixReadiness.ts +235 -0
- package/Server/Utils/AI/SRE/Insights/FixRouting.ts +2 -3
- package/Server/Utils/AI/Toolbox/CodeTools.ts +883 -0
- package/Server/Utils/AI/Toolbox/CodeWriteTools.ts +519 -0
- package/Server/Utils/AI/Toolbox/Index.ts +27 -0
- package/Server/Utils/AI/Toolbox/ScheduledMaintenanceTools.ts +279 -0
- package/Server/Utils/AnalyticsDatabase/ClickhouseCapacity.ts +19 -1
- package/Server/Utils/CodeRepository/GitHub/GitHub.ts +600 -0
- package/Server/Utils/CodeRepository/StackTraceRepoResolver.ts +7 -2
- package/Server/Utils/LLM/LLMService.ts +397 -18
- package/Server/Utils/Monitor/NetworkDeviceHydrationUtil.ts +4 -11
- package/Tests/Models/StatusPageEnableMcpServer.test.ts +125 -0
- package/Tests/Server/Services/StatusPageServiceMcp.test.ts +223 -0
- package/Tests/Server/Services/TelemetryExceptionAIFixReadiness.test.ts +26 -3
- package/Tests/Server/Services/TelemetryExceptionCodeFixRun.test.ts +12 -0
- package/Tests/Server/Types/Markdown.test.ts +106 -0
- package/Tests/Server/Utils/AI/AIRunTranscript.test.ts +182 -0
- package/Tests/Server/Utils/AI/CodeFixReadiness.test.ts +411 -0
- package/Tests/Server/Utils/AI/CodeTools.test.ts +596 -0
- package/Tests/Server/Utils/AI/CodeWriteTools.test.ts +475 -0
- package/Tests/Server/Utils/AI/LLMServiceModelCompatibility.test.ts +548 -0
- package/Tests/Server/Utils/AI/ObservabilityChatPrompt.test.ts +142 -0
- package/Tests/Server/Utils/AI/ScheduledMaintenanceTools.test.ts +176 -0
- package/Tests/Server/Utils/AnalyticsDatabase/ClickhouseCapacity.test.ts +63 -0
- package/Tests/Server/Utils/GitHubGetFileContent.test.ts +197 -0
- package/Tests/Server/Utils/Monitor/NetworkDeviceHydrationUtil.test.ts +502 -0
- package/Tests/Types/AI/AIAgentTaskStatus.test.ts +7 -6
- package/Tests/Types/AI/AIChatPageContext.test.ts +0 -0
- package/Tests/Types/AI/AIRunStatus.test.ts +42 -0
- package/Tests/Types/Log/LogSeverity.test.ts +78 -0
- package/Tests/UI/Components/BasicFormDropdownNormalization.test.tsx +167 -0
- package/Tests/UI/Components/Charts/AxisTickColor.test.tsx +66 -0
- package/Tests/UI/Utils/AIChatExport/ChatWidgetData.test.ts +319 -0
- package/Tests/UI/Utils/AIChatExport/ChatWidgetMarkdown.test.ts +188 -0
- package/Types/AI/AIAgentTaskStatus.ts +13 -0
- package/Types/AI/AIChatPageContext.ts +137 -0
- package/Types/AI/AIChatTypes.ts +44 -0
- package/Types/AI/AIFixReadiness.ts +46 -0
- package/Types/AI/AIRunStatus.ts +11 -0
- package/Types/Log/LogSeverity.ts +61 -0
- package/Types/Monitor/SnmpMonitor/SnmpVersion.ts +40 -0
- package/UI/Components/Charts/ChartLibrary/AreaChart/AreaChart.tsx +8 -2
- package/UI/Components/Charts/ChartLibrary/BarChart/BarChart.tsx +3 -1
- package/UI/Components/Charts/ChartLibrary/LineChart/LineChart.tsx +8 -2
- package/UI/Components/Forms/BasicForm.tsx +26 -8
- package/UI/Styles/Theme.css +1314 -0
- package/UI/Utils/AIChatExport/ChatWidgetData.ts +316 -0
- package/UI/Utils/AIChatExport/ChatWidgetMarkdown.ts +349 -0
- package/UI/Utils/AIChatExport/ConversationMarkdown.ts +177 -0
- package/UI/Utils/AIChatExport/MarkdownBlocks.ts +327 -0
- package/UI/Utils/AIChatExport/MarkdownSafety.ts +215 -0
- package/UI/Utils/DownloadFile.ts +54 -0
- package/build/dist/Models/DatabaseModels/AIAgentTaskPullRequest.js +15 -7
- package/build/dist/Models/DatabaseModels/AIAgentTaskPullRequest.js.map +1 -1
- package/build/dist/Models/DatabaseModels/AIRun.js +38 -0
- package/build/dist/Models/DatabaseModels/AIRun.js.map +1 -1
- package/build/dist/Models/DatabaseModels/AIRunEvent.js +31 -0
- package/build/dist/Models/DatabaseModels/AIRunEvent.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkDeviceDiscoveryScan.js +225 -0
- package/build/dist/Models/DatabaseModels/NetworkDeviceDiscoveryScan.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Project.js +27 -0
- package/build/dist/Models/DatabaseModels/Project.js.map +1 -1
- package/build/dist/Models/DatabaseModels/StatusPage.js +43 -0
- package/build/dist/Models/DatabaseModels/StatusPage.js.map +1 -1
- package/build/dist/Server/API/AIAgentTaskAPI.js +37 -11
- package/build/dist/Server/API/AIAgentTaskAPI.js.map +1 -1
- package/build/dist/Server/API/AIAgentTaskLogAPI.js +32 -7
- package/build/dist/Server/API/AIAgentTaskLogAPI.js.map +1 -1
- package/build/dist/Server/API/AIChatAPI.js +9 -0
- package/build/dist/Server/API/AIChatAPI.js.map +1 -1
- package/build/dist/Server/API/AIReadinessAPI.js +57 -0
- package/build/dist/Server/API/AIReadinessAPI.js.map +1 -0
- package/build/dist/Server/API/CodeFixRunAPI.js +142 -0
- package/build/dist/Server/API/CodeFixRunAPI.js.map +1 -1
- package/build/dist/Server/API/TelemetryExceptionAPI.js +4 -0
- package/build/dist/Server/API/TelemetryExceptionAPI.js.map +1 -1
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784124919694-AddAITaskNumberAndRunTranscript.js +80 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784124919694-AddAITaskNumberAndRunTranscript.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784135099754-AllowNullAiAgentOnPullRequest.js +37 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784135099754-AllowNullAiAgentOnPullRequest.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784137457184-AddEnableMcpServerToStatusPage.js +23 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784137457184-AddEnableMcpServerToStatusPage.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784200000000-AddSnmpV3ColumnsToNetworkDeviceDiscoveryScan.js +22 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784200000000-AddSnmpV3ColumnsToNetworkDeviceDiscoveryScan.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +8 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
- package/build/dist/Server/Services/AIRunEventService.js +8 -0
- package/build/dist/Server/Services/AIRunEventService.js.map +1 -1
- package/build/dist/Server/Services/AIRunService.js +29 -0
- package/build/dist/Server/Services/AIRunService.js.map +1 -1
- package/build/dist/Server/Services/LlmProviderService.js +2 -0
- package/build/dist/Server/Services/LlmProviderService.js.map +1 -1
- package/build/dist/Server/Services/ProjectService.js +39 -0
- package/build/dist/Server/Services/ProjectService.js.map +1 -1
- package/build/dist/Server/Services/StatusPageService.js +81 -0
- package/build/dist/Server/Services/StatusPageService.js.map +1 -1
- package/build/dist/Server/Services/TelemetryExceptionService.js +14 -61
- package/build/dist/Server/Services/TelemetryExceptionService.js.map +1 -1
- package/build/dist/Server/Types/Markdown.js +8 -8
- package/build/dist/Server/Types/Markdown.js.map +1 -1
- package/build/dist/Server/Types/MarkdownSlugify.js +47 -0
- package/build/dist/Server/Types/MarkdownSlugify.js.map +1 -0
- package/build/dist/Server/Utils/AI/AIRunTranscript.js +180 -0
- package/build/dist/Server/Utils/AI/AIRunTranscript.js.map +1 -0
- package/build/dist/Server/Utils/AI/Chat/ChatAgentRunner.js +1 -0
- package/build/dist/Server/Utils/AI/Chat/ChatAgentRunner.js.map +1 -1
- package/build/dist/Server/Utils/AI/Chat/ObservabilityChatPrompt.js +103 -5
- package/build/dist/Server/Utils/AI/Chat/ObservabilityChatPrompt.js.map +1 -1
- package/build/dist/Server/Utils/AI/CodeFix/CodeFixAgentCompletion.js +55 -0
- package/build/dist/Server/Utils/AI/CodeFix/CodeFixAgentCompletion.js.map +1 -1
- package/build/dist/Server/Utils/AI/CodeFix/CodeFixReadiness.js +211 -0
- package/build/dist/Server/Utils/AI/CodeFix/CodeFixReadiness.js.map +1 -0
- package/build/dist/Server/Utils/AI/SRE/Insights/FixRouting.js.map +1 -1
- package/build/dist/Server/Utils/AI/Toolbox/CodeTools.js +654 -0
- package/build/dist/Server/Utils/AI/Toolbox/CodeTools.js.map +1 -0
- package/build/dist/Server/Utils/AI/Toolbox/CodeWriteTools.js +389 -0
- package/build/dist/Server/Utils/AI/Toolbox/CodeWriteTools.js.map +1 -0
- package/build/dist/Server/Utils/AI/Toolbox/Index.js +19 -0
- package/build/dist/Server/Utils/AI/Toolbox/Index.js.map +1 -1
- package/build/dist/Server/Utils/AI/Toolbox/ScheduledMaintenanceTools.js +239 -0
- package/build/dist/Server/Utils/AI/Toolbox/ScheduledMaintenanceTools.js.map +1 -0
- package/build/dist/Server/Utils/AnalyticsDatabase/ClickhouseCapacity.js +19 -1
- package/build/dist/Server/Utils/AnalyticsDatabase/ClickhouseCapacity.js.map +1 -1
- package/build/dist/Server/Utils/CodeRepository/GitHub/GitHub.js +439 -0
- package/build/dist/Server/Utils/CodeRepository/GitHub/GitHub.js.map +1 -1
- package/build/dist/Server/Utils/CodeRepository/StackTraceRepoResolver.js +1 -1
- package/build/dist/Server/Utils/CodeRepository/StackTraceRepoResolver.js.map +1 -1
- package/build/dist/Server/Utils/LLM/LLMService.js +275 -19
- package/build/dist/Server/Utils/LLM/LLMService.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/NetworkDeviceHydrationUtil.js +2 -11
- package/build/dist/Server/Utils/Monitor/NetworkDeviceHydrationUtil.js.map +1 -1
- package/build/dist/Types/AI/AIAgentTaskStatus.js +12 -0
- package/build/dist/Types/AI/AIAgentTaskStatus.js.map +1 -1
- package/build/dist/Types/AI/AIChatPageContext.js +101 -0
- package/build/dist/Types/AI/AIChatPageContext.js.map +1 -0
- package/build/dist/Types/AI/AIChatTypes.js +2 -0
- package/build/dist/Types/AI/AIChatTypes.js.map +1 -1
- package/build/dist/Types/AI/AIFixReadiness.js +9 -0
- package/build/dist/Types/AI/AIFixReadiness.js.map +1 -0
- package/build/dist/Types/AI/AIRunStatus.js +11 -0
- package/build/dist/Types/AI/AIRunStatus.js.map +1 -1
- package/build/dist/Types/Log/LogSeverity.js +56 -0
- package/build/dist/Types/Log/LogSeverity.js.map +1 -1
- package/build/dist/Types/Monitor/SnmpMonitor/SnmpVersion.js +38 -0
- package/build/dist/Types/Monitor/SnmpMonitor/SnmpVersion.js.map +1 -1
- package/build/dist/UI/Components/Charts/ChartLibrary/AreaChart/AreaChart.js +9 -2
- package/build/dist/UI/Components/Charts/ChartLibrary/AreaChart/AreaChart.js.map +1 -1
- package/build/dist/UI/Components/Charts/ChartLibrary/BarChart/BarChart.js +3 -1
- package/build/dist/UI/Components/Charts/ChartLibrary/BarChart/BarChart.js.map +1 -1
- package/build/dist/UI/Components/Charts/ChartLibrary/LineChart/LineChart.js +9 -2
- package/build/dist/UI/Components/Charts/ChartLibrary/LineChart/LineChart.js.map +1 -1
- package/build/dist/UI/Components/Forms/BasicForm.js +24 -6
- package/build/dist/UI/Components/Forms/BasicForm.js.map +1 -1
- package/build/dist/UI/Utils/AIChatExport/ChatWidgetData.js +217 -0
- package/build/dist/UI/Utils/AIChatExport/ChatWidgetData.js.map +1 -0
- package/build/dist/UI/Utils/AIChatExport/ChatWidgetMarkdown.js +234 -0
- package/build/dist/UI/Utils/AIChatExport/ChatWidgetMarkdown.js.map +1 -0
- package/build/dist/UI/Utils/AIChatExport/ConversationMarkdown.js +111 -0
- package/build/dist/UI/Utils/AIChatExport/ConversationMarkdown.js.map +1 -0
- package/build/dist/UI/Utils/AIChatExport/MarkdownBlocks.js +233 -0
- package/build/dist/UI/Utils/AIChatExport/MarkdownBlocks.js.map +1 -0
- package/build/dist/UI/Utils/AIChatExport/MarkdownSafety.js +134 -0
- package/build/dist/UI/Utils/AIChatExport/MarkdownSafety.js.map +1 -0
- package/build/dist/UI/Utils/DownloadFile.js +41 -0
- package/build/dist/UI/Utils/DownloadFile.js.map +1 -0
- package/package.json +5 -1
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
|
+
};
|
|
10
|
+
import AIAgentService from "../../../Services/AIAgentService";
|
|
11
|
+
import AIService from "../../../Services/AIService";
|
|
12
|
+
import LlmProviderService from "../../../Services/LlmProviderService";
|
|
13
|
+
import ProjectService from "../../../Services/ProjectService";
|
|
14
|
+
import SubjectCodeFixRun from "../SRE/SubjectCodeFixRun";
|
|
15
|
+
import { IsBillingEnabled } from "../../../EnvironmentConfig";
|
|
16
|
+
import CaptureSpan from "../../Telemetry/CaptureSpan";
|
|
17
|
+
/*
|
|
18
|
+
* The gates every CodeFix run passes through, in one place. Two surfaces ask
|
|
19
|
+
* the question — the per-exception panel and the project-wide AI Tasks page —
|
|
20
|
+
* and they differ only in how strict their repository gate is (see
|
|
21
|
+
* AIFixReadinessCheckId). Sharing the LLM and agent checks is what keeps the
|
|
22
|
+
* two from drifting into telling the user different stories.
|
|
23
|
+
*/
|
|
24
|
+
export default class CodeFixReadiness {
|
|
25
|
+
/*
|
|
26
|
+
* An LLM provider the agent may use. Agent completions are server-mediated
|
|
27
|
+
* and metered, so the shared global provider is a valid fallback on cloud
|
|
28
|
+
* too — a project-owned provider simply wins when one exists. A project
|
|
29
|
+
* LLM provider is therefore NOT a prerequisite.
|
|
30
|
+
*
|
|
31
|
+
* The ok-state detail names the resolved provider and its scope: a user
|
|
32
|
+
* running on the shared provider should be able to see that that is what
|
|
33
|
+
* is happening without going to Settings.
|
|
34
|
+
*/
|
|
35
|
+
static async getLlmProviderCheck(params) {
|
|
36
|
+
var _a, _b;
|
|
37
|
+
const llmProvider = await LlmProviderService.getLlmProviderForMeteredAgentPath(params.projectId);
|
|
38
|
+
if (!llmProvider) {
|
|
39
|
+
return {
|
|
40
|
+
id: "llmProvider",
|
|
41
|
+
ok: false,
|
|
42
|
+
title: "LLM provider",
|
|
43
|
+
detail: "AI fix tasks need an LLM provider. Add one in Project Settings > AI > LLM Providers. Self-hosted instances can alternatively set the GLOBAL_LLM_PROVIDER_* environment variables to register a global provider for every project.",
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
const providerName = llmProvider.name || "LLM provider";
|
|
47
|
+
const isGlobal = llmProvider.isGlobalLlm || false;
|
|
48
|
+
const isCosted = (llmProvider.costPerMillionTokensInUSDCents || 0) > 0;
|
|
49
|
+
const billingEnabled = (_a = params.billingEnabled) !== null && _a !== void 0 ? _a : IsBillingEnabled;
|
|
50
|
+
/*
|
|
51
|
+
* A resolved provider must also be PAYABLE, or the run passes readiness
|
|
52
|
+
* here and dies at its first completion call instead. Mirrors the
|
|
53
|
+
* billing gate in AIService.executeWithLogging: only a COSTED global
|
|
54
|
+
* provider on cloud bills the project's AI balance per call —
|
|
55
|
+
* project-owned and free-global providers consume no balance and must
|
|
56
|
+
* not require one.
|
|
57
|
+
*/
|
|
58
|
+
const isMetered = isGlobal && isCosted && billingEnabled;
|
|
59
|
+
if (isMetered) {
|
|
60
|
+
const project = await ProjectService.findOneById({
|
|
61
|
+
id: params.projectId,
|
|
62
|
+
select: { aiCurrentBalanceInUSDCents: true },
|
|
63
|
+
props: { isRoot: true },
|
|
64
|
+
});
|
|
65
|
+
if (!project || (project.aiCurrentBalanceInUSDCents || 0) <= 0) {
|
|
66
|
+
return {
|
|
67
|
+
id: "llmProvider",
|
|
68
|
+
ok: false,
|
|
69
|
+
title: "LLM provider",
|
|
70
|
+
detail: "AI fix tasks would use the OneUptime-hosted LLM provider, which is billed against your AI balance — and the project's balance is empty. Recharge it in Project Settings > AI Credits, or add your own LLM provider in Project Settings > AI > LLM Providers.",
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
/*
|
|
75
|
+
* The project must also be ALLOWED to spend, not just able to pay.
|
|
76
|
+
* executeWithLogging enforces two gates back to back: the balance check
|
|
77
|
+
* above, and the daily autonomous token budget — and AI_CODE_FIX_FEATURE
|
|
78
|
+
* is one of AUTONOMOUS_AI_FEATURES, so every fix completion goes through
|
|
79
|
+
* it. Unlike the balance, this one has no billing condition: it fires on
|
|
80
|
+
* self-hosted too, where a project-owned provider makes the balance gate
|
|
81
|
+
* moot and this becomes the ONLY thing that can kill a run.
|
|
82
|
+
*
|
|
83
|
+
* A limit of 0 is a documented kill-switch ("pause AI entirely"), i.e.
|
|
84
|
+
* durable config — so without this a paused project would read "ready"
|
|
85
|
+
* forever while every run died at its first completion call.
|
|
86
|
+
*/
|
|
87
|
+
const budget = await AIService.getAutonomousDailyBudgetStatus(params.projectId);
|
|
88
|
+
if (budget.exhausted) {
|
|
89
|
+
return {
|
|
90
|
+
id: "llmProvider",
|
|
91
|
+
ok: false,
|
|
92
|
+
title: "LLM provider",
|
|
93
|
+
detail: budget.limitInTokens !== null && budget.limitInTokens <= 0
|
|
94
|
+
? "AI is paused for this project: the daily autonomous AI token limit is set to 0. Raise or unset it in the AI settings pages to let fix tasks run."
|
|
95
|
+
: `The daily autonomous AI token budget is exhausted (${budget.usedTokensToday.toLocaleString()} of ${(_b = budget.limitInTokens) === null || _b === void 0 ? void 0 : _b.toLocaleString()} tokens used today). Fix tasks resume tomorrow (UTC) — raise or unset the limit in the AI settings pages.`,
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
let detail = "";
|
|
99
|
+
if (!isGlobal) {
|
|
100
|
+
detail = `Using "${providerName}", this project's own provider. Tasks run on your API key and consume no AI credits.`;
|
|
101
|
+
}
|
|
102
|
+
else if (isMetered) {
|
|
103
|
+
detail = `Using "${providerName}", the shared provider. Tasks are billed against this project's AI balance. Add your own provider in Settings to use your API key instead.`;
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
detail = `Using "${providerName}", a shared provider available to every project on this instance. No project provider is needed.`;
|
|
107
|
+
}
|
|
108
|
+
return {
|
|
109
|
+
id: "llmProvider",
|
|
110
|
+
ok: true,
|
|
111
|
+
title: `LLM provider: ${providerName}`,
|
|
112
|
+
detail,
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
/*
|
|
116
|
+
* The project-wide repository gate: at least one GitHub-App-connected
|
|
117
|
+
* repository exists. This is the WEAKER claim — it deliberately says
|
|
118
|
+
* nothing about whether a given exception's stack trace will match one.
|
|
119
|
+
* Only GitHub is supported: the agent's clone/push path rejects every
|
|
120
|
+
* other host (see AIAgentDataAPI's repositoryHostedAt guard).
|
|
121
|
+
*/
|
|
122
|
+
static async getRepositoryConnectedCheck(params) {
|
|
123
|
+
const hasRepository = await SubjectCodeFixRun.hasGitHubAppConnectedRepository(params.projectId);
|
|
124
|
+
return {
|
|
125
|
+
id: "repositoryConnected",
|
|
126
|
+
ok: hasRepository,
|
|
127
|
+
title: "GitHub repository",
|
|
128
|
+
detail: hasRepository
|
|
129
|
+
? "Connected through the GitHub App. The agent opens its fix pull requests here."
|
|
130
|
+
: "AI opens its fixes as pull requests, so it needs a repository to push to. Connect one through the GitHub App — installing it imports all of its repositories automatically.",
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
// An agent must be alive to pick the task up, or runs sit Queued forever.
|
|
134
|
+
static async getAgentCheck(params) {
|
|
135
|
+
const anyAgent = await AIAgentService.getAIAgentForProject(params.projectId);
|
|
136
|
+
const isAlive = anyAgent
|
|
137
|
+
? AIAgentService.isAgentAlive(anyAgent)
|
|
138
|
+
: false;
|
|
139
|
+
if (isAlive) {
|
|
140
|
+
return {
|
|
141
|
+
id: "agentAvailable",
|
|
142
|
+
ok: true,
|
|
143
|
+
title: `AI agent online: ${(anyAgent === null || anyAgent === void 0 ? void 0 : anyAgent.name) || "agent"}`,
|
|
144
|
+
detail: "Connected and polling for tasks.",
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
return {
|
|
148
|
+
id: "agentAvailable",
|
|
149
|
+
ok: false,
|
|
150
|
+
title: "AI agent online",
|
|
151
|
+
detail: anyAgent
|
|
152
|
+
? `The AI agent "${anyAgent.name || "agent"}" has not reported in — check that its container is running.`
|
|
153
|
+
: "No AI agent is available for this project. Self-hosted: create an agent under Settings > AI > AI Agents and run its container. Cloud: the shared fleet appears here automatically once enabled.",
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
/*
|
|
157
|
+
* Project-wide readiness for the AI Tasks page. Same LLM and agent gates
|
|
158
|
+
* the per-exception check uses, with the any-repository gate in place of
|
|
159
|
+
* per-exception stack-trace resolution.
|
|
160
|
+
*/
|
|
161
|
+
static async getProjectReadiness(params) {
|
|
162
|
+
const [repositoryCheck, llmCheck, agentCheck] = await Promise.all([
|
|
163
|
+
this.getRepositoryConnectedCheck({ projectId: params.projectId }),
|
|
164
|
+
this.getLlmProviderCheck({
|
|
165
|
+
projectId: params.projectId,
|
|
166
|
+
billingEnabled: params.billingEnabled,
|
|
167
|
+
}),
|
|
168
|
+
this.getAgentCheck({ projectId: params.projectId }),
|
|
169
|
+
]);
|
|
170
|
+
/*
|
|
171
|
+
* Ordered the way the user sets them up: connect a repo, point it at a
|
|
172
|
+
* model, run the agent.
|
|
173
|
+
*/
|
|
174
|
+
const checks = [
|
|
175
|
+
repositoryCheck,
|
|
176
|
+
llmCheck,
|
|
177
|
+
agentCheck,
|
|
178
|
+
];
|
|
179
|
+
return {
|
|
180
|
+
ready: checks.every((check) => {
|
|
181
|
+
return check.ok;
|
|
182
|
+
}),
|
|
183
|
+
checks,
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
__decorate([
|
|
188
|
+
CaptureSpan(),
|
|
189
|
+
__metadata("design:type", Function),
|
|
190
|
+
__metadata("design:paramtypes", [Object]),
|
|
191
|
+
__metadata("design:returntype", Promise)
|
|
192
|
+
], CodeFixReadiness, "getLlmProviderCheck", null);
|
|
193
|
+
__decorate([
|
|
194
|
+
CaptureSpan(),
|
|
195
|
+
__metadata("design:type", Function),
|
|
196
|
+
__metadata("design:paramtypes", [Object]),
|
|
197
|
+
__metadata("design:returntype", Promise)
|
|
198
|
+
], CodeFixReadiness, "getRepositoryConnectedCheck", null);
|
|
199
|
+
__decorate([
|
|
200
|
+
CaptureSpan(),
|
|
201
|
+
__metadata("design:type", Function),
|
|
202
|
+
__metadata("design:paramtypes", [Object]),
|
|
203
|
+
__metadata("design:returntype", Promise)
|
|
204
|
+
], CodeFixReadiness, "getAgentCheck", null);
|
|
205
|
+
__decorate([
|
|
206
|
+
CaptureSpan(),
|
|
207
|
+
__metadata("design:type", Function),
|
|
208
|
+
__metadata("design:paramtypes", [Object]),
|
|
209
|
+
__metadata("design:returntype", Promise)
|
|
210
|
+
], CodeFixReadiness, "getProjectReadiness", null);
|
|
211
|
+
//# sourceMappingURL=CodeFixReadiness.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CodeFixReadiness.js","sourceRoot":"","sources":["../../../../../../Server/Utils/AI/CodeFix/CodeFixReadiness.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FixRouting.js","sourceRoot":"","sources":["../../../../../../../Server/Utils/AI/SRE/Insights/FixRouting.ts"],"names":[],"mappings":";;;;;;;;;AACA,OAAO,aAAa,MAAM,uCAAuC,CAAC;AAClE,OAAO,eAAe,MAAM,yCAAyC,CAAC;AAQtE,OAAO,YAAY,MAAM,mCAAmC,CAAC;AAC7D,OAAO,
|
|
1
|
+
{"version":3,"file":"FixRouting.js","sourceRoot":"","sources":["../../../../../../../Server/Utils/AI/SRE/Insights/FixRouting.ts"],"names":[],"mappings":"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"}
|