@cat-factory/local-server 0.14.2 → 0.15.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.
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAgBpD;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAuB5E;AAED,qEAAqE;AACrE,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,GAAG,SAAS,CAEjE"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAgBpD;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CA6B5E;AAED,qEAAqE;AACrE,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,GAAG,SAAS,CAEjE"}
package/dist/config.js CHANGED
@@ -38,6 +38,12 @@ export function applyLocalDefaults(env) {
38
38
  // alias routes back to this service on the host. The docker-family transport
39
39
  // publishes that alias on Linux via `--add-host=<alias>:host-gateway`.
40
40
  PUBLIC_URL: env.PUBLIC_URL?.trim() || `http://${hostAlias}:${port}`,
41
+ // Assemble the ephemeral-environment module by default so the Tester's "delegate test
42
+ // environments to a provider" opt-in works once a developer registers a provider — the
43
+ // module is inert (and the local default stays host DinD) until they connect one AND
44
+ // flip the toggle, so defaulting it on has no behavioural cost. Set ENVIRONMENTS_ENABLED
45
+ // explicitly to override.
46
+ ENVIRONMENTS_ENABLED: env.ENVIRONMENTS_ENABLED?.trim() || 'true',
41
47
  };
42
48
  }
43
49
  /** The shared {@link AppConfig} with local-mode defaults applied. */
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AAEzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AAEtD,mFAAmF;AACnF,mFAAmF;AACnF,gDAAgD;AAChD,iFAAiF;AACjF,+DAA+D;AAC/D,uFAAuF;AACvF,6EAA6E;AAC7E,oFAAoF;AACpF,yDAAyD;AACzD,wEAAwE;AAExE,MAAM,YAAY,GAAG,MAAM,CAAA;AAE3B;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,GAAsB;IACvD,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,YAAY,CAAA;IAC7C,gFAAgF;IAChF,qFAAqF;IACrF,qFAAqF;IACrF,MAAM,SAAS,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAA;IACvC,OAAO;QACL,GAAG,GAAG;QACN,oFAAoF;QACpF,sFAAsF;QACtF,aAAa,EAAE,GAAG,CAAC,aAAa,EAAE,IAAI,EAAE,IAAI,MAAM;QAClD,+EAA+E;QAC/E,mBAAmB,EAAE,GAAG,CAAC,mBAAmB,EAAE,IAAI,EAAE,IAAI,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC;QACvF,mFAAmF;QACnF,qFAAqF;QACrF,sFAAsF;QACtF,gFAAgF;QAChF,cAAc,EAAE,GAAG,CAAC,cAAc,EAAE,IAAI,EAAE,IAAI,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAChF,qFAAqF;QACrF,6EAA6E;QAC7E,uEAAuE;QACvE,UAAU,EAAE,GAAG,CAAC,UAAU,EAAE,IAAI,EAAE,IAAI,UAAU,SAAS,IAAI,IAAI,EAAE;KACpE,CAAA;AACH,CAAC;AAED,qEAAqE;AACrE,MAAM,UAAU,eAAe,CAAC,GAAsB;IACpD,OAAO,cAAc,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAA;AAChD,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AAEzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AAEtD,mFAAmF;AACnF,mFAAmF;AACnF,gDAAgD;AAChD,iFAAiF;AACjF,+DAA+D;AAC/D,uFAAuF;AACvF,6EAA6E;AAC7E,oFAAoF;AACpF,yDAAyD;AACzD,wEAAwE;AAExE,MAAM,YAAY,GAAG,MAAM,CAAA;AAE3B;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,GAAsB;IACvD,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,YAAY,CAAA;IAC7C,gFAAgF;IAChF,qFAAqF;IACrF,qFAAqF;IACrF,MAAM,SAAS,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAA;IACvC,OAAO;QACL,GAAG,GAAG;QACN,oFAAoF;QACpF,sFAAsF;QACtF,aAAa,EAAE,GAAG,CAAC,aAAa,EAAE,IAAI,EAAE,IAAI,MAAM;QAClD,+EAA+E;QAC/E,mBAAmB,EAAE,GAAG,CAAC,mBAAmB,EAAE,IAAI,EAAE,IAAI,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC;QACvF,mFAAmF;QACnF,qFAAqF;QACrF,sFAAsF;QACtF,gFAAgF;QAChF,cAAc,EAAE,GAAG,CAAC,cAAc,EAAE,IAAI,EAAE,IAAI,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAChF,qFAAqF;QACrF,6EAA6E;QAC7E,uEAAuE;QACvE,UAAU,EAAE,GAAG,CAAC,UAAU,EAAE,IAAI,EAAE,IAAI,UAAU,SAAS,IAAI,IAAI,EAAE;QACnE,sFAAsF;QACtF,uFAAuF;QACvF,qFAAqF;QACrF,yFAAyF;QACzF,0BAA0B;QAC1B,oBAAoB,EAAE,GAAG,CAAC,oBAAoB,EAAE,IAAI,EAAE,IAAI,MAAM;KACjE,CAAA;AACH,CAAC;AAED,qEAAqE;AACrE,MAAM,UAAU,eAAe,CAAC,GAAsB;IACpD,OAAO,cAAc,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAA;AAChD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"container.d.ts","sourceRoot":"","sources":["../src/container.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAA;AACpE,OAAO,KAAK,EAAqC,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAyB7F,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,oBAAoB,GAAG,eAAe,CAiFlF"}
1
+ {"version":3,"file":"container.d.ts","sourceRoot":"","sources":["../src/container.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAA;AAGpE,OAAO,KAAK,EAAqC,eAAe,EAAE,MAAM,qBAAqB,CAAA;AA8B7F,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,oBAAoB,GAAG,eAAe,CAiLlF"}
package/dist/container.js CHANGED
@@ -1,4 +1,6 @@
1
- import { DrizzleGitHubInstallationRepository, buildNodeContainer, loadNodeConfig, } from '@cat-factory/node-server';
1
+ import { CryptoIdGenerator, DrizzleGitHubInstallationRepository, DrizzleRunnerPoolConnectionRepository, ProvisioningLogRecorder, SystemClock, buildNodeContainer, buildNodeResolveTransport, createDrizzleRepositories, loadNodeConfig, withProvisioningLog, } from '@cat-factory/node-server';
2
+ import { ConflictError } from '@cat-factory/kernel';
3
+ import { WorkspaceSettingsService } from '@cat-factory/orchestration';
2
4
  import { applyLocalDefaults } from './config.js';
3
5
  import { createLocalGitHubClient, fetchPatAccount, githubPatCreationUrl } from './github.js';
4
6
  import { AutoProvisioningInstallationRepository } from './installations.js';
@@ -6,10 +8,15 @@ import { createLocalContainerTransportFromEnv, } from './LocalContainerRunnerTra
6
8
  import { createRuntimeAdapter } from './runtimes/index.js';
7
9
  // The local-mode composition root. It is intentionally thin: the ENTIRE Drizzle/
8
10
  // Postgres persistence, pg-boss durable execution, gateways and model provisioning
9
- // come from `buildNodeContainer` unchanged. Local mode only swaps the two
10
- // differentiators behind the seams `buildNodeContainer` exposes:
11
- // - the runner backend → a per-run local container (LocalContainerRunnerTransport,
12
- // Docker/Podman/OrbStack/Colima/Apple `container`) instead of a self-hosted pool;
11
+ // come from `buildNodeContainer` unchanged. Local mode only swaps the differentiators
12
+ // behind the seams `buildNodeContainer` exposes:
13
+ // - the runner backend → host Docker by default (a per-run local container,
14
+ // LocalContainerRunnerTransport, Docker/Podman/OrbStack/Colima/Apple `container`),
15
+ // but PER WORKSPACE it can be delegated to the workspace's registered self-hosted
16
+ // runner pool (the `delegateAgentsToRunnerPool` setting) — the local-vs-external
17
+ // opt-in. The Tester's environment is the symmetric opt-in (`delegateTestEnvToProvider`,
18
+ // wired below as the tester fallback default), so a developer runs everything locally
19
+ // by default but can flip either concern to an external service from the UI;
13
20
  // - the push/clone token → a static GitHub PAT (`GITHUB_PAT`) instead of a GitHub
14
21
  // App installation token.
15
22
  // Repo resolution is unchanged: the executor still resolves a block's repo from the
@@ -45,15 +52,80 @@ export function buildLocalContainer(options) {
45
52
  const githubInstallationRepository = pat && options.db
46
53
  ? new AutoProvisioningInstallationRepository(new DrizzleGitHubInstallationRepository(options.db), resolveAccount)
47
54
  : undefined;
55
+ // One shared persistence set + clock/idGenerator, reused by the per-workspace transport
56
+ // chooser below AND threaded into `buildNodeContainer` (which would otherwise build its
57
+ // own) so the chooser reads the same workspace settings the rest of the engine does.
58
+ const clock = new SystemClock();
59
+ const idGenerator = new CryptoIdGenerator();
60
+ const repos = options.repos ?? createDrizzleRepositories(options.db, clock);
61
+ const wsSettings = new WorkspaceSettingsService({
62
+ workspaceSettingsRepository: repos.workspaceSettingsRepository,
63
+ workspaceRepository: repos.workspaceRepository,
64
+ });
48
65
  // The Docker transport is constructed LAZILY on first container-job dispatch, so the
49
66
  // service still boots to serve the board (and inline kinds) when LOCAL_HARNESS_IMAGE
50
67
  // is unset — only repo-operating kinds then fail, loudly and with a clear message,
51
68
  // mirroring how the Node facade treats a missing runner backend.
52
69
  let transport;
53
- const resolveTransport = () => {
70
+ const localResolve = () => {
54
71
  transport ??= createLocalContainerTransportFromEnv(env);
55
72
  return Promise.resolve(transport);
56
73
  };
74
+ // The runner-pool resolver (the external opt-in target). In local mode `runners` is
75
+ // enabled (it keys off ENCRYPTION_KEY, which `applyLocalDefaults` always sets), so this
76
+ // is non-null and a workspace can register a pool via the API; a native adapter injected
77
+ // through `options.runnerPoolProvider` drives the actual dispatch. The connection repo is
78
+ // also held for the start-time guard's cheap "is a pool registered?" existence check.
79
+ const runnerPoolConnectionRepository = new DrizzleRunnerPoolConnectionRepository(options.db);
80
+ const poolResolve = buildNodeResolveTransport(config, runnerPoolConnectionRepository, repos.workspaceRepository, clock, options.runnerPoolProvider);
81
+ // Per-branch provisioning-log tagging: the per-run local container logs under the
82
+ // `container` subsystem, the runner pool under `runner-pool`, so the logs drawer filters
83
+ // each correctly. We wrap each branch here and tell `buildNodeContainer` not to re-wrap
84
+ // (its single-subsystem wrap can't tell which branch a per-workspace chooser took).
85
+ const recorder = new ProvisioningLogRecorder({
86
+ repository: repos.provisioningLogRepository,
87
+ idGenerator,
88
+ clock,
89
+ });
90
+ const wrappedLocal = withProvisioningLog(localResolve, recorder, 'container');
91
+ const wrappedPool = poolResolve ? withProvisioningLog(poolResolve, recorder, 'runner-pool') : null;
92
+ // The local-vs-external agents opt-in: dispatch to the registered runner pool when the
93
+ // workspace opts in (and one is wrapped), else to host Docker. The pool branch's own
94
+ // throw surfaces a clean "register a pool" message when delegation is on but none exists.
95
+ const resolveTransport = async (workspaceId) => {
96
+ const delegate = !!workspaceId && (await wsSettings.get(workspaceId)).delegateAgentsToRunnerPool;
97
+ if (delegate && wrappedPool)
98
+ return wrappedPool(workspaceId);
99
+ return wrappedLocal(workspaceId);
100
+ };
101
+ // Start-time guard: refuse a run up front when the workspace delegates agents to a pool
102
+ // that isn't registered, so the human gets a clean 409 (an actionable message) instead of
103
+ // a mid-run dispatch failure. No-op when delegation is off. We throw a ConflictError for
104
+ // BOTH negative cases — the integration being disabled AND no pool registered for the
105
+ // workspace — rather than letting the pool resolver's plain Error escape (the error
106
+ // handler maps a non-DomainError to an opaque 500 with the message suppressed). The
107
+ // existence check uses `getByWorkspace` directly, so it neither decrypts the pool secrets
108
+ // nor builds a transport that the actual dispatch resolve would only build again.
109
+ const assertAgentBackendConfigured = async (workspaceId) => {
110
+ if (!(await wsSettings.get(workspaceId)).delegateAgentsToRunnerPool)
111
+ return;
112
+ if (!wrappedPool) {
113
+ throw new ConflictError('This workspace delegates container agents to a self-hosted runner pool, but the ' +
114
+ 'runner-pool integration is not enabled on this deployment.', 'agent_backend_unconfigured');
115
+ }
116
+ if (!(await runnerPoolConnectionRepository.getByWorkspace(workspaceId))) {
117
+ throw new ConflictError('This workspace delegates container agents to a self-hosted runner pool, but none ' +
118
+ 'is registered. Register one (Settings → Self-hosted runner pool) or turn ' +
119
+ 'delegation off to run agents on host Docker, before starting.', 'agent_backend_unconfigured');
120
+ }
121
+ };
122
+ // The two tester-environment resolvers (used identically by the start gate and the
123
+ // agent-context materialisation): the local-mode default is `local` (host Docker / DinD),
124
+ // flipping to `ephemeral` only when the workspace opts into its environment provider; and
125
+ // when it opts in, the provider becomes REQUIRED so an `ephemeral` run with none connected
126
+ // is refused at start.
127
+ const resolveTesterFallbackDefault = async (workspaceId) => (await wsSettings.get(workspaceId)).delegateTestEnvToProvider ? 'ephemeral' : 'local';
128
+ const resolveRequireEnvironmentProvider = async (workspaceId) => (await wsSettings.get(workspaceId)).delegateTestEnvToProvider;
57
129
  // The selected runtime decides whether the Tester's LOCAL docker-compose infra (run
58
130
  // via Docker-in-Docker) is possible: Docker/Podman/OrbStack/Colima can nest a daemon,
59
131
  // Apple `container` (one VM per container) cannot. Surface that capability to the
@@ -65,9 +137,12 @@ export function buildLocalContainer(options) {
65
137
  ...options,
66
138
  env,
67
139
  config,
68
- // Always dispatch container jobs to the local Docker transport (a constant
69
- // resolver, ignoring workspace local mode has no per-workspace runner pools).
140
+ repos,
141
+ // The per-workspace chooser (host Docker vs the runner pool). Pre-wrapped with the
142
+ // correct provisioning-log subsystem per branch, so tell buildNodeContainer not to
143
+ // re-wrap with a single subsystem tag.
70
144
  resolveTransport,
145
+ skipProvisioningLogWrap: true,
71
146
  // Authenticate git with the developer's PAT when present. Absent → the executor
72
147
  // falls back to the GitHub App path (and is null without it), so container kinds
73
148
  // fail loudly rather than silently mis-running.
@@ -81,12 +156,21 @@ export function buildLocalContainer(options) {
81
156
  // connected with no manual connect step.
82
157
  ...(githubInstallationRepository ? { githubInstallationRepository } : {}),
83
158
  overrides: {
159
+ // The local-mode infrastructure-delegation opt-ins (per workspace). Listed BEFORE
160
+ // `...options.overrides` so a caller (the cross-runtime conformance harness) can pin
161
+ // the facade-NEUTRAL `ephemeral` tester default for the shared assertions — the local
162
+ // `local` default is a facade-specific behavior covered by its own tests.
163
+ resolveTesterFallbackDefault,
164
+ resolveRequireEnvironmentProvider,
165
+ assertAgentBackendConfigured,
84
166
  ...options.overrides,
85
167
  // The local PAT carries `workflow` scope (the creation URL pre-selects it), so the
86
168
  // connection isn't missing workflows: write — report it granted to suppress the
87
169
  // advisory banner. (The App-permissions probe this normally uses needs an app JWT.)
88
170
  ...(pat ? { workflowsGranted: async () => true } : {}),
89
- // Gate the Tester's local-infra mode on the runtime's Docker-in-Docker support.
171
+ // Gate the Tester's local-infra mode on the runtime's Docker-in-Docker support
172
+ // (local-authoritative — after the overrides so a deployment can't accidentally
173
+ // claim DinD support the runtime doesn't have).
90
174
  localTestInfraSupported,
91
175
  },
92
176
  });
@@ -1 +1 @@
1
- {"version":3,"file":"container.js","sourceRoot":"","sources":["../src/container.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"container.js","sourceRoot":"","sources":["../src/container.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cat-factory/local-server",
3
- "version": "0.14.2",
3
+ "version": "0.15.0",
4
4
  "description": "Local-mode runtime facade for the Agent Architecture Board: the @cat-factory/node-server stack with agent jobs run as local Docker/Podman containers and GitHub accessed via a personal access token — a developer can run the whole product on their own machine.",
5
5
  "repository": {
6
6
  "type": "git",
@@ -25,18 +25,18 @@
25
25
  },
26
26
  "dependencies": {
27
27
  "drizzle-orm": "1.0.0-rc.3",
28
- "@cat-factory/agents": "0.17.0",
29
- "@cat-factory/contracts": "0.31.0",
30
- "@cat-factory/kernel": "0.34.0",
31
- "@cat-factory/node-server": "0.24.0",
32
- "@cat-factory/orchestration": "0.26.0",
33
- "@cat-factory/server": "0.29.0"
28
+ "@cat-factory/agents": "0.17.1",
29
+ "@cat-factory/contracts": "0.32.0",
30
+ "@cat-factory/kernel": "0.35.0",
31
+ "@cat-factory/node-server": "0.25.0",
32
+ "@cat-factory/orchestration": "0.27.0",
33
+ "@cat-factory/server": "0.29.1"
34
34
  },
35
35
  "devDependencies": {
36
36
  "@types/node": "^26.0.0",
37
37
  "typescript": "7.0.1-rc",
38
38
  "vitest": "^4.1.9",
39
- "@cat-factory/conformance": "0.8.0"
39
+ "@cat-factory/conformance": "0.8.1"
40
40
  },
41
41
  "scripts": {
42
42
  "build": "tsc -b tsconfig.build.json",