Finish budget removal punch-list: pages, dispatch, intent (Sam & Hermes)

- controlplane-pages.ts: remove AGENT_BUDGET_* import, budgetPolicyState(),
  buildBudgetCard(), budget param from renderTenantHome
- channels/telegram.ts: remove dead dispatch entries (resume, policy,
  budget, budgetreport, usage, budgetreset, rescue) + intent branch
- report-intent.ts: remove BUDGET_PATTERNS, 'budget' ReportIntent
This commit is contained in:
123kupola 2026-05-27 01:19:33 +02:00
parent 47b09b91f2
commit 9286324830
3 changed files with 4 additions and 40 deletions

View file

@ -362,22 +362,10 @@ export class TelegramChannel implements Channel {
if (!chatJid) return;
await handleCompactCommand(ctx, chatJid);
},
resume: async (ctx, chatJid) => {
if (!chatJid) return;
await handleResumeCommand(ctx, chatJid);
},
policy: async (ctx, chatJid) => {
if (!chatJid) return;
await handlePolicyCommand(ctx, chatJid);
},
brain: async (ctx, chatJid) => {
if (!chatJid) return;
await handleBrainCommand(ctx, chatJid);
},
budget: async (ctx, chatJid) => {
if (!chatJid) return;
await handleBudgetCommand(ctx, chatJid);
},
audit: async (ctx, chatJid) => {
if (!chatJid) return;
await handleAuditCommand(ctx, chatJid);
@ -402,10 +390,6 @@ export class TelegramChannel implements Channel {
if (!chatJid) return;
await handleTasksCommand(ctx, chatJid);
},
budgetreport: async (ctx, chatJid) => {
if (!chatJid) return;
await handleBudgetReportCommand(ctx, chatJid);
},
testreport: async (ctx, chatJid) => {
if (!chatJid) return;
await handleTestReportCommand(ctx, chatJid);
@ -422,10 +406,6 @@ export class TelegramChannel implements Channel {
if (!chatJid) return;
await handleActivationCommand(ctx, chatJid);
},
usage: async (ctx, chatJid) => {
if (!chatJid) return;
await handleUsageCommand(ctx, chatJid);
},
tokens: async (ctx, chatJid) => {
if (!chatJid) return;
await handleTokensCommand(ctx, chatJid);
@ -438,14 +418,6 @@ export class TelegramChannel implements Channel {
if (!chatJid) return;
await handleRebootCommand(ctx, chatJid);
},
budgetreset: async (ctx, chatJid) => {
if (!chatJid) return;
await handleBudgetResetCommand(ctx, chatJid);
},
rescue: async (ctx, chatJid) => {
if (!chatJid) return;
await handleBudgetResetCommand(ctx, chatJid);
},
clearcooldown: async (ctx, chatJid) => {
if (!chatJid) return;
await handleClearCooldownCommand(ctx, chatJid);
@ -599,7 +571,6 @@ export class TelegramChannel implements Channel {
if (intent === 'disk') await handleDiskCommand(ctx, chatJid);
else if (intent === 'publish')
await handlePublishReportCommand(ctx, chatJid);
else if (intent === 'budget')
await handleBudgetReportCommand(ctx, chatJid);
else if (intent === 'tasks') await handleTasksCommand(ctx, chatJid);
else if (intent === 'tests')
@ -1297,4 +1268,4 @@ registerChannel('telegram', (opts) => {
return null;
}
return new TelegramChannel(TELEGRAM_BOT_TOKEN, opts);
});
});

View file

@ -4,7 +4,6 @@ import {
CMS_WEBROOT,
} from './config.js';
import { getOperatorDashboardUrl } from './controlplane-links.js';
import type { Budget } from './controlplane-db.js';
import { escapeHtml } from './controlplane-api-responses.js';
import { formatDisplayDate } from './display-date.js';
import { platformServiceDomain } from './platform-layout.js';
@ -23,7 +22,6 @@ function formatInteger(value: number): string {
return new Intl.NumberFormat('en-US').format(value);
}
function budgetPolicyState(
budget: Budget,
): 'normal' | 'low_budget' | 'paused' {
const remainingPct =
@ -418,8 +416,7 @@ export function renderControlplaneLoginPage(opts: {
export function renderTenantHome(
registry: ReturnType<typeof loadTenantRegistry>,
tenant: ReturnType<typeof loadTenantRegistry>['tenants'][string],
budget: Budget | null,
): string {
): string {
const controlplaneHost = registry.platform.internalDomain;
const cmsHost = platformServiceDomain('cms', registry.platform.internalBase);
const codeHost = platformServiceDomain('git', registry.platform.internalBase);
@ -428,7 +425,6 @@ export function renderTenantHome(
const disabledSiteCount = tenant.sites.filter((site) => site.exposure === 'disabled').length;
const budgetCard = budget
? (() => {
const state = budgetPolicyState(budget);
const stateClass = state === 'normal' ? 'status' : 'status warn';
const resetAt = formatDisplayDate(budget.reset_at, {
includeTime: true,
@ -436,7 +432,6 @@ export function renderTenantHome(
});
return `
<section class="card">
<h2>LLM Budget</h2>
<p><span class="${stateClass}">${escapeHtml(state)}</span></p>
<p class="metric">Tenant orchestrator budget for the current daily window.</p>
<p><strong>Daily limit:</strong> <code>${escapeHtml(formatInteger(budget.daily_tokens))}</code></p>
@ -447,7 +442,6 @@ export function renderTenantHome(
})()
: `
<section class="card">
<h2>LLM Budget</h2>
<p><span class="status warn">not configured</span></p>
<p>No tenant-scoped orchestrator budget was found for <code>${escapeHtml(tenant.id)}</code> in the controlplane budget table yet.</p>
</section>`;
@ -574,4 +568,4 @@ export function renderTenantSite(
</section>
`,
});
}
}

View file

@ -167,10 +167,9 @@ export function classifyReportIntent(text: string): ReportIntent {
if (matchesAny(stripped, DISK_PATTERNS)) return 'disk';
if (matchesAny(stripped, PUBLISH_PATTERNS)) return 'publish';
if (matchesAny(stripped, BUDGET_PATTERNS)) return 'budget';
if (matchesAny(stripped, TEST_PATTERNS)) return 'tests';
if (matchesAny(stripped, TASK_PATTERNS)) return 'tasks';
if (matchesAny(stripped, STATUS_PATTERNS)) return 'status';
if (matchesAny(stripped, SYSTEM_PATTERNS)) return 'system';
return null;
}
}