@cat-factory/server 0.31.0 → 0.32.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/config/types.d.ts +1 -15
- package/dist/config/types.d.ts.map +1 -1
- package/dist/http/errorHandler.d.ts.map +1 -1
- package/dist/http/errorHandler.js +20 -0
- package/dist/http/errorHandler.js.map +1 -1
- package/dist/index.d.ts +0 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -1
- package/dist/index.js.map +1 -1
- package/dist/modules/accounts/AccountController.d.ts +4 -0
- package/dist/modules/accounts/AccountController.d.ts.map +1 -1
- package/dist/modules/accounts/AccountController.js +78 -58
- 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 +8 -6
- package/dist/modules/agentRuns/AgentRunController.js.map +1 -1
- package/dist/modules/auth/AuthController.d.ts.map +1 -1
- package/dist/modules/auth/AuthController.js +23 -23
- package/dist/modules/auth/AuthController.js.map +1 -1
- package/dist/modules/board/BoardController.d.ts.map +1 -1
- package/dist/modules/board/BoardController.js +26 -26
- package/dist/modules/board/BoardController.js.map +1 -1
- package/dist/modules/bootstrap/BootstrapController.d.ts.map +1 -1
- package/dist/modules/bootstrap/BootstrapController.js +15 -15
- package/dist/modules/bootstrap/BootstrapController.js.map +1 -1
- package/dist/modules/brainstorm/BrainstormController.d.ts +3 -2
- package/dist/modules/brainstorm/BrainstormController.d.ts.map +1 -1
- package/dist/modules/brainstorm/BrainstormController.js +36 -52
- package/dist/modules/brainstorm/BrainstormController.js.map +1 -1
- package/dist/modules/clarity/ClarityReviewController.d.ts.map +1 -1
- package/dist/modules/clarity/ClarityReviewController.js +27 -25
- package/dist/modules/clarity/ClarityReviewController.js.map +1 -1
- package/dist/modules/consensus/ConsensusController.d.ts.map +1 -1
- package/dist/modules/consensus/ConsensusController.js +6 -4
- package/dist/modules/consensus/ConsensusController.js.map +1 -1
- package/dist/modules/documents/DocumentSourceController.d.ts.map +1 -1
- package/dist/modules/documents/DocumentSourceController.js +17 -17
- 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 +24 -24
- package/dist/modules/environments/EnvironmentController.js.map +1 -1
- package/dist/modules/execution/ExecutionController.d.ts.map +1 -1
- package/dist/modules/execution/ExecutionController.js +57 -45
- package/dist/modules/execution/ExecutionController.js.map +1 -1
- package/dist/modules/followUp/FollowUpController.d.ts.map +1 -1
- package/dist/modules/followUp/FollowUpController.js +21 -17
- package/dist/modules/followUp/FollowUpController.js.map +1 -1
- package/dist/modules/fragmentLibrary/FragmentLibraryController.d.ts.map +1 -1
- package/dist/modules/fragmentLibrary/FragmentLibraryController.js +26 -26
- 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 +44 -44
- package/dist/modules/github/GitHubController.js.map +1 -1
- package/dist/modules/humanReview/HumanReviewController.d.ts.map +1 -1
- package/dist/modules/humanReview/HumanReviewController.js +5 -5
- package/dist/modules/humanReview/HumanReviewController.js.map +1 -1
- package/dist/modules/humanTest/HumanTestController.d.ts.map +1 -1
- package/dist/modules/humanTest/HumanTestController.js +17 -17
- package/dist/modules/humanTest/HumanTestController.js.map +1 -1
- package/dist/modules/incidentEnrichment/IncidentEnrichmentController.d.ts.map +1 -1
- package/dist/modules/incidentEnrichment/IncidentEnrichmentController.js +7 -7
- package/dist/modules/incidentEnrichment/IncidentEnrichmentController.js.map +1 -1
- package/dist/modules/kaizen/KaizenController.d.ts.map +1 -1
- package/dist/modules/kaizen/KaizenController.js +7 -5
- package/dist/modules/kaizen/KaizenController.js.map +1 -1
- package/dist/modules/localModels/LocalModelEndpointController.d.ts.map +1 -1
- package/dist/modules/localModels/LocalModelEndpointController.js +10 -11
- 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 -6
- package/dist/modules/localSettings/LocalSettingsController.js.map +1 -1
- package/dist/modules/merge/MergePresetController.d.ts.map +1 -1
- package/dist/modules/merge/MergePresetController.js +10 -10
- package/dist/modules/merge/MergePresetController.js.map +1 -1
- package/dist/modules/modelPresets/ModelPresetController.d.ts.map +1 -1
- package/dist/modules/modelPresets/ModelPresetController.js +10 -10
- package/dist/modules/modelPresets/ModelPresetController.js.map +1 -1
- package/dist/modules/models/ModelController.d.ts.map +1 -1
- package/dist/modules/models/ModelController.js +6 -4
- package/dist/modules/models/ModelController.js.map +1 -1
- package/dist/modules/notifications/NotificationController.d.ts.map +1 -1
- package/dist/modules/notifications/NotificationController.js +11 -9
- package/dist/modules/notifications/NotificationController.js.map +1 -1
- package/dist/modules/openrouter/OpenRouterCatalogController.d.ts.map +1 -1
- package/dist/modules/openrouter/OpenRouterCatalogController.js +9 -10
- package/dist/modules/openrouter/OpenRouterCatalogController.js.map +1 -1
- package/dist/modules/pipelines/PipelineController.d.ts.map +1 -1
- package/dist/modules/pipelines/PipelineController.js +17 -15
- package/dist/modules/pipelines/PipelineController.js.map +1 -1
- package/dist/modules/promptFragments/PromptFragmentController.d.ts.map +1 -1
- package/dist/modules/promptFragments/PromptFragmentController.js +4 -2
- package/dist/modules/promptFragments/PromptFragmentController.js.map +1 -1
- package/dist/modules/providers/ApiKeyController.d.ts.map +1 -1
- package/dist/modules/providers/ApiKeyController.js +12 -12
- 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 +7 -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 +14 -15
- 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 +7 -7
- package/dist/modules/providers/VendorCredentialController.js.map +1 -1
- package/dist/modules/providers/personalCredentialGate.d.ts +2 -2
- package/dist/modules/providers/personalCredentialGate.d.ts.map +1 -1
- package/dist/modules/providers/personalCredentialGate.js.map +1 -1
- package/dist/modules/provisioningLogs/ProvisioningLogController.d.ts.map +1 -1
- package/dist/modules/provisioningLogs/ProvisioningLogController.js +4 -3
- package/dist/modules/provisioningLogs/ProvisioningLogController.js.map +1 -1
- package/dist/modules/recurring/RecurringPipelineController.d.ts.map +1 -1
- package/dist/modules/recurring/RecurringPipelineController.js +15 -15
- 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 -6
- 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 +14 -14
- package/dist/modules/releaseHealth/ReleaseHealthController.js.map +1 -1
- package/dist/modules/requirements/RequirementReviewController.d.ts.map +1 -1
- package/dist/modules/requirements/RequirementReviewController.js +43 -38
- 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 +12 -12
- 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 +35 -26
- 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 -6
- package/dist/modules/serviceFragmentDefaults/ServiceFragmentDefaultsController.js.map +1 -1
- package/dist/modules/serviceSpec/ServiceSpecController.d.ts.map +1 -1
- package/dist/modules/serviceSpec/ServiceSpecController.js +9 -8
- package/dist/modules/serviceSpec/ServiceSpecController.js.map +1 -1
- package/dist/modules/services/ServiceMountController.d.ts.map +1 -1
- package/dist/modules/services/ServiceMountController.js +14 -14
- 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 -6
- package/dist/modules/settings/WorkspaceSettingsController.js.map +1 -1
- package/dist/modules/slack/SlackController.d.ts.map +1 -1
- package/dist/modules/slack/SlackController.js +18 -18
- 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 +19 -19
- package/dist/modules/tasks/TaskSourceController.js.map +1 -1
- package/dist/modules/workspaces/WorkspaceController.d.ts.map +1 -1
- package/dist/modules/workspaces/WorkspaceController.js +11 -11
- package/dist/modules/workspaces/WorkspaceController.js.map +1 -1
- package/package.json +11 -9
- package/dist/http/validation.d.ts +0 -21
- package/dist/http/validation.d.ts.map +0 -1
- package/dist/http/validation.js +0 -21
- package/dist/http/validation.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IncidentEnrichmentController.d.ts","sourceRoot":"","sources":["../../../src/modules/incidentEnrichment/IncidentEnrichmentController.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"IncidentEnrichmentController.d.ts","sourceRoot":"","sources":["../../../src/modules/incidentEnrichment/IncidentEnrichmentController.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAG3B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAqB/C;;;;GAIG;AACH,wBAAgB,4BAA4B,IAAI,IAAI,CAAC,MAAM,CAAC,CAuB3D"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { deleteIncidentEnrichmentContract, getIncidentEnrichmentContract, setIncidentEnrichmentContract, } from '@cat-factory/contracts';
|
|
2
|
+
import { buildHonoRoute } from '@toad-contracts/hono';
|
|
2
3
|
import { Hono } from 'hono';
|
|
3
4
|
import { param } from '../../http/params.js';
|
|
4
|
-
import { jsonBody } from '../../http/validation.js';
|
|
5
5
|
/** Resolve the incident-enrichment module or send a 503, returning null when unconfigured. */
|
|
6
6
|
function requireIncidentEnrichment(c) {
|
|
7
7
|
return c.get('container').incidentEnrichmentSettings ?? null;
|
|
@@ -19,19 +19,19 @@ const unavailable = (c) => c.json({
|
|
|
19
19
|
*/
|
|
20
20
|
export function incidentEnrichmentController() {
|
|
21
21
|
const app = new Hono();
|
|
22
|
-
app
|
|
22
|
+
buildHonoRoute(app, getIncidentEnrichmentContract, async (c) => {
|
|
23
23
|
const ie = requireIncidentEnrichment(c);
|
|
24
24
|
if (!ie)
|
|
25
25
|
return unavailable(c);
|
|
26
|
-
return c.json(await ie.service.getConnection(param(c, 'workspaceId')));
|
|
26
|
+
return c.json(await ie.service.getConnection(param(c, 'workspaceId')), 200);
|
|
27
27
|
});
|
|
28
|
-
app
|
|
28
|
+
buildHonoRoute(app, setIncidentEnrichmentContract, async (c) => {
|
|
29
29
|
const ie = requireIncidentEnrichment(c);
|
|
30
30
|
if (!ie)
|
|
31
31
|
return unavailable(c);
|
|
32
|
-
return c.json(await ie.service.setConnection(param(c, 'workspaceId'), c.req.valid('json')));
|
|
32
|
+
return c.json(await ie.service.setConnection(param(c, 'workspaceId'), c.req.valid('json')), 200);
|
|
33
33
|
});
|
|
34
|
-
app
|
|
34
|
+
buildHonoRoute(app, deleteIncidentEnrichmentContract, async (c) => {
|
|
35
35
|
const ie = requireIncidentEnrichment(c);
|
|
36
36
|
if (!ie)
|
|
37
37
|
return unavailable(c);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IncidentEnrichmentController.js","sourceRoot":"","sources":["../../../src/modules/incidentEnrichment/IncidentEnrichmentController.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"IncidentEnrichmentController.js","sourceRoot":"","sources":["../../../src/modules/incidentEnrichment/IncidentEnrichmentController.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gCAAgC,EAChC,6BAA6B,EAC7B,6BAA6B,GAC9B,MAAM,wBAAwB,CAAA;AAC/B,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACrD,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAI3B,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAA;AAE5C,8FAA8F;AAC9F,SAAS,yBAAyB,CAChC,CAAa;IAEb,OAAO,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,0BAA0B,IAAI,IAAI,CAAA;AAC9D,CAAC;AAED,MAAM,WAAW,GAAG,CAAmB,CAAa,EAAE,EAAE,CACtD,CAAC,CAAC,IAAI,CACJ;IACE,KAAK,EAAE;QACL,IAAI,EAAE,aAAa;QACnB,OAAO,EAAE,uDAAuD;KACjE;CACF,EACD,GAAG,CACJ,CAAA;AAEH;;;;GAIG;AACH,MAAM,UAAU,4BAA4B;IAC1C,MAAM,GAAG,GAAG,IAAI,IAAI,EAAU,CAAA;IAE9B,cAAc,CAAC,GAAG,EAAE,6BAA6B,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QAC7D,MAAM,EAAE,GAAG,yBAAyB,CAAC,CAAC,CAAC,CAAA;QACvC,IAAI,CAAC,EAAE;YAAE,OAAO,WAAW,CAAC,CAAC,CAAC,CAAA;QAC9B,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;IAC7E,CAAC,CAAC,CAAA;IAEF,cAAc,CAAC,GAAG,EAAE,6BAA6B,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QAC7D,MAAM,EAAE,GAAG,yBAAyB,CAAC,CAAC,CAAC,CAAA;QACvC,IAAI,CAAC,EAAE;YAAE,OAAO,WAAW,CAAC,CAAC,CAAC,CAAA;QAC9B,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;IAClG,CAAC,CAAC,CAAA;IAEF,cAAc,CAAC,GAAG,EAAE,gCAAgC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QAChE,MAAM,EAAE,GAAG,yBAAyB,CAAC,CAAC,CAAC,CAAA;QACvC,IAAI,CAAC,EAAE;YAAE,OAAO,WAAW,CAAC,CAAC,CAAC,CAAA;QAC9B,MAAM,EAAE,CAAC,OAAO,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,CAAA;QAC1D,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;IAC1B,CAAC,CAAC,CAAA;IAEF,OAAO,GAAG,CAAA;AACZ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"KaizenController.d.ts","sourceRoot":"","sources":["../../../src/modules/kaizen/KaizenController.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"KaizenController.d.ts","sourceRoot":"","sources":["../../../src/modules/kaizen/KaizenController.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAE3B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAW/C;;;;;;GAMG;AACH,wBAAgB,gBAAgB,IAAI,IAAI,CAAC,MAAM,CAAC,CAuB/C"}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { getKaizenOverviewContract, getKaizenRunGradingsContract } from '@cat-factory/contracts';
|
|
2
|
+
import { buildHonoRoute } from '@toad-contracts/hono';
|
|
1
3
|
import { Hono } from 'hono';
|
|
2
4
|
import { param } from '../../http/params.js';
|
|
3
5
|
/** Resolve the Kaizen module or send a 503, returning null when unconfigured. */
|
|
@@ -15,20 +17,20 @@ const unavailable = (c) => c.json({ error: { code: 'unavailable', message: 'Kaiz
|
|
|
15
17
|
export function kaizenController() {
|
|
16
18
|
const app = new Hono();
|
|
17
19
|
// The Kaizen screen: recent grading history + the verified-combo library.
|
|
18
|
-
app
|
|
20
|
+
buildHonoRoute(app, getKaizenOverviewContract, async (c) => {
|
|
19
21
|
const kaizen = requireKaizen(c);
|
|
20
22
|
if (!kaizen)
|
|
21
23
|
return unavailable(c);
|
|
22
24
|
const overview = await kaizen.service.getOverview(param(c, 'workspaceId'));
|
|
23
|
-
return c.json(overview);
|
|
25
|
+
return c.json(overview, 200);
|
|
24
26
|
});
|
|
25
27
|
// The gradings recorded for one run (the run-window status surface).
|
|
26
|
-
app
|
|
28
|
+
buildHonoRoute(app, getKaizenRunGradingsContract, async (c) => {
|
|
27
29
|
const kaizen = requireKaizen(c);
|
|
28
30
|
if (!kaizen)
|
|
29
31
|
return unavailable(c);
|
|
30
|
-
const gradings = await kaizen.service.listForExecution(param(c, 'workspaceId'),
|
|
31
|
-
return c.json({ gradings });
|
|
32
|
+
const gradings = await kaizen.service.listForExecution(param(c, 'workspaceId'), c.req.valid('param').executionId);
|
|
33
|
+
return c.json({ gradings }, 200);
|
|
32
34
|
});
|
|
33
35
|
return app;
|
|
34
36
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"KaizenController.js","sourceRoot":"","sources":["../../../src/modules/kaizen/KaizenController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"KaizenController.js","sourceRoot":"","sources":["../../../src/modules/kaizen/KaizenController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,4BAA4B,EAAE,MAAM,wBAAwB,CAAA;AAEhG,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACrD,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAG3B,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAA;AAE5C,iFAAiF;AACjF,SAAS,aAAa,CAAmB,CAAa;IACpD,OAAO,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,MAAM,IAAI,IAAI,CAAA;AAC1C,CAAC;AAED,MAAM,WAAW,GAAG,CAAmB,CAAa,EAAE,EAAE,CACtD,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,0BAA0B,EAAE,EAAE,EAAE,GAAG,CAAC,CAAA;AAEtF;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB;IAC9B,MAAM,GAAG,GAAG,IAAI,IAAI,EAAU,CAAA;IAE9B,0EAA0E;IAC1E,cAAc,CAAC,GAAG,EAAE,yBAAyB,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QACzD,MAAM,MAAM,GAAG,aAAa,CAAC,CAAC,CAAC,CAAA;QAC/B,IAAI,CAAC,MAAM;YAAE,OAAO,WAAW,CAAC,CAAC,CAAC,CAAA;QAClC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,CAAA;QAC1E,OAAO,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAA;IAC9B,CAAC,CAAC,CAAA;IAEF,qEAAqE;IACrE,cAAc,CAAC,GAAG,EAAE,4BAA4B,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QAC5D,MAAM,MAAM,GAAG,aAAa,CAAC,CAAC,CAAC,CAAA;QAC/B,IAAI,CAAC,MAAM;YAAE,OAAO,WAAW,CAAC,CAAC,CAAC,CAAA;QAClC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,gBAAgB,CACpD,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC,EACvB,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,WAAW,CACjC,CAAA;QACD,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,EAAE,GAAG,CAAC,CAAA;IAClC,CAAC,CAAC,CAAA;IAEF,OAAO,GAAG,CAAA;AACZ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LocalModelEndpointController.d.ts","sourceRoot":"","sources":["../../../src/modules/localModels/LocalModelEndpointController.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"LocalModelEndpointController.d.ts","sourceRoot":"","sources":["../../../src/modules/localModels/LocalModelEndpointController.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAE3B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAgB/C,wBAAgB,4BAA4B,IAAI,IAAI,CAAC,MAAM,CAAC,CA0C3D"}
|
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
import { localRunnerSchema,
|
|
1
|
+
import { listLocalModelEndpointsContract, localRunnerSchema, removeLocalModelEndpointContract, testLocalModelEndpointContract, upsertLocalModelEndpointContract, } from '@cat-factory/contracts';
|
|
2
|
+
import { buildHonoRoute } from '@toad-contracts/hono';
|
|
2
3
|
import * as v from 'valibot';
|
|
3
4
|
import { Hono } from 'hono';
|
|
4
|
-
import { param } from '../../http/params.js';
|
|
5
|
-
import { jsonBody } from '../../http/validation.js';
|
|
6
5
|
// Per-USER locally-run model endpoints (Ollama / LM Studio / llama.cpp / vLLM / custom
|
|
7
6
|
// OpenAI-compatible runners). A runner lives on the user's own machine, so endpoints are
|
|
8
7
|
// scoped to the signed-in user — mounted at the root (not under a workspace) and require
|
|
@@ -11,47 +10,47 @@ const signInRequired = (c) => c.json({ error: { code: 'unauthorized', message: '
|
|
|
11
10
|
const unavailable = (c) => c.json({ error: { code: 'unavailable', message: 'Local model runner storage is not configured' } }, 503);
|
|
12
11
|
export function localModelEndpointController() {
|
|
13
12
|
const app = new Hono();
|
|
14
|
-
app
|
|
13
|
+
buildHonoRoute(app, listLocalModelEndpointsContract, async (c) => {
|
|
15
14
|
const local = c.get('container').localModelEndpoints;
|
|
16
15
|
if (!local)
|
|
17
16
|
return unavailable(c);
|
|
18
17
|
const user = c.get('user');
|
|
19
18
|
if (!user)
|
|
20
19
|
return signInRequired(c);
|
|
21
|
-
return c.json({ endpoints: await local.list(user.id) });
|
|
20
|
+
return c.json({ endpoints: await local.list(user.id) }, 200);
|
|
22
21
|
});
|
|
23
|
-
app
|
|
22
|
+
buildHonoRoute(app, upsertLocalModelEndpointContract, async (c) => {
|
|
24
23
|
const local = c.get('container').localModelEndpoints;
|
|
25
24
|
if (!local)
|
|
26
25
|
return unavailable(c);
|
|
27
26
|
const user = c.get('user');
|
|
28
27
|
if (!user)
|
|
29
28
|
return signInRequired(c);
|
|
30
|
-
const provider = v.parse(localRunnerSchema,
|
|
29
|
+
const provider = v.parse(localRunnerSchema, c.req.valid('param').provider);
|
|
31
30
|
const body = c.req.valid('json');
|
|
32
31
|
const endpoint = await local.upsert(user.id, { ...body, provider });
|
|
33
32
|
return c.json(endpoint, 201);
|
|
34
33
|
});
|
|
35
|
-
app
|
|
34
|
+
buildHonoRoute(app, removeLocalModelEndpointContract, async (c) => {
|
|
36
35
|
const local = c.get('container').localModelEndpoints;
|
|
37
36
|
if (!local)
|
|
38
37
|
return unavailable(c);
|
|
39
38
|
const user = c.get('user');
|
|
40
39
|
if (!user)
|
|
41
40
|
return signInRequired(c);
|
|
42
|
-
const provider = v.parse(localRunnerSchema,
|
|
41
|
+
const provider = v.parse(localRunnerSchema, c.req.valid('param').provider);
|
|
43
42
|
await local.remove(user.id, provider);
|
|
44
43
|
return c.body(null, 204);
|
|
45
44
|
});
|
|
46
45
|
// Probe a runner's `/models` server-side so the UI can validate the URL + list models.
|
|
47
|
-
app
|
|
46
|
+
buildHonoRoute(app, testLocalModelEndpointContract, async (c) => {
|
|
48
47
|
const local = c.get('container').localModelEndpoints;
|
|
49
48
|
if (!local)
|
|
50
49
|
return unavailable(c);
|
|
51
50
|
const user = c.get('user');
|
|
52
51
|
if (!user)
|
|
53
52
|
return signInRequired(c);
|
|
54
|
-
return c.json(await local.testConnection(c.req.valid('json')));
|
|
53
|
+
return c.json(await local.testConnection(c.req.valid('json')), 200);
|
|
55
54
|
});
|
|
56
55
|
return app;
|
|
57
56
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LocalModelEndpointController.js","sourceRoot":"","sources":["../../../src/modules/localModels/LocalModelEndpointController.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,
|
|
1
|
+
{"version":3,"file":"LocalModelEndpointController.js","sourceRoot":"","sources":["../../../src/modules/localModels/LocalModelEndpointController.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LocalSettingsController.d.ts","sourceRoot":"","sources":["../../../src/modules/localSettings/LocalSettingsController.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"LocalSettingsController.d.ts","sourceRoot":"","sources":["../../../src/modules/localSettings/LocalSettingsController.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAE3B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAE/C;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,IAAI,IAAI,CAAC,MAAM,CAAC,CA2BtD"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { getLocalSettingsContract, updateLocalSettingsContract } from '@cat-factory/contracts';
|
|
2
|
+
import { buildHonoRoute } from '@toad-contracts/hono';
|
|
2
3
|
import { Hono } from 'hono';
|
|
3
|
-
import { jsonBody } from '../../http/validation.js';
|
|
4
4
|
/**
|
|
5
5
|
* Local-mode operational settings (warm-container-pool sizing + per-repo checkout reuse),
|
|
6
6
|
* a per-deployment singleton that replaced the old `LOCAL_POOL_*` / `HARNESS_*` env vars.
|
|
@@ -18,17 +18,17 @@ export function localSettingsController() {
|
|
|
18
18
|
message: 'Local-mode settings are only available on the local-mode service',
|
|
19
19
|
},
|
|
20
20
|
}, 503);
|
|
21
|
-
app
|
|
21
|
+
buildHonoRoute(app, getLocalSettingsContract, async (c) => {
|
|
22
22
|
const container = c.get('container');
|
|
23
23
|
if (!container.localSettings)
|
|
24
24
|
return unavailable(c);
|
|
25
|
-
return c.json(await container.localSettings.service.read());
|
|
25
|
+
return c.json(await container.localSettings.service.read(), 200);
|
|
26
26
|
});
|
|
27
|
-
app
|
|
27
|
+
buildHonoRoute(app, updateLocalSettingsContract, async (c) => {
|
|
28
28
|
const container = c.get('container');
|
|
29
29
|
if (!container.localSettings)
|
|
30
30
|
return unavailable(c);
|
|
31
|
-
return c.json(await container.localSettings.service.write(c.req.valid('json')));
|
|
31
|
+
return c.json(await container.localSettings.service.write(c.req.valid('json')), 200);
|
|
32
32
|
});
|
|
33
33
|
return app;
|
|
34
34
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LocalSettingsController.js","sourceRoot":"","sources":["../../../src/modules/localSettings/LocalSettingsController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"LocalSettingsController.js","sourceRoot":"","sources":["../../../src/modules/localSettings/LocalSettingsController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,2BAA2B,EAAE,MAAM,wBAAwB,CAAA;AAC9F,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACrD,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAI3B;;;;;;;;GAQG;AACH,MAAM,UAAU,uBAAuB;IACrC,MAAM,GAAG,GAAG,IAAI,IAAI,EAAU,CAAA;IAE9B,MAAM,WAAW,GAAG,CAAmB,CAAa,EAAE,EAAE,CACtD,CAAC,CAAC,IAAI,CACJ;QACE,KAAK,EAAE;YACL,IAAI,EAAE,aAAa;YACnB,OAAO,EAAE,kEAAkE;SAC5E;KACF,EACD,GAAG,CACJ,CAAA;IAEH,cAAc,CAAC,GAAG,EAAE,wBAAwB,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QACxD,MAAM,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;QACpC,IAAI,CAAC,SAAS,CAAC,aAAa;YAAE,OAAO,WAAW,CAAC,CAAC,CAAC,CAAA;QACnD,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,SAAS,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,GAAG,CAAC,CAAA;IAClE,CAAC,CAAC,CAAA;IAEF,cAAc,CAAC,GAAG,EAAE,2BAA2B,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QAC3D,MAAM,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;QACpC,IAAI,CAAC,SAAS,CAAC,aAAa;YAAE,OAAO,WAAW,CAAC,CAAC,CAAC,CAAA;QACnD,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,SAAS,CAAC,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;IACtF,CAAC,CAAC,CAAA;IAEF,OAAO,GAAG,CAAA;AACZ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MergePresetController.d.ts","sourceRoot":"","sources":["../../../src/modules/merge/MergePresetController.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"MergePresetController.d.ts","sourceRoot":"","sources":["../../../src/modules/merge/MergePresetController.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAE3B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAW/C;;;;GAIG;AACH,wBAAgB,qBAAqB,IAAI,IAAI,CAAC,MAAM,CAAC,CAmCpD"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { createMergePresetContract, deleteMergePresetContract, listMergePresetsContract, updateMergePresetContract, } from '@cat-factory/contracts';
|
|
2
|
+
import { buildHonoRoute } from '@toad-contracts/hono';
|
|
2
3
|
import { Hono } from 'hono';
|
|
3
4
|
import { param } from '../../http/params.js';
|
|
4
|
-
import { jsonBody } from '../../http/validation.js';
|
|
5
5
|
/** Resolve the merge-preset module or send a 503, returning null when unconfigured. */
|
|
6
6
|
function requireMergePresets(c) {
|
|
7
7
|
return c.get('container').mergePresets ?? null;
|
|
@@ -14,31 +14,31 @@ const unavailable = (c) => c.json({ error: { code: 'unavailable', message: 'Merg
|
|
|
14
14
|
*/
|
|
15
15
|
export function mergePresetController() {
|
|
16
16
|
const app = new Hono();
|
|
17
|
-
app
|
|
17
|
+
buildHonoRoute(app, listMergePresetsContract, async (c) => {
|
|
18
18
|
const presets = requireMergePresets(c);
|
|
19
19
|
if (!presets)
|
|
20
20
|
return unavailable(c);
|
|
21
|
-
return c.json(await presets.service.list(param(c, 'workspaceId')));
|
|
21
|
+
return c.json(await presets.service.list(param(c, 'workspaceId')), 200);
|
|
22
22
|
});
|
|
23
|
-
app
|
|
23
|
+
buildHonoRoute(app, createMergePresetContract, async (c) => {
|
|
24
24
|
const presets = requireMergePresets(c);
|
|
25
25
|
if (!presets)
|
|
26
26
|
return unavailable(c);
|
|
27
27
|
const preset = await presets.service.create(param(c, 'workspaceId'), c.req.valid('json'));
|
|
28
28
|
return c.json(preset, 201);
|
|
29
29
|
});
|
|
30
|
-
app
|
|
30
|
+
buildHonoRoute(app, updateMergePresetContract, async (c) => {
|
|
31
31
|
const presets = requireMergePresets(c);
|
|
32
32
|
if (!presets)
|
|
33
33
|
return unavailable(c);
|
|
34
|
-
const preset = await presets.service.update(param(c, 'workspaceId'),
|
|
35
|
-
return c.json(preset);
|
|
34
|
+
const preset = await presets.service.update(param(c, 'workspaceId'), c.req.valid('param').presetId, c.req.valid('json'));
|
|
35
|
+
return c.json(preset, 200);
|
|
36
36
|
});
|
|
37
|
-
app
|
|
37
|
+
buildHonoRoute(app, deleteMergePresetContract, async (c) => {
|
|
38
38
|
const presets = requireMergePresets(c);
|
|
39
39
|
if (!presets)
|
|
40
40
|
return unavailable(c);
|
|
41
|
-
await presets.service.remove(param(c, 'workspaceId'),
|
|
41
|
+
await presets.service.remove(param(c, 'workspaceId'), c.req.valid('param').presetId);
|
|
42
42
|
return c.body(null, 204);
|
|
43
43
|
});
|
|
44
44
|
return app;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MergePresetController.js","sourceRoot":"","sources":["../../../src/modules/merge/MergePresetController.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"MergePresetController.js","sourceRoot":"","sources":["../../../src/modules/merge/MergePresetController.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ModelPresetController.d.ts","sourceRoot":"","sources":["../../../src/modules/modelPresets/ModelPresetController.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ModelPresetController.d.ts","sourceRoot":"","sources":["../../../src/modules/modelPresets/ModelPresetController.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAE3B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAW/C;;;;;GAKG;AACH,wBAAgB,qBAAqB,IAAI,IAAI,CAAC,MAAM,CAAC,CAmCpD"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { createModelPresetContract, deleteModelPresetContract, listModelPresetsContract, updateModelPresetContract, } from '@cat-factory/contracts';
|
|
2
|
+
import { buildHonoRoute } from '@toad-contracts/hono';
|
|
2
3
|
import { Hono } from 'hono';
|
|
3
4
|
import { param } from '../../http/params.js';
|
|
4
|
-
import { jsonBody } from '../../http/validation.js';
|
|
5
5
|
/** Resolve the model-preset module or send a 503, returning null when unconfigured. */
|
|
6
6
|
function requireModelPresets(c) {
|
|
7
7
|
return c.get('container').modelPresets ?? null;
|
|
@@ -15,31 +15,31 @@ const unavailable = (c) => c.json({ error: { code: 'unavailable', message: 'Mode
|
|
|
15
15
|
*/
|
|
16
16
|
export function modelPresetController() {
|
|
17
17
|
const app = new Hono();
|
|
18
|
-
app
|
|
18
|
+
buildHonoRoute(app, listModelPresetsContract, async (c) => {
|
|
19
19
|
const presets = requireModelPresets(c);
|
|
20
20
|
if (!presets)
|
|
21
21
|
return unavailable(c);
|
|
22
|
-
return c.json(await presets.service.list(param(c, 'workspaceId')));
|
|
22
|
+
return c.json(await presets.service.list(param(c, 'workspaceId')), 200);
|
|
23
23
|
});
|
|
24
|
-
app
|
|
24
|
+
buildHonoRoute(app, createModelPresetContract, async (c) => {
|
|
25
25
|
const presets = requireModelPresets(c);
|
|
26
26
|
if (!presets)
|
|
27
27
|
return unavailable(c);
|
|
28
28
|
const preset = await presets.service.create(param(c, 'workspaceId'), c.req.valid('json'));
|
|
29
29
|
return c.json(preset, 201);
|
|
30
30
|
});
|
|
31
|
-
app
|
|
31
|
+
buildHonoRoute(app, updateModelPresetContract, async (c) => {
|
|
32
32
|
const presets = requireModelPresets(c);
|
|
33
33
|
if (!presets)
|
|
34
34
|
return unavailable(c);
|
|
35
|
-
const preset = await presets.service.update(param(c, 'workspaceId'),
|
|
36
|
-
return c.json(preset);
|
|
35
|
+
const preset = await presets.service.update(param(c, 'workspaceId'), c.req.valid('param').presetId, c.req.valid('json'));
|
|
36
|
+
return c.json(preset, 200);
|
|
37
37
|
});
|
|
38
|
-
app
|
|
38
|
+
buildHonoRoute(app, deleteModelPresetContract, async (c) => {
|
|
39
39
|
const presets = requireModelPresets(c);
|
|
40
40
|
if (!presets)
|
|
41
41
|
return unavailable(c);
|
|
42
|
-
await presets.service.remove(param(c, 'workspaceId'),
|
|
42
|
+
await presets.service.remove(param(c, 'workspaceId'), c.req.valid('param').presetId);
|
|
43
43
|
return c.body(null, 204);
|
|
44
44
|
});
|
|
45
45
|
return app;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ModelPresetController.js","sourceRoot":"","sources":["../../../src/modules/modelPresets/ModelPresetController.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"ModelPresetController.js","sourceRoot":"","sources":["../../../src/modules/modelPresets/ModelPresetController.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ModelController.d.ts","sourceRoot":"","sources":["../../../src/modules/models/ModelController.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ModelController.d.ts","sourceRoot":"","sources":["../../../src/modules/models/ModelController.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAC3B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAI/C;;;;;;GAMG;AACH,wBAAgB,eAAe,IAAI,IAAI,CAAC,MAAM,CAAC,CAyC9C"}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
|
+
import { listModelsContract, listWorkspaceModelsContract } from '@cat-factory/contracts';
|
|
1
2
|
import { effectiveCatalogWith, localSelectableModels, openRouterSelectableModels, } from '@cat-factory/kernel';
|
|
2
3
|
import { modelCostResolver, withDynamicPrices } from '@cat-factory/spend';
|
|
4
|
+
import { buildHonoRoute } from '@toad-contracts/hono';
|
|
3
5
|
import { Hono } from 'hono';
|
|
4
6
|
import { param } from '../../http/params.js';
|
|
5
7
|
import { resolveWorkspaceCapabilities } from '../../agents/providerCapabilities.js';
|
|
@@ -15,13 +17,13 @@ export function modelController() {
|
|
|
15
17
|
// Deployment-level catalog (no workspace context): deployment-wide selectability
|
|
16
18
|
// only (no per-workspace direct keys / subscriptions). The picker uses the
|
|
17
19
|
// per-workspace route below; this stays for contexts without a workspace.
|
|
18
|
-
app
|
|
20
|
+
buildHonoRoute(app, listModelsContract, (c) => {
|
|
19
21
|
c.header('Cache-Control', 'public, max-age=60');
|
|
20
|
-
return c.json(c.get('container').config.models);
|
|
22
|
+
return c.json(c.get('container').config.models, 200);
|
|
21
23
|
});
|
|
22
24
|
// Per-workspace catalog: selectability reflects this workspace's (+ its account's +
|
|
23
25
|
// the caller's) configured API keys and subscription tokens.
|
|
24
|
-
app
|
|
26
|
+
buildHonoRoute(app, listWorkspaceModelsContract, async (c) => {
|
|
25
27
|
const container = c.get('container');
|
|
26
28
|
const workspaceId = param(c, 'workspaceId');
|
|
27
29
|
const userId = c.get('user')?.id;
|
|
@@ -37,7 +39,7 @@ export function modelController() {
|
|
|
37
39
|
? await container.openRouterCatalog.capabilitiesFor(workspaceId)
|
|
38
40
|
: [];
|
|
39
41
|
const costFor = modelCostResolver(withDynamicPrices(container.config.spend, openRouter));
|
|
40
|
-
return c.json(effectiveCatalogWith([...localSelectableModels(local), ...openRouterSelectableModels(openRouter)], caps, costFor));
|
|
42
|
+
return c.json(effectiveCatalogWith([...localSelectableModels(local), ...openRouterSelectableModels(openRouter)], caps, costFor), 200);
|
|
41
43
|
});
|
|
42
44
|
return app;
|
|
43
45
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ModelController.js","sourceRoot":"","sources":["../../../src/modules/models/ModelController.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,0BAA0B,GAC3B,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AACzE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAE3B,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAA;AAC5C,OAAO,EAAE,4BAA4B,EAAE,MAAM,sCAAsC,CAAA;AAEnF;;;;;;GAMG;AACH,MAAM,UAAU,eAAe;IAC7B,MAAM,GAAG,GAAG,IAAI,IAAI,EAAU,CAAA;IAE9B,iFAAiF;IACjF,2EAA2E;IAC3E,0EAA0E;IAC1E,
|
|
1
|
+
{"version":3,"file":"ModelController.js","sourceRoot":"","sources":["../../../src/modules/models/ModelController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,2BAA2B,EAAE,MAAM,wBAAwB,CAAA;AACxF,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,0BAA0B,GAC3B,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AACzE,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACrD,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAE3B,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAA;AAC5C,OAAO,EAAE,4BAA4B,EAAE,MAAM,sCAAsC,CAAA;AAEnF;;;;;;GAMG;AACH,MAAM,UAAU,eAAe;IAC7B,MAAM,GAAG,GAAG,IAAI,IAAI,EAAU,CAAA;IAE9B,iFAAiF;IACjF,2EAA2E;IAC3E,0EAA0E;IAC1E,cAAc,CAAC,GAAG,EAAE,kBAAkB,EAAE,CAAC,CAAC,EAAE,EAAE;QAC5C,CAAC,CAAC,MAAM,CAAC,eAAe,EAAE,oBAAoB,CAAC,CAAA;QAC/C,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IACtD,CAAC,CAAC,CAAA;IAEF,oFAAoF;IACpF,6DAA6D;IAC7D,cAAc,CAAC,GAAG,EAAE,2BAA2B,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QAC3D,MAAM,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;QACpC,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC,CAAA;QAC3C,MAAM,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,CAAA;QAChC,MAAM,IAAI,GAAG,MAAM,4BAA4B,CAAC,SAAS,EAAE,WAAW,EAAE,MAAM,CAAC,CAAA;QAC/E,qFAAqF;QACrF,kFAAkF;QAClF,MAAM,KAAK,GACT,MAAM,IAAI,SAAS,CAAC,mBAAmB;YACrC,CAAC,CAAC,MAAM,SAAS,CAAC,mBAAmB,CAAC,eAAe,CAAC,MAAM,CAAC;YAC7D,CAAC,CAAC,EAAE,CAAA;QACR,sFAAsF;QACtF,wFAAwF;QACxF,MAAM,UAAU,GAAG,SAAS,CAAC,iBAAiB;YAC5C,CAAC,CAAC,MAAM,SAAS,CAAC,iBAAiB,CAAC,eAAe,CAAC,WAAW,CAAC;YAChE,CAAC,CAAC,EAAE,CAAA;QACN,MAAM,OAAO,GAAG,iBAAiB,CAAC,iBAAiB,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,CAAA;QACxF,OAAO,CAAC,CAAC,IAAI,CACX,oBAAoB,CAClB,CAAC,GAAG,qBAAqB,CAAC,KAAK,CAAC,EAAE,GAAG,0BAA0B,CAAC,UAAU,CAAC,CAAC,EAC5E,IAAI,EACJ,OAAO,CACR,EACD,GAAG,CACJ,CAAA;IACH,CAAC,CAAC,CAAA;IAEF,OAAO,GAAG,CAAA;AACZ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NotificationController.d.ts","sourceRoot":"","sources":["../../../src/modules/notifications/NotificationController.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"NotificationController.d.ts","sourceRoot":"","sources":["../../../src/modules/notifications/NotificationController.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAG3B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAW/C;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,IAAI,IAAI,CAAC,MAAM,CAAC,CA0DrD"}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { actNotificationContract, dismissNotificationContract, listNotificationsContract, } from '@cat-factory/contracts';
|
|
2
2
|
import { NotFoundError } from '@cat-factory/kernel';
|
|
3
|
+
import { buildHonoRoute } from '@toad-contracts/hono';
|
|
4
|
+
import { Hono } from 'hono';
|
|
3
5
|
import { runWithInitiator } from '../../github/runInitiatorContext.js';
|
|
4
6
|
import { param } from '../../http/params.js';
|
|
5
7
|
/** Resolve the notifications module or send a 503, returning null when unconfigured. */
|
|
@@ -19,24 +21,24 @@ const unavailable = (c) => c.json({ error: { code: 'unavailable', message: 'Noti
|
|
|
19
21
|
export function notificationController() {
|
|
20
22
|
const app = new Hono();
|
|
21
23
|
// Open notifications for the board inbox (the snapshot also carries these).
|
|
22
|
-
app
|
|
24
|
+
buildHonoRoute(app, listNotificationsContract, async (c) => {
|
|
23
25
|
const notifications = requireNotifications(c);
|
|
24
26
|
if (!notifications)
|
|
25
27
|
return unavailable(c);
|
|
26
|
-
return c.json(await notifications.service.listOpen(param(c, 'workspaceId')));
|
|
28
|
+
return c.json(await notifications.service.listOpen(param(c, 'workspaceId')), 200);
|
|
27
29
|
});
|
|
28
30
|
// Act on a notification: run its side-effect, then mark it acted.
|
|
29
|
-
app
|
|
31
|
+
buildHonoRoute(app, actNotificationContract, async (c) => {
|
|
30
32
|
const notifications = requireNotifications(c);
|
|
31
33
|
if (!notifications)
|
|
32
34
|
return unavailable(c);
|
|
33
35
|
const workspaceId = param(c, 'workspaceId');
|
|
34
|
-
const id =
|
|
36
|
+
const id = c.req.valid('param').notificationId;
|
|
35
37
|
const notification = await notifications.service.get(workspaceId, id);
|
|
36
38
|
if (!notification)
|
|
37
39
|
throw new NotFoundError('Notification', id);
|
|
38
40
|
if (notification.status !== 'open')
|
|
39
|
-
return c.json(notification);
|
|
41
|
+
return c.json(notification, 200);
|
|
40
42
|
const container = c.get('container');
|
|
41
43
|
switch (notification.type) {
|
|
42
44
|
case 'merge_review':
|
|
@@ -55,14 +57,14 @@ export function notificationController() {
|
|
|
55
57
|
}
|
|
56
58
|
break;
|
|
57
59
|
}
|
|
58
|
-
return c.json(await notifications.service.resolve(workspaceId, id, 'act'));
|
|
60
|
+
return c.json(await notifications.service.resolve(workspaceId, id, 'act'), 200);
|
|
59
61
|
});
|
|
60
62
|
// Dismiss a notification without acting on it.
|
|
61
|
-
app
|
|
63
|
+
buildHonoRoute(app, dismissNotificationContract, async (c) => {
|
|
62
64
|
const notifications = requireNotifications(c);
|
|
63
65
|
if (!notifications)
|
|
64
66
|
return unavailable(c);
|
|
65
|
-
return c.json(await notifications.service.resolve(param(c, 'workspaceId'),
|
|
67
|
+
return c.json(await notifications.service.resolve(param(c, 'workspaceId'), c.req.valid('param').notificationId, 'dismiss'), 200);
|
|
66
68
|
});
|
|
67
69
|
return app;
|
|
68
70
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NotificationController.js","sourceRoot":"","sources":["../../../src/modules/notifications/NotificationController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"NotificationController.js","sourceRoot":"","sources":["../../../src/modules/notifications/NotificationController.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OpenRouterCatalogController.d.ts","sourceRoot":"","sources":["../../../src/modules/openrouter/OpenRouterCatalogController.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"OpenRouterCatalogController.d.ts","sourceRoot":"","sources":["../../../src/modules/openrouter/OpenRouterCatalogController.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAE3B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAoB/C,wBAAgB,2BAA2B,IAAI,IAAI,CAAC,MAAM,CAAC,CA+B1D"}
|
|
@@ -1,45 +1,44 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { getOpenRouterCatalogContract, refreshOpenRouterCatalogContract, upsertOpenRouterCatalogContract, } from '@cat-factory/contracts';
|
|
2
|
+
import { buildHonoRoute } from '@toad-contracts/hono';
|
|
2
3
|
import { Hono } from 'hono';
|
|
3
|
-
import { param } from '../../http/params.js';
|
|
4
|
-
import { jsonBody } from '../../http/validation.js';
|
|
5
4
|
// Per-WORKSPACE OpenRouter dynamic catalog. OpenRouter is a single OpenAI-compatible
|
|
6
5
|
// gateway to 300+ models reached via the workspace's API-key pool; a workspace browses the
|
|
7
6
|
// live catalog (`/refresh`, leasing the pooled OpenRouter key server-side) and enables a
|
|
8
7
|
// subset (`PUT /catalog`). The enabled models surface in the per-workspace model picker and
|
|
9
|
-
// feed the spend budget. Mounted
|
|
8
|
+
// feed the spend budget. Mounted at `/` (workspaceId is a path param); requires a signed-in user.
|
|
10
9
|
const signInRequired = (c) => c.json({ error: { code: 'unauthorized', message: 'Sign in to manage the OpenRouter catalog' } }, 401);
|
|
11
10
|
const unavailable = (c) => c.json({ error: { code: 'unavailable', message: 'OpenRouter catalog storage is not configured' } }, 503);
|
|
12
11
|
export function openRouterCatalogController() {
|
|
13
12
|
const app = new Hono();
|
|
14
13
|
// The workspace's enabled OpenRouter models (empty when none configured yet).
|
|
15
|
-
app
|
|
14
|
+
buildHonoRoute(app, getOpenRouterCatalogContract, async (c) => {
|
|
16
15
|
const svc = c.get('container').openRouterCatalog;
|
|
17
16
|
if (!svc)
|
|
18
17
|
return unavailable(c);
|
|
19
18
|
if (!c.get('user'))
|
|
20
19
|
return signInRequired(c);
|
|
21
|
-
return c.json(await svc.get(
|
|
20
|
+
return c.json(await svc.get(c.req.valid('param').workspaceId), 200);
|
|
22
21
|
});
|
|
23
22
|
// Replace the workspace's enabled subset (the client sends each model's metadata it read
|
|
24
23
|
// from the browse list, so the server + spend table get accurate context + pricing).
|
|
25
|
-
app
|
|
24
|
+
buildHonoRoute(app, upsertOpenRouterCatalogContract, async (c) => {
|
|
26
25
|
const svc = c.get('container').openRouterCatalog;
|
|
27
26
|
if (!svc)
|
|
28
27
|
return unavailable(c);
|
|
29
28
|
if (!c.get('user'))
|
|
30
29
|
return signInRequired(c);
|
|
31
|
-
return c.json(await svc.upsert(
|
|
30
|
+
return c.json(await svc.upsert(c.req.valid('param').workspaceId, c.req.valid('json')), 200);
|
|
32
31
|
});
|
|
33
32
|
// Probe OpenRouter's live `/models` for the browse list (leases the workspace's pooled
|
|
34
33
|
// OpenRouter key server-side). Never throws — failures come back as { reachable: false }.
|
|
35
|
-
app
|
|
34
|
+
buildHonoRoute(app, refreshOpenRouterCatalogContract, async (c) => {
|
|
36
35
|
const svc = c.get('container').openRouterCatalog;
|
|
37
36
|
if (!svc)
|
|
38
37
|
return unavailable(c);
|
|
39
38
|
const user = c.get('user');
|
|
40
39
|
if (!user)
|
|
41
40
|
return signInRequired(c);
|
|
42
|
-
return c.json(await svc.refresh(
|
|
41
|
+
return c.json(await svc.refresh(c.req.valid('param').workspaceId, { userId: user.id }), 200);
|
|
43
42
|
});
|
|
44
43
|
return app;
|
|
45
44
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OpenRouterCatalogController.js","sourceRoot":"","sources":["../../../src/modules/openrouter/OpenRouterCatalogController.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"OpenRouterCatalogController.js","sourceRoot":"","sources":["../../../src/modules/openrouter/OpenRouterCatalogController.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,4BAA4B,EAC5B,gCAAgC,EAChC,+BAA+B,GAChC,MAAM,wBAAwB,CAAA;AAC/B,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACrD,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAI3B,qFAAqF;AACrF,2FAA2F;AAC3F,yFAAyF;AACzF,4FAA4F;AAC5F,kGAAkG;AAElG,MAAM,cAAc,GAAG,CAAmB,CAAa,EAAE,EAAE,CACzD,CAAC,CAAC,IAAI,CACJ,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,0CAA0C,EAAE,EAAE,EACxF,GAAG,CACJ,CAAA;AAEH,MAAM,WAAW,GAAG,CAAmB,CAAa,EAAE,EAAE,CACtD,CAAC,CAAC,IAAI,CACJ,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,8CAA8C,EAAE,EAAE,EAC3F,GAAG,CACJ,CAAA;AAEH,MAAM,UAAU,2BAA2B;IACzC,MAAM,GAAG,GAAG,IAAI,IAAI,EAAU,CAAA;IAE9B,8EAA8E;IAC9E,cAAc,CAAC,GAAG,EAAE,4BAA4B,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QAC5D,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,iBAAiB,CAAA;QAChD,IAAI,CAAC,GAAG;YAAE,OAAO,WAAW,CAAC,CAAC,CAAC,CAAA;QAC/B,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC;YAAE,OAAO,cAAc,CAAC,CAAC,CAAC,CAAA;QAC5C,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,EAAE,GAAG,CAAC,CAAA;IACrE,CAAC,CAAC,CAAA;IAEF,yFAAyF;IACzF,qFAAqF;IACrF,cAAc,CAAC,GAAG,EAAE,+BAA+B,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QAC/D,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,iBAAiB,CAAA;QAChD,IAAI,CAAC,GAAG;YAAE,OAAO,WAAW,CAAC,CAAC,CAAC,CAAA;QAC/B,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC;YAAE,OAAO,cAAc,CAAC,CAAC,CAAC,CAAA;QAC5C,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;IAC7F,CAAC,CAAC,CAAA;IAEF,uFAAuF;IACvF,0FAA0F;IAC1F,cAAc,CAAC,GAAG,EAAE,gCAAgC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QAChE,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,iBAAiB,CAAA;QAChD,IAAI,CAAC,GAAG;YAAE,OAAO,WAAW,CAAC,CAAC,CAAC,CAAA;QAC/B,MAAM,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;QAC1B,IAAI,CAAC,IAAI;YAAE,OAAO,cAAc,CAAC,CAAC,CAAC,CAAA;QACnC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,CAAA;IAC9F,CAAC,CAAC,CAAA;IAEF,OAAO,GAAG,CAAA;AACZ,CAAC"}
|