@cat-factory/integrations 0.120.1 → 0.121.1
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/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/modules/providers/LocalModelEndpointService.d.ts +36 -1
- package/dist/modules/providers/LocalModelEndpointService.d.ts.map +1 -1
- package/dist/modules/providers/LocalModelEndpointService.js +63 -19
- package/dist/modules/providers/LocalModelEndpointService.js.map +1 -1
- package/dist/modules/providers/localModelUrl.d.ts +47 -9
- package/dist/modules/providers/localModelUrl.d.ts.map +1 -1
- package/dist/modules/providers/localModelUrl.js +129 -35
- package/dist/modules/providers/localModelUrl.js.map +1 -1
- package/dist/modules/tasks/BugHuntService.js +14 -6
- package/dist/modules/tasks/BugHuntService.js.map +1 -1
- package/dist/modules/tasks/GitHubIssuesProvider.d.ts +2 -2
- package/dist/modules/tasks/GitHubIssuesProvider.js +1 -1
- package/dist/modules/tasks/JiraProvider.d.ts +2 -2
- package/dist/modules/tasks/JiraProvider.js +1 -1
- package/dist/modules/tasks/LinearTaskProvider.d.ts +2 -2
- package/dist/modules/tasks/LinearTaskProvider.js +1 -1
- package/dist/modules/tasks/intakeMatch.logic.d.ts +38 -11
- package/dist/modules/tasks/intakeMatch.logic.d.ts.map +1 -1
- package/dist/modules/tasks/intakeMatch.logic.js +79 -27
- package/dist/modules/tasks/intakeMatch.logic.js.map +1 -1
- package/dist/modules/tasks/webhook/adapters.d.ts.map +1 -1
- package/dist/modules/tasks/webhook/adapters.js +11 -0
- package/dist/modules/tasks/webhook/adapters.js.map +1 -1
- package/package.json +4 -4
package/dist/index.d.ts
CHANGED
|
@@ -42,7 +42,8 @@ export { BugIntakeService, type BugIntakeServiceDependencies, type BugIntakeOutc
|
|
|
42
42
|
export { BugHuntService, BUG_HUNT_SCAN_LIMIT, type BugHuntServiceDependencies, } from './modules/tasks/BugHuntService.js';
|
|
43
43
|
export { trackerWebhookPath, type TaskSourceWebhookState, } from './modules/tasks/TaskConnectionService.js';
|
|
44
44
|
export { TrackerWebhookService, type ReviewReplyGateway, type TrackerWebhookOutcome, type TrackerWebhookServiceDependencies, } from './modules/tasks/TrackerWebhookService.js';
|
|
45
|
-
export {
|
|
45
|
+
export { judgeIssueEventForIntake } from './modules/tasks/intakeMatch.logic.js';
|
|
46
|
+
export type { IntakeMatchVerdict, IntakePredicateName } from './modules/tasks/intakeMatch.logic.js';
|
|
46
47
|
export { githubIssuesWebhookAdapter, jiraWebhookAdapter, linearWebhookAdapter, } from './modules/tasks/webhook/adapters.js';
|
|
47
48
|
export { MapTaskSourceRegistry, type TaskContextView, renderTaskContext, buildTaskExcerpt, } from './modules/tasks/tasks.logic.js';
|
|
48
49
|
export * as tasksLogic from './modules/tasks/tasks.logic.js';
|
|
@@ -118,7 +119,7 @@ export { ApiKeyService, type ApiKeyServiceDependencies, type ApiKeySummary, type
|
|
|
118
119
|
export { PublicApiKeyService, scopeSatisfies, type PublicApiKeyServiceDependencies, type PublicApiKeyAuth, type IssuedPublicApiKey, } from './modules/publicApi/PublicApiKeyService.js';
|
|
119
120
|
export { PersonalSubscriptionService, type PersonalSubscriptionServiceDependencies, type LeasedPersonalToken, DEFAULT_ACTIVATION_TTL_MS, DEFAULT_RENEW_WARNING_MS, } from './modules/providers/PersonalSubscriptionService.js';
|
|
120
121
|
export { LocalModelEndpointService, type LocalModelEndpointServiceDependencies, type ResolvedLocalEndpoint, } from './modules/providers/LocalModelEndpointService.js';
|
|
121
|
-
export { fetchLocalRunner,
|
|
122
|
+
export { fetchLocalRunner, type LocalRunnerUrlPolicy, type LocalRunnerUrlRefusal, localRunnerUrlRefusal, runnerRequestUrl, } from './modules/providers/localModelUrl.js';
|
|
122
123
|
export { UserSecretService, type UserSecretServiceDependencies, } from './modules/providers/UserSecretService.js';
|
|
123
124
|
export { UserSecretKindRegistry, defaultUserSecretKindRegistry, githubPatUserSecretKind, type UserSecretKindHandler, type UserSecretTestInput, } from './modules/providers/userSecretKinds.js';
|
|
124
125
|
export { describeGitHubPatScope, summarizeGitHubPatScope, type GitHubPatScopeReport, } from './modules/providers/githubPatScope.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -48,7 +48,7 @@ export { BugIntakeService, } from './modules/tasks/BugIntakeService.js';
|
|
|
48
48
|
export { BugHuntService, BUG_HUNT_SCAN_LIMIT, } from './modules/tasks/BugHuntService.js';
|
|
49
49
|
export { trackerWebhookPath, } from './modules/tasks/TaskConnectionService.js';
|
|
50
50
|
export { TrackerWebhookService, } from './modules/tasks/TrackerWebhookService.js';
|
|
51
|
-
export {
|
|
51
|
+
export { judgeIssueEventForIntake } from './modules/tasks/intakeMatch.logic.js';
|
|
52
52
|
export { githubIssuesWebhookAdapter, jiraWebhookAdapter, linearWebhookAdapter, } from './modules/tasks/webhook/adapters.js';
|
|
53
53
|
export { MapTaskSourceRegistry, renderTaskContext, buildTaskExcerpt, } from './modules/tasks/tasks.logic.js';
|
|
54
54
|
export * as tasksLogic from './modules/tasks/tasks.logic.js';
|
|
@@ -170,7 +170,7 @@ export { ApiKeyService, } from './modules/providers/ApiKeyService.js';
|
|
|
170
170
|
export { PublicApiKeyService, scopeSatisfies, } from './modules/publicApi/PublicApiKeyService.js';
|
|
171
171
|
export { PersonalSubscriptionService, DEFAULT_ACTIVATION_TTL_MS, DEFAULT_RENEW_WARNING_MS, } from './modules/providers/PersonalSubscriptionService.js';
|
|
172
172
|
export { LocalModelEndpointService, } from './modules/providers/LocalModelEndpointService.js';
|
|
173
|
-
export { fetchLocalRunner,
|
|
173
|
+
export { fetchLocalRunner, localRunnerUrlRefusal, runnerRequestUrl, } from './modules/providers/localModelUrl.js';
|
|
174
174
|
export { UserSecretService, } from './modules/providers/UserSecretService.js';
|
|
175
175
|
export { UserSecretKindRegistry, defaultUserSecretKindRegistry, githubPatUserSecretKind, } from './modules/providers/userSecretKinds.js';
|
|
176
176
|
export { describeGitHubPatScope, summarizeGitHubPatScope, } from './modules/providers/githubPatScope.js';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { Clock, LocalModelEndpointRepository, SecretCipher } from '@cat-factory/kernel';
|
|
2
2
|
import type { LocalModelEndpoint, LocalModelEndpointTestResult, LocalRunner, TestLocalModelEndpointInput, UpsertLocalModelEndpointInput } from '@cat-factory/contracts';
|
|
3
|
+
import { type LocalRunnerUrlRefusal } from './localModelUrl.js';
|
|
3
4
|
export interface LocalModelEndpointServiceDependencies {
|
|
4
5
|
localModelEndpointRepository: LocalModelEndpointRepository;
|
|
5
6
|
/** System encryption layer (master key) for the optional bearer key at rest. */
|
|
@@ -7,6 +8,13 @@ export interface LocalModelEndpointServiceDependencies {
|
|
|
7
8
|
clock: Clock;
|
|
8
9
|
/** Injected for tests; defaults to the global fetch. */
|
|
9
10
|
fetch?: typeof fetch;
|
|
11
|
+
/**
|
|
12
|
+
* Permit private-LAN runner hosts (RFC1918 / ULA / mDNS `.local`) in addition to
|
|
13
|
+
* loopback. OFF by default: on a shared multi-tenant deployment the LAN allow-list is
|
|
14
|
+
* an internal-network SSRF grant, so it is an operator opt-in
|
|
15
|
+
* (`LOCAL_MODELS_ALLOW_LAN=true`; single-tenant local mode defaults it on).
|
|
16
|
+
*/
|
|
17
|
+
allowPrivateLanHosts?: boolean;
|
|
10
18
|
}
|
|
11
19
|
/** A resolved endpoint for the run-time path: base URL + the decrypted optional key. */
|
|
12
20
|
export interface ResolvedLocalEndpoint {
|
|
@@ -16,9 +24,18 @@ export interface ResolvedLocalEndpoint {
|
|
|
16
24
|
}
|
|
17
25
|
export declare class LocalModelEndpointService {
|
|
18
26
|
private readonly deps;
|
|
27
|
+
/** The deployment's runner-host policy, normalised once from the deps flag. */
|
|
28
|
+
private readonly urlPolicy;
|
|
19
29
|
constructor(deps: LocalModelEndpointServiceDependencies);
|
|
20
|
-
/**
|
|
30
|
+
/**
|
|
31
|
+
* Every endpoint the user has configured (key-free wire shape), each carrying whether
|
|
32
|
+
* the deployment's CURRENT policy still permits its URL. A row can pre-date a policy
|
|
33
|
+
* narrowing, and an endpoint whose models are withheld from the picker has to say so
|
|
34
|
+
* here or it reads as healthy while every run against it is refused.
|
|
35
|
+
*/
|
|
21
36
|
list(userId: string): Promise<LocalModelEndpoint[]>;
|
|
37
|
+
/** The policy verdict on one stored base URL: the reason it is unusable, or null. */
|
|
38
|
+
private urlRefusalFor;
|
|
22
39
|
/** Create or replace the user's endpoint for a runner. */
|
|
23
40
|
upsert(userId: string, input: UpsertLocalModelEndpointInput): Promise<LocalModelEndpoint>;
|
|
24
41
|
/** Remove the user's endpoint for a runner. */
|
|
@@ -42,6 +59,24 @@ export declare class LocalModelEndpointService {
|
|
|
42
59
|
* optional key). Used by the inline model provider to register the user's runners.
|
|
43
60
|
*/
|
|
44
61
|
listResolved(userId: string): Promise<ResolvedLocalEndpoint[]>;
|
|
62
|
+
/**
|
|
63
|
+
* Fetch a runner URL under this deployment's host policy, re-validating the allow-list
|
|
64
|
+
* on every redirect hop. The ONE transport every run-time forward uses (the LLM proxy,
|
|
65
|
+
* the inline model provider, the probe below), so a row persisted under a wider policy
|
|
66
|
+
* is refused loudly at fetch time after an operator narrows it, never silently honoured.
|
|
67
|
+
*/
|
|
68
|
+
fetchRunner(rawUrl: string, init: RequestInit): Promise<Response>;
|
|
69
|
+
/**
|
|
70
|
+
* Compose one runner ENDPOINT url (`/models`, `/chat/completions`) from a stored base URL
|
|
71
|
+
* under this deployment's policy. The seam every server-side caller uses instead of
|
|
72
|
+
* appending to `resolved.baseUrl`, so the policy stays here rather than being re-derived
|
|
73
|
+
* (and re-derived differently) at each forward.
|
|
74
|
+
*/
|
|
75
|
+
endpointUrl(baseUrl: string, suffix: `/${string}`): {
|
|
76
|
+
url: string;
|
|
77
|
+
} | {
|
|
78
|
+
refusal: LocalRunnerUrlRefusal;
|
|
79
|
+
};
|
|
45
80
|
/**
|
|
46
81
|
* Probe a runner's OpenAI-compatible `/models` endpoint server-side, returning
|
|
47
82
|
* reachability + the model ids it serves. Never throws — failures are reported as
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LocalModelEndpointService.d.ts","sourceRoot":"","sources":["../../../src/modules/providers/LocalModelEndpointService.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,KAAK,EAEL,4BAA4B,EAC5B,YAAY,EACb,MAAM,qBAAqB,CAAA;AAE5B,OAAO,KAAK,EACV,kBAAkB,EAClB,4BAA4B,EAC5B,WAAW,
|
|
1
|
+
{"version":3,"file":"LocalModelEndpointService.d.ts","sourceRoot":"","sources":["../../../src/modules/providers/LocalModelEndpointService.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,KAAK,EAEL,4BAA4B,EAC5B,YAAY,EACb,MAAM,qBAAqB,CAAA;AAE5B,OAAO,KAAK,EACV,kBAAkB,EAClB,4BAA4B,EAC5B,WAAW,EAEX,2BAA2B,EAC3B,6BAA6B,EAC9B,MAAM,wBAAwB,CAAA;AAE/B,OAAO,EAGL,KAAK,qBAAqB,EAG3B,MAAM,oBAAoB,CAAA;AAa3B,MAAM,WAAW,qCAAqC;IACpD,4BAA4B,EAAE,4BAA4B,CAAA;IAC1D,gFAAgF;IAChF,YAAY,EAAE,YAAY,CAAA;IAC1B,KAAK,EAAE,KAAK,CAAA;IACZ,wDAAwD;IACxD,KAAK,CAAC,EAAE,OAAO,KAAK,CAAA;IACpB;;;;;OAKG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAA;CAC/B;AAED,wFAAwF;AACxF,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,WAAW,CAAA;IACrB,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;CACtB;AAED,qBAAa,yBAAyB;IAIxB,OAAO,CAAC,QAAQ,CAAC,IAAI;IAHjC,+EAA+E;IAC/E,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAsB;IAEhD,YAA6B,IAAI,EAAE,qCAAqC,EAEvE;IAED;;;;;OAKG;IACG,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAGxD;IAED,qFAAqF;IACrF,OAAO,CAAC,aAAa;IAIrB,0DAA0D;IACpD,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,6BAA6B,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAgC9F;IAED,+CAA+C;IACzC,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAEjE;IAED;;;OAGG;IACG,eAAe,CACnB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC;QAAE,QAAQ,EAAE,WAAW,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE,EAAE,CAAC,CAYvE;IAED;;;OAGG;IACG,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,GAAG,IAAI,CAAC,CAUrF;IAED;;;OAGG;IACG,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC,CAUnE;IAED;;;;;OAKG;IACH,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC,CAEhE;IAED;;;;;OAKG;IACH,WAAW,CACT,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,IAAI,MAAM,EAAE,GACnB;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,GAAG;QAAE,OAAO,EAAE,qBAAqB,CAAA;KAAE,CAEtD;IAED;;;;OAIG;IACG,cAAc,CAAC,KAAK,EAAE,2BAA2B,GAAG,OAAO,CAAC,4BAA4B,CAAC,CA+B9F;CACF"}
|
|
@@ -1,24 +1,37 @@
|
|
|
1
1
|
import { getErrorMessage, ValidationError } from '@cat-factory/kernel';
|
|
2
2
|
import { LOCAL_RUNNER_LABELS } from '@cat-factory/contracts';
|
|
3
|
-
import { fetchLocalRunner,
|
|
3
|
+
import { fetchLocalRunner, localRunnerUrlRefusal, runnerRequestUrl, } from './localModelUrl.js';
|
|
4
4
|
export class LocalModelEndpointService {
|
|
5
5
|
deps;
|
|
6
|
+
/** The deployment's runner-host policy, normalised once from the deps flag. */
|
|
7
|
+
urlPolicy;
|
|
6
8
|
constructor(deps) {
|
|
7
9
|
this.deps = deps;
|
|
10
|
+
this.urlPolicy = { allowPrivateLan: deps.allowPrivateLanHosts ?? false };
|
|
8
11
|
}
|
|
9
|
-
/**
|
|
12
|
+
/**
|
|
13
|
+
* Every endpoint the user has configured (key-free wire shape), each carrying whether
|
|
14
|
+
* the deployment's CURRENT policy still permits its URL. A row can pre-date a policy
|
|
15
|
+
* narrowing, and an endpoint whose models are withheld from the picker has to say so
|
|
16
|
+
* here or it reads as healthy while every run against it is refused.
|
|
17
|
+
*/
|
|
10
18
|
async list(userId) {
|
|
11
19
|
const rows = await this.deps.localModelEndpointRepository.listByUser(userId);
|
|
12
|
-
return rows.map((r) => toWire(r));
|
|
20
|
+
return rows.map((r) => toWire(r, this.urlRefusalFor(r.baseUrl)));
|
|
21
|
+
}
|
|
22
|
+
/** The policy verdict on one stored base URL: the reason it is unusable, or null. */
|
|
23
|
+
urlRefusalFor(baseUrl) {
|
|
24
|
+
return localRunnerUrlRefusal(baseUrl, this.urlPolicy)?.reason ?? null;
|
|
13
25
|
}
|
|
14
26
|
/** Create or replace the user's endpoint for a runner. */
|
|
15
27
|
async upsert(userId, input) {
|
|
16
28
|
// SSRF guard: the stored base URL is later forwarded to server-side (the LLM proxy +
|
|
17
|
-
// inline provider resolve it by the run initiator), so reject a
|
|
18
|
-
// the write boundary
|
|
19
|
-
|
|
29
|
+
// inline provider resolve it by the run initiator), so reject a host the deployment's
|
|
30
|
+
// policy denies here at the write boundary. The run-time paths re-validate too (via
|
|
31
|
+
// `fetchRunner`), because a row can pre-date a policy narrowing.
|
|
32
|
+
const urlError = localRunnerUrlRefusal(input.baseUrl, this.urlPolicy);
|
|
20
33
|
if (urlError)
|
|
21
|
-
throw new ValidationError(urlError);
|
|
34
|
+
throw new ValidationError(urlError.message, { reason: urlError.reason });
|
|
22
35
|
const now = this.deps.clock.now();
|
|
23
36
|
const existing = await this.deps.localModelEndpointRepository.getByUserProvider(userId, input.provider);
|
|
24
37
|
// An omitted apiKey keeps the stored one; an explicit empty string clears it.
|
|
@@ -38,7 +51,8 @@ export class LocalModelEndpointService {
|
|
|
38
51
|
updatedAt: now,
|
|
39
52
|
};
|
|
40
53
|
await this.deps.localModelEndpointRepository.upsert(record);
|
|
41
|
-
|
|
54
|
+
// Just validated above, so the stored row is permitted by construction.
|
|
55
|
+
return toWire(record, null);
|
|
42
56
|
}
|
|
43
57
|
/** Remove the user's endpoint for a runner. */
|
|
44
58
|
async remove(userId, provider) {
|
|
@@ -50,9 +64,14 @@ export class LocalModelEndpointService {
|
|
|
50
64
|
*/
|
|
51
65
|
async capabilitiesFor(userId) {
|
|
52
66
|
const rows = await this.deps.localModelEndpointRepository.listByUser(userId);
|
|
53
|
-
return rows
|
|
67
|
+
return (rows
|
|
54
68
|
.filter((r) => r.models.length > 0)
|
|
55
|
-
|
|
69
|
+
// A row the CURRENT policy denies is not offered: admission would price its models as
|
|
70
|
+
// free, dispatch a container, and only then die at the first forward. Withholding it
|
|
71
|
+
// moves the failure to the settings panel (which reports `urlBlockedReason`), where
|
|
72
|
+
// the thing that is actually wrong can be fixed.
|
|
73
|
+
.filter((r) => this.urlRefusalFor(r.baseUrl) === null)
|
|
74
|
+
.map((r) => ({ provider: r.provider, label: r.label, models: r.models })));
|
|
56
75
|
}
|
|
57
76
|
/**
|
|
58
77
|
* Resolve a user's endpoint for run-time forwarding: base URL + decrypted optional key.
|
|
@@ -82,26 +101,50 @@ export class LocalModelEndpointService {
|
|
|
82
101
|
}
|
|
83
102
|
return out;
|
|
84
103
|
}
|
|
104
|
+
/**
|
|
105
|
+
* Fetch a runner URL under this deployment's host policy, re-validating the allow-list
|
|
106
|
+
* on every redirect hop. The ONE transport every run-time forward uses (the LLM proxy,
|
|
107
|
+
* the inline model provider, the probe below), so a row persisted under a wider policy
|
|
108
|
+
* is refused loudly at fetch time after an operator narrows it, never silently honoured.
|
|
109
|
+
*/
|
|
110
|
+
fetchRunner(rawUrl, init) {
|
|
111
|
+
return fetchLocalRunner(rawUrl, init, this.deps.fetch ?? fetch, this.urlPolicy);
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Compose one runner ENDPOINT url (`/models`, `/chat/completions`) from a stored base URL
|
|
115
|
+
* under this deployment's policy. The seam every server-side caller uses instead of
|
|
116
|
+
* appending to `resolved.baseUrl`, so the policy stays here rather than being re-derived
|
|
117
|
+
* (and re-derived differently) at each forward.
|
|
118
|
+
*/
|
|
119
|
+
endpointUrl(baseUrl, suffix) {
|
|
120
|
+
return runnerRequestUrl(baseUrl, suffix, this.urlPolicy);
|
|
121
|
+
}
|
|
85
122
|
/**
|
|
86
123
|
* Probe a runner's OpenAI-compatible `/models` endpoint server-side, returning
|
|
87
124
|
* reachability + the model ids it serves. Never throws — failures are reported as
|
|
88
125
|
* `{ reachable: false, error }` so the UI can surface them.
|
|
89
126
|
*/
|
|
90
127
|
async testConnection(input) {
|
|
91
|
-
// SSRF guard: this probe forwards to a user-supplied URL server-side, so refuse a
|
|
92
|
-
//
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
128
|
+
// SSRF guard: this probe forwards to a user-supplied URL server-side, so refuse a host
|
|
129
|
+
// the policy denies before issuing the fetch (same allow-list as `upsert`). Composed
|
|
130
|
+
// rather than concatenated, so the `/models` suffix cannot be discarded by the base.
|
|
131
|
+
const composed = runnerRequestUrl(input.baseUrl, '/models', this.urlPolicy);
|
|
132
|
+
if ('refusal' in composed) {
|
|
133
|
+
return {
|
|
134
|
+
reachable: false,
|
|
135
|
+
models: [],
|
|
136
|
+
error: composed.refusal.message,
|
|
137
|
+
errorReason: composed.refusal.reason,
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
const url = composed.url;
|
|
98
141
|
try {
|
|
99
142
|
const headers = {};
|
|
100
143
|
if (input.apiKey)
|
|
101
144
|
headers.authorization = `Bearer ${input.apiKey}`;
|
|
102
145
|
// Re-validate on every redirect hop: a reachable runner that 302s to a denied
|
|
103
146
|
// host (e.g. the cloud-metadata endpoint) must not be followed.
|
|
104
|
-
const res = await
|
|
147
|
+
const res = await this.fetchRunner(url, { headers, signal: AbortSignal.timeout(8000) });
|
|
105
148
|
if (!res.ok) {
|
|
106
149
|
return { reachable: false, models: [], error: `Runner returned HTTP ${res.status}` };
|
|
107
150
|
}
|
|
@@ -116,13 +159,14 @@ export class LocalModelEndpointService {
|
|
|
116
159
|
}
|
|
117
160
|
}
|
|
118
161
|
}
|
|
119
|
-
function toWire(record) {
|
|
162
|
+
function toWire(record, urlBlockedReason) {
|
|
120
163
|
return {
|
|
121
164
|
provider: record.provider,
|
|
122
165
|
label: record.label,
|
|
123
166
|
baseUrl: record.baseUrl,
|
|
124
167
|
hasApiKey: record.apiKeyCipher !== null,
|
|
125
168
|
models: record.models,
|
|
169
|
+
urlBlockedReason,
|
|
126
170
|
createdAt: record.createdAt,
|
|
127
171
|
updatedAt: record.updatedAt,
|
|
128
172
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LocalModelEndpointService.js","sourceRoot":"","sources":["../../../src/modules/providers/LocalModelEndpointService.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;
|
|
1
|
+
{"version":3,"file":"LocalModelEndpointService.js","sourceRoot":"","sources":["../../../src/modules/providers/LocalModelEndpointService.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,20 +1,58 @@
|
|
|
1
|
+
import type { LocalRunnerUrlReason } from '@cat-factory/contracts';
|
|
2
|
+
/** A refused runner URL: the machine-readable cause plus the operator-facing detail. */
|
|
3
|
+
export interface LocalRunnerUrlRefusal {
|
|
4
|
+
reason: LocalRunnerUrlReason;
|
|
5
|
+
message: string;
|
|
6
|
+
}
|
|
7
|
+
/** The host policy a deployment applies to local-runner URLs. */
|
|
8
|
+
export interface LocalRunnerUrlPolicy {
|
|
9
|
+
/**
|
|
10
|
+
* Permit RFC1918/ULA/mDNS private-LAN hosts in addition to loopback. OFF by default,
|
|
11
|
+
* so an un-threaded call site fails safe: only an operator who understands the
|
|
12
|
+
* internal-network exposure turns it on (`LOCAL_MODELS_ALLOW_LAN=true`; local mode
|
|
13
|
+
* defaults it on, being single-tenant by definition).
|
|
14
|
+
*/
|
|
15
|
+
allowPrivateLan?: boolean;
|
|
16
|
+
}
|
|
1
17
|
/**
|
|
2
|
-
* Validate a local-runner base URL
|
|
3
|
-
*
|
|
4
|
-
*
|
|
18
|
+
* Validate a local-runner base URL under `policy`. Returns the refusal (machine-readable
|
|
19
|
+
* `reason` + operator-facing `message`) when the URL is malformed, carries a
|
|
20
|
+
* request-shaping suffix, or points at a host the policy denies; `null` when acceptable.
|
|
21
|
+
* Used by the service at the write boundary, by the "Test connection" probe, by
|
|
22
|
+
* {@link runnerRequestUrl} and per redirect hop by {@link fetchLocalRunner}.
|
|
5
23
|
*/
|
|
6
|
-
export declare function
|
|
24
|
+
export declare function localRunnerUrlRefusal(rawUrl: string, policy?: LocalRunnerUrlPolicy): LocalRunnerUrlRefusal | null;
|
|
25
|
+
/**
|
|
26
|
+
* Compose the URL of one runner ENDPOINT (`/models`, `/chat/completions`) from a stored
|
|
27
|
+
* base URL, validating both ends under `policy`.
|
|
28
|
+
*
|
|
29
|
+
* Every server-side forward goes through here rather than concatenating, because the
|
|
30
|
+
* safety of the two forwards rests on the endpoint path being ours, and a plain template
|
|
31
|
+
* string cannot state that: whatever the base contributes wins whenever it can shape the
|
|
32
|
+
* request (see the query/fragment refusal above). So the composed URL is re-validated and
|
|
33
|
+
* its pathname must still END with the suffix we asked for. A pre-existing row that would
|
|
34
|
+
* defeat the suffix is therefore refused HERE too, not only at the write boundary it was
|
|
35
|
+
* written before.
|
|
36
|
+
*/
|
|
37
|
+
export declare function runnerRequestUrl(baseUrl: string, suffix: `/${string}`, policy?: LocalRunnerUrlPolicy): {
|
|
38
|
+
url: string;
|
|
39
|
+
} | {
|
|
40
|
+
refusal: LocalRunnerUrlRefusal;
|
|
41
|
+
};
|
|
7
42
|
/**
|
|
8
43
|
* Fetch a local-runner URL, re-validating the SSRF allow-list on EVERY redirect hop.
|
|
9
44
|
*
|
|
10
|
-
* The allow-list permits loopback
|
|
11
|
-
* `302` to a denied host
|
|
12
|
-
* (169.254.169.254)
|
|
45
|
+
* The allow-list permits loopback (and, on opt-in, LAN) hosts, but a permitted runner can
|
|
46
|
+
* still `302` to a denied host, most dangerously the cloud-metadata endpoint
|
|
47
|
+
* (169.254.169.254), and the platform `fetch` would follow it silently. So we drive
|
|
13
48
|
* redirects by hand (`redirect: 'manual'`) and run {@link localRunnerUrlError} against
|
|
14
49
|
* each `Location` before following it, mirroring the environment provider's `safeFetch`.
|
|
15
50
|
* Both server-side callers (the "Test connection" probe and the run-time LLM proxy
|
|
16
|
-
* forward) use this instead of a bare `fetch
|
|
51
|
+
* forward) use this instead of a bare `fetch`, through
|
|
52
|
+
* `LocalModelEndpointService.fetchRunner`, which binds the deployment's policy, so a row
|
|
53
|
+
* persisted while LAN access was enabled is refused at fetch time after an operator
|
|
54
|
+
* narrows the policy, not silently honoured. Throws when a hop fails validation or the
|
|
17
55
|
* redirect chain is too long.
|
|
18
56
|
*/
|
|
19
|
-
export declare function fetchLocalRunner(rawUrl: string, init: RequestInit, doFetch?: typeof fetch): Promise<Response>;
|
|
57
|
+
export declare function fetchLocalRunner(rawUrl: string, init: RequestInit, doFetch?: typeof fetch, policy?: LocalRunnerUrlPolicy): Promise<Response>;
|
|
20
58
|
//# sourceMappingURL=localModelUrl.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"localModelUrl.d.ts","sourceRoot":"","sources":["../../../src/modules/providers/localModelUrl.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"localModelUrl.d.ts","sourceRoot":"","sources":["../../../src/modules/providers/localModelUrl.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAA;AAGlE,wFAAwF;AACxF,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,oBAAoB,CAAA;IAC5B,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,iEAAiE;AACjE,MAAM,WAAW,oBAAoB;IACnC;;;;;OAKG;IACH,eAAe,CAAC,EAAE,OAAO,CAAA;CAC1B;AA+DD;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,oBAAoB,GAC5B,qBAAqB,GAAG,IAAI,CA2D9B;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,IAAI,MAAM,EAAE,EACpB,MAAM,CAAC,EAAE,oBAAoB,GAC5B;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,OAAO,EAAE,qBAAqB,CAAA;CAAE,CAetD;AAKD;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,WAAW,EACjB,OAAO,GAAE,OAAO,KAAa,EAC7B,MAAM,CAAC,EAAE,oBAAoB,GAC5B,OAAO,CAAC,QAAQ,CAAC,CAcnB"}
|
|
@@ -2,29 +2,45 @@
|
|
|
2
2
|
// SSRF guard for local-runner base URLs. A runner lives on the user's OWN machine
|
|
3
3
|
// (or LAN), so we forward requests to a user-supplied base URL server-side (both the
|
|
4
4
|
// "Test connection" probe and the run-time LLM proxy). The usual "block private IPs"
|
|
5
|
-
// mitigation is backwards here
|
|
6
|
-
//
|
|
7
|
-
//
|
|
8
|
-
//
|
|
9
|
-
//
|
|
10
|
-
//
|
|
11
|
-
//
|
|
5
|
+
// mitigation is backwards here: loopback is exactly the intended target, so we ALLOW
|
|
6
|
+
// only loopback hosts and reject everything else. Private-LAN reach (RFC1918 / ULA /
|
|
7
|
+
// mDNS `.local`) is an OPERATOR OPT-IN (`LOCAL_MODELS_ALLOW_LAN=true`), not the
|
|
8
|
+
// baseline: on a multi-tenant Node deployment the LAN allow-list is itself an
|
|
9
|
+
// internal-network SSRF grant (admin panels, Consul/etcd, other tenants' services),
|
|
10
|
+
// no redirect trick needed. Single-tenant local mode defaults the opt-in ON, since a
|
|
11
|
+
// developer's own LAN (an LM Studio box, a homelab Ollama host) is the intended
|
|
12
|
+
// reach there. The cloud-metadata endpoint (169.254.169.254 / fe80::) is denied under
|
|
13
|
+
// every policy. Public/remote runners are not supported by design.
|
|
12
14
|
// ---------------------------------------------------------------------------
|
|
13
15
|
import { decodeIpv4, isCloudMetadataHost, isPrivateV4 } from '@cat-factory/kernel';
|
|
14
|
-
/**
|
|
15
|
-
function
|
|
16
|
+
/** Classify a decoded IPv4 under the policy: loopback always, RFC1918 only on opt-in. */
|
|
17
|
+
function isAllowedRunnerV4(v4, allowPrivateLan) {
|
|
18
|
+
if (v4[0] === 127)
|
|
19
|
+
return true; // loopback 127/8
|
|
20
|
+
// `isPrivateV4` accepts 10/8, 172.16/12, 192.168/16, plus 0.* and 169.254.* which we
|
|
21
|
+
// exclude (0.0.0.0/8 unspecified; the metadata range is denied before we get here).
|
|
22
|
+
return allowPrivateLan && v4[0] !== 0 && isPrivateV4(v4);
|
|
23
|
+
}
|
|
24
|
+
/** Whether a hostname (no port) is a runner host the policy lets us forward to. */
|
|
25
|
+
function isAllowedRunnerHost(host, allowPrivateLan) {
|
|
16
26
|
const h = host.toLowerCase().replace(/^\[/, '').replace(/\]$/, '');
|
|
17
27
|
if (h === '')
|
|
18
28
|
return false;
|
|
19
29
|
// Cloud-metadata / link-local endpoints (169.254.0.0/16, metadata.google.internal,
|
|
20
30
|
// fd00:ec2::254, …) are the primary SSRF target. Deny them FIRST — some (the whole
|
|
21
|
-
// 169.254/16 range) would otherwise look "private"
|
|
31
|
+
// 169.254/16 range) would otherwise look "private", across every obfuscated encoding.
|
|
22
32
|
if (isCloudMetadataHost(h))
|
|
23
33
|
return false;
|
|
24
|
-
|
|
34
|
+
// Exactly `localhost`, never a `*.localhost` subdomain: that suffix is not delegated in
|
|
35
|
+
// the public root, but the NAME is still handed to the deployment's resolver, and in a
|
|
36
|
+
// container with search domains (`ndots`) a 2-label name like `evil.com.localhost` is tried
|
|
37
|
+
// with those suffixes first, so a wildcard answer sends the fetch off-loopback. It is also
|
|
38
|
+
// the only allowed form that is not a literal, hence the only one with a DNS-rebinding
|
|
39
|
+
// window. No default needs it (`LOCAL_RUNNER_DEFAULTS` are all `localhost`).
|
|
40
|
+
if (h === 'localhost')
|
|
25
41
|
return true;
|
|
26
|
-
// mDNS `.local` names resolve only on the LAN
|
|
27
|
-
if (h.endsWith('.local'))
|
|
42
|
+
// mDNS `.local` names resolve only on the LAN: a LAN-tier grant, not a loopback one.
|
|
43
|
+
if (allowPrivateLan && h.endsWith('.local'))
|
|
28
44
|
return true;
|
|
29
45
|
// IPv6 literals (URL.hostname keeps them bracketless here → they contain a colon).
|
|
30
46
|
// Gating the ULA prefix test behind this colon check is what stops a registrable DNS
|
|
@@ -32,72 +48,150 @@ function isLoopbackOrPrivateHost(host) {
|
|
|
32
48
|
if (h.includes(':')) {
|
|
33
49
|
if (h === '::1')
|
|
34
50
|
return true; // loopback
|
|
35
|
-
if (h.startsWith('fc') || h.startsWith('fd'))
|
|
51
|
+
if (allowPrivateLan && (h.startsWith('fc') || h.startsWith('fd')))
|
|
36
52
|
return true; // ULA fc00::/7
|
|
37
53
|
// IPv4-mapped IPv6 (e.g. `::ffff:10.0.0.1`) → classify by the embedded IPv4.
|
|
38
54
|
const mapped = decodeIpv4(h);
|
|
39
55
|
if (mapped)
|
|
40
|
-
return mapped
|
|
56
|
+
return isAllowedRunnerV4(mapped, allowPrivateLan);
|
|
41
57
|
// fe80::/10 (link-local), :: (unspecified), and global addresses → denied.
|
|
42
58
|
return false;
|
|
43
59
|
}
|
|
44
60
|
// IPv4 in any form the WHATWG URL parser may leave us (it canonicalises hex/octal/
|
|
45
61
|
// integer hosts to dotted-decimal before we see them; `decodeIpv4` covers the rest
|
|
46
|
-
// defensively).
|
|
47
|
-
// and 169.254.* which we exclude (0.0.0.0/8 unspecified; metadata handled above).
|
|
62
|
+
// defensively).
|
|
48
63
|
const v4 = decodeIpv4(h);
|
|
49
64
|
if (v4)
|
|
50
|
-
return v4
|
|
65
|
+
return isAllowedRunnerV4(v4, allowPrivateLan);
|
|
51
66
|
// Public hostname / anything unrecognised → denied.
|
|
52
67
|
return false;
|
|
53
68
|
}
|
|
69
|
+
/** Whether the URL as WRITTEN carries a `.` or `..` path segment. */
|
|
70
|
+
function hasDotSegment(rawUrl) {
|
|
71
|
+
const afterScheme = rawUrl.slice(rawUrl.indexOf('://') + 3);
|
|
72
|
+
const slash = afterScheme.indexOf('/');
|
|
73
|
+
if (slash < 0)
|
|
74
|
+
return false;
|
|
75
|
+
return /(^|\/)\.\.?(\/|$)/.test(afterScheme.slice(slash));
|
|
76
|
+
}
|
|
54
77
|
/**
|
|
55
|
-
* Validate a local-runner base URL
|
|
56
|
-
*
|
|
57
|
-
*
|
|
78
|
+
* Validate a local-runner base URL under `policy`. Returns the refusal (machine-readable
|
|
79
|
+
* `reason` + operator-facing `message`) when the URL is malformed, carries a
|
|
80
|
+
* request-shaping suffix, or points at a host the policy denies; `null` when acceptable.
|
|
81
|
+
* Used by the service at the write boundary, by the "Test connection" probe, by
|
|
82
|
+
* {@link runnerRequestUrl} and per redirect hop by {@link fetchLocalRunner}.
|
|
58
83
|
*/
|
|
59
|
-
export function
|
|
84
|
+
export function localRunnerUrlRefusal(rawUrl, policy) {
|
|
85
|
+
const allowPrivateLan = policy?.allowPrivateLan ?? false;
|
|
60
86
|
let url;
|
|
61
87
|
try {
|
|
62
88
|
url = new URL(rawUrl);
|
|
63
89
|
}
|
|
64
90
|
catch {
|
|
65
|
-
return 'Enter a valid URL, e.g. http://localhost:11434/v1.';
|
|
91
|
+
return { reason: 'invalid_url', message: 'Enter a valid URL, e.g. http://localhost:11434/v1.' };
|
|
66
92
|
}
|
|
67
93
|
if (url.protocol !== 'http:' && url.protocol !== 'https:') {
|
|
68
|
-
return 'A runner URL must use http or https.';
|
|
94
|
+
return { reason: 'scheme_not_allowed', message: 'A runner URL must use http or https.' };
|
|
69
95
|
}
|
|
70
96
|
// Embedded credentials (`user:pass@host`) have no legitimate use for a local runner
|
|
71
97
|
// and are a classic way to smuggle an unexpected authority past a naive check.
|
|
72
98
|
if (url.username || url.password) {
|
|
73
|
-
return
|
|
99
|
+
return {
|
|
100
|
+
reason: 'credentials_not_allowed',
|
|
101
|
+
message: 'A runner URL must not contain credentials.',
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
// A BASE url is an origin + a path prefix and nothing else. A query string or fragment
|
|
105
|
+
// makes the endpoint suffix we append (`/models`, `/chat/completions`) inert or inert-ish
|
|
106
|
+
// (`…/_search?q=x#` + `/models` requests `/_search?q=x`), which would turn the two
|
|
107
|
+
// fixed-path forwards into an arbitrary-path request against a loopback service. Dot
|
|
108
|
+
// segments are refused for the same reason: they let a stored prefix walk elsewhere.
|
|
109
|
+
if (url.search || url.hash) {
|
|
110
|
+
return {
|
|
111
|
+
reason: 'query_or_fragment_not_allowed',
|
|
112
|
+
message: 'A runner URL must be a plain base URL: no query string and no "#" fragment ' +
|
|
113
|
+
'(the platform appends the endpoint path itself).',
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
// Dot segments are checked on the RAW string, because the URL parser resolves them away
|
|
117
|
+
// before `pathname` is readable. They cannot defeat the appended suffix (it stays last),
|
|
118
|
+
// so this is honesty rather than containment: a stored prefix that silently relocates the
|
|
119
|
+
// request is not the prefix the operator typed.
|
|
120
|
+
if (hasDotSegment(rawUrl)) {
|
|
121
|
+
return {
|
|
122
|
+
reason: 'query_or_fragment_not_allowed',
|
|
123
|
+
message: 'A runner URL must not contain "." or ".." path segments.',
|
|
124
|
+
};
|
|
74
125
|
}
|
|
75
|
-
if (!
|
|
76
|
-
return
|
|
77
|
-
|
|
126
|
+
if (!isAllowedRunnerHost(url.hostname, allowPrivateLan)) {
|
|
127
|
+
return allowPrivateLan
|
|
128
|
+
? {
|
|
129
|
+
reason: 'host_not_local',
|
|
130
|
+
message: 'A local runner must live on your own machine or LAN (localhost, *.local, or a ' +
|
|
131
|
+
'private 10./172.16-31./192.168. address). Public or remote hosts are not allowed.',
|
|
132
|
+
}
|
|
133
|
+
: {
|
|
134
|
+
reason: 'host_not_loopback',
|
|
135
|
+
message: 'A local runner must live on this machine (localhost, 127.x.x.x, or [::1]). ' +
|
|
136
|
+
'Private-LAN runner hosts are disabled on this deployment; an operator can allow ' +
|
|
137
|
+
'them with LOCAL_MODELS_ALLOW_LAN=true.',
|
|
138
|
+
};
|
|
78
139
|
}
|
|
79
140
|
return null;
|
|
80
141
|
}
|
|
142
|
+
/**
|
|
143
|
+
* Compose the URL of one runner ENDPOINT (`/models`, `/chat/completions`) from a stored
|
|
144
|
+
* base URL, validating both ends under `policy`.
|
|
145
|
+
*
|
|
146
|
+
* Every server-side forward goes through here rather than concatenating, because the
|
|
147
|
+
* safety of the two forwards rests on the endpoint path being ours, and a plain template
|
|
148
|
+
* string cannot state that: whatever the base contributes wins whenever it can shape the
|
|
149
|
+
* request (see the query/fragment refusal above). So the composed URL is re-validated and
|
|
150
|
+
* its pathname must still END with the suffix we asked for. A pre-existing row that would
|
|
151
|
+
* defeat the suffix is therefore refused HERE too, not only at the write boundary it was
|
|
152
|
+
* written before.
|
|
153
|
+
*/
|
|
154
|
+
export function runnerRequestUrl(baseUrl, suffix, policy) {
|
|
155
|
+
const refusal = localRunnerUrlRefusal(baseUrl, policy);
|
|
156
|
+
if (refusal)
|
|
157
|
+
return { refusal };
|
|
158
|
+
const composed = `${baseUrl.replace(/\/+$/, '')}${suffix}`;
|
|
159
|
+
const composedRefusal = localRunnerUrlRefusal(composed, policy);
|
|
160
|
+
if (composedRefusal)
|
|
161
|
+
return { refusal: composedRefusal };
|
|
162
|
+
if (!new URL(composed).pathname.endsWith(suffix)) {
|
|
163
|
+
return {
|
|
164
|
+
refusal: {
|
|
165
|
+
reason: 'query_or_fragment_not_allowed',
|
|
166
|
+
message: 'A runner URL must be a plain base URL the platform can append a path to.',
|
|
167
|
+
},
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
return { url: composed };
|
|
171
|
+
}
|
|
81
172
|
/** Max redirect hops the revalidating fetch will follow before giving up. */
|
|
82
173
|
const MAX_LOCAL_RUNNER_REDIRECTS = 5;
|
|
83
174
|
/**
|
|
84
175
|
* Fetch a local-runner URL, re-validating the SSRF allow-list on EVERY redirect hop.
|
|
85
176
|
*
|
|
86
|
-
* The allow-list permits loopback
|
|
87
|
-
* `302` to a denied host
|
|
88
|
-
* (169.254.169.254)
|
|
177
|
+
* The allow-list permits loopback (and, on opt-in, LAN) hosts, but a permitted runner can
|
|
178
|
+
* still `302` to a denied host, most dangerously the cloud-metadata endpoint
|
|
179
|
+
* (169.254.169.254), and the platform `fetch` would follow it silently. So we drive
|
|
89
180
|
* redirects by hand (`redirect: 'manual'`) and run {@link localRunnerUrlError} against
|
|
90
181
|
* each `Location` before following it, mirroring the environment provider's `safeFetch`.
|
|
91
182
|
* Both server-side callers (the "Test connection" probe and the run-time LLM proxy
|
|
92
|
-
* forward) use this instead of a bare `fetch
|
|
183
|
+
* forward) use this instead of a bare `fetch`, through
|
|
184
|
+
* `LocalModelEndpointService.fetchRunner`, which binds the deployment's policy, so a row
|
|
185
|
+
* persisted while LAN access was enabled is refused at fetch time after an operator
|
|
186
|
+
* narrows the policy, not silently honoured. Throws when a hop fails validation or the
|
|
93
187
|
* redirect chain is too long.
|
|
94
188
|
*/
|
|
95
|
-
export async function fetchLocalRunner(rawUrl, init, doFetch = fetch) {
|
|
189
|
+
export async function fetchLocalRunner(rawUrl, init, doFetch = fetch, policy) {
|
|
96
190
|
let current = rawUrl;
|
|
97
191
|
for (let hop = 0;; hop++) {
|
|
98
|
-
const err =
|
|
192
|
+
const err = localRunnerUrlRefusal(current, policy);
|
|
99
193
|
if (err)
|
|
100
|
-
throw new Error(`Blocked local-runner request: ${err}`);
|
|
194
|
+
throw new Error(`Blocked local-runner request: ${err.message}`);
|
|
101
195
|
const res = await doFetch(current, { ...init, redirect: 'manual' });
|
|
102
196
|
if (res.status < 300 || res.status >= 400)
|
|
103
197
|
return res;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"localModelUrl.js","sourceRoot":"","sources":["../../../src/modules/providers/localModelUrl.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,kFAAkF;AAClF,qFAAqF;AACrF,qFAAqF;AACrF,
|
|
1
|
+
{"version":3,"file":"localModelUrl.js","sourceRoot":"","sources":["../../../src/modules/providers/localModelUrl.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,kFAAkF;AAClF,qFAAqF;AACrF,qFAAqF;AACrF,qFAAqF;AACrF,qFAAqF;AACrF,gFAAgF;AAChF,8EAA8E;AAC9E,oFAAoF;AACpF,qFAAqF;AACrF,gFAAgF;AAChF,sFAAsF;AACtF,mEAAmE;AACnE,8EAA8E;AAG9E,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAmBlF,yFAAyF;AACzF,SAAS,iBAAiB,CACxB,EAAoC,EACpC,eAAwB;IAExB,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG;QAAE,OAAO,IAAI,CAAA,CAAC,iBAAiB;IAChD,qFAAqF;IACrF,oFAAoF;IACpF,OAAO,eAAe,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,WAAW,CAAC,EAAE,CAAC,CAAA;AAC1D,CAAC;AAED,mFAAmF;AACnF,SAAS,mBAAmB,CAAC,IAAY,EAAE,eAAwB;IACjE,MAAM,CAAC,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;IAClE,IAAI,CAAC,KAAK,EAAE;QAAE,OAAO,KAAK,CAAA;IAC1B,mFAAmF;IACnF,mFAAmF;IACnF,sFAAsF;IACtF,IAAI,mBAAmB,CAAC,CAAC,CAAC;QAAE,OAAO,KAAK,CAAA;IAExC,wFAAwF;IACxF,uFAAuF;IACvF,4FAA4F;IAC5F,2FAA2F;IAC3F,uFAAuF;IACvF,6EAA6E;IAC7E,IAAI,CAAC,KAAK,WAAW;QAAE,OAAO,IAAI,CAAA;IAClC,qFAAqF;IACrF,IAAI,eAAe,IAAI,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAAE,OAAO,IAAI,CAAA;IAExD,mFAAmF;IACnF,qFAAqF;IACrF,sFAAsF;IACtF,IAAI,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACpB,IAAI,CAAC,KAAK,KAAK;YAAE,OAAO,IAAI,CAAA,CAAC,WAAW;QACxC,IAAI,eAAe,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YAAE,OAAO,IAAI,CAAA,CAAC,eAAe;QAC9F,6EAA6E;QAC7E,MAAM,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,CAAA;QAC5B,IAAI,MAAM;YAAE,OAAO,iBAAiB,CAAC,MAAM,EAAE,eAAe,CAAC,CAAA;QAC7D,2EAA2E;QAC3E,OAAO,KAAK,CAAA;IACd,CAAC;IAED,mFAAmF;IACnF,mFAAmF;IACnF,gBAAgB;IAChB,MAAM,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,CAAA;IACxB,IAAI,EAAE;QAAE,OAAO,iBAAiB,CAAC,EAAE,EAAE,eAAe,CAAC,CAAA;IAErD,oDAAoD;IACpD,OAAO,KAAK,CAAA;AACd,CAAC;AAED,qEAAqE;AACrE,SAAS,aAAa,CAAC,MAAc;IACnC,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAA;IAC3D,MAAM,KAAK,GAAG,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;IACtC,IAAI,KAAK,GAAG,CAAC;QAAE,OAAO,KAAK,CAAA;IAC3B,OAAO,mBAAmB,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAA;AAC3D,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,qBAAqB,CACnC,MAAc,EACd,MAA6B;IAE7B,MAAM,eAAe,GAAG,MAAM,EAAE,eAAe,IAAI,KAAK,CAAA;IACxD,IAAI,GAAQ,CAAA;IACZ,IAAI,CAAC;QACH,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAA;IACvB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,oDAAoD,EAAE,CAAA;IACjG,CAAC;IACD,IAAI,GAAG,CAAC,QAAQ,KAAK,OAAO,IAAI,GAAG,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC1D,OAAO,EAAE,MAAM,EAAE,oBAAoB,EAAE,OAAO,EAAE,sCAAsC,EAAE,CAAA;IAC1F,CAAC;IACD,oFAAoF;IACpF,+EAA+E;IAC/E,IAAI,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;QACjC,OAAO;YACL,MAAM,EAAE,yBAAyB;YACjC,OAAO,EAAE,4CAA4C;SACtD,CAAA;IACH,CAAC;IACD,uFAAuF;IACvF,0FAA0F;IAC1F,mFAAmF;IACnF,qFAAqF;IACrF,qFAAqF;IACrF,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;QAC3B,OAAO;YACL,MAAM,EAAE,+BAA+B;YACvC,OAAO,EACL,6EAA6E;gBAC7E,kDAAkD;SACrD,CAAA;IACH,CAAC;IACD,wFAAwF;IACxF,yFAAyF;IACzF,0FAA0F;IAC1F,gDAAgD;IAChD,IAAI,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1B,OAAO;YACL,MAAM,EAAE,+BAA+B;YACvC,OAAO,EAAE,0DAA0D;SACpE,CAAA;IACH,CAAC;IACD,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,QAAQ,EAAE,eAAe,CAAC,EAAE,CAAC;QACxD,OAAO,eAAe;YACpB,CAAC,CAAC;gBACE,MAAM,EAAE,gBAAgB;gBACxB,OAAO,EACL,gFAAgF;oBAChF,mFAAmF;aACtF;YACH,CAAC,CAAC;gBACE,MAAM,EAAE,mBAAmB;gBAC3B,OAAO,EACL,6EAA6E;oBAC7E,kFAAkF;oBAClF,wCAAwC;aAC3C,CAAA;IACP,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,gBAAgB,CAC9B,OAAe,EACf,MAAoB,EACpB,MAA6B;IAE7B,MAAM,OAAO,GAAG,qBAAqB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;IACtD,IAAI,OAAO;QAAE,OAAO,EAAE,OAAO,EAAE,CAAA;IAC/B,MAAM,QAAQ,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,MAAM,EAAE,CAAA;IAC1D,MAAM,eAAe,GAAG,qBAAqB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;IAC/D,IAAI,eAAe;QAAE,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,CAAA;IACxD,IAAI,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACjD,OAAO;YACL,OAAO,EAAE;gBACP,MAAM,EAAE,+BAA+B;gBACvC,OAAO,EAAE,0EAA0E;aACpF;SACF,CAAA;IACH,CAAC;IACD,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAA;AAC1B,CAAC;AAED,6EAA6E;AAC7E,MAAM,0BAA0B,GAAG,CAAC,CAAA;AAEpC;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,MAAc,EACd,IAAiB,EACjB,OAAO,GAAiB,KAAK,EAC7B,MAA6B;IAE7B,IAAI,OAAO,GAAG,MAAM,CAAA;IACpB,KAAK,IAAI,GAAG,GAAG,CAAC,GAAI,GAAG,EAAE,EAAE,CAAC;QAC1B,MAAM,GAAG,GAAG,qBAAqB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;QAClD,IAAI,GAAG;YAAE,MAAM,IAAI,KAAK,CAAC,iCAAiC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAA;QACxE,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,EAAE,GAAG,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAA;QACnE,IAAI,GAAG,CAAC,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG;YAAE,OAAO,GAAG,CAAA;QACrD,IAAI,GAAG,IAAI,0BAA0B,EAAE,CAAC;YACtC,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAA;QACtE,CAAC;QACD,MAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;QAC5C,IAAI,CAAC,QAAQ;YAAE,OAAO,GAAG,CAAA;QACzB,OAAO,GAAG,IAAI,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAA;IACjD,CAAC;AACH,CAAC"}
|
|
@@ -151,18 +151,26 @@ export class BugHuntService {
|
|
|
151
151
|
}
|
|
152
152
|
}
|
|
153
153
|
/**
|
|
154
|
-
* Put the caller's board id on the field the target provider reads. The three vendors'
|
|
155
|
-
* notions are structurally different (a Jira project key, a Linear team UUID, an
|
|
156
|
-
* slug), which is exactly why the wire carries ONE opaque string and the mapping
|
|
157
|
-
* rather than in the SPA — a picker that had to know which field to fill would have
|
|
158
|
-
* forked per provider.
|
|
154
|
+
* Put the caller's board id on the field the target provider reads. The three built-in vendors'
|
|
155
|
+
* board notions are structurally different (a Jira project key, a Linear team UUID, an
|
|
156
|
+
* `owner/repo` slug), which is exactly why the wire carries ONE opaque string and the mapping
|
|
157
|
+
* happens here rather than in the SPA — a picker that had to know which field to fill would have
|
|
158
|
+
* to be forked per provider.
|
|
159
|
+
*
|
|
160
|
+
* A DEPLOYMENT-REGISTERED source takes the opaque `boardId` leg. It must not fall through to
|
|
161
|
+
* `githubRepo`: every field here is a plain string, so a fall-through would hand a registered
|
|
162
|
+
* provider's board scope to the GitHub field and fail as "no matching issues" rather than as the
|
|
163
|
+
* mis-routing it is. The default is therefore keyed on the source being a BUILT-IN, not on it
|
|
164
|
+
* being un-matched.
|
|
159
165
|
*/
|
|
160
166
|
function boardScopeFor(source, board) {
|
|
161
167
|
if (source === 'jira')
|
|
162
168
|
return { jiraProjectKey: board };
|
|
163
169
|
if (source === 'linear')
|
|
164
170
|
return { linearTeamId: board };
|
|
165
|
-
|
|
171
|
+
if (source === 'github')
|
|
172
|
+
return { githubRepo: board };
|
|
173
|
+
return { boardId: board };
|
|
166
174
|
}
|
|
167
175
|
/** Scrub the free-text fields of a candidate before it is sent to a model provider. */
|
|
168
176
|
function scrubCandidate(candidate) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BugHuntService.js","sourceRoot":"","sources":["../../../src/modules/tasks/BugHuntService.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"BugHuntService.js","sourceRoot":"","sources":["../../../src/modules/tasks/BugHuntService.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,11 +10,11 @@ export declare class GitHubIssuesProvider implements TaskSourceProvider {
|
|
|
10
10
|
/**
|
|
11
11
|
* Inbound webhook capability (verify + parse), so a github delivery can drive intake and
|
|
12
12
|
* ticket replies without waiting for the next polling sweep. See
|
|
13
|
-
* `docs/
|
|
13
|
+
* `backend/docs/adr/0032-tracker-webhook-intake.md`.
|
|
14
14
|
*/
|
|
15
15
|
readonly webhook: import("@cat-factory/kernel").TaskSourceWebhookAdapter;
|
|
16
16
|
readonly descriptor: {
|
|
17
|
-
source:
|
|
17
|
+
source: string;
|
|
18
18
|
label: string;
|
|
19
19
|
icon: string;
|
|
20
20
|
credentialFields: {
|
|
@@ -12,7 +12,7 @@ export class GitHubIssuesProvider {
|
|
|
12
12
|
/**
|
|
13
13
|
* Inbound webhook capability (verify + parse), so a github delivery can drive intake and
|
|
14
14
|
* ticket replies without waiting for the next polling sweep. See
|
|
15
|
-
* `docs/
|
|
15
|
+
* `backend/docs/adr/0032-tracker-webhook-intake.md`.
|
|
16
16
|
*/
|
|
17
17
|
webhook = githubIssuesWebhookAdapter;
|
|
18
18
|
descriptor = GITHUB_ISSUES_DESCRIPTOR;
|
|
@@ -9,11 +9,11 @@ export declare class JiraProvider implements TaskSourceProvider {
|
|
|
9
9
|
/**
|
|
10
10
|
* Inbound webhook capability (verify + parse), so a jira delivery can drive intake and
|
|
11
11
|
* ticket replies without waiting for the next polling sweep. See
|
|
12
|
-
* `docs/
|
|
12
|
+
* `backend/docs/adr/0032-tracker-webhook-intake.md`.
|
|
13
13
|
*/
|
|
14
14
|
readonly webhook: import("@cat-factory/kernel").TaskSourceWebhookAdapter;
|
|
15
15
|
readonly descriptor: {
|
|
16
|
-
source:
|
|
16
|
+
source: string;
|
|
17
17
|
label: string;
|
|
18
18
|
icon: string;
|
|
19
19
|
credentialFields: {
|
|
@@ -32,7 +32,7 @@ export class JiraProvider {
|
|
|
32
32
|
/**
|
|
33
33
|
* Inbound webhook capability (verify + parse), so a jira delivery can drive intake and
|
|
34
34
|
* ticket replies without waiting for the next polling sweep. See
|
|
35
|
-
* `docs/
|
|
35
|
+
* `backend/docs/adr/0032-tracker-webhook-intake.md`.
|
|
36
36
|
*/
|
|
37
37
|
webhook = jiraWebhookAdapter;
|
|
38
38
|
descriptor = JIRA_DESCRIPTOR;
|
|
@@ -5,11 +5,11 @@ export declare class LinearTaskProvider implements TaskSourceProvider {
|
|
|
5
5
|
/**
|
|
6
6
|
* Inbound webhook capability (verify + parse), so a linear delivery can drive intake and
|
|
7
7
|
* ticket replies without waiting for the next polling sweep. See
|
|
8
|
-
* `docs/
|
|
8
|
+
* `backend/docs/adr/0032-tracker-webhook-intake.md`.
|
|
9
9
|
*/
|
|
10
10
|
readonly webhook: import("@cat-factory/kernel").TaskSourceWebhookAdapter;
|
|
11
11
|
readonly descriptor: {
|
|
12
|
-
source:
|
|
12
|
+
source: string;
|
|
13
13
|
label: string;
|
|
14
14
|
icon: string;
|
|
15
15
|
credentialFields: {
|
|
@@ -17,7 +17,7 @@ export class LinearTaskProvider {
|
|
|
17
17
|
/**
|
|
18
18
|
* Inbound webhook capability (verify + parse), so a linear delivery can drive intake and
|
|
19
19
|
* ticket replies without waiting for the next polling sweep. See
|
|
20
|
-
* `docs/
|
|
20
|
+
* `backend/docs/adr/0032-tracker-webhook-intake.md`.
|
|
21
21
|
*/
|
|
22
22
|
webhook = linearWebhookAdapter;
|
|
23
23
|
descriptor = LINEAR_TASK_DESCRIPTOR;
|
|
@@ -1,21 +1,48 @@
|
|
|
1
1
|
import type { IssueIntakeConfig, TrackerIssueEvent } from '@cat-factory/kernel';
|
|
2
2
|
/** The intake configuration a schedule carries (`PipelineSchedule.issueIntake`). */
|
|
3
|
-
type IntakeConfig = Pick<IssueIntakeConfig, 'source' | 'predicates'>;
|
|
3
|
+
type IntakeConfig = Pick<IssueIntakeConfig, 'source' | 'board' | 'predicates'>;
|
|
4
|
+
/** The predicates an event is judged against, named so a verdict can say which one it was. */
|
|
5
|
+
export type IntakePredicateName = 'board' | 'labels' | 'titleFragment' | 'issueType';
|
|
4
6
|
/**
|
|
5
|
-
*
|
|
7
|
+
* What a schedule's intake configuration makes of one pushed event.
|
|
6
8
|
*
|
|
7
|
-
*
|
|
9
|
+
* - `match`: every configured predicate is satisfied by the delivery.
|
|
10
|
+
* - `miss`: a configured predicate is definitively violated (or the event is for another source
|
|
11
|
+
* or a closed issue). No mode acts on it.
|
|
12
|
+
* - `unconfirmed`: nothing is violated, but the delivery does not carry the field(s) named in
|
|
13
|
+
* `predicates`, so the configuration's question is unanswered. Never conflated with `match`.
|
|
14
|
+
*/
|
|
15
|
+
export type IntakeMatchVerdict = {
|
|
16
|
+
outcome: 'match';
|
|
17
|
+
} | {
|
|
18
|
+
outcome: 'miss';
|
|
19
|
+
predicate: IntakePredicateName | 'source' | 'closed';
|
|
20
|
+
} | {
|
|
21
|
+
outcome: 'unconfirmed';
|
|
22
|
+
predicates: IntakePredicateName[];
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* Judge a pushed issue event against a schedule's intake configuration.
|
|
26
|
+
*
|
|
27
|
+
* Rules, mirroring what `searchIssues` pushes into the vendor query:
|
|
8
28
|
*
|
|
9
|
-
* - **source** must be the schedule's source (
|
|
10
|
-
* - **
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
29
|
+
* - **source** must be the schedule's source (always evaluable; a mismatch is a `miss`).
|
|
30
|
+
* - **board** must equal the configured scope for that source. The event carries it in exactly
|
|
31
|
+
* the shape the configured field does, so no per-vendor knowledge is needed here. A `null`
|
|
32
|
+
* board on the event is `unconfirmed`, never a match: a schedule scoped to one project must not
|
|
33
|
+
* be assumed to cover a delivery that never named one.
|
|
34
|
+
* - **labels**: every configured label must be present, case-insensitively (the vendor queries
|
|
35
|
+
* are `AND`-semantics; GitHub and Jira both match labels case-insensitively). An event carrying
|
|
36
|
+
* no labels at all cannot answer a label predicate, so it is `unconfirmed`.
|
|
37
|
+
* - **titleFragment**: a case-insensitive substring of the issue title; an empty title is
|
|
38
|
+
* `unconfirmed`.
|
|
39
|
+
* - **issueType**: case-insensitive equality. A source with no issue-type notion (Linear) sends
|
|
40
|
+
* `null`, which is `unconfirmed` rather than a miss, so the predicate does not exclude the whole
|
|
41
|
+
* source.
|
|
15
42
|
*
|
|
16
|
-
* A `closed` event never qualifies: intake picks up OPEN issues, and
|
|
43
|
+
* A `closed` event never qualifies: intake picks up OPEN issues, and acting on a close would spend
|
|
17
44
|
* a run to discover the issue is gone.
|
|
18
45
|
*/
|
|
19
|
-
export declare function
|
|
46
|
+
export declare function judgeIssueEventForIntake(config: IntakeConfig, event: TrackerIssueEvent): IntakeMatchVerdict;
|
|
20
47
|
export {};
|
|
21
48
|
//# sourceMappingURL=intakeMatch.logic.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"intakeMatch.logic.d.ts","sourceRoot":"","sources":["../../../src/modules/tasks/intakeMatch.logic.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;
|
|
1
|
+
{"version":3,"file":"intakeMatch.logic.d.ts","sourceRoot":"","sources":["../../../src/modules/tasks/intakeMatch.logic.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AA2B/E,oFAAoF;AACpF,KAAK,YAAY,GAAG,IAAI,CAAC,iBAAiB,EAAE,QAAQ,GAAG,OAAO,GAAG,YAAY,CAAC,CAAA;AAE9E,8FAA8F;AAC9F,MAAM,MAAM,mBAAmB,GAAG,OAAO,GAAG,QAAQ,GAAG,eAAe,GAAG,WAAW,CAAA;AAEpF;;;;;;;;GAQG;AACH,MAAM,MAAM,kBAAkB,GAC1B;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,GACpB;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,mBAAmB,GAAG,QAAQ,GAAG,QAAQ,CAAA;CAAE,GACzE;IAAE,OAAO,EAAE,aAAa,CAAC;IAAC,UAAU,EAAE,mBAAmB,EAAE,CAAA;CAAE,CAAA;AAEjE;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,YAAY,EACpB,KAAK,EAAE,iBAAiB,GACvB,kBAAkB,CA8CpB"}
|
|
@@ -1,43 +1,95 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Judge a pushed issue event against a schedule's intake configuration.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
4
|
+
* Rules, mirroring what `searchIssues` pushes into the vendor query:
|
|
5
5
|
*
|
|
6
|
-
* - **source** must be the schedule's source (
|
|
7
|
-
* - **
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
6
|
+
* - **source** must be the schedule's source (always evaluable; a mismatch is a `miss`).
|
|
7
|
+
* - **board** must equal the configured scope for that source. The event carries it in exactly
|
|
8
|
+
* the shape the configured field does, so no per-vendor knowledge is needed here. A `null`
|
|
9
|
+
* board on the event is `unconfirmed`, never a match: a schedule scoped to one project must not
|
|
10
|
+
* be assumed to cover a delivery that never named one.
|
|
11
|
+
* - **labels**: every configured label must be present, case-insensitively (the vendor queries
|
|
12
|
+
* are `AND`-semantics; GitHub and Jira both match labels case-insensitively). An event carrying
|
|
13
|
+
* no labels at all cannot answer a label predicate, so it is `unconfirmed`.
|
|
14
|
+
* - **titleFragment**: a case-insensitive substring of the issue title; an empty title is
|
|
15
|
+
* `unconfirmed`.
|
|
16
|
+
* - **issueType**: case-insensitive equality. A source with no issue-type notion (Linear) sends
|
|
17
|
+
* `null`, which is `unconfirmed` rather than a miss, so the predicate does not exclude the whole
|
|
18
|
+
* source.
|
|
12
19
|
*
|
|
13
|
-
* A `closed` event never qualifies: intake picks up OPEN issues, and
|
|
20
|
+
* A `closed` event never qualifies: intake picks up OPEN issues, and acting on a close would spend
|
|
14
21
|
* a run to discover the issue is gone.
|
|
15
22
|
*/
|
|
16
|
-
export function
|
|
23
|
+
export function judgeIssueEventForIntake(config, event) {
|
|
17
24
|
if (event.source !== config.source)
|
|
18
|
-
return
|
|
25
|
+
return { outcome: 'miss', predicate: 'source' };
|
|
19
26
|
if (event.action === 'closed')
|
|
20
|
-
return
|
|
21
|
-
const
|
|
22
|
-
const
|
|
27
|
+
return { outcome: 'miss', predicate: 'closed' };
|
|
28
|
+
const unconfirmed = [];
|
|
29
|
+
const scope = configuredBoard(config);
|
|
30
|
+
if (scope) {
|
|
31
|
+
// Read for EMPTINESS, not `=== null`. The typed null is one way a delivery says nothing; an
|
|
32
|
+
// adapter that omits the field, or a vendor that sent a blank string, say the same thing, and
|
|
33
|
+
// an absent value that fell through to the comparison would read as a definite miss and
|
|
34
|
+
// silently suppress a schedule rather than reporting that it could not be checked.
|
|
35
|
+
if (!event.board?.trim())
|
|
36
|
+
unconfirmed.push('board');
|
|
37
|
+
else if (!sameBoard(event.board, scope))
|
|
38
|
+
return { outcome: 'miss', predicate: 'board' };
|
|
39
|
+
}
|
|
40
|
+
const labels = config.predicates.labels ?? [];
|
|
23
41
|
if (labels.length > 0) {
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
if (event.labels.length > 0) {
|
|
42
|
+
if (event.labels.length === 0)
|
|
43
|
+
unconfirmed.push('labels');
|
|
44
|
+
else {
|
|
28
45
|
const present = new Set(event.labels.map((l) => l.toLowerCase()));
|
|
29
|
-
if (!labels.every((label) => present.has(label.toLowerCase())))
|
|
30
|
-
return
|
|
46
|
+
if (!labels.every((label) => present.has(label.toLowerCase()))) {
|
|
47
|
+
return { outcome: 'miss', predicate: 'labels' };
|
|
48
|
+
}
|
|
31
49
|
}
|
|
32
50
|
}
|
|
33
|
-
const fragment = predicates.titleFragment?.trim();
|
|
34
|
-
if (fragment
|
|
35
|
-
|
|
51
|
+
const fragment = config.predicates.titleFragment?.trim();
|
|
52
|
+
if (fragment) {
|
|
53
|
+
if (!event.title)
|
|
54
|
+
unconfirmed.push('titleFragment');
|
|
55
|
+
else if (!event.title.toLowerCase().includes(fragment.toLowerCase())) {
|
|
56
|
+
return { outcome: 'miss', predicate: 'titleFragment' };
|
|
57
|
+
}
|
|
36
58
|
}
|
|
37
|
-
const issueType = predicates.issueType?.trim();
|
|
38
|
-
if (issueType
|
|
39
|
-
|
|
59
|
+
const issueType = config.predicates.issueType?.trim();
|
|
60
|
+
if (issueType) {
|
|
61
|
+
if (!event.issueType)
|
|
62
|
+
unconfirmed.push('issueType');
|
|
63
|
+
else if (event.issueType.toLowerCase() !== issueType.toLowerCase()) {
|
|
64
|
+
return { outcome: 'miss', predicate: 'issueType' };
|
|
65
|
+
}
|
|
40
66
|
}
|
|
41
|
-
return
|
|
67
|
+
return unconfirmed.length > 0
|
|
68
|
+
? { outcome: 'unconfirmed', predicates: unconfirmed }
|
|
69
|
+
: { outcome: 'match' };
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* The one board scope a configuration carries, whichever leg holds it.
|
|
73
|
+
*
|
|
74
|
+
* Read as "the first leg that is set" rather than by switching on the source: the legs are
|
|
75
|
+
* mutually exclusive by construction (a built-in source fills its own, a registered one fills
|
|
76
|
+
* `boardId`), and switching here would need a per-source map that a deployment-registered source
|
|
77
|
+
* is by definition absent from, the exact shape `boardScopeFor` had to stop using.
|
|
78
|
+
*/
|
|
79
|
+
function configuredBoard(config) {
|
|
80
|
+
const board = config.board;
|
|
81
|
+
return (board.jiraProjectKey?.trim() ||
|
|
82
|
+
board.linearTeamId?.trim() ||
|
|
83
|
+
board.githubRepo?.trim() ||
|
|
84
|
+
board.boardId?.trim() ||
|
|
85
|
+
undefined);
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Case-insensitive comparison, because the two sides are typed by different hands: a Jira project
|
|
89
|
+
* key and a GitHub `owner/repo` are both case-insensitive at the vendor, and the operator typed
|
|
90
|
+
* one of them into a form. A Linear team UUID is unaffected by folding case.
|
|
91
|
+
*/
|
|
92
|
+
function sameBoard(a, b) {
|
|
93
|
+
return a.trim().toLowerCase() === b.trim().toLowerCase();
|
|
42
94
|
}
|
|
43
95
|
//# sourceMappingURL=intakeMatch.logic.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"intakeMatch.logic.js","sourceRoot":"","sources":["../../../src/modules/tasks/intakeMatch.logic.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"intakeMatch.logic.js","sourceRoot":"","sources":["../../../src/modules/tasks/intakeMatch.logic.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapters.d.ts","sourceRoot":"","sources":["../../../../src/modules/tasks/webhook/adapters.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,wBAAwB,EAGzB,MAAM,qBAAqB,CAAA;AA4B5B;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,0BAA0B,EAAE,
|
|
1
|
+
{"version":3,"file":"adapters.d.ts","sourceRoot":"","sources":["../../../../src/modules/tasks/webhook/adapters.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,wBAAwB,EAGzB,MAAM,qBAAqB,CAAA;AA4B5B;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,0BAA0B,EAAE,wBAkDxC,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,EAAE,wBAuDhC,CAAA;AAED;;;;;;GAMG;AACH,eAAO,MAAM,oBAAoB,EAAE,wBAsDlC,CAAA"}
|
|
@@ -78,6 +78,9 @@ export const githubIssuesWebhookAdapter = {
|
|
|
78
78
|
title: readString(payload, 'issue', 'title') ?? '',
|
|
79
79
|
labels: readNameList(payload, 'issue', 'labels'),
|
|
80
80
|
issueType: readString(payload, 'issue', 'type', 'name'),
|
|
81
|
+
// The `owner/name` slug is exactly what `IssueIntakeQuery.board.githubRepo` carries, and
|
|
82
|
+
// it is already parsed above for the external id.
|
|
83
|
+
board: repo,
|
|
81
84
|
url: readString(payload, 'issue', 'html_url'),
|
|
82
85
|
};
|
|
83
86
|
}
|
|
@@ -136,6 +139,9 @@ export const jiraWebhookAdapter = {
|
|
|
136
139
|
title: readString(fields, 'summary') ?? '',
|
|
137
140
|
labels: readStringList(fields, 'labels'),
|
|
138
141
|
issueType: readString(fields, 'issuetype', 'name'),
|
|
142
|
+
// The project KEY, not its numeric id: `IssueIntakeQuery.board.jiraProjectKey` is what a
|
|
143
|
+
// schedule stores and what `listBoards` hands back, and JQL scopes on the key.
|
|
144
|
+
board: readString(fields, 'project', 'key')?.toUpperCase() ?? null,
|
|
139
145
|
url: readString(payload, 'issue', 'self'),
|
|
140
146
|
};
|
|
141
147
|
}
|
|
@@ -193,6 +199,11 @@ export const linearWebhookAdapter = {
|
|
|
193
199
|
// Linear has no issue-type notion; intake's `issueType` predicate is a no-op here, the
|
|
194
200
|
// same way `searchIssues` ignores it for this source.
|
|
195
201
|
issueType: null,
|
|
202
|
+
// The team UUID, which is what `buildLinearIntakeFilter` matches on (`team.id.eq`) and
|
|
203
|
+
// what `listTeams` hands the board picker, never the human team KEY, which would look
|
|
204
|
+
// plausible and never match. Linear sends the nested team on most Issue payloads and a
|
|
205
|
+
// bare `teamId` on the leaner ones.
|
|
206
|
+
board: readString(data, 'team', 'id') ?? readString(data, 'teamId'),
|
|
196
207
|
url: readString(data, 'url'),
|
|
197
208
|
};
|
|
198
209
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapters.js","sourceRoot":"","sources":["../../../../src/modules/tasks/webhook/adapters.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"adapters.js","sourceRoot":"","sources":["../../../../src/modules/tasks/webhook/adapters.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cat-factory/integrations",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.121.1",
|
|
4
4
|
"description": "External-system integration domain logic for the Agent Architecture Board (GitHub, documents, tasks, environments, runners).",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -27,15 +27,15 @@
|
|
|
27
27
|
"ai": "^7.0.47",
|
|
28
28
|
"p-map": "^7.0.6",
|
|
29
29
|
"yaml": "^2.9.0",
|
|
30
|
-
"@cat-factory/contracts": "0.
|
|
31
|
-
"@cat-factory/kernel": "0.
|
|
30
|
+
"@cat-factory/contracts": "0.221.0",
|
|
31
|
+
"@cat-factory/kernel": "0.223.0"
|
|
32
32
|
},
|
|
33
33
|
"devDependencies": {
|
|
34
34
|
"typescript": "7.0.2",
|
|
35
35
|
"undici": "^8.9.0",
|
|
36
36
|
"valibot": "^1.4.2",
|
|
37
37
|
"vitest": "^4.1.10",
|
|
38
|
-
"@cat-factory/caching": "0.13.
|
|
38
|
+
"@cat-factory/caching": "0.13.9"
|
|
39
39
|
},
|
|
40
40
|
"scripts": {
|
|
41
41
|
"build": "tsc -b tsconfig.build.json",
|