@cat-factory/server 0.167.0 → 0.170.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/dist/agents/modelProviderResolver.d.ts +9 -1
- package/dist/agents/modelProviderResolver.d.ts.map +1 -1
- package/dist/agents/modelProviderResolver.js +1 -0
- package/dist/agents/modelProviderResolver.js.map +1 -1
- package/dist/agents/storeAgentContextGate.d.ts +36 -0
- package/dist/agents/storeAgentContextGate.d.ts.map +1 -0
- package/dist/agents/storeAgentContextGate.js +36 -0
- package/dist/agents/storeAgentContextGate.js.map +1 -0
- package/dist/app.d.ts.map +1 -1
- package/dist/app.js +5 -0
- package/dist/app.js.map +1 -1
- package/dist/auth/middleware.d.ts.map +1 -1
- package/dist/auth/middleware.js +2 -1
- package/dist/auth/middleware.js.map +1 -1
- package/dist/http/errorHandler.d.ts.map +1 -1
- package/dist/http/errorHandler.js +6 -0
- package/dist/http/errorHandler.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/modules/accounts/AccountController.d.ts.map +1 -1
- package/dist/modules/accounts/AccountController.js +37 -31
- package/dist/modules/accounts/AccountController.js.map +1 -1
- package/dist/modules/agentRuns/AgentRunController.d.ts.map +1 -1
- package/dist/modules/agentRuns/AgentRunController.js +9 -6
- package/dist/modules/agentRuns/AgentRunController.js.map +1 -1
- package/dist/modules/artifacts/ArtifactController.d.ts.map +1 -1
- package/dist/modules/artifacts/ArtifactController.js +8 -5
- package/dist/modules/artifacts/ArtifactController.js.map +1 -1
- package/dist/modules/artifacts/HarnessArtifactController.d.ts.map +1 -1
- package/dist/modules/artifacts/HarnessArtifactController.js +5 -4
- package/dist/modules/artifacts/HarnessArtifactController.js.map +1 -1
- package/dist/modules/auth/AuthController.d.ts.map +1 -1
- package/dist/modules/auth/AuthController.js +48 -50
- package/dist/modules/auth/AuthController.js.map +1 -1
- package/dist/modules/bootstrap/BootstrapController.d.ts.map +1 -1
- package/dist/modules/bootstrap/BootstrapController.js +12 -9
- package/dist/modules/bootstrap/BootstrapController.js.map +1 -1
- package/dist/modules/brainstorm/BrainstormController.d.ts.map +1 -1
- package/dist/modules/brainstorm/BrainstormController.js +12 -9
- package/dist/modules/brainstorm/BrainstormController.js.map +1 -1
- package/dist/modules/bugHunt/BugHuntController.d.ts.map +1 -1
- package/dist/modules/bugHunt/BugHuntController.js +7 -5
- package/dist/modules/bugHunt/BugHuntController.js.map +1 -1
- package/dist/modules/clarity/ClarityReviewController.d.ts.map +1 -1
- package/dist/modules/clarity/ClarityReviewController.js +12 -9
- package/dist/modules/clarity/ClarityReviewController.js.map +1 -1
- package/dist/modules/docInterview/DocInterviewController.d.ts.map +1 -1
- package/dist/modules/docInterview/DocInterviewController.js +8 -5
- package/dist/modules/docInterview/DocInterviewController.js.map +1 -1
- package/dist/modules/documents/DocumentSourceController.d.ts.map +1 -1
- package/dist/modules/documents/DocumentSourceController.js +17 -15
- package/dist/modules/documents/DocumentSourceController.js.map +1 -1
- package/dist/modules/environments/EnvironmentController.d.ts.map +1 -1
- package/dist/modules/environments/EnvironmentController.js +33 -33
- package/dist/modules/environments/EnvironmentController.js.map +1 -1
- package/dist/modules/environments/EnvironmentUserHandlerController.d.ts.map +1 -1
- package/dist/modules/environments/EnvironmentUserHandlerController.js +13 -9
- package/dist/modules/environments/EnvironmentUserHandlerController.js.map +1 -1
- package/dist/modules/fragmentLibrary/FragmentLibraryController.d.ts.map +1 -1
- package/dist/modules/fragmentLibrary/FragmentLibraryController.js +32 -41
- package/dist/modules/fragmentLibrary/FragmentLibraryController.js.map +1 -1
- package/dist/modules/github/GitHubController.d.ts.map +1 -1
- package/dist/modules/github/GitHubController.js +26 -23
- package/dist/modules/github/GitHubController.js.map +1 -1
- package/dist/modules/github/GitHubWebhookController.d.ts.map +1 -1
- package/dist/modules/github/GitHubWebhookController.js +5 -4
- package/dist/modules/github/GitHubWebhookController.js.map +1 -1
- package/dist/modules/gitlab/GitLabController.d.ts.map +1 -1
- package/dist/modules/gitlab/GitLabController.js +7 -4
- package/dist/modules/gitlab/GitLabController.js.map +1 -1
- package/dist/modules/incidentEnrichment/IncidentEnrichmentController.d.ts.map +1 -1
- package/dist/modules/incidentEnrichment/IncidentEnrichmentController.js +7 -9
- package/dist/modules/incidentEnrichment/IncidentEnrichmentController.js.map +1 -1
- package/dist/modules/initiatives/InitiativeController.d.ts.map +1 -1
- package/dist/modules/initiatives/InitiativeController.js +20 -17
- package/dist/modules/initiatives/InitiativeController.js.map +1 -1
- package/dist/modules/kaizen/KaizenController.d.ts.map +1 -1
- package/dist/modules/kaizen/KaizenController.js +6 -3
- package/dist/modules/kaizen/KaizenController.js.map +1 -1
- package/dist/modules/llmProxy/LlmProxyController.d.ts.map +1 -1
- package/dist/modules/llmProxy/LlmProxyController.js +41 -12
- package/dist/modules/llmProxy/LlmProxyController.js.map +1 -1
- package/dist/modules/localModels/LocalModelEndpointController.d.ts.map +1 -1
- package/dist/modules/localModels/LocalModelEndpointController.js +15 -10
- package/dist/modules/localModels/LocalModelEndpointController.js.map +1 -1
- package/dist/modules/localSettings/LocalSettingsController.d.ts.map +1 -1
- package/dist/modules/localSettings/LocalSettingsController.js +6 -8
- package/dist/modules/localSettings/LocalSettingsController.js.map +1 -1
- package/dist/modules/localSettings/MothershipConnectController.d.ts.map +1 -1
- package/dist/modules/localSettings/MothershipConnectController.js +2 -6
- package/dist/modules/localSettings/MothershipConnectController.js.map +1 -1
- package/dist/modules/merge/MergeTrackRecordController.d.ts.map +1 -1
- package/dist/modules/merge/MergeTrackRecordController.js +6 -3
- package/dist/modules/merge/MergeTrackRecordController.js.map +1 -1
- package/dist/modules/merge/RiskPolicyController.d.ts.map +1 -1
- package/dist/modules/merge/RiskPolicyController.js +9 -6
- package/dist/modules/merge/RiskPolicyController.js.map +1 -1
- package/dist/modules/modelPresets/ModelPresetController.d.ts.map +1 -1
- package/dist/modules/modelPresets/ModelPresetController.js +9 -6
- package/dist/modules/modelPresets/ModelPresetController.js.map +1 -1
- package/dist/modules/notificationWebhook/NotificationWebhookController.d.ts.map +1 -1
- package/dist/modules/notificationWebhook/NotificationWebhookController.js +7 -4
- package/dist/modules/notificationWebhook/NotificationWebhookController.js.map +1 -1
- package/dist/modules/notifications/NotificationController.d.ts.map +1 -1
- package/dist/modules/notifications/NotificationController.js +7 -4
- package/dist/modules/notifications/NotificationController.js.map +1 -1
- package/dist/modules/observability/PlatformObservabilityController.d.ts.map +1 -1
- package/dist/modules/observability/PlatformObservabilityController.js +6 -8
- package/dist/modules/observability/PlatformObservabilityController.js.map +1 -1
- package/dist/modules/openrouter/OpenRouterCatalogController.d.ts.map +1 -1
- package/dist/modules/openrouter/OpenRouterCatalogController.js +13 -8
- package/dist/modules/openrouter/OpenRouterCatalogController.js.map +1 -1
- package/dist/modules/packageRegistries/PackageRegistriesController.d.ts.map +1 -1
- package/dist/modules/packageRegistries/PackageRegistriesController.js +7 -9
- package/dist/modules/packageRegistries/PackageRegistriesController.js.map +1 -1
- package/dist/modules/persistence/GitHubDelegationController.d.ts.map +1 -1
- package/dist/modules/persistence/GitHubDelegationController.js +3 -7
- package/dist/modules/persistence/GitHubDelegationController.js.map +1 -1
- package/dist/modules/preflight/PreflightController.d.ts.map +1 -1
- package/dist/modules/preflight/PreflightController.js +5 -7
- package/dist/modules/preflight/PreflightController.js.map +1 -1
- package/dist/modules/preview/PreviewController.d.ts.map +1 -1
- package/dist/modules/preview/PreviewController.js +7 -9
- package/dist/modules/preview/PreviewController.js.map +1 -1
- package/dist/modules/providers/ApiKeyController.d.ts.map +1 -1
- package/dist/modules/providers/ApiKeyController.js +19 -14
- package/dist/modules/providers/ApiKeyController.js.map +1 -1
- package/dist/modules/providers/PersonalSubscriptionController.d.ts.map +1 -1
- package/dist/modules/providers/PersonalSubscriptionController.js +13 -8
- package/dist/modules/providers/PersonalSubscriptionController.js.map +1 -1
- package/dist/modules/providers/UserSecretController.d.ts.map +1 -1
- package/dist/modules/providers/UserSecretController.js +17 -12
- package/dist/modules/providers/UserSecretController.js.map +1 -1
- package/dist/modules/providers/VendorCredentialController.d.ts.map +1 -1
- package/dist/modules/providers/VendorCredentialController.js +8 -10
- package/dist/modules/providers/VendorCredentialController.js.map +1 -1
- package/dist/modules/provisioningLogs/ProvisioningLogController.d.ts.map +1 -1
- package/dist/modules/provisioningLogs/ProvisioningLogController.js +6 -3
- package/dist/modules/provisioningLogs/ProvisioningLogController.js.map +1 -1
- package/dist/modules/publicApi/PublicApiController.js +4 -4
- package/dist/modules/publicApi/PublicApiController.js.map +1 -1
- package/dist/modules/publicApi/PublicApiKeyController.d.ts.map +1 -1
- package/dist/modules/publicApi/PublicApiKeyController.js +7 -4
- package/dist/modules/publicApi/PublicApiKeyController.js.map +1 -1
- package/dist/modules/publicApi/PublicDebugController.d.ts +4 -0
- package/dist/modules/publicApi/PublicDebugController.d.ts.map +1 -0
- package/dist/modules/publicApi/PublicDebugController.js +241 -0
- package/dist/modules/publicApi/PublicDebugController.js.map +1 -0
- package/dist/modules/recurring/RecurringPipelineController.d.ts.map +1 -1
- package/dist/modules/recurring/RecurringPipelineController.js +10 -7
- package/dist/modules/recurring/RecurringPipelineController.js.map +1 -1
- package/dist/modules/recurring/TrackerSettingsController.d.ts.map +1 -1
- package/dist/modules/recurring/TrackerSettingsController.js +6 -3
- package/dist/modules/recurring/TrackerSettingsController.js.map +1 -1
- package/dist/modules/releaseHealth/ReleaseHealthController.d.ts.map +1 -1
- package/dist/modules/releaseHealth/ReleaseHealthController.js +10 -7
- package/dist/modules/releaseHealth/ReleaseHealthController.js.map +1 -1
- package/dist/modules/reports/ReportsController.d.ts.map +1 -1
- package/dist/modules/reports/ReportsController.js +6 -3
- package/dist/modules/reports/ReportsController.js.map +1 -1
- package/dist/modules/requirements/RequirementReviewController.d.ts.map +1 -1
- package/dist/modules/requirements/RequirementReviewController.js +16 -13
- package/dist/modules/requirements/RequirementReviewController.js.map +1 -1
- package/dist/modules/runners/RunnerPoolController.d.ts.map +1 -1
- package/dist/modules/runners/RunnerPoolController.js +10 -7
- package/dist/modules/runners/RunnerPoolController.js.map +1 -1
- package/dist/modules/sandbox/SandboxController.d.ts.map +1 -1
- package/dist/modules/sandbox/SandboxController.js +17 -14
- package/dist/modules/sandbox/SandboxController.js.map +1 -1
- package/dist/modules/serviceFragmentDefaults/ServiceFragmentDefaultsController.d.ts.map +1 -1
- package/dist/modules/serviceFragmentDefaults/ServiceFragmentDefaultsController.js +6 -3
- package/dist/modules/serviceFragmentDefaults/ServiceFragmentDefaultsController.js.map +1 -1
- package/dist/modules/services/ServiceMountController.d.ts.map +1 -1
- package/dist/modules/services/ServiceMountController.js +9 -6
- package/dist/modules/services/ServiceMountController.js.map +1 -1
- package/dist/modules/settings/WorkspaceSettingsController.d.ts.map +1 -1
- package/dist/modules/settings/WorkspaceSettingsController.js +6 -3
- package/dist/modules/settings/WorkspaceSettingsController.js.map +1 -1
- package/dist/modules/sharedStack/SharedStackController.d.ts.map +1 -1
- package/dist/modules/sharedStack/SharedStackController.js +11 -8
- package/dist/modules/sharedStack/SharedStackController.js.map +1 -1
- package/dist/modules/skillLibrary/SkillLibraryController.d.ts.map +1 -1
- package/dist/modules/skillLibrary/SkillLibraryController.js +19 -19
- package/dist/modules/skillLibrary/SkillLibraryController.js.map +1 -1
- package/dist/modules/slack/SlackController.d.ts.map +1 -1
- package/dist/modules/slack/SlackController.js +16 -13
- package/dist/modules/slack/SlackController.js.map +1 -1
- package/dist/modules/tasks/TaskSourceController.d.ts.map +1 -1
- package/dist/modules/tasks/TaskSourceController.js +26 -24
- package/dist/modules/tasks/TaskSourceController.js.map +1 -1
- package/dist/modules/tasks/TaskWebhookController.d.ts.map +1 -1
- package/dist/modules/tasks/TaskWebhookController.js +4 -4
- package/dist/modules/tasks/TaskWebhookController.js.map +1 -1
- package/dist/modules/testSecrets/TestSecretsController.d.ts.map +1 -1
- package/dist/modules/testSecrets/TestSecretsController.js +7 -9
- package/dist/modules/testSecrets/TestSecretsController.js.map +1 -1
- package/dist/modules/userSettings/UserSettingsController.d.ts.map +1 -1
- package/dist/modules/userSettings/UserSettingsController.js +11 -6
- package/dist/modules/userSettings/UserSettingsController.js.map +1 -1
- package/dist/modules/validation/ValidationConfigController.d.ts.map +1 -1
- package/dist/modules/validation/ValidationConfigController.js +52 -11
- package/dist/modules/validation/ValidationConfigController.js.map +1 -1
- package/dist/modules/vcs/VcsWebhookController.d.ts.map +1 -1
- package/dist/modules/vcs/VcsWebhookController.js +5 -5
- package/dist/modules/vcs/VcsWebhookController.js.map +1 -1
- package/dist/modules/webSearch/WebSearchProxyController.d.ts.map +1 -1
- package/dist/modules/webSearch/WebSearchProxyController.js +3 -3
- package/dist/modules/webSearch/WebSearchProxyController.js.map +1 -1
- package/dist/modules/workspaces/WorkspaceMemberController.d.ts.map +1 -1
- package/dist/modules/workspaces/WorkspaceMemberController.js +9 -6
- package/dist/modules/workspaces/WorkspaceMemberController.js.map +1 -1
- package/dist/persistence/rpc-allowlist.d.ts.map +1 -1
- package/dist/persistence/rpc-allowlist.js +16 -1
- package/dist/persistence/rpc-allowlist.js.map +1 -1
- package/dist/persistence/rpc.d.ts.map +1 -1
- package/dist/persistence/rpc.js +3 -0
- package/dist/persistence/rpc.js.map +1 -1
- package/package.json +8 -8
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
import { getDebugAgentContextContract, getDebugLlmCallContract, getDebugRunContract, listDebugAgentContextContract, listDebugLlmCallsContract, listDebugLogsContract, listDebugRunsContract, listDebugSearchQueriesContract, } from '@cat-factory/contracts';
|
|
2
|
+
import { buildHonoRoute } from '@toad-contracts/hono';
|
|
3
|
+
import { Hono } from 'hono';
|
|
4
|
+
import { authorize } from './publicApiAuth.js';
|
|
5
|
+
import { decodeTimeCursor, encodeCursor } from './publicApiPaging.js';
|
|
6
|
+
// The REMOTE DEBUGGING surface (`/api/v1/debug/*`) — the telemetry + provisioning-log reads an
|
|
7
|
+
// external operator needs to answer "why did this run fail / stall / cost that much". The
|
|
8
|
+
// intended caller is an LLM: everything the SPA's observability drill-down shows was already
|
|
9
|
+
// captured, but only reachable from a browser session, so an agent asked to diagnose a run had
|
|
10
|
+
// nothing to read. The wire shapes and the size discipline behind them are documented on the
|
|
11
|
+
// contracts (`@cat-factory/contracts` `debug-api.ts`); `backend/docs/debug-api.md` is the
|
|
12
|
+
// operator-facing guide.
|
|
13
|
+
//
|
|
14
|
+
// Three rules shape this controller specifically:
|
|
15
|
+
//
|
|
16
|
+
// 1. **`read` scope, deliberately not `admin`.** On this API `admin` also merges pull requests
|
|
17
|
+
// and deletes tasks, so gating a read-only diagnostic surface behind it would mean handing a
|
|
18
|
+
// debugging agent a destructive key — strictly worse than the exposure it was meant to
|
|
19
|
+
// prevent. What model TEXT is retained at all remains governed where it is captured
|
|
20
|
+
// (`LLM_RECORD_PROMPTS` + the per-workspace `storeAgentContext`), not here.
|
|
21
|
+
// 2. **Workspace scope, not the task-surface scope.** Unlike `PublicDecisionController`'s
|
|
22
|
+
// `loadScopedRun` — which narrows to runs this key could already reach through
|
|
23
|
+
// `GET /jobs/:id` / `GET /tasks/:taskId/run` — a run here is in scope if it belongs to the
|
|
24
|
+
// key's workspace. That is wider ON PURPOSE: a service frame's blueprint run and a recurring
|
|
25
|
+
// bug-intake fire are exactly the runs someone asks about, and a debugger that cannot see the
|
|
26
|
+
// run that failed is useless. The key is already workspace-scoped, so nothing outside the
|
|
27
|
+
// caller's own board becomes reachable.
|
|
28
|
+
// 3. **No handler owns a bound.** Every limit, body budget and cursor is validated by the
|
|
29
|
+
// contract schema and applied by the service against SQL; a handler that clamped its own
|
|
30
|
+
// numbers would be a second, drifting copy of the guarantee the contract already makes.
|
|
31
|
+
/** Page sizes when a request passes no `?limit=`. The hard ceiling lives in the query contract. */
|
|
32
|
+
const DEFAULT_RUN_PAGE = 25;
|
|
33
|
+
const DEFAULT_CALL_PAGE = 25;
|
|
34
|
+
const DEFAULT_CONTEXT_PAGE = 25;
|
|
35
|
+
const DEFAULT_SMALL_ROW_PAGE = 50;
|
|
36
|
+
/**
|
|
37
|
+
* The per-body budget a point read uses when the caller names none: the whole stored body, up
|
|
38
|
+
* to the contract's ceiling. A point read is an explicit drill-down into ONE row, so defaulting
|
|
39
|
+
* it to a preview would make the endpoint that exists to return bodies return none.
|
|
40
|
+
*/
|
|
41
|
+
const DEFAULT_POINT_READ_BODY_CHARS = 200_000;
|
|
42
|
+
/** Resolve the debug reader, or the 503 to emit. Absent only on a facade that wired no engine. */
|
|
43
|
+
function requireDebug(c) {
|
|
44
|
+
return c.get('container').runDebug ?? null;
|
|
45
|
+
}
|
|
46
|
+
const unavailable = (c) => c.json({ error: { code: 'unavailable', message: 'Run debugging is not configured' } }, 503);
|
|
47
|
+
const notFound = (c, what) => c.json({ error: { code: 'not_found', message: `No such ${what}` } }, 404);
|
|
48
|
+
/**
|
|
49
|
+
* Decode an opaque wire cursor into a keyset position.
|
|
50
|
+
*
|
|
51
|
+
* A malformed cursor is a 400, NEVER a silent fall back to page 1: a client paging on a
|
|
52
|
+
* corrupted cursor would otherwise re-serve the first page forever with no error to act on —
|
|
53
|
+
* which for an autonomous caller is an infinite loop rather than a visible failure.
|
|
54
|
+
*/
|
|
55
|
+
function readCursor(raw) {
|
|
56
|
+
if (!raw)
|
|
57
|
+
return {};
|
|
58
|
+
const decoded = decodeTimeCursor(raw);
|
|
59
|
+
return decoded ? { cursor: decoded } : { invalid: true };
|
|
60
|
+
}
|
|
61
|
+
const invalidCursor = (c) => c.json({ error: { code: 'invalid_cursor', message: 'Malformed cursor' } }, 400);
|
|
62
|
+
/** Encode a service page's next position back onto the wire (null ⇒ that was the last page). */
|
|
63
|
+
function nextCursorOf(page) {
|
|
64
|
+
return page.nextCursor ? encodeCursor(page.nextCursor.createdAt, page.nextCursor.id) : null;
|
|
65
|
+
}
|
|
66
|
+
export function publicDebugController() {
|
|
67
|
+
const app = new Hono();
|
|
68
|
+
// The entry point for a caller that holds no run id: "which of my runs failed recently".
|
|
69
|
+
buildHonoRoute(app, listDebugRunsContract, async (c) => {
|
|
70
|
+
const gate = await authorize(c, 'read');
|
|
71
|
+
if ('fail' in gate) {
|
|
72
|
+
return c.json({ error: { code: gate.fail.code, message: gate.fail.message } }, gate.fail.status);
|
|
73
|
+
}
|
|
74
|
+
const debug = requireDebug(c);
|
|
75
|
+
if (!debug)
|
|
76
|
+
return unavailable(c);
|
|
77
|
+
const query = c.req.valid('query');
|
|
78
|
+
const cursor = readCursor(query.cursor);
|
|
79
|
+
if ('invalid' in cursor)
|
|
80
|
+
return invalidCursor(c);
|
|
81
|
+
const page = await debug.listRuns(gate.auth.workspaceId, {
|
|
82
|
+
limit: query.limit ?? DEFAULT_RUN_PAGE,
|
|
83
|
+
cursor: cursor.cursor,
|
|
84
|
+
status: query.status,
|
|
85
|
+
since: query.since,
|
|
86
|
+
});
|
|
87
|
+
return c.json({ runs: page.items, nextCursor: nextCursorOf(page) }, 200);
|
|
88
|
+
});
|
|
89
|
+
// The run's diagnostic map — aggregates only, so this is the call a client always makes first.
|
|
90
|
+
buildHonoRoute(app, getDebugRunContract, async (c) => {
|
|
91
|
+
const gate = await authorize(c, 'read');
|
|
92
|
+
if ('fail' in gate) {
|
|
93
|
+
return c.json({ error: { code: gate.fail.code, message: gate.fail.message } }, gate.fail.status);
|
|
94
|
+
}
|
|
95
|
+
const debug = requireDebug(c);
|
|
96
|
+
if (!debug)
|
|
97
|
+
return unavailable(c);
|
|
98
|
+
const workspaceId = gate.auth.workspaceId;
|
|
99
|
+
const execution = await debug.getRun(workspaceId, c.req.valid('param').runId);
|
|
100
|
+
if (!execution)
|
|
101
|
+
return notFound(c, 'run');
|
|
102
|
+
return c.json(await debug.overview(workspaceId, execution), 200);
|
|
103
|
+
});
|
|
104
|
+
// The run's model calls. Bodies only when `bodyChars` asks for them, sliced in SQL.
|
|
105
|
+
buildHonoRoute(app, listDebugLlmCallsContract, async (c) => {
|
|
106
|
+
const gate = await authorize(c, 'read');
|
|
107
|
+
if ('fail' in gate) {
|
|
108
|
+
return c.json({ error: { code: gate.fail.code, message: gate.fail.message } }, gate.fail.status);
|
|
109
|
+
}
|
|
110
|
+
const debug = requireDebug(c);
|
|
111
|
+
if (!debug)
|
|
112
|
+
return unavailable(c);
|
|
113
|
+
const workspaceId = gate.auth.workspaceId;
|
|
114
|
+
const runId = c.req.valid('param').runId;
|
|
115
|
+
const query = c.req.valid('query');
|
|
116
|
+
const cursor = readCursor(query.cursor);
|
|
117
|
+
if ('invalid' in cursor)
|
|
118
|
+
return invalidCursor(c);
|
|
119
|
+
// 404 on an unknown run rather than an empty page: a caller that mistyped a run id (or is
|
|
120
|
+
// pointed at the wrong workspace) must not read "this run made no model calls". A PROBE,
|
|
121
|
+
// not a `getRun`: the guard runs on every page and discards the run.
|
|
122
|
+
if (!(await debug.runExists(workspaceId, runId)))
|
|
123
|
+
return notFound(c, 'run');
|
|
124
|
+
const page = await debug.listLlmCalls(workspaceId, runId, {
|
|
125
|
+
limit: query.limit ?? DEFAULT_CALL_PAGE,
|
|
126
|
+
cursor: cursor.cursor,
|
|
127
|
+
agentKind: query.agentKind,
|
|
128
|
+
phase: query.phase,
|
|
129
|
+
outcome: query.outcome,
|
|
130
|
+
order: query.order,
|
|
131
|
+
bodyChars: query.bodyChars ?? 0,
|
|
132
|
+
contains: query.contains,
|
|
133
|
+
});
|
|
134
|
+
return c.json({ calls: page.items, nextCursor: nextCursorOf(page) }, 200);
|
|
135
|
+
});
|
|
136
|
+
// One call's full (windowed) prompt delta, response and reasoning — raw, or parsed into
|
|
137
|
+
// per-message rows via `?view=messages`.
|
|
138
|
+
buildHonoRoute(app, getDebugLlmCallContract, async (c) => {
|
|
139
|
+
const gate = await authorize(c, 'read');
|
|
140
|
+
if ('fail' in gate) {
|
|
141
|
+
return c.json({ error: { code: gate.fail.code, message: gate.fail.message } }, gate.fail.status);
|
|
142
|
+
}
|
|
143
|
+
const debug = requireDebug(c);
|
|
144
|
+
if (!debug)
|
|
145
|
+
return unavailable(c);
|
|
146
|
+
const query = c.req.valid('query');
|
|
147
|
+
const call = await debug.getLlmCall(gate.auth.workspaceId, c.req.valid('param').callId, {
|
|
148
|
+
bodyChars: query.bodyChars ?? DEFAULT_POINT_READ_BODY_CHARS,
|
|
149
|
+
bodyOffset: query.bodyOffset ?? 0,
|
|
150
|
+
view: query.view ?? 'raw',
|
|
151
|
+
});
|
|
152
|
+
return call ? c.json(call, 200) : notFound(c, 'call');
|
|
153
|
+
});
|
|
154
|
+
// The run's captured dispatches — identity and sizes, never bodies.
|
|
155
|
+
buildHonoRoute(app, listDebugAgentContextContract, async (c) => {
|
|
156
|
+
const gate = await authorize(c, 'read');
|
|
157
|
+
if ('fail' in gate) {
|
|
158
|
+
return c.json({ error: { code: gate.fail.code, message: gate.fail.message } }, gate.fail.status);
|
|
159
|
+
}
|
|
160
|
+
const debug = requireDebug(c);
|
|
161
|
+
if (!debug)
|
|
162
|
+
return unavailable(c);
|
|
163
|
+
const workspaceId = gate.auth.workspaceId;
|
|
164
|
+
const runId = c.req.valid('param').runId;
|
|
165
|
+
const query = c.req.valid('query');
|
|
166
|
+
const cursor = readCursor(query.cursor);
|
|
167
|
+
if ('invalid' in cursor)
|
|
168
|
+
return invalidCursor(c);
|
|
169
|
+
if (!(await debug.runExists(workspaceId, runId)))
|
|
170
|
+
return notFound(c, 'run');
|
|
171
|
+
const page = await debug.listAgentContext(workspaceId, runId, {
|
|
172
|
+
limit: query.limit ?? DEFAULT_CONTEXT_PAGE,
|
|
173
|
+
cursor: cursor.cursor,
|
|
174
|
+
stepIndex: query.stepIndex,
|
|
175
|
+
});
|
|
176
|
+
return c.json({ snapshots: page.items, nextCursor: nextCursorOf(page) }, 200);
|
|
177
|
+
});
|
|
178
|
+
// One dispatch's prompts, folded fragments and injected files, each budgeted independently.
|
|
179
|
+
buildHonoRoute(app, getDebugAgentContextContract, async (c) => {
|
|
180
|
+
const gate = await authorize(c, 'read');
|
|
181
|
+
if ('fail' in gate) {
|
|
182
|
+
return c.json({ error: { code: gate.fail.code, message: gate.fail.message } }, gate.fail.status);
|
|
183
|
+
}
|
|
184
|
+
const debug = requireDebug(c);
|
|
185
|
+
if (!debug)
|
|
186
|
+
return unavailable(c);
|
|
187
|
+
const query = c.req.valid('query');
|
|
188
|
+
const snapshot = await debug.getAgentContext(gate.auth.workspaceId, c.req.valid('param').snapshotId, query.bodyChars ?? DEFAULT_POINT_READ_BODY_CHARS, query.bodyOffset ?? 0);
|
|
189
|
+
return snapshot ? c.json(snapshot, 200) : notFound(c, 'snapshot');
|
|
190
|
+
});
|
|
191
|
+
// The web searches the run's agents performed (small rows, returned whole).
|
|
192
|
+
buildHonoRoute(app, listDebugSearchQueriesContract, async (c) => {
|
|
193
|
+
const gate = await authorize(c, 'read');
|
|
194
|
+
if ('fail' in gate) {
|
|
195
|
+
return c.json({ error: { code: gate.fail.code, message: gate.fail.message } }, gate.fail.status);
|
|
196
|
+
}
|
|
197
|
+
const debug = requireDebug(c);
|
|
198
|
+
if (!debug)
|
|
199
|
+
return unavailable(c);
|
|
200
|
+
const workspaceId = gate.auth.workspaceId;
|
|
201
|
+
const runId = c.req.valid('param').runId;
|
|
202
|
+
const query = c.req.valid('query');
|
|
203
|
+
const cursor = readCursor(query.cursor);
|
|
204
|
+
if ('invalid' in cursor)
|
|
205
|
+
return invalidCursor(c);
|
|
206
|
+
if (!(await debug.runExists(workspaceId, runId)))
|
|
207
|
+
return notFound(c, 'run');
|
|
208
|
+
const page = await debug.listSearchQueries(workspaceId, runId, {
|
|
209
|
+
limit: query.limit ?? DEFAULT_SMALL_ROW_PAGE,
|
|
210
|
+
cursor: cursor.cursor,
|
|
211
|
+
});
|
|
212
|
+
return c.json({ queries: page.items, nextCursor: nextCursorOf(page) }, 200);
|
|
213
|
+
});
|
|
214
|
+
// The run's provisioning event log: how its infrastructure came up, or why it didn't. For a
|
|
215
|
+
// run whose container never started this is the ONLY record of the cause — it has no model
|
|
216
|
+
// telemetry at all.
|
|
217
|
+
buildHonoRoute(app, listDebugLogsContract, async (c) => {
|
|
218
|
+
const gate = await authorize(c, 'read');
|
|
219
|
+
if ('fail' in gate) {
|
|
220
|
+
return c.json({ error: { code: gate.fail.code, message: gate.fail.message } }, gate.fail.status);
|
|
221
|
+
}
|
|
222
|
+
const debug = requireDebug(c);
|
|
223
|
+
if (!debug)
|
|
224
|
+
return unavailable(c);
|
|
225
|
+
const workspaceId = gate.auth.workspaceId;
|
|
226
|
+
const runId = c.req.valid('param').runId;
|
|
227
|
+
const query = c.req.valid('query');
|
|
228
|
+
const cursor = readCursor(query.cursor);
|
|
229
|
+
if ('invalid' in cursor)
|
|
230
|
+
return invalidCursor(c);
|
|
231
|
+
if (!(await debug.runExists(workspaceId, runId)))
|
|
232
|
+
return notFound(c, 'run');
|
|
233
|
+
const page = await debug.listProvisioningLog(workspaceId, runId, {
|
|
234
|
+
limit: query.limit ?? DEFAULT_SMALL_ROW_PAGE,
|
|
235
|
+
cursor: cursor.cursor,
|
|
236
|
+
});
|
|
237
|
+
return c.json({ entries: page.items, nextCursor: nextCursorOf(page) }, 200);
|
|
238
|
+
});
|
|
239
|
+
return app;
|
|
240
|
+
}
|
|
241
|
+
//# sourceMappingURL=PublicDebugController.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PublicDebugController.js","sourceRoot":"","sources":["../../../src/modules/publicApi/PublicDebugController.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RecurringPipelineController.d.ts","sourceRoot":"","sources":["../../../src/modules/recurring/RecurringPipelineController.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAE3B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"RecurringPipelineController.d.ts","sourceRoot":"","sources":["../../../src/modules/recurring/RecurringPipelineController.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAE3B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAc/C;;;GAGG;AACH,wBAAgB,2BAA2B,IAAI,IAAI,CAAC,MAAM,CAAC,CAkF1D"}
|
|
@@ -3,11 +3,14 @@ import { buildHonoRoute } from '@toad-contracts/hono';
|
|
|
3
3
|
import { Hono } from 'hono';
|
|
4
4
|
import { param } from '../../http/params.js';
|
|
5
5
|
import { personalGateForBlock, readPersonalPassword } from '../providers/personalCredentialGate.js';
|
|
6
|
+
import { UnavailableError } from '@cat-factory/kernel';
|
|
6
7
|
/** Resolve the recurring-pipeline module or send a 503, returning null when unconfigured. */
|
|
7
8
|
function requireRecurring(c) {
|
|
8
9
|
return c.get('container').recurring ?? null;
|
|
9
10
|
}
|
|
10
|
-
const unavailable = (
|
|
11
|
+
const unavailable = () => {
|
|
12
|
+
throw new UnavailableError('Recurring pipelines are not configured');
|
|
13
|
+
};
|
|
11
14
|
/**
|
|
12
15
|
* CRUD + run history for a workspace's recurring pipelines (schedules that re-run a
|
|
13
16
|
* pipeline against a service on a cadence). Mounted under `/workspaces/:workspaceId`.
|
|
@@ -17,40 +20,40 @@ export function recurringPipelineController() {
|
|
|
17
20
|
buildHonoRoute(app, listSchedulesContract, async (c) => {
|
|
18
21
|
const recurring = requireRecurring(c);
|
|
19
22
|
if (!recurring)
|
|
20
|
-
return unavailable(
|
|
23
|
+
return unavailable();
|
|
21
24
|
return c.json(await recurring.service.list(param(c, 'workspaceId')), 200);
|
|
22
25
|
});
|
|
23
26
|
buildHonoRoute(app, createScheduleContract, async (c) => {
|
|
24
27
|
const recurring = requireRecurring(c);
|
|
25
28
|
if (!recurring)
|
|
26
|
-
return unavailable(
|
|
29
|
+
return unavailable();
|
|
27
30
|
const schedule = await recurring.service.create(param(c, 'workspaceId'), c.req.valid('json'));
|
|
28
31
|
return c.json(schedule, 201);
|
|
29
32
|
});
|
|
30
33
|
buildHonoRoute(app, updateScheduleContract, async (c) => {
|
|
31
34
|
const recurring = requireRecurring(c);
|
|
32
35
|
if (!recurring)
|
|
33
|
-
return unavailable(
|
|
36
|
+
return unavailable();
|
|
34
37
|
const schedule = await recurring.service.update(param(c, 'workspaceId'), c.req.valid('param').scheduleId, c.req.valid('json'));
|
|
35
38
|
return c.json(schedule, 200);
|
|
36
39
|
});
|
|
37
40
|
buildHonoRoute(app, deleteScheduleContract, async (c) => {
|
|
38
41
|
const recurring = requireRecurring(c);
|
|
39
42
|
if (!recurring)
|
|
40
|
-
return unavailable(
|
|
43
|
+
return unavailable();
|
|
41
44
|
await recurring.service.remove(param(c, 'workspaceId'), c.req.valid('param').scheduleId);
|
|
42
45
|
return c.body(null, 204);
|
|
43
46
|
});
|
|
44
47
|
buildHonoRoute(app, listScheduleRunsContract, async (c) => {
|
|
45
48
|
const recurring = requireRecurring(c);
|
|
46
49
|
if (!recurring)
|
|
47
|
-
return unavailable(
|
|
50
|
+
return unavailable();
|
|
48
51
|
return c.json(await recurring.service.listRuns(param(c, 'workspaceId'), c.req.valid('param').scheduleId), 200);
|
|
49
52
|
});
|
|
50
53
|
buildHonoRoute(app, runScheduleNowContract, async (c) => {
|
|
51
54
|
const recurring = requireRecurring(c);
|
|
52
55
|
if (!recurring)
|
|
53
|
-
return unavailable(
|
|
56
|
+
return unavailable();
|
|
54
57
|
const container = c.get('container');
|
|
55
58
|
const workspaceId = param(c, 'workspaceId');
|
|
56
59
|
const scheduleId = c.req.valid('param').scheduleId;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RecurringPipelineController.js","sourceRoot":"","sources":["../../../src/modules/recurring/RecurringPipelineController.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EACtB,sBAAsB,EACtB,wBAAwB,EACxB,qBAAqB,EACrB,sBAAsB,EACtB,sBAAsB,GACvB,MAAM,wBAAwB,CAAA;AAE/B,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACrD,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAG3B,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAA;AAC5C,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,wCAAwC,CAAA;
|
|
1
|
+
{"version":3,"file":"RecurringPipelineController.js","sourceRoot":"","sources":["../../../src/modules/recurring/RecurringPipelineController.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TrackerSettingsController.d.ts","sourceRoot":"","sources":["../../../src/modules/recurring/TrackerSettingsController.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAE3B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"TrackerSettingsController.d.ts","sourceRoot":"","sources":["../../../src/modules/recurring/TrackerSettingsController.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAE3B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAc/C;;;GAGG;AACH,wBAAgB,yBAAyB,IAAI,IAAI,CAAC,MAAM,CAAC,CAiBxD"}
|
|
@@ -3,11 +3,14 @@ import { buildHonoRoute } from '@toad-contracts/hono';
|
|
|
3
3
|
import { Hono } from 'hono';
|
|
4
4
|
import { requireWorkspacePermission } from '../../http/workspaceAccess.js';
|
|
5
5
|
import { param } from '../../http/params.js';
|
|
6
|
+
import { UnavailableError } from '@cat-factory/kernel';
|
|
6
7
|
/** Resolve the tracker-settings module or send a 503, returning null when unconfigured. */
|
|
7
8
|
function requireTracker(c) {
|
|
8
9
|
return c.get('container').tracker ?? null;
|
|
9
10
|
}
|
|
10
|
-
const unavailable = (
|
|
11
|
+
const unavailable = () => {
|
|
12
|
+
throw new UnavailableError('Issue tracker is not configured');
|
|
13
|
+
};
|
|
11
14
|
/**
|
|
12
15
|
* Read/write a workspace's issue-tracker selection (GitHub Issues or Jira). Mounted
|
|
13
16
|
* under `/workspaces/:workspaceId`.
|
|
@@ -18,13 +21,13 @@ export function trackerSettingsController() {
|
|
|
18
21
|
buildHonoRoute(app, getTrackerSettingsContract, async (c) => {
|
|
19
22
|
const tracker = requireTracker(c);
|
|
20
23
|
if (!tracker)
|
|
21
|
-
return unavailable(
|
|
24
|
+
return unavailable();
|
|
22
25
|
return c.json(await tracker.service.get(param(c, 'workspaceId')), 200);
|
|
23
26
|
});
|
|
24
27
|
buildHonoRoute(app, putTrackerSettingsContract, async (c) => {
|
|
25
28
|
const tracker = requireTracker(c);
|
|
26
29
|
if (!tracker)
|
|
27
|
-
return unavailable(
|
|
30
|
+
return unavailable();
|
|
28
31
|
return c.json(await tracker.service.put(param(c, 'workspaceId'), c.req.valid('json')), 200);
|
|
29
32
|
});
|
|
30
33
|
return app;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TrackerSettingsController.js","sourceRoot":"","sources":["../../../src/modules/recurring/TrackerSettingsController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,0BAA0B,EAAE,MAAM,wBAAwB,CAAA;AAE/F,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACrD,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAG3B,OAAO,EAAE,0BAA0B,EAAE,MAAM,+BAA+B,CAAA;AAC1E,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAA;
|
|
1
|
+
{"version":3,"file":"TrackerSettingsController.js","sourceRoot":"","sources":["../../../src/modules/recurring/TrackerSettingsController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,0BAA0B,EAAE,MAAM,wBAAwB,CAAA;AAE/F,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACrD,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAG3B,OAAO,EAAE,0BAA0B,EAAE,MAAM,+BAA+B,CAAA;AAC1E,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAA;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AAEtD,2FAA2F;AAC3F,SAAS,cAAc,CAAmB,CAAa;IACrD,OAAO,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,OAAO,IAAI,IAAI,CAAA;AAC3C,CAAC;AAED,MAAM,WAAW,GAAG,GAAU,EAAE;IAC9B,MAAM,IAAI,gBAAgB,CAAC,iCAAiC,CAAC,CAAA;AAC/D,CAAC,CAAA;AAED;;;GAGG;AACH,MAAM,UAAU,yBAAyB;IACvC,MAAM,GAAG,GAAG,IAAI,IAAI,EAAU,CAAA;IAC9B,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,0BAA0B,CAAC,iBAAiB,CAAC,CAAC,CAAA;IAE3D,cAAc,CAAC,GAAG,EAAE,0BAA0B,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QAC1D,MAAM,OAAO,GAAG,cAAc,CAAC,CAAC,CAAC,CAAA;QACjC,IAAI,CAAC,OAAO;YAAE,OAAO,WAAW,EAAE,CAAA;QAClC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;IACxE,CAAC,CAAC,CAAA;IAEF,cAAc,CAAC,GAAG,EAAE,0BAA0B,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QAC1D,MAAM,OAAO,GAAG,cAAc,CAAC,CAAC,CAAC,CAAA;QACjC,IAAI,CAAC,OAAO;YAAE,OAAO,WAAW,EAAE,CAAA;QAClC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;IAC7F,CAAC,CAAC,CAAA;IAEF,OAAO,GAAG,CAAA;AACZ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ReleaseHealthController.d.ts","sourceRoot":"","sources":["../../../src/modules/releaseHealth/ReleaseHealthController.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAG3B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"ReleaseHealthController.d.ts","sourceRoot":"","sources":["../../../src/modules/releaseHealth/ReleaseHealthController.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAG3B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAc/C;;;;GAIG;AACH,wBAAgB,uBAAuB,IAAI,IAAI,CAAC,MAAM,CAAC,CAgDtD"}
|
|
@@ -3,11 +3,14 @@ import { buildHonoRoute } from '@toad-contracts/hono';
|
|
|
3
3
|
import { Hono } from 'hono';
|
|
4
4
|
import { requireWorkspacePermission } from '../../http/workspaceAccess.js';
|
|
5
5
|
import { param } from '../../http/params.js';
|
|
6
|
+
import { UnavailableError } from '@cat-factory/kernel';
|
|
6
7
|
/** Resolve the release-health module or send a 503, returning null when unconfigured. */
|
|
7
8
|
function requireReleaseHealth(c) {
|
|
8
9
|
return c.get('container').releaseHealth ?? null;
|
|
9
10
|
}
|
|
10
|
-
const unavailable = (
|
|
11
|
+
const unavailable = () => {
|
|
12
|
+
throw new UnavailableError('The observability integration is not configured');
|
|
13
|
+
};
|
|
11
14
|
/**
|
|
12
15
|
* Per-workspace settings for the post-release-health gate: the (single) observability
|
|
13
16
|
* connection (provider + credentials, write-only, never read back) and the per-block
|
|
@@ -19,39 +22,39 @@ export function releaseHealthController() {
|
|
|
19
22
|
buildHonoRoute(app, getObservabilityConnectionContract, async (c) => {
|
|
20
23
|
const rh = requireReleaseHealth(c);
|
|
21
24
|
if (!rh)
|
|
22
|
-
return unavailable(
|
|
25
|
+
return unavailable();
|
|
23
26
|
return c.json(await rh.service.getConnection(param(c, 'workspaceId')), 200);
|
|
24
27
|
});
|
|
25
28
|
buildHonoRoute(app, setObservabilityConnectionContract, async (c) => {
|
|
26
29
|
const rh = requireReleaseHealth(c);
|
|
27
30
|
if (!rh)
|
|
28
|
-
return unavailable(
|
|
31
|
+
return unavailable();
|
|
29
32
|
return c.json(await rh.service.setConnection(param(c, 'workspaceId'), c.req.valid('json')), 200);
|
|
30
33
|
});
|
|
31
34
|
buildHonoRoute(app, deleteObservabilityConnectionContract, async (c) => {
|
|
32
35
|
const rh = requireReleaseHealth(c);
|
|
33
36
|
if (!rh)
|
|
34
|
-
return unavailable(
|
|
37
|
+
return unavailable();
|
|
35
38
|
await rh.service.deleteConnection(param(c, 'workspaceId'));
|
|
36
39
|
return c.body(null, 204);
|
|
37
40
|
});
|
|
38
41
|
buildHonoRoute(app, listReleaseHealthConfigsContract, async (c) => {
|
|
39
42
|
const rh = requireReleaseHealth(c);
|
|
40
43
|
if (!rh)
|
|
41
|
-
return unavailable(
|
|
44
|
+
return unavailable();
|
|
42
45
|
return c.json(await rh.service.listConfigs(param(c, 'workspaceId')), 200);
|
|
43
46
|
});
|
|
44
47
|
buildHonoRoute(app, upsertReleaseHealthConfigContract, async (c) => {
|
|
45
48
|
const rh = requireReleaseHealth(c);
|
|
46
49
|
if (!rh)
|
|
47
|
-
return unavailable(
|
|
50
|
+
return unavailable();
|
|
48
51
|
const config = await rh.service.upsertConfig(param(c, 'workspaceId'), c.req.valid('param').blockId, c.req.valid('json'));
|
|
49
52
|
return c.json(config, 200);
|
|
50
53
|
});
|
|
51
54
|
buildHonoRoute(app, deleteReleaseHealthConfigContract, async (c) => {
|
|
52
55
|
const rh = requireReleaseHealth(c);
|
|
53
56
|
if (!rh)
|
|
54
|
-
return unavailable(
|
|
57
|
+
return unavailable();
|
|
55
58
|
await rh.service.deleteConfig(param(c, 'workspaceId'), c.req.valid('param').blockId);
|
|
56
59
|
return c.body(null, 204);
|
|
57
60
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ReleaseHealthController.js","sourceRoot":"","sources":["../../../src/modules/releaseHealth/ReleaseHealthController.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qCAAqC,EACrC,iCAAiC,EACjC,kCAAkC,EAClC,gCAAgC,EAChC,kCAAkC,EAClC,iCAAiC,GAClC,MAAM,wBAAwB,CAAA;AAC/B,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACrD,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAI3B,OAAO,EAAE,0BAA0B,EAAE,MAAM,+BAA+B,CAAA;AAC1E,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAA;
|
|
1
|
+
{"version":3,"file":"ReleaseHealthController.js","sourceRoot":"","sources":["../../../src/modules/releaseHealth/ReleaseHealthController.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ReportsController.d.ts","sourceRoot":"","sources":["../../../src/modules/reports/ReportsController.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAE3B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"ReportsController.d.ts","sourceRoot":"","sources":["../../../src/modules/reports/ReportsController.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAE3B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAa/C;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,iBAAiB,IAAI,IAAI,CAAC,MAAM,CAAC,CAoBhD"}
|
|
@@ -1,12 +1,15 @@
|
|
|
1
1
|
import { getReportsContract } from '@cat-factory/contracts';
|
|
2
2
|
import { buildHonoRoute } from '@toad-contracts/hono';
|
|
3
3
|
import { Hono } from 'hono';
|
|
4
|
+
import { UnavailableError, UnauthorizedError } from '@cat-factory/kernel';
|
|
4
5
|
/** The signed-in user, or null. Generic over the (contract-typed) env, like AccountController. */
|
|
5
6
|
function accountUser(c) {
|
|
6
7
|
const user = c.get('user');
|
|
7
8
|
return user ? { id: user.id, login: user.login, name: user.name } : null;
|
|
8
9
|
}
|
|
9
|
-
const signInRequired = (
|
|
10
|
+
const signInRequired = () => {
|
|
11
|
+
throw new UnauthorizedError('Sign in to view reports');
|
|
12
|
+
};
|
|
10
13
|
/**
|
|
11
14
|
* Reports: `GET /accounts/:accountId/reports` — cross-cutting usage analytics for an
|
|
12
15
|
* account over a time window (spend per model / agent kind, and spend + run activity per
|
|
@@ -28,10 +31,10 @@ export function reportsController() {
|
|
|
28
31
|
buildHonoRoute(app, getReportsContract, async (c) => {
|
|
29
32
|
const user = accountUser(c);
|
|
30
33
|
if (!user)
|
|
31
|
-
return signInRequired(
|
|
34
|
+
return signInRequired();
|
|
32
35
|
const container = c.get('container');
|
|
33
36
|
if (!container.reports) {
|
|
34
|
-
|
|
37
|
+
throw new UnavailableError('Reports are not available on this deployment');
|
|
35
38
|
}
|
|
36
39
|
const { accountId } = c.req.valid('param');
|
|
37
40
|
await container.accountService.requireAdmin(accountId, user.id);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ReportsController.js","sourceRoot":"","sources":["../../../src/modules/reports/ReportsController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAA;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACrD,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"ReportsController.js","sourceRoot":"","sources":["../../../src/modules/reports/ReportsController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAA;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACrD,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAG3B,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAEzE,kGAAkG;AAClG,SAAS,WAAW,CAAmB,CAAa;IAClD,MAAM,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;IAC1B,OAAO,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAA;AAC1E,CAAC;AAED,MAAM,cAAc,GAAG,GAAU,EAAE;IACjC,MAAM,IAAI,iBAAiB,CAAC,yBAAyB,CAAC,CAAA;AACxD,CAAC,CAAA;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,iBAAiB;IAC/B,MAAM,GAAG,GAAG,IAAI,IAAI,EAAU,CAAA;IAE9B,cAAc,CAAC,GAAG,EAAE,kBAAkB,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QAClD,MAAM,IAAI,GAAG,WAAW,CAAC,CAAC,CAAC,CAAA;QAC3B,IAAI,CAAC,IAAI;YAAE,OAAO,cAAc,EAAE,CAAA;QAClC,MAAM,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;QACpC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;YACvB,MAAM,IAAI,gBAAgB,CAAC,8CAA8C,CAAC,CAAA;QAC5E,CAAC;QACD,MAAM,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;QAC1C,MAAM,SAAS,CAAC,cAAc,CAAC,YAAY,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE,CAAC,CAAA;QAC/D,MAAM,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;QAClC,OAAO,CAAC,CAAC,IAAI,CACX,MAAM,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,SAAS,EAAE,KAAK,CAAC,MAAM,IAAI,IAAI,EAAE,KAAK,CAAC,WAAW,IAAI,IAAI,CAAC,EAC7F,GAAG,CACJ,CAAA;IACH,CAAC,CAAC,CAAA;IAEF,OAAO,GAAG,CAAA;AACZ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RequirementReviewController.d.ts","sourceRoot":"","sources":["../../../src/modules/requirements/RequirementReviewController.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAE3B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"RequirementReviewController.d.ts","sourceRoot":"","sources":["../../../src/modules/requirements/RequirementReviewController.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAE3B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAa/C;;;;;;;GAOG;AACH,wBAAgB,2BAA2B,IAAI,IAAI,CAAC,MAAM,CAAC,CAyL1D"}
|