@cat-factory/integrations 0.31.0 → 0.32.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,101 @@
1
+ import { STRICT_URL_SAFETY_POLICY } from '@cat-factory/kernel';
2
+ import { assertApiServerUrlSafe, KUBERNETES_TOKEN_KEY } from '../kubernetes/kubernetes.logic.js';
3
+ import { KubernetesRunnerTransport } from '../kubernetes/KubernetesRunnerTransport.js';
4
+ import { HttpRunnerPoolProvider } from './HttpRunnerPoolProvider.js';
5
+ import { RunnerPoolTransport } from './RunnerPoolTransport.js';
6
+ import { assertManifestUrlsSafe, referencedSecretKeys as manifestSecretKeys, } from './runners.logic.js';
7
+ const REGISTRY = new Map();
8
+ /** Register a runner-backend provider (built-ins on import; third-party for side effect). */
9
+ export function registerRunnerBackend(provider) {
10
+ REGISTRY.set(provider.kind, provider);
11
+ }
12
+ /** The provider for a backend kind, or undefined when unregistered. */
13
+ export function runnerBackend(kind) {
14
+ return REGISTRY.get(kind);
15
+ }
16
+ /** All registered backend kinds (for diagnostics / a UI capabilities list). */
17
+ export function registeredRunnerBackendKinds() {
18
+ return [...REGISTRY.keys()];
19
+ }
20
+ // --- Built-in: manifest (the original BYO HTTP scheduler pool) ----------------
21
+ let sharedHttpProvider;
22
+ function defaultHttpProvider(urlPolicy) {
23
+ return (sharedHttpProvider ??= new HttpRunnerPoolProvider(urlPolicy ? { urlPolicy } : {}));
24
+ }
25
+ export const manifestRunnerBackend = {
26
+ kind: 'manifest',
27
+ referencedSecretKeys: (config) => config.kind === 'manifest' ? manifestSecretKeys(config.manifest) : [],
28
+ connectionMeta: (config) => {
29
+ if (config.kind !== 'manifest')
30
+ throw new Error('Expected a manifest runner config');
31
+ return {
32
+ providerId: config.manifest.providerId,
33
+ label: config.manifest.label,
34
+ baseUrl: config.manifest.baseUrl,
35
+ };
36
+ },
37
+ assertConfigSafe: (config, opts) => {
38
+ if (config.kind === 'manifest') {
39
+ assertManifestUrlsSafe(config.manifest, opts?.urlPolicy ?? STRICT_URL_SAFETY_POLICY);
40
+ }
41
+ },
42
+ buildTransport: (config, ctx) => {
43
+ if (config.kind !== 'manifest')
44
+ throw new Error('Expected a manifest runner config');
45
+ const provider = ctx.runnerPoolProvider ?? defaultHttpProvider(ctx.urlPolicy);
46
+ return new RunnerPoolTransport(provider, config.manifest, ctx.resolveSecret);
47
+ },
48
+ testConnection: (config, ctx) => {
49
+ if (config.kind !== 'manifest') {
50
+ return Promise.resolve({ ok: false, message: 'Expected a manifest runner config' });
51
+ }
52
+ const provider = ctx.runnerPoolProvider ?? defaultHttpProvider(ctx.urlPolicy);
53
+ return (provider.testConnection?.({
54
+ manifest: config.manifest,
55
+ config: {},
56
+ resolveSecret: ctx.resolveSecret,
57
+ }) ?? Promise.resolve({ ok: true, message: 'This pool provider has no connection test.' }));
58
+ },
59
+ };
60
+ // --- Built-in: kubernetes (native per-run pods over the apiserver pod-proxy) ---
61
+ export const kubernetesRunnerBackend = {
62
+ kind: 'kubernetes',
63
+ referencedSecretKeys: (config) => (config.kind === 'kubernetes' ? [KUBERNETES_TOKEN_KEY] : []),
64
+ connectionMeta: (config) => {
65
+ if (config.kind !== 'kubernetes')
66
+ throw new Error('Expected a kubernetes runner config');
67
+ return {
68
+ providerId: 'kubernetes',
69
+ label: config.kubernetes.label,
70
+ baseUrl: config.kubernetes.apiServerUrl,
71
+ };
72
+ },
73
+ assertConfigSafe: (config, opts) => {
74
+ if (config.kind !== 'kubernetes')
75
+ return;
76
+ assertApiServerUrlSafe(config.kubernetes.apiServerUrl);
77
+ // Custom TLS trust material is honored only on a runtime with undici (Node/local).
78
+ // Reject it up front on a runtime that can't (the Cloudflare Worker) so the
79
+ // connection can't save and then fail at every dispatch.
80
+ const needsCustomTls = !!config.kubernetes.caCertPem || !!config.kubernetes.insecureSkipTlsVerify;
81
+ if (needsCustomTls && opts?.customTlsSupported === false) {
82
+ throw new Error('This runtime cannot verify a custom CA / skip TLS for the Kubernetes apiserver ' +
83
+ '(it requires the Node runtime). Use a publicly-trusted apiserver certificate, or ' +
84
+ 'run this workspace on the Node/local deployment.');
85
+ }
86
+ },
87
+ buildTransport: (config, ctx) => {
88
+ if (config.kind !== 'kubernetes')
89
+ throw new Error('Expected a kubernetes runner config');
90
+ return new KubernetesRunnerTransport(config.kubernetes, ctx.resolveSecret);
91
+ },
92
+ testConnection: (config, ctx) => {
93
+ if (config.kind !== 'kubernetes') {
94
+ return Promise.resolve({ ok: false, message: 'Expected a kubernetes runner config' });
95
+ }
96
+ return new KubernetesRunnerTransport(config.kubernetes, ctx.resolveSecret).testConnection();
97
+ },
98
+ };
99
+ registerRunnerBackend(manifestRunnerBackend);
100
+ registerRunnerBackend(kubernetesRunnerBackend);
101
+ //# sourceMappingURL=runner-backends.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runner-backends.js","sourceRoot":"","sources":["../../../src/modules/runners/runner-backends.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAA;AAC9D,OAAO,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAA;AAChG,OAAO,EAAE,yBAAyB,EAAE,MAAM,4CAA4C,CAAA;AACtF,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAA;AACpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAC9D,OAAO,EACL,sBAAsB,EACtB,oBAAoB,IAAI,kBAAkB,GAC3C,MAAM,oBAAoB,CAAA;AA2D3B,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAiC,CAAA;AAEzD,6FAA6F;AAC7F,MAAM,UAAU,qBAAqB,CAAC,QAA+B;IACnE,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;AACvC,CAAC;AAED,uEAAuE;AACvE,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,OAAO,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;AAC3B,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,4BAA4B;IAC1C,OAAO,CAAC,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAA;AAC7B,CAAC;AAED,iFAAiF;AAEjF,IAAI,kBAAsD,CAAA;AAC1D,SAAS,mBAAmB,CAAC,SAA2B;IACtD,OAAO,CAAC,kBAAkB,KAAK,IAAI,sBAAsB,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;AAC5F,CAAC;AAED,MAAM,CAAC,MAAM,qBAAqB,GAA0B;IAC1D,IAAI,EAAE,UAAU;IAChB,oBAAoB,EAAE,CAAC,MAAM,EAAE,EAAE,CAC/B,MAAM,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,kBAAkB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE;IACvE,cAAc,EAAE,CAAC,MAAM,EAAE,EAAE;QACzB,IAAI,MAAM,CAAC,IAAI,KAAK,UAAU;YAAE,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAA;QACpF,OAAO;YACL,UAAU,EAAE,MAAM,CAAC,QAAQ,CAAC,UAAU;YACtC,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,KAAK;YAC5B,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,OAAO;SACjC,CAAA;IACH,CAAC;IACD,gBAAgB,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE;QACjC,IAAI,MAAM,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YAC/B,sBAAsB,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,EAAE,SAAS,IAAI,wBAAwB,CAAC,CAAA;QACtF,CAAC;IACH,CAAC;IACD,cAAc,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE;QAC9B,IAAI,MAAM,CAAC,IAAI,KAAK,UAAU;YAAE,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAA;QACpF,MAAM,QAAQ,GAAG,GAAG,CAAC,kBAAkB,IAAI,mBAAmB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;QAC7E,OAAO,IAAI,mBAAmB,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,GAAG,CAAC,aAAa,CAAC,CAAA;IAC9E,CAAC;IACD,cAAc,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE;QAC9B,IAAI,MAAM,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YAC/B,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,mCAAmC,EAAE,CAAC,CAAA;QACrF,CAAC;QACD,MAAM,QAAQ,GAAG,GAAG,CAAC,kBAAkB,IAAI,mBAAmB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;QAC7E,OAAO,CACL,QAAQ,CAAC,cAAc,EAAE,CAAC;YACxB,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,MAAM,EAAE,EAAE;YACV,aAAa,EAAE,GAAG,CAAC,aAAa;SACjC,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,4CAA4C,EAAE,CAAC,CAC3F,CAAA;IACH,CAAC;CACF,CAAA;AAED,kFAAkF;AAElF,MAAM,CAAC,MAAM,uBAAuB,GAA0B;IAC5D,IAAI,EAAE,YAAY;IAClB,oBAAoB,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,KAAK,YAAY,CAAC,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC9F,cAAc,EAAE,CAAC,MAAM,EAAE,EAAE;QACzB,IAAI,MAAM,CAAC,IAAI,KAAK,YAAY;YAAE,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAA;QACxF,OAAO;YACL,UAAU,EAAE,YAAY;YACxB,KAAK,EAAE,MAAM,CAAC,UAAU,CAAC,KAAK;YAC9B,OAAO,EAAE,MAAM,CAAC,UAAU,CAAC,YAAY;SACxC,CAAA;IACH,CAAC;IACD,gBAAgB,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE;QACjC,IAAI,MAAM,CAAC,IAAI,KAAK,YAAY;YAAE,OAAM;QACxC,sBAAsB,CAAC,MAAM,CAAC,UAAU,CAAC,YAAY,CAAC,CAAA;QACtD,mFAAmF;QACnF,4EAA4E;QAC5E,yDAAyD;QACzD,MAAM,cAAc,GAClB,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,IAAI,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,qBAAqB,CAAA;QAC5E,IAAI,cAAc,IAAI,IAAI,EAAE,kBAAkB,KAAK,KAAK,EAAE,CAAC;YACzD,MAAM,IAAI,KAAK,CACb,iFAAiF;gBAC/E,mFAAmF;gBACnF,kDAAkD,CACrD,CAAA;QACH,CAAC;IACH,CAAC;IACD,cAAc,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE;QAC9B,IAAI,MAAM,CAAC,IAAI,KAAK,YAAY;YAAE,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAA;QACxF,OAAO,IAAI,yBAAyB,CAAC,MAAM,CAAC,UAAU,EAAE,GAAG,CAAC,aAAa,CAAC,CAAA;IAC5E,CAAC;IACD,cAAc,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE;QAC9B,IAAI,MAAM,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;YACjC,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,qCAAqC,EAAE,CAAC,CAAA;QACvF,CAAC;QACD,OAAO,IAAI,yBAAyB,CAAC,MAAM,CAAC,UAAU,EAAE,GAAG,CAAC,aAAa,CAAC,CAAC,cAAc,EAAE,CAAA;IAC7F,CAAC;CACF,CAAA;AAED,qBAAqB,CAAC,qBAAqB,CAAC,CAAA;AAC5C,qBAAqB,CAAC,uBAAuB,CAAC,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cat-factory/integrations",
3
- "version": "0.31.0",
3
+ "version": "0.32.0",
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",
@@ -25,8 +25,8 @@
25
25
  },
26
26
  "dependencies": {
27
27
  "ai": "^6.0.209",
28
- "@cat-factory/contracts": "0.47.0",
29
- "@cat-factory/kernel": "0.48.0"
28
+ "@cat-factory/contracts": "0.48.0",
29
+ "@cat-factory/kernel": "0.49.0"
30
30
  },
31
31
  "devDependencies": {
32
32
  "typescript": "7.0.1-rc",