@cat-factory/server 0.273.0 → 0.275.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/ModelRouter.d.ts.map +1 -1
- package/dist/agents/ModelRouter.js +10 -0
- package/dist/agents/ModelRouter.js.map +1 -1
- package/dist/agents/providerCapabilities.d.ts +14 -1
- package/dist/agents/providerCapabilities.d.ts.map +1 -1
- package/dist/agents/providerCapabilities.js +14 -3
- package/dist/agents/providerCapabilities.js.map +1 -1
- package/dist/http/runAdmission.d.ts +27 -1
- package/dist/http/runAdmission.d.ts.map +1 -1
- package/dist/http/runAdmission.js +32 -0
- package/dist/http/runAdmission.js.map +1 -1
- package/dist/modules/localModels/LocalModelEndpointController.d.ts.map +1 -1
- package/dist/modules/localModels/LocalModelEndpointController.js +12 -0
- package/dist/modules/localModels/LocalModelEndpointController.js.map +1 -1
- package/dist/modules/models/workspaceCatalog.d.ts.map +1 -1
- package/dist/modules/models/workspaceCatalog.js +4 -0
- package/dist/modules/models/workspaceCatalog.js.map +1 -1
- package/dist/modules/providers/personalCredentialGate.d.ts +31 -3
- package/dist/modules/providers/personalCredentialGate.d.ts.map +1 -1
- package/dist/modules/providers/personalCredentialGate.js +46 -4
- package/dist/modules/providers/personalCredentialGate.js.map +1 -1
- package/dist/modules/publicApi/PublicApiController.d.ts.map +1 -1
- package/dist/modules/publicApi/PublicApiController.js +85 -43
- 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 +18 -2
- package/dist/modules/publicApi/PublicApiKeyController.js.map +1 -1
- package/dist/modules/publicApi/PublicKeyController.d.ts.map +1 -1
- package/dist/modules/publicApi/PublicKeyController.js +6 -0
- package/dist/modules/publicApi/PublicKeyController.js.map +1 -1
- package/dist/modules/publicApi/PublicProvisioningController.d.ts.map +1 -1
- package/dist/modules/publicApi/PublicProvisioningController.js +33 -11
- package/dist/modules/publicApi/PublicProvisioningController.js.map +1 -1
- package/dist/modules/publicApi/decisions/scope.d.ts +10 -1
- package/dist/modules/publicApi/decisions/scope.d.ts.map +1 -1
- package/dist/modules/publicApi/decisions/scope.js +59 -2
- package/dist/modules/publicApi/decisions/scope.js.map +1 -1
- package/dist/modules/publicApi/keyProjection.d.ts.map +1 -1
- package/dist/modules/publicApi/keyProjection.js +1 -0
- package/dist/modules/publicApi/keyProjection.js.map +1 -1
- package/dist/modules/publicApi/openapiDocument.generated.d.ts +1 -1
- package/dist/modules/publicApi/openapiDocument.generated.d.ts.map +1 -1
- package/dist/modules/publicApi/openapiDocument.generated.js +1 -1
- package/dist/modules/publicApi/openapiDocument.generated.js.map +1 -1
- package/dist/modules/publicApi/personalUnlock.d.ts +51 -0
- package/dist/modules/publicApi/personalUnlock.d.ts.map +1 -0
- package/dist/modules/publicApi/personalUnlock.js +45 -0
- package/dist/modules/publicApi/personalUnlock.js.map +1 -0
- package/package.json +8 -8
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ModelRouter.d.ts","sourceRoot":"","sources":["../../src/agents/ModelRouter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EACf,WAAW,EACX,QAAQ,EACR,kBAAkB,EACnB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAEtD,OAAO,EAAE,KAAK,YAAY,EAA4C,MAAM,qBAAqB,CAAA;AAEjG,iGAAiG;AACjG,MAAM,WAAW,uBAAuB;IACtC,yEAAyE;IACzE,YAAY,EAAE,YAAY,CAAA;IAC1B,2FAA2F;IAC3F,iBAAiB,EAAE,CACjB,OAAO,EAAE,MAAM,GAAG,SAAS,EAC3B,kBAAkB,CAAC,EAAE,SAAS,WAAW,EAAE,KACxC,QAAQ,GAAG,SAAS,CAAA;IACzB;;;OAGG;IACH,4BAA4B,CAAC,EAAE,CAC7B,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,aAAa,CAAC,EAAE,MAAM,KACnB,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAA;IAChC;;;;;OAKG;IACH,oBAAoB,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,kBAAkB,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;IAC5F;;;;;;OAMG;IACH,uBAAuB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,kBAAkB,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;CAC3F;AAED;;;;;;GAMG;AACH,qBAAa,WAAW;IACV,OAAO,CAAC,QAAQ,CAAC,IAAI;IAAjC,YAA6B,IAAI,EAAE,uBAAuB,EAAI;IAE9D;;;;OAIG;IACH,UAAU,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,QAAQ,CAAC,
|
|
1
|
+
{"version":3,"file":"ModelRouter.d.ts","sourceRoot":"","sources":["../../src/agents/ModelRouter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EACf,WAAW,EACX,QAAQ,EACR,kBAAkB,EACnB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAEtD,OAAO,EAAE,KAAK,YAAY,EAA4C,MAAM,qBAAqB,CAAA;AAEjG,iGAAiG;AACjG,MAAM,WAAW,uBAAuB;IACtC,yEAAyE;IACzE,YAAY,EAAE,YAAY,CAAA;IAC1B,2FAA2F;IAC3F,iBAAiB,EAAE,CACjB,OAAO,EAAE,MAAM,GAAG,SAAS,EAC3B,kBAAkB,CAAC,EAAE,SAAS,WAAW,EAAE,KACxC,QAAQ,GAAG,SAAS,CAAA;IACzB;;;OAGG;IACH,4BAA4B,CAAC,EAAE,CAC7B,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,aAAa,CAAC,EAAE,MAAM,KACnB,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAA;IAChC;;;;;OAKG;IACH,oBAAoB,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,kBAAkB,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;IAC5F;;;;;;OAMG;IACH,uBAAuB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,kBAAkB,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;CAC3F;AAED;;;;;;GAMG;AACH,qBAAa,WAAW;IACV,OAAO,CAAC,QAAQ,CAAC,IAAI;IAAjC,YAA6B,IAAI,EAAE,uBAAuB,EAAI;IAE9D;;;;OAIG;IACH,UAAU,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,QAAQ,CAAC,CA4BtD;IAED;;;;;OAKG;YACW,uBAAuB;IAcrC;;;;;;;;;;OAUG;IACG,mBAAmB,CACvB,OAAO,EAAE,eAAe,EACxB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC;QAAE,GAAG,EAAE,QAAQ,CAAC;QAAC,kBAAkB,CAAC,EAAE,kBAAkB,CAAA;KAAE,CAAC,CA2BrE;IAED;;;;;;;;;;;OAWG;IACG,kBAAkB,CACtB,OAAO,EAAE,eAAe,EACxB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC;QAAE,GAAG,EAAE,QAAQ,CAAC;QAAC,OAAO,EAAE,WAAW,CAAC;QAAC,kBAAkB,CAAC,EAAE,kBAAkB,CAAA;KAAE,CAAC,CAa3F;CACF"}
|
|
@@ -31,6 +31,16 @@ export class ModelRouter {
|
|
|
31
31
|
// Read off the CONTEXT rather than re-derived here, so this router, the inline executor
|
|
32
32
|
// and the consensus panel cannot disagree about which provider a step ran on.
|
|
33
33
|
...(context.providerPreference ? { providerPreference: context.providerPreference } : {}),
|
|
34
|
+
// Likewise the initiator's local-model declarations, folded onto the ref by the shared
|
|
35
|
+
// resolver. Nothing on the CONTAINER path reads the modality today: a local ref names no
|
|
36
|
+
// harness, so this dispatch runs it on Pi, and `dispatchDesignImageDelivery` answers
|
|
37
|
+
// `harness_no_image_input` before it ever asks the ref (the inline executor is the reader
|
|
38
|
+
// that benefits). Threaded here anyway because ONE resolution serving every path is what
|
|
39
|
+
// stops them disagreeing about what a step ran on, so the day an image-carrying harness
|
|
40
|
+
// serves a local model this is a `HARNESS_IMAGE_INPUT` edit rather than new plumbing.
|
|
41
|
+
...(context.localModelDeclarations
|
|
42
|
+
? { localModelDeclarations: context.localModelDeclarations }
|
|
43
|
+
: {}),
|
|
34
44
|
});
|
|
35
45
|
}
|
|
36
46
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ModelRouter.js","sourceRoot":"","sources":["../../src/agents/ModelRouter.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAA;AAC/E,OAAO,EAAqB,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAA;AAqCjG;;;;;;GAMG;AACH,MAAM,OAAO,WAAW;IACO,IAAI;IAAjC,YAA6B,IAA6B;oBAA7B,IAAI;IAA4B,CAAC;IAE9D;;;;OAIG;IACH,UAAU,CAAC,OAAwB;QACjC,OAAO,mBAAmB,CACxB;YACE,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,YAAY;YACpC,iBAAiB,EAAE,IAAI,CAAC,IAAI,CAAC,iBAAiB;YAC9C,4BAA4B,EAAE,IAAI,CAAC,IAAI,CAAC,4BAA4B;SACrE,EACD;YACE,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,YAAY,EAAE,OAAO,CAAC,KAAK,CAAC,OAAO;YACnC,aAAa,EAAE,OAAO,CAAC,KAAK,CAAC,aAAa;YAC1C,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,wFAAwF;YACxF,wFAAwF;YACxF,8EAA8E;YAC9E,GAAG,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,kBAAkB,EAAE,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"ModelRouter.js","sourceRoot":"","sources":["../../src/agents/ModelRouter.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { AccountSettingsService, ApiKeyService, LocalModelEndpointService, OpenRouterCatalogService, PersonalSubscriptionService, ProviderSubscriptionService } from '@cat-factory/integrations';
|
|
2
|
-
import { type AppCaches, type ModelFlavor, type ProviderCapabilities } from '@cat-factory/kernel';
|
|
2
|
+
import { type AppCaches, type HarnessKind, type ModelFlavor, type ProviderCapabilities } from '@cat-factory/kernel';
|
|
3
3
|
export interface CapabilityServices {
|
|
4
4
|
apiKeys?: ApiKeyService;
|
|
5
5
|
subscriptions?: ProviderSubscriptionService;
|
|
@@ -24,6 +24,19 @@ export interface CapabilityServices {
|
|
|
24
24
|
* resolves, so the catalog + start guard don't offer a model that fails at dispatch.
|
|
25
25
|
*/
|
|
26
26
|
baseUrlFor?: (provider: string) => string | null | undefined;
|
|
27
|
+
/**
|
|
28
|
+
* NATIVE LOCAL EXECUTION's allow-list of subscription harnesses (`AppConfig.nativeAmbientAuth`,
|
|
29
|
+
* from `LOCAL_NATIVE_AGENTS`; absent on every other facade).
|
|
30
|
+
*
|
|
31
|
+
* A vendor this serves runs on the developer's OWN installed CLI and its ambient login, so it
|
|
32
|
+
* has no credential to find: nothing is pooled, nothing is personal, and nothing is leased at
|
|
33
|
+
* dispatch. Without it here the deployment answered its own question two different ways — the
|
|
34
|
+
* personal-credential gate correctly dropped such a vendor from the set it demands an unlock
|
|
35
|
+
* for, while the catalog and the pipeline-start guard, reading only the two credential stores,
|
|
36
|
+
* still called the model unconfigured. The visible failure was a Claude-pinned run refused with
|
|
37
|
+
* "no configured provider" on a machine whose `claude` CLI was logged in and would have run it.
|
|
38
|
+
*/
|
|
39
|
+
nativeAmbientAuth?: readonly HarnessKind[];
|
|
27
40
|
/** Per-user locally-run model endpoints (resolved by the requesting/initiating user). */
|
|
28
41
|
localModelEndpoints?: LocalModelEndpointService;
|
|
29
42
|
/** Per-workspace enabled OpenRouter models (the dynamic catalog subset). */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"providerCapabilities.d.ts","sourceRoot":"","sources":["../../src/agents/providerCapabilities.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,sBAAsB,EACtB,aAAa,EACb,yBAAyB,EACzB,wBAAwB,EACxB,2BAA2B,EAC3B,2BAA2B,EAC5B,MAAM,2BAA2B,CAAA;AAClC,OAAO,
|
|
1
|
+
{"version":3,"file":"providerCapabilities.d.ts","sourceRoot":"","sources":["../../src/agents/providerCapabilities.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,sBAAsB,EACtB,aAAa,EACb,yBAAyB,EACzB,wBAAwB,EACxB,2BAA2B,EAC3B,2BAA2B,EAC5B,MAAM,2BAA2B,CAAA;AAClC,OAAO,EAGL,KAAK,SAAS,EACd,KAAK,WAAW,EAEhB,KAAK,WAAW,EAChB,KAAK,oBAAoB,EAE1B,MAAM,qBAAqB,CAAA;AAM5B,MAAM,WAAW,kBAAkB;IACjC,OAAO,CAAC,EAAE,aAAa,CAAA;IACvB,aAAa,CAAC,EAAE,2BAA2B,CAAA;IAC3C,qBAAqB,CAAC,EAAE,2BAA2B,CAAA;IACnD,sFAAsF;IACtF,uBAAuB,CAAC,EAAE,OAAO,CAAA;IACjC;;;;;;;OAOG;IACH,aAAa,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IAC3B;;;;;;;OAOG;IACH,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,GAAG,SAAS,CAAA;IAC5D;;;;;;;;;;;OAWG;IACH,iBAAiB,CAAC,EAAE,SAAS,WAAW,EAAE,CAAA;IAC1C,yFAAyF;IACzF,mBAAmB,CAAC,EAAE,yBAAyB,CAAA;IAC/C,4EAA4E;IAC5E,iBAAiB,CAAC,EAAE,wBAAwB,CAAA;IAC5C;;;OAGG;IACH,eAAe,CAAC,EAAE,sBAAsB,CAAA;IACxC,4FAA4F;IAC5F,kBAAkB,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,CAAA;IAChF;;;;OAIG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAA;IAC9B;;;;OAIG;IACH,MAAM,CAAC,EAAE,SAAS,CAAA;IAClB;;;;;OAKG;IACH,+BAA+B,CAAC,EAAE,CAChC,WAAW,EAAE,MAAM,EACnB,aAAa,CAAC,EAAE,MAAM,KACnB,OAAO,CAAC,SAAS,WAAW,EAAE,GAAG,SAAS,CAAC,CAAA;CACjD;AA6CD,wBAAsB,4BAA4B,CAChD,QAAQ,EAAE,kBAAkB,EAC5B,WAAW,EAAE,MAAM,EACnB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,EACtB,aAAa,CAAC,EAAE,MAAM,GACrB,OAAO,CAAC,oBAAoB,CAAC,CAsE/B"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ALL_SUBSCRIPTION_VENDORS, } from '@cat-factory/kernel';
|
|
1
|
+
import { ALL_SUBSCRIPTION_VENDORS, isAmbientNativeVendor, } from '@cat-factory/kernel';
|
|
2
2
|
// Direct providers whose AI-SDK resolver works without an explicit base URL (the SDK
|
|
3
3
|
// has a built-in default). Every OTHER direct provider is OpenAI-compatible and needs a
|
|
4
4
|
// base URL (see `buildDirectResolver`), so it is unusable until that URL resolves.
|
|
@@ -50,6 +50,15 @@ export async function resolveWorkspaceCapabilities(services, workspaceId, userId
|
|
|
50
50
|
baseUrlFor ? configured.filter((p) => BASE_URL_OPTIONAL.has(p) || !!baseUrlFor(p)) : configured);
|
|
51
51
|
const subscriptionVendors = new Set();
|
|
52
52
|
for (const vendor of ALL_SUBSCRIPTION_VENDORS) {
|
|
53
|
+
// Ambient FIRST, and it short-circuits both credential reads rather than joining them: a
|
|
54
|
+
// vendor the host CLI serves is usable for every initiator of this deployment, including one
|
|
55
|
+
// there is no user for at all, so neither store has anything to say about it. Decided by the
|
|
56
|
+
// SAME predicate the personal-credential gate and the container executor use, so the three
|
|
57
|
+
// halves of the ambient decision cannot drift.
|
|
58
|
+
if (isAmbientNativeVendor(services.nativeAmbientAuth, vendor)) {
|
|
59
|
+
subscriptionVendors.add(vendor);
|
|
60
|
+
continue;
|
|
61
|
+
}
|
|
53
62
|
const pooled = services.subscriptions
|
|
54
63
|
? await services.subscriptions.hasToken(workspaceId, vendor)
|
|
55
64
|
: false;
|
|
@@ -61,12 +70,14 @@ export async function resolveWorkspaceCapabilities(services, workspaceId, userId
|
|
|
61
70
|
}
|
|
62
71
|
// Local runners are per-user: a model is usable when the resolving user has enabled it.
|
|
63
72
|
// Keyed by the dynamic model id (`"<provider>:<model>"`) so usability is model-granular
|
|
64
|
-
// (a runner configured but with this model un-enabled must not pass).
|
|
73
|
+
// (a runner configured but with this model un-enabled must not pass). The id comes off the
|
|
74
|
+
// DECLARATION's own field: each enabled model is an object (the id plus what the user declared
|
|
75
|
+
// about it), and interpolating the object here would key every entry `[object Object]`.
|
|
65
76
|
const localModels = new Set();
|
|
66
77
|
if (userId && services.localModelEndpoints) {
|
|
67
78
|
for (const cap of await services.localModelEndpoints.capabilitiesFor(userId)) {
|
|
68
79
|
for (const model of cap.models)
|
|
69
|
-
localModels.add(`${cap.provider}:${model}`);
|
|
80
|
+
localModels.add(`${cap.provider}:${model.id}`);
|
|
70
81
|
}
|
|
71
82
|
}
|
|
72
83
|
// Dynamic OpenRouter catalog (per-workspace): the enabled slugs gate the dynamic
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"providerCapabilities.js","sourceRoot":"","sources":["../../src/agents/providerCapabilities.ts"],"names":[],"mappings":"AAQA,OAAO,EACL,wBAAwB,
|
|
1
|
+
{"version":3,"file":"providerCapabilities.js","sourceRoot":"","sources":["../../src/agents/providerCapabilities.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { Context } from 'hono';
|
|
2
2
|
import type { WorkspaceRole } from '@cat-factory/contracts';
|
|
3
3
|
import type { GateActor } from '@cat-factory/kernel';
|
|
4
|
-
import type { AppEnv } from './env.js';
|
|
4
|
+
import type { AppEnv, ServerContainer } from './env.js';
|
|
5
5
|
/**
|
|
6
6
|
* The admission facts a run start CONSUMES off the request, in one place.
|
|
7
7
|
*
|
|
@@ -25,6 +25,32 @@ import type { AppEnv } from './env.js';
|
|
|
25
25
|
* absent is deliberately not treated as the lowest tier.
|
|
26
26
|
*/
|
|
27
27
|
export declare function runInitiatorRole<E extends AppEnv>(c: Context<E>): WorkspaceRole | null;
|
|
28
|
+
/**
|
|
29
|
+
* {@link runInitiatorRole}'s twin for a KEY-authenticated start: the role held by the user a
|
|
30
|
+
* public-API key is BOUND to (`PublicApiKeyRecord.actsAsUserId`), or `null` when it is bound to
|
|
31
|
+
* nobody.
|
|
32
|
+
*
|
|
33
|
+
* A separate function because the two read different places for the same fact. An SPA request
|
|
34
|
+
* arrives behind `mountAuthGate`, which has already resolved the caller's access and published it;
|
|
35
|
+
* `/api/v1` has no such gate, because a key is admitted by SCOPE rather than by membership, so the
|
|
36
|
+
* one identity a key can name has to be resolved here. It goes through the same single authority
|
|
37
|
+
* either way (`loadWorkspaceAccess`, ADR 0025) and so reads THROUGH its cache rather than
|
|
38
|
+
* re-deriving membership.
|
|
39
|
+
*
|
|
40
|
+
* Resolving it is what keeps a bound key's run under the SAME policy that person gets in the app.
|
|
41
|
+
* A start that pins an initiator but no role is not a run with a lenient policy, it is a run with
|
|
42
|
+
* no policy: `dryRunForcedForRole` sees no role to sandbox, and both role-scoped merge narrowings
|
|
43
|
+
* pass through unnarrowed, so the key would land what its own holder could not land from the
|
|
44
|
+
* board. That gap has shipped once already, on the bug-hunt adopt route, which is why the accessor
|
|
45
|
+
* exists at all.
|
|
46
|
+
*
|
|
47
|
+
* `null` covers two states on purpose: an unbound key (there is no person, as before) and a bound
|
|
48
|
+
* user whose access no longer resolves (they were removed from the roster since minting). Both are
|
|
49
|
+
* honestly "no tier to scope this run by" rather than a lowest tier, exactly as
|
|
50
|
+
* {@link runInitiatorRole} treats dev-open. The key itself stays authorized by its scope; only the
|
|
51
|
+
* role-shaped narrowing has nothing to say.
|
|
52
|
+
*/
|
|
53
|
+
export declare function keyInitiatorRole(container: ServerContainer, workspaceId: string, userId: string | null): Promise<WorkspaceRole | null>;
|
|
28
54
|
/**
|
|
29
55
|
* The identity RESOLVING a parked gate, for the approver policy a pipeline step may configure
|
|
30
56
|
* (`stepOptions.gateConfig.approvers`) and the quorum it may demand.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runAdmission.d.ts","sourceRoot":"","sources":["../../src/http/runAdmission.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AACnC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAA;AAC3D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAEpD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;
|
|
1
|
+
{"version":3,"file":"runAdmission.d.ts","sourceRoot":"","sources":["../../src/http/runAdmission.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AACnC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAA;AAC3D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAEpD,OAAO,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAGvD;;;;;;;;GAQG;AAEH;;;;;;;;;;;;GAYG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,aAAa,GAAG,IAAI,CAEtF;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAsB,gBAAgB,CACpC,SAAS,EAAE,eAAe,EAC1B,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,GAAG,IAAI,GACpB,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAI/B;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,SAAS,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,SAAS,CAWpE"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { UNATTRIBUTED_GATE_ACTOR } from '@cat-factory/kernel';
|
|
2
|
+
import { loadWorkspaceAccess } from './workspaceAccess.js';
|
|
2
3
|
/**
|
|
3
4
|
* The admission facts a run start CONSUMES off the request, in one place.
|
|
4
5
|
*
|
|
@@ -24,6 +25,37 @@ import { UNATTRIBUTED_GATE_ACTOR } from '@cat-factory/kernel';
|
|
|
24
25
|
export function runInitiatorRole(c) {
|
|
25
26
|
return c.get('workspaceAccess')?.role ?? null;
|
|
26
27
|
}
|
|
28
|
+
/**
|
|
29
|
+
* {@link runInitiatorRole}'s twin for a KEY-authenticated start: the role held by the user a
|
|
30
|
+
* public-API key is BOUND to (`PublicApiKeyRecord.actsAsUserId`), or `null` when it is bound to
|
|
31
|
+
* nobody.
|
|
32
|
+
*
|
|
33
|
+
* A separate function because the two read different places for the same fact. An SPA request
|
|
34
|
+
* arrives behind `mountAuthGate`, which has already resolved the caller's access and published it;
|
|
35
|
+
* `/api/v1` has no such gate, because a key is admitted by SCOPE rather than by membership, so the
|
|
36
|
+
* one identity a key can name has to be resolved here. It goes through the same single authority
|
|
37
|
+
* either way (`loadWorkspaceAccess`, ADR 0025) and so reads THROUGH its cache rather than
|
|
38
|
+
* re-deriving membership.
|
|
39
|
+
*
|
|
40
|
+
* Resolving it is what keeps a bound key's run under the SAME policy that person gets in the app.
|
|
41
|
+
* A start that pins an initiator but no role is not a run with a lenient policy, it is a run with
|
|
42
|
+
* no policy: `dryRunForcedForRole` sees no role to sandbox, and both role-scoped merge narrowings
|
|
43
|
+
* pass through unnarrowed, so the key would land what its own holder could not land from the
|
|
44
|
+
* board. That gap has shipped once already, on the bug-hunt adopt route, which is why the accessor
|
|
45
|
+
* exists at all.
|
|
46
|
+
*
|
|
47
|
+
* `null` covers two states on purpose: an unbound key (there is no person, as before) and a bound
|
|
48
|
+
* user whose access no longer resolves (they were removed from the roster since minting). Both are
|
|
49
|
+
* honestly "no tier to scope this run by" rather than a lowest tier, exactly as
|
|
50
|
+
* {@link runInitiatorRole} treats dev-open. The key itself stays authorized by its scope; only the
|
|
51
|
+
* role-shaped narrowing has nothing to say.
|
|
52
|
+
*/
|
|
53
|
+
export async function keyInitiatorRole(container, workspaceId, userId) {
|
|
54
|
+
if (!userId)
|
|
55
|
+
return null;
|
|
56
|
+
const access = await loadWorkspaceAccess(container, workspaceId, userId);
|
|
57
|
+
return access?.allowed ? access.role : null;
|
|
58
|
+
}
|
|
27
59
|
/**
|
|
28
60
|
* The identity RESOLVING a parked gate, for the approver policy a pipeline step may configure
|
|
29
61
|
* (`stepOptions.gateConfig.approvers`) and the quorum it may demand.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runAdmission.js","sourceRoot":"","sources":["../../src/http/runAdmission.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAA;
|
|
1
|
+
{"version":3,"file":"runAdmission.js","sourceRoot":"","sources":["../../src/http/runAdmission.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAA;AAE7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAA;AAE1D;;;;;;;;GAQG;AAEH;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,gBAAgB,CAAmB,CAAa;IAC9D,OAAO,CAAC,CAAC,GAAG,CAAC,iBAAiB,CAAC,EAAE,IAAI,IAAI,IAAI,CAAA;AAC/C,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,SAA0B,EAC1B,WAAmB,EACnB,MAAqB;IAErB,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAA;IACxB,MAAM,MAAM,GAAG,MAAM,mBAAmB,CAAC,SAAS,EAAE,WAAW,EAAE,MAAM,CAAC,CAAA;IACxE,OAAO,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAA;AAC7C,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,SAAS,CAAmB,CAAa;IACvD,MAAM,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;IAC1B,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,EAAE,EAAE,EAAE,uBAAuB,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAA;IACzF,CAAC;IACD,OAAO;QACL,EAAE,EAAE,IAAI,CAAC,EAAE;QACX,IAAI,EAAE,MAAM;QACZ,IAAI,EAAE,gBAAgB,CAAC,CAAC,CAAC;QACzB,KAAK,EAAE,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK;KAC/B,CAAA;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
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;
|
|
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;AAqC/C,wBAAgB,4BAA4B,IAAI,IAAI,CAAC,MAAM,CAAC,CAoC3D"}
|
|
@@ -19,6 +19,16 @@ function requireSignedIn(c) {
|
|
|
19
19
|
function assertSignedIn(c) {
|
|
20
20
|
requireSignedIn(c);
|
|
21
21
|
}
|
|
22
|
+
/**
|
|
23
|
+
* Drop the user's cached local-model declarations after a write commits, so the next dispatch
|
|
24
|
+
* resolves the model list and the modalities they just set rather than the TTL's stale copy.
|
|
25
|
+
*
|
|
26
|
+
* These two routes are the ONLY writers of the row, which is what makes an invalidation here the
|
|
27
|
+
* whole coherence story for the run path's read.
|
|
28
|
+
*/
|
|
29
|
+
async function invalidateDeclarations(c, userId) {
|
|
30
|
+
await c.get('container').caches.localModelDeclarations.invalidate(userId, userId);
|
|
31
|
+
}
|
|
22
32
|
export function localModelEndpointController() {
|
|
23
33
|
const app = new Hono();
|
|
24
34
|
buildHonoRoute(app, listLocalModelEndpointsContract, async (c) => {
|
|
@@ -32,6 +42,7 @@ export function localModelEndpointController() {
|
|
|
32
42
|
const provider = v.parse(localRunnerSchema, c.req.valid('param').provider);
|
|
33
43
|
const body = c.req.valid('json');
|
|
34
44
|
const endpoint = await local.upsert(user.id, { ...body, provider });
|
|
45
|
+
await invalidateDeclarations(c, user.id);
|
|
35
46
|
return c.json(endpoint, 201);
|
|
36
47
|
});
|
|
37
48
|
buildHonoRoute(app, removeLocalModelEndpointContract, async (c) => {
|
|
@@ -39,6 +50,7 @@ export function localModelEndpointController() {
|
|
|
39
50
|
const user = requireSignedIn(c);
|
|
40
51
|
const provider = v.parse(localRunnerSchema, c.req.valid('param').provider);
|
|
41
52
|
await local.remove(user.id, provider);
|
|
53
|
+
await invalidateDeclarations(c, user.id);
|
|
42
54
|
return c.body(null, 204);
|
|
43
55
|
});
|
|
44
56
|
// Probe a runner's `/models` server-side so the UI can validate the URL + list models.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LocalModelEndpointController.js","sourceRoot":"","sources":["../../../src/modules/localModels/LocalModelEndpointController.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"LocalModelEndpointController.js","sourceRoot":"","sources":["../../../src/modules/localModels/LocalModelEndpointController.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,+BAA+B,EAC/B,iBAAiB,EACjB,gCAAgC,EAChC,8BAA8B,EAC9B,gCAAgC,GACjC,MAAM,wBAAwB,CAAA;AAC/B,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACrD,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AAC5B,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAG3B,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAErE,uFAAuF;AACvF,yFAAyF;AACzF,yFAAyF;AACzF,wFAAwF;AAExF,0FAA0F;AAC1F,SAAS,gBAAgB,CAAmB,CAAa;IACvD,OAAO,iBAAiB,CACtB,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,mBAAmB,EACtC,8CAA8C,CAC/C,CAAA;AACH,CAAC;AAED,0FAA0F;AAC1F,SAAS,eAAe,CAAmB,CAAa;IACtD,OAAO,WAAW,CAAC,CAAC,EAAE,uCAAuC,CAAC,CAAA;AAChE,CAAC;AAED,0FAA0F;AAC1F,SAAS,cAAc,CAAmB,CAAa;IACrD,eAAe,CAAC,CAAC,CAAC,CAAA;AACpB,CAAC;AAED;;;;;;GAMG;AACH,KAAK,UAAU,sBAAsB,CAAmB,CAAa,EAAE,MAAc;IACnF,MAAM,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,sBAAsB,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;AACnF,CAAC;AAED,MAAM,UAAU,4BAA4B;IAC1C,MAAM,GAAG,GAAG,IAAI,IAAI,EAAU,CAAA;IAE9B,cAAc,CAAC,GAAG,EAAE,+BAA+B,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QAC/D,MAAM,KAAK,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAA;QACjC,MAAM,IAAI,GAAG,eAAe,CAAC,CAAC,CAAC,CAAA;QAC/B,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,CAAC,CAAA;IAC9D,CAAC,CAAC,CAAA;IAEF,cAAc,CAAC,GAAG,EAAE,gCAAgC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QAChE,MAAM,KAAK,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAA;QACjC,MAAM,IAAI,GAAG,eAAe,CAAC,CAAC,CAAC,CAAA;QAC/B,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,iBAAiB,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAA;QAC1E,MAAM,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;QAChC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAA;QACnE,MAAM,sBAAsB,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,CAAA;QACxC,OAAO,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAA;IAC9B,CAAC,CAAC,CAAA;IAEF,cAAc,CAAC,GAAG,EAAE,gCAAgC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QAChE,MAAM,KAAK,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAA;QACjC,MAAM,IAAI,GAAG,eAAe,CAAC,CAAC,CAAC,CAAA;QAC/B,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,iBAAiB,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAA;QAC1E,MAAM,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAA;QACrC,MAAM,sBAAsB,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,CAAA;QACxC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;IAC1B,CAAC,CAAC,CAAA;IAEF,uFAAuF;IACvF,cAAc,CAAC,GAAG,EAAE,8BAA8B,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QAC9D,MAAM,KAAK,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAA;QACjC,cAAc,CAAC,CAAC,CAAC,CAAA;QACjB,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;IACrE,CAAC,CAAC,CAAA;IAEF,OAAO,GAAG,CAAA;AACZ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workspaceCatalog.d.ts","sourceRoot":"","sources":["../../../src/modules/models/workspaceCatalog.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAA;AAO1D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAGxD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,4BAA4B,CAChD,SAAS,EAAE,eAAe,EAC1B,WAAW,EAAE,MAAM,EACnB,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,YAAY,CAAC,
|
|
1
|
+
{"version":3,"file":"workspaceCatalog.d.ts","sourceRoot":"","sources":["../../../src/modules/models/workspaceCatalog.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAA;AAO1D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAGxD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,4BAA4B,CAChD,SAAS,EAAE,eAAe,EAC1B,WAAW,EAAE,MAAM,EACnB,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,YAAY,CAAC,CAyCvB"}
|
|
@@ -32,6 +32,10 @@ export async function resolveWorkspaceModelCatalog(container, workspaceId, userI
|
|
|
32
32
|
// dispatch, where the block is in hand.
|
|
33
33
|
const caps = await resolveWorkspaceCapabilities({
|
|
34
34
|
...container,
|
|
35
|
+
// Not supplied by the container spread: it lives on `config`, not beside the services.
|
|
36
|
+
...(container.config.nativeAmbientAuth
|
|
37
|
+
? { nativeAmbientAuth: container.config.nativeAmbientAuth }
|
|
38
|
+
: {}),
|
|
35
39
|
accountSettings: container.accountSettings?.service,
|
|
36
40
|
workspaceAccountOf: (ws) => container.workspaceService.accountOf(ws),
|
|
37
41
|
modelPolicySupported: container.config.infrastructure?.modelPolicy?.supported ?? false,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workspaceCatalog.js","sourceRoot":"","sources":["../../../src/modules/models/workspaceCatalog.ts"],"names":[],"mappings":"AACA,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,0BAA0B,GAC3B,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AAEzE,OAAO,EAAE,4BAA4B,EAAE,MAAM,sCAAsC,CAAA;AAEnF;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAC,KAAK,UAAU,4BAA4B,CAChD,SAA0B,EAC1B,WAAmB,EACnB,MAAe;IAEf,MAAM,OAAO,GAAG,SAAS,CAAC,YAAY,EAAE,OAAO,CAAA;IAC/C,gGAAgG;IAChG,uFAAuF;IACvF,gGAAgG;IAChG,oEAAoE;IACpE,EAAE;IACF,4FAA4F;IAC5F,+FAA+F;IAC/F,gGAAgG;IAChG,wCAAwC;IACxC,MAAM,IAAI,GAAG,MAAM,4BAA4B,CAC7C;QACE,GAAG,SAAS;QACZ,eAAe,EAAE,SAAS,CAAC,eAAe,EAAE,OAAO;QACnD,kBAAkB,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,SAAS,CAAC,gBAAgB,CAAC,SAAS,CAAC,EAAE,CAAC;QACpE,oBAAoB,EAAE,SAAS,CAAC,MAAM,CAAC,cAAc,EAAE,WAAW,EAAE,SAAS,IAAI,KAAK;QACtF,GAAG,CAAC,OAAO;YACT,CAAC,CAAC,EAAE,+BAA+B,EAAE,CAAC,EAAU,EAAE,EAAE,CAAC,OAAO,CAAC,qBAAqB,CAAC,EAAE,CAAC,EAAE;YACxF,CAAC,CAAC,EAAE,CAAC;KACR,EACD,WAAW,EACX,MAAM,CACP,CAAA;IACD,MAAM,KAAK,GACT,MAAM,IAAI,SAAS,CAAC,mBAAmB;QACrC,CAAC,CAAC,MAAM,SAAS,CAAC,mBAAmB,CAAC,eAAe,CAAC,MAAM,CAAC;QAC7D,CAAC,CAAC,EAAE,CAAA;IACR,MAAM,UAAU,GAAG,SAAS,CAAC,iBAAiB;QAC5C,CAAC,CAAC,MAAM,SAAS,CAAC,iBAAiB,CAAC,eAAe,CAAC,WAAW,CAAC;QAChE,CAAC,CAAC,EAAE,CAAA;IACN,MAAM,OAAO,GAAG,iBAAiB,CAAC,iBAAiB,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,CAAA;IACxF,OAAO,oBAAoB,CACzB,CAAC,GAAG,qBAAqB,CAAC,KAAK,CAAC,EAAE,GAAG,0BAA0B,CAAC,UAAU,CAAC,CAAC,EAC5E,IAAI,EACJ,OAAO,CACR,CAAA;AACH,CAAC"}
|
|
1
|
+
{"version":3,"file":"workspaceCatalog.js","sourceRoot":"","sources":["../../../src/modules/models/workspaceCatalog.ts"],"names":[],"mappings":"AACA,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,0BAA0B,GAC3B,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AAEzE,OAAO,EAAE,4BAA4B,EAAE,MAAM,sCAAsC,CAAA;AAEnF;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAC,KAAK,UAAU,4BAA4B,CAChD,SAA0B,EAC1B,WAAmB,EACnB,MAAe;IAEf,MAAM,OAAO,GAAG,SAAS,CAAC,YAAY,EAAE,OAAO,CAAA;IAC/C,gGAAgG;IAChG,uFAAuF;IACvF,gGAAgG;IAChG,oEAAoE;IACpE,EAAE;IACF,4FAA4F;IAC5F,+FAA+F;IAC/F,gGAAgG;IAChG,wCAAwC;IACxC,MAAM,IAAI,GAAG,MAAM,4BAA4B,CAC7C;QACE,GAAG,SAAS;QACZ,uFAAuF;QACvF,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,iBAAiB;YACpC,CAAC,CAAC,EAAE,iBAAiB,EAAE,SAAS,CAAC,MAAM,CAAC,iBAAiB,EAAE;YAC3D,CAAC,CAAC,EAAE,CAAC;QACP,eAAe,EAAE,SAAS,CAAC,eAAe,EAAE,OAAO;QACnD,kBAAkB,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,SAAS,CAAC,gBAAgB,CAAC,SAAS,CAAC,EAAE,CAAC;QACpE,oBAAoB,EAAE,SAAS,CAAC,MAAM,CAAC,cAAc,EAAE,WAAW,EAAE,SAAS,IAAI,KAAK;QACtF,GAAG,CAAC,OAAO;YACT,CAAC,CAAC,EAAE,+BAA+B,EAAE,CAAC,EAAU,EAAE,EAAE,CAAC,OAAO,CAAC,qBAAqB,CAAC,EAAE,CAAC,EAAE;YACxF,CAAC,CAAC,EAAE,CAAC;KACR,EACD,WAAW,EACX,MAAM,CACP,CAAA;IACD,MAAM,KAAK,GACT,MAAM,IAAI,SAAS,CAAC,mBAAmB;QACrC,CAAC,CAAC,MAAM,SAAS,CAAC,mBAAmB,CAAC,eAAe,CAAC,MAAM,CAAC;QAC7D,CAAC,CAAC,EAAE,CAAA;IACR,MAAM,UAAU,GAAG,SAAS,CAAC,iBAAiB;QAC5C,CAAC,CAAC,MAAM,SAAS,CAAC,iBAAiB,CAAC,eAAe,CAAC,WAAW,CAAC;QAChE,CAAC,CAAC,EAAE,CAAA;IACN,MAAM,OAAO,GAAG,iBAAiB,CAAC,iBAAiB,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,CAAA;IACxF,OAAO,oBAAoB,CACzB,CAAC,GAAG,qBAAqB,CAAC,KAAK,CAAC,EAAE,GAAG,0BAA0B,CAAC,UAAU,CAAC,CAAC,EAC5E,IAAI,EACJ,OAAO,CACR,CAAA;AACH,CAAC"}
|
|
@@ -1,6 +1,17 @@
|
|
|
1
1
|
import type { Context } from 'hono';
|
|
2
2
|
import type { AppEnv, ServerContainer } from '../../http/env.js';
|
|
3
3
|
import type { SessionPayload } from '../../auth/signing.js';
|
|
4
|
+
/**
|
|
5
|
+
* WHOSE personal credential a run may unlock — the user id and nothing else.
|
|
6
|
+
*
|
|
7
|
+
* Narrower than `SessionPayload` on purpose. A browser session is one way to establish this, and
|
|
8
|
+
* a public-API key its holder BOUND to themselves (`PublicApiKeyRecord.actsAsUserId`) is the
|
|
9
|
+
* other; asking for a whole session would have forced the second caller to fabricate the login,
|
|
10
|
+
* avatar and expiry of a person who is not signed in, and a fabricated session is a thing later
|
|
11
|
+
* code reads as one. The gate never needed more than the id: ownership of the credential is what
|
|
12
|
+
* it is deciding, and the PASSWORD, not this, is what proves the holder consented.
|
|
13
|
+
*/
|
|
14
|
+
export type PersonalCredentialOwner = Pick<SessionPayload, 'id'>;
|
|
4
15
|
/**
|
|
5
16
|
* Read the ambient personal password from the request header (see
|
|
6
17
|
* `PERSONAL_PASSWORD_HEADER`). The client attaches it on the gated run calls the way it
|
|
@@ -18,6 +29,23 @@ export declare function readPersonalPassword<E extends AppEnv>(c: Context<E>): s
|
|
|
18
29
|
* so the common path never prompts. See `getCachedPassword`'s 8h expiry buffer on the client.
|
|
19
30
|
*/
|
|
20
31
|
export declare function activateForInteraction<E extends AppEnv>(c: Context<E>, workspaceId: string, executionId: string): Promise<void>;
|
|
32
|
+
/**
|
|
33
|
+
* {@link activateForInteraction}'s context-free core, shared with the public-API decision surface
|
|
34
|
+
* (which resolves its user from the key's binding rather than from a session).
|
|
35
|
+
*
|
|
36
|
+
* Skips the whole gate when the run already holds a FRESH activation for every vendor it needs, and
|
|
37
|
+
* that short-circuit is what makes the interaction gate safe to mount in a shared preamble. Each
|
|
38
|
+
* re-mint derives the password's key with 210k PBKDF2 iterations per vendor, so a headless driver
|
|
39
|
+
* answering a run's parks one HTTP call at a time would pay that cost per call — seconds of blocked
|
|
40
|
+
* event loop on Node, a CPU-limit kill on workerd. `hasFreshActivation` owns the threshold, because
|
|
41
|
+
* only the service that mints the TTL can say what "fresh" means against it.
|
|
42
|
+
*
|
|
43
|
+
* The skip drops the password CHECK along with the derivation, and that is the honest reading rather
|
|
44
|
+
* than a hole: the gate exists to tell a caller to supply the password while it can still act on
|
|
45
|
+
* being told, and a run holding a credential that outlives its next dispatch has nothing to be told
|
|
46
|
+
* about. Consent was given for THIS run, by this holder, within the same activation window.
|
|
47
|
+
*/
|
|
48
|
+
export declare function refreshRunActivation(container: ServerContainer, workspaceId: string, executionId: string, user: PersonalCredentialOwner | undefined, password: string | undefined): Promise<void>;
|
|
21
49
|
export interface PersonalCredentialGate {
|
|
22
50
|
/** Recorded on the run (individual-usage credential ownership). */
|
|
23
51
|
initiatedBy: string | null;
|
|
@@ -29,9 +57,9 @@ export interface PersonalCredentialGate {
|
|
|
29
57
|
activate?: (executionId: string) => Promise<void>;
|
|
30
58
|
}
|
|
31
59
|
/** Gate for STARTING a run on a block with a given pipeline. */
|
|
32
|
-
export declare function personalGateForBlock(container: ServerContainer, workspaceId: string, blockId: string, pipelineId: string, user:
|
|
60
|
+
export declare function personalGateForBlock(container: ServerContainer, workspaceId: string, blockId: string, pipelineId: string, user: PersonalCredentialOwner | undefined, password: string | undefined): Promise<PersonalCredentialGate>;
|
|
33
61
|
/** Gate for starting a SINGLE-KIND run (the "Map service" action, the wizard's deep analysis). */
|
|
34
|
-
export declare function personalGateForAgentKind(container: ServerContainer, workspaceId: string, blockId: string, agentKind: string, user:
|
|
62
|
+
export declare function personalGateForAgentKind(container: ServerContainer, workspaceId: string, blockId: string, agentKind: string, user: PersonalCredentialOwner | undefined, password: string | undefined): Promise<PersonalCredentialGate>;
|
|
35
63
|
/** Gate for RETRYING a failed run. */
|
|
36
|
-
export declare function personalGateForRun(container: ServerContainer, workspaceId: string, executionId: string, user:
|
|
64
|
+
export declare function personalGateForRun(container: ServerContainer, workspaceId: string, executionId: string, user: PersonalCredentialOwner | undefined, password: string | undefined): Promise<PersonalCredentialGate>;
|
|
37
65
|
//# sourceMappingURL=personalCredentialGate.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"personalCredentialGate.d.ts","sourceRoot":"","sources":["../../../src/modules/providers/personalCredentialGate.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AACnC,OAAO,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAChE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAE3D;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,SAAS,CAExF;AAmBD;;;;;;;;;GASG;AACH,wBAAsB,sBAAsB,CAAC,CAAC,SAAS,MAAM,EAC3D,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,EACb,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"personalCredentialGate.d.ts","sourceRoot":"","sources":["../../../src/modules/providers/personalCredentialGate.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AACnC,OAAO,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAChE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAE3D;;;;;;;;;GASG;AACH,MAAM,MAAM,uBAAuB,GAAG,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,CAAA;AAEhE;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,SAAS,CAExF;AAmBD;;;;;;;;;GASG;AACH,wBAAsB,sBAAsB,CAAC,CAAC,SAAS,MAAM,EAC3D,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,EACb,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,IAAI,CAAC,CAQf;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,oBAAoB,CACxC,SAAS,EAAE,eAAe,EAC1B,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,uBAAuB,GAAG,SAAS,EACzC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAC3B,OAAO,CAAC,IAAI,CAAC,CAKf;AAwBD,MAAM,WAAW,sBAAsB;IACrC,mEAAmE;IACnE,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B;;;;OAIG;IACH,QAAQ,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;CAClD;AA6DD,gEAAgE;AAChE,wBAAsB,oBAAoB,CACxC,SAAS,EAAE,eAAe,EAC1B,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,uBAAuB,GAAG,SAAS,EACzC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAC3B,OAAO,CAAC,sBAAsB,CAAC,CAiBjC;AAED,kGAAkG;AAClG,wBAAsB,wBAAwB,CAC5C,SAAS,EAAE,eAAe,EAC1B,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,uBAAuB,GAAG,SAAS,EACzC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAC3B,OAAO,CAAC,sBAAsB,CAAC,CAejC;AAED,sCAAsC;AACtC,wBAAsB,kBAAkB,CACtC,SAAS,EAAE,eAAe,EAC1B,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,uBAAuB,GAAG,SAAS,EACzC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAC3B,OAAO,CAAC,sBAAsB,CAAC,CAOjC"}
|
|
@@ -33,8 +33,39 @@ async function resolvePersonalVendorPredicate(container, user) {
|
|
|
33
33
|
* so the common path never prompts. See `getCachedPassword`'s 8h expiry buffer on the client.
|
|
34
34
|
*/
|
|
35
35
|
export async function activateForInteraction(c, workspaceId, executionId) {
|
|
36
|
-
|
|
37
|
-
|
|
36
|
+
await refreshRunActivation(c.get('container'), workspaceId, executionId, c.get('user'), readPersonalPassword(c));
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* {@link activateForInteraction}'s context-free core, shared with the public-API decision surface
|
|
40
|
+
* (which resolves its user from the key's binding rather than from a session).
|
|
41
|
+
*
|
|
42
|
+
* Skips the whole gate when the run already holds a FRESH activation for every vendor it needs, and
|
|
43
|
+
* that short-circuit is what makes the interaction gate safe to mount in a shared preamble. Each
|
|
44
|
+
* re-mint derives the password's key with 210k PBKDF2 iterations per vendor, so a headless driver
|
|
45
|
+
* answering a run's parks one HTTP call at a time would pay that cost per call — seconds of blocked
|
|
46
|
+
* event loop on Node, a CPU-limit kill on workerd. `hasFreshActivation` owns the threshold, because
|
|
47
|
+
* only the service that mints the TTL can say what "fresh" means against it.
|
|
48
|
+
*
|
|
49
|
+
* The skip drops the password CHECK along with the derivation, and that is the honest reading rather
|
|
50
|
+
* than a hole: the gate exists to tell a caller to supply the password while it can still act on
|
|
51
|
+
* being told, and a run holding a credential that outlives its next dispatch has nothing to be told
|
|
52
|
+
* about. Consent was given for THIS run, by this holder, within the same activation window.
|
|
53
|
+
*/
|
|
54
|
+
export async function refreshRunActivation(container, workspaceId, executionId, user, password) {
|
|
55
|
+
const vendors = await runVendorsNeedingUnlock(container, workspaceId, executionId, user);
|
|
56
|
+
if (vendors.length === 0)
|
|
57
|
+
return;
|
|
58
|
+
if (user && (await holdsFreshActivations(container, executionId, user.id, vendors)))
|
|
59
|
+
return;
|
|
60
|
+
await gate(container, vendors, user, password).activate?.(executionId);
|
|
61
|
+
}
|
|
62
|
+
/** Whether every vendor the run needs already has an activation worth keeping. */
|
|
63
|
+
async function holdsFreshActivations(container, executionId, userId, vendors) {
|
|
64
|
+
const personal = container.personalSubscriptions;
|
|
65
|
+
if (!personal)
|
|
66
|
+
return false;
|
|
67
|
+
const fresh = await Promise.all(vendors.map((vendor) => personal.hasFreshActivation(executionId, userId, vendor)));
|
|
68
|
+
return fresh.every(Boolean);
|
|
38
69
|
}
|
|
39
70
|
/**
|
|
40
71
|
* Build the gate for the set of individual-usage vendors a run will use (empty ⇒ no
|
|
@@ -101,9 +132,20 @@ export async function personalGateForAgentKind(container, workspaceId, blockId,
|
|
|
101
132
|
}
|
|
102
133
|
/** Gate for RETRYING a failed run. */
|
|
103
134
|
export async function personalGateForRun(container, workspaceId, executionId, user, password) {
|
|
135
|
+
return gate(container, await runVendorsNeedingUnlock(container, workspaceId, executionId, user), user, password);
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* The individual-usage vendors a run's remaining steps need a MANAGED unlock for: what the engine
|
|
139
|
+
* resolves off the stored steps, less the ones native mode serves with the developer's own ambient
|
|
140
|
+
* CLI login (see {@link ambientVendors}).
|
|
141
|
+
*
|
|
142
|
+
* Extracted because two callers ask the same question and must not answer it differently: the retry
|
|
143
|
+
* gate, which mints a full-TTL activation for a fresh attempt, and {@link refreshRunActivation},
|
|
144
|
+
* which needs the set BEFORE deciding whether re-minting is necessary at all.
|
|
145
|
+
*/
|
|
146
|
+
async function runVendorsNeedingUnlock(container, workspaceId, executionId, user) {
|
|
104
147
|
const vendors = await container.executionService.individualVendorsForRun(workspaceId, executionId, await resolvePersonalVendorPredicate(container, user));
|
|
105
|
-
// See personalGateForBlock: drop only the vendors native mode serves ambiently.
|
|
106
148
|
const ambient = ambientVendors(container);
|
|
107
|
-
return
|
|
149
|
+
return vendors.filter((v) => !ambient.has(v));
|
|
108
150
|
}
|
|
109
151
|
//# sourceMappingURL=personalCredentialGate.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"personalCredentialGate.js","sourceRoot":"","sources":["../../../src/modules/providers/personalCredentialGate.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,wBAAwB,EACxB,uBAAuB,EACvB,qBAAqB,GAEtB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAA;
|
|
1
|
+
{"version":3,"file":"personalCredentialGate.js","sourceRoot":"","sources":["../../../src/modules/providers/personalCredentialGate.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PublicApiController.d.ts","sourceRoot":"","sources":["../../../src/modules/publicApi/PublicApiController.ts"],"names":[],"mappings":"AAqCA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"PublicApiController.d.ts","sourceRoot":"","sources":["../../../src/modules/publicApi/PublicApiController.ts"],"names":[],"mappings":"AAqCA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAc3B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAmR/C,wBAAgB,mBAAmB,IAAI,IAAI,CAAC,MAAM,CAAC,CAWlD"}
|