@cat-factory/server 0.96.0 → 0.97.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.
@@ -1,8 +1,21 @@
1
- import type { DeployCloneTarget, GitHubClient, GitHubInstallationRepository, GitHubRepoRef, RepoFiles, RepoProjectionRepository, ResolveRepoFiles, ResolveRunRepoContext, RunRepoContext } from '@cat-factory/kernel';
1
+ import type { CachedRepoRead, DeployCloneTarget, GitHubClient, GitHubInstallationRepository, GitHubRepoRef, GroupCacheHandle, RepoFiles, RepoProjectionRepository, ResolveRepoFiles, ResolveRunRepoContext, RunRepoContext } from '@cat-factory/kernel';
2
2
  import type { MintInstallationToken, RepoTarget, ResolveRepoTarget } from './ContainerAgentExecutor.js';
3
3
  export { runRepoOps } from '@cat-factory/agents';
4
- /** Bind a {@link GitHubClient} to one installation + repo as a {@link RepoFiles}. */
5
- export declare function makeRepoFiles(client: GitHubClient, installationId: number, ref: GitHubRepoRef): RepoFiles;
4
+ /**
5
+ * Bind a {@link GitHubClient} to one installation + repo as a {@link RepoFiles}.
6
+ *
7
+ * When `cache` (the app's `repoFiles` cache, slice 4) is supplied, `getFile`/`listDirectory`
8
+ * against a NAMED ref read through it — grouped per `(installation, owner, repo, ref)` so one
9
+ * `commitFiles` (or a push webhook) drops exactly the branch it touched, and keyed per path
10
+ * (`f:`/`d:` prefixes). Each entry remembers the branch head sha it reflects, so an entry
11
+ * entering its refresh window re-validates with a single cheap `branchHeadSha` compare instead
12
+ * of re-fetching every file; a sha-pinned read is immutable (no probe). The head sha a cold
13
+ * batch stamps onto its entries is read ONCE per branch (memoised for this instance's lifetime,
14
+ * cleared when we commit to that branch), so caching N files on a branch costs one extra head
15
+ * read, not N. Reads with no `gitRef` (the repo default branch, whose name we don't know here)
16
+ * bypass the cache. Absent `cache` ⇒ the original direct pass-through.
17
+ */
18
+ export declare function makeRepoFiles(client: GitHubClient, installationId: number, ref: GitHubRepoRef, cache?: GroupCacheHandle<CachedRepoRead>): RepoFiles;
6
19
  /** A {@link ResolveRepoFiles} backed by a single wired {@link GitHubClient}. */
7
20
  export declare function makeResolveRepoFiles(client: GitHubClient): ResolveRepoFiles;
8
21
  /**
@@ -14,8 +27,12 @@ export declare function makeResolveRepoFiles(client: GitHubClient): ResolveRepoF
14
27
  * no repo (GitHub not connected); a throw from the target resolver (a block under no
15
28
  * linked service) propagates so the misconfiguration surfaces — failing the run loudly —
16
29
  * rather than guessing a repo, exactly as it does for a container kind at dispatch.
30
+ *
31
+ * `cache` (the app's `repoFiles` cache, slice 4) is threaded into the bound {@link RepoFiles}
32
+ * so a registered kind's pre/post-op idempotency re-reads hit the read-through cache; absent
33
+ * (tests / the pass-through profile) ⇒ direct reads, unchanged.
17
34
  */
18
- export declare function makeResolveRunRepoContext(client: GitHubClient, resolveRepoTarget: ResolveRepoTarget): ResolveRunRepoContext;
35
+ export declare function makeResolveRunRepoContext(client: GitHubClient, resolveRepoTarget: ResolveRepoTarget, cache?: GroupCacheHandle<CachedRepoRead>): ResolveRunRepoContext;
19
36
  /**
20
37
  * Compose a {@link DeployCloneTarget} resolver for the async, container-backed Kubernetes
21
38
  * deploy path (slice 9's `resolveDeployCloneTarget` provisioning seam) from the wired
@@ -1 +1 @@
1
- {"version":3,"file":"repoFiles.d.ts","sourceRoot":"","sources":["../../src/agents/repoFiles.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,iBAAiB,EACjB,YAAY,EACZ,4BAA4B,EAC5B,aAAa,EACb,SAAS,EACT,wBAAwB,EACxB,gBAAgB,EAChB,qBAAqB,EACrB,cAAc,EACf,MAAM,qBAAqB,CAAA;AAC5B,OAAO,KAAK,EACV,qBAAqB,EACrB,UAAU,EACV,iBAAiB,EAClB,MAAM,6BAA6B,CAAA;AAIpC,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAUhD,qFAAqF;AACrF,wBAAgB,aAAa,CAC3B,MAAM,EAAE,YAAY,EACpB,cAAc,EAAE,MAAM,EACtB,GAAG,EAAE,aAAa,GACjB,SAAS,CAWX;AAED,gFAAgF;AAChF,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,YAAY,GAAG,gBAAgB,CAE3E;AAED;;;;;;;;;GASG;AACH,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,YAAY,EACpB,iBAAiB,EAAE,iBAAiB,GACnC,qBAAqB,CAYvB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,4BAA4B,CAC1C,iBAAiB,EAAE,iBAAiB,EACpC,qBAAqB,EAAE,qBAAqB,EAC5C,OAAO,CAAC,EAAE;IACR,yFAAyF;IACzF,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB;;;;OAIG;IACH,eAAe,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,MAAM,CAAA;CACjD,GACA,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAe3F;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,6BAA6B,CAC3C,MAAM,EAAE,YAAY,EACpB,sBAAsB,EAAE,IAAI,CAAC,4BAA4B,EAAE,gBAAgB,CAAC,EAC5E,wBAAwB,EAAE,IAAI,CAAC,wBAAwB,EAAE,MAAM,CAAC,GAC/D,CACD,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAA;CAAE,KACpE,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAiBlC"}
1
+ {"version":3,"file":"repoFiles.d.ts","sourceRoot":"","sources":["../../src/agents/repoFiles.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,iBAAiB,EACjB,YAAY,EACZ,4BAA4B,EAC5B,aAAa,EACb,gBAAgB,EAChB,SAAS,EACT,wBAAwB,EACxB,gBAAgB,EAChB,qBAAqB,EACrB,cAAc,EACf,MAAM,qBAAqB,CAAA;AAE5B,OAAO,KAAK,EACV,qBAAqB,EACrB,UAAU,EACV,iBAAiB,EAClB,MAAM,6BAA6B,CAAA;AAIpC,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAsBhD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,aAAa,CAC3B,MAAM,EAAE,YAAY,EACpB,cAAc,EAAE,MAAM,EACtB,GAAG,EAAE,aAAa,EAClB,KAAK,CAAC,EAAE,gBAAgB,CAAC,cAAc,CAAC,GACvC,SAAS,CA2GX;AAED,gFAAgF;AAChF,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,YAAY,GAAG,gBAAgB,CAE3E;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,YAAY,EACpB,iBAAiB,EAAE,iBAAiB,EACpC,KAAK,CAAC,EAAE,gBAAgB,CAAC,cAAc,CAAC,GACvC,qBAAqB,CAcvB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,4BAA4B,CAC1C,iBAAiB,EAAE,iBAAiB,EACpC,qBAAqB,EAAE,qBAAqB,EAC5C,OAAO,CAAC,EAAE;IACR,yFAAyF;IACzF,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB;;;;OAIG;IACH,eAAe,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,MAAM,CAAA;CACjD,GACA,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAe3F;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,6BAA6B,CAC3C,MAAM,EAAE,YAAY,EACpB,sBAAsB,EAAE,IAAI,CAAC,4BAA4B,EAAE,gBAAgB,CAAC,EAC5E,wBAAwB,EAAE,IAAI,CAAC,wBAAwB,EAAE,MAAM,CAAC,GAC/D,CACD,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAA;CAAE,KACpE,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAiBlC"}
@@ -1,3 +1,4 @@
1
+ import { repoFilesCacheGroup } from '@cat-factory/kernel';
1
2
  // `runRepoOps` lives in @cat-factory/agents (so the orchestration engine can drive the
2
3
  // hooks without importing this HTTP layer); re-exported here for the existing callers.
3
4
  export { runRepoOps } from '@cat-factory/agents';
@@ -8,18 +9,128 @@ export { runRepoOps } from '@cat-factory/agents';
8
9
  // uses to read a targeted subset of the repo and commit rendered artifact files without
9
10
  // cloning. Each instance is bound to ONE installation + repo, so a repo-op names only
10
11
  // paths/branches.
11
- /** Bind a {@link GitHubClient} to one installation + repo as a {@link RepoFiles}. */
12
- export function makeRepoFiles(client, installationId, ref) {
13
- return {
12
+ /**
13
+ * A full 40-hex commit sha — an immutable ref, so its reads skip the head-sha probe. This is a
14
+ * shape check: a branch literally named as 40 hex chars would be misclassified as immutable and
15
+ * never revalidated. There is no cheap way to disambiguate a sha from an identically-shaped
16
+ * branch (it needs a ref lookup), and the actual callers never collide — the engine's pre/post-op
17
+ * refs are `cat-factory/<blockId>` branch names (always contain `/`) or genuine pinned shas — so
18
+ * the mismatch is a bounded, accepted edge, not a live hazard.
19
+ */
20
+ function isPinnedSha(gitRef) {
21
+ return /^[0-9a-f]{40}$/i.test(gitRef);
22
+ }
23
+ /**
24
+ * Bind a {@link GitHubClient} to one installation + repo as a {@link RepoFiles}.
25
+ *
26
+ * When `cache` (the app's `repoFiles` cache, slice 4) is supplied, `getFile`/`listDirectory`
27
+ * against a NAMED ref read through it — grouped per `(installation, owner, repo, ref)` so one
28
+ * `commitFiles` (or a push webhook) drops exactly the branch it touched, and keyed per path
29
+ * (`f:`/`d:` prefixes). Each entry remembers the branch head sha it reflects, so an entry
30
+ * entering its refresh window re-validates with a single cheap `branchHeadSha` compare instead
31
+ * of re-fetching every file; a sha-pinned read is immutable (no probe). The head sha a cold
32
+ * batch stamps onto its entries is read ONCE per branch (memoised for this instance's lifetime,
33
+ * cleared when we commit to that branch), so caching N files on a branch costs one extra head
34
+ * read, not N. Reads with no `gitRef` (the repo default branch, whose name we don't know here)
35
+ * bypass the cache. Absent `cache` ⇒ the original direct pass-through.
36
+ */
37
+ export function makeRepoFiles(client, installationId, ref, cache) {
38
+ const headSha = (branch) => client.branchHeadSha(installationId, ref, branch);
39
+ // The direct pass-through facade. When a cache is supplied we override only the three methods
40
+ // it actually changes (getFile/listDirectory/commitFiles) and inherit the rest from here, so
41
+ // the shared bindings can't drift between the cached and uncached paths.
42
+ const base = {
14
43
  getFile: (path, gitRef) => client.getFileContent(installationId, ref, path, gitRef),
15
44
  listDirectory: (path, gitRef) => client.listDirectory(installationId, ref, path, gitRef),
16
45
  // Exact single-ref lookup — correct even on repos with more branches than one
17
46
  // `listBranches` page. Null ⇒ the branch does not exist yet (create-vs-commit).
18
- headSha: (branch) => client.branchHeadSha(installationId, ref, branch),
47
+ headSha,
19
48
  createBranch: (branch, fromSha) => client.createBranch(installationId, ref, branch, fromSha),
20
49
  commitFiles: (input) => client.commitFiles(installationId, ref, input),
21
50
  openPullRequest: (input) => client.openPullRequest(installationId, ref, input),
22
51
  };
52
+ if (!cache)
53
+ return base;
54
+ // Dedupe an in-flight `branchHeadSha` read per branch. A REJECTED read is ALWAYS evicted so
55
+ // one transient head-read blip never sticks for the instance's lifetime; `retainResolved`
56
+ // then keeps a successful read for the whole batch (the cold-load memo — N files on a branch
57
+ // share one head read) or drops it on settle (the probe memo — each refresh sweep must read
58
+ // the CURRENT head afresh, but concurrent probes for the same branch still coalesce to ONE
59
+ // request instead of one-per-cached-entry).
60
+ const dedupeHead = (store, branch, retainResolved) => {
61
+ let pending = store.get(branch);
62
+ if (!pending) {
63
+ pending = headSha(branch);
64
+ store.set(branch, pending);
65
+ const evict = () => {
66
+ if (store.get(branch) === pending)
67
+ store.delete(branch);
68
+ };
69
+ void pending.then(retainResolved ? undefined : evict, evict);
70
+ }
71
+ return pending;
72
+ };
73
+ const loadHeadMemo = new Map();
74
+ const probeHeadMemo = new Map();
75
+ const group = (gitRef) => repoFilesCacheGroup(installationId, ref.owner, ref.repo, gitRef);
76
+ // The refresh-window probe: a pinned sha is immutable (always current); a branch entry is
77
+ // current only while the branch head still matches the sha it was read at. A head-read blip
78
+ // during the probe reports "stale" (reload) rather than throwing out of the caching layer.
79
+ const probeFor = (gitRef) => isPinnedSha(gitRef)
80
+ ? () => Promise.resolve(true)
81
+ : async (cached) => {
82
+ try {
83
+ return (await dedupeHead(probeHeadMemo, gitRef, false)) === cached.headSha;
84
+ }
85
+ catch {
86
+ return false;
87
+ }
88
+ };
89
+ // The head sha stamped onto a cold entry, for the probe to compare against. A pinned ref is
90
+ // immutable (null ⇒ never probed). A transient head-read failure degrades to an UNSTAMPED
91
+ // entry (null ⇒ the probe always reloads) rather than failing the content read — the uncached
92
+ // path never read the head at all, so a head blip must not make a cached read less robust.
93
+ const headForLoad = async (gitRef) => {
94
+ if (isPinnedSha(gitRef))
95
+ return null;
96
+ try {
97
+ return await dedupeHead(loadHeadMemo, gitRef, true);
98
+ }
99
+ catch {
100
+ return null;
101
+ }
102
+ };
103
+ return {
104
+ ...base,
105
+ getFile: async (path, gitRef) => {
106
+ if (!gitRef)
107
+ return client.getFileContent(installationId, ref, path, gitRef);
108
+ const cached = await cache.get(`f:${path}`, group(gitRef), async () => ({
109
+ kind: 'file',
110
+ headSha: await headForLoad(gitRef),
111
+ content: await client.getFileContent(installationId, ref, path, gitRef),
112
+ }), probeFor(gitRef));
113
+ return cached.kind === 'file' ? cached.content : null;
114
+ },
115
+ listDirectory: async (path, gitRef) => {
116
+ if (!gitRef)
117
+ return client.listDirectory(installationId, ref, path, gitRef);
118
+ const cached = await cache.get(`d:${path}`, group(gitRef), async () => ({
119
+ kind: 'dir',
120
+ headSha: await headForLoad(gitRef),
121
+ entries: await client.listDirectory(installationId, ref, path, gitRef),
122
+ }), probeFor(gitRef));
123
+ return cached.kind === 'dir' ? cached.entries : [];
124
+ },
125
+ commitFiles: async (input) => {
126
+ const result = await client.commitFiles(installationId, ref, input);
127
+ // The branch moved: drop its cached reads (this replica's, and — when a notification
128
+ // pair is wired — every peer's) and forget its memoised head so a later read re-stamps.
129
+ loadHeadMemo.delete(input.branch);
130
+ await cache.invalidateGroup(group(input.branch));
131
+ return result;
132
+ },
133
+ };
23
134
  }
24
135
  /** A {@link ResolveRepoFiles} backed by a single wired {@link GitHubClient}. */
25
136
  export function makeResolveRepoFiles(client) {
@@ -34,17 +145,18 @@ export function makeResolveRepoFiles(client) {
34
145
  * no repo (GitHub not connected); a throw from the target resolver (a block under no
35
146
  * linked service) propagates so the misconfiguration surfaces — failing the run loudly —
36
147
  * rather than guessing a repo, exactly as it does for a container kind at dispatch.
148
+ *
149
+ * `cache` (the app's `repoFiles` cache, slice 4) is threaded into the bound {@link RepoFiles}
150
+ * so a registered kind's pre/post-op idempotency re-reads hit the read-through cache; absent
151
+ * (tests / the pass-through profile) ⇒ direct reads, unchanged.
37
152
  */
38
- export function makeResolveRunRepoContext(client, resolveRepoTarget) {
153
+ export function makeResolveRunRepoContext(client, resolveRepoTarget, cache) {
39
154
  return async (workspaceId, blockId) => {
40
155
  const target = await resolveRepoTarget(workspaceId, blockId);
41
156
  if (!target)
42
157
  return null;
43
158
  return {
44
- repo: makeRepoFiles(client, target.installationId, {
45
- owner: target.owner,
46
- repo: target.name,
47
- }),
159
+ repo: makeRepoFiles(client, target.installationId, { owner: target.owner, repo: target.name }, cache),
48
160
  baseBranch: target.baseBranch,
49
161
  };
50
162
  };
@@ -1 +1 @@
1
- {"version":3,"file":"repoFiles.js","sourceRoot":"","sources":["../../src/agents/repoFiles.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"repoFiles.js","sourceRoot":"","sources":["../../src/agents/repoFiles.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import type { ConfigProblem } from '@cat-factory/contracts';
2
+ import { Hono } from 'hono';
3
+ /**
4
+ * Build the Response for one request against the fallback backend, keyed off the URL pathname.
5
+ * Pure (no CORS, no framework) so the Worker can reuse it INSIDE its already-CORS'd request
6
+ * pipeline; {@link createMisconfiguredApp} wraps it with CORS for the standalone Node serve.
7
+ */
8
+ export declare function buildMisconfiguredResponse(pathname: string, problems: ConfigProblem[]): Response;
9
+ /**
10
+ * The standalone fallback Hono app (used by the Node/local facades, which `serve()` it on the
11
+ * normal port when their boot throws a {@link ConfigValidationError}). Reflects any origin so the
12
+ * SPA can read it cross-origin.
13
+ */
14
+ export declare function createMisconfiguredApp(problems: ConfigProblem[]): Hono;
15
+ //# sourceMappingURL=misconfiguredApp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"misconfiguredApp.d.ts","sourceRoot":"","sources":["../../src/config/misconfiguredApp.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAA;AAC3D,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AA4B3B;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,GAAG,QAAQ,CAsBhG;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,aAAa,EAAE,GAAG,IAAI,CActE"}
@@ -0,0 +1,67 @@
1
+ import { Hono } from 'hono';
2
+ import { cors } from 'hono/cors';
3
+ import { CORS_ALLOWED_HEADERS } from '../http/cors.js';
4
+ // ---------------------------------------------------------------------------
5
+ // The misconfiguration fallback backend.
6
+ //
7
+ // When a facade fails to boot because a mandatory env var / binding is missing, it serves THIS
8
+ // minimal app instead of exiting. Its whole job is to keep the deployment reachable so the SPA
9
+ // can render a dedicated error screen (see the frontend `BackendMisconfiguredScreen`) telling the
10
+ // developer exactly what's missing and how to fix it — rather than the generic
11
+ // "can't reach the backend" panel a dead process produces.
12
+ //
13
+ // - `GET /auth/config` — the SPA's boot handshake. Returns a normally-shaped, auth-disabled
14
+ // config WITH the `misconfigured` problem list, so the boot succeeds and the SPA branches to
15
+ // the error screen.
16
+ // - `GET /health` — liveness. Returns 200 with `status: 'misconfigured'` so the orchestrator
17
+ // does NOT crash-loop the container (which would just restart into the same misconfig, hiding
18
+ // the screen). Honest but alive.
19
+ // - everything else — 503 with the structured problem list, for non-browser / direct callers.
20
+ //
21
+ // It reflects any request Origin (the problem list carries no secret — only var names, meanings,
22
+ // and remedies), so the SPA on a separate dev origin can always read it, regardless of whether the
23
+ // (failed) config load ever resolved CORS_ALLOWED_ORIGINS / ENVIRONMENT.
24
+ // ---------------------------------------------------------------------------
25
+ const AUTH_DISABLED_PROVIDERS = { github: false, password: false, google: false };
26
+ /**
27
+ * Build the Response for one request against the fallback backend, keyed off the URL pathname.
28
+ * Pure (no CORS, no framework) so the Worker can reuse it INSIDE its already-CORS'd request
29
+ * pipeline; {@link createMisconfiguredApp} wraps it with CORS for the standalone Node serve.
30
+ */
31
+ export function buildMisconfiguredResponse(pathname, problems) {
32
+ if (pathname === '/auth/config') {
33
+ return Response.json({
34
+ enabled: false,
35
+ providers: AUTH_DISABLED_PROVIDERS,
36
+ misconfigured: { problems },
37
+ });
38
+ }
39
+ if (pathname === '/health') {
40
+ return Response.json({ status: 'misconfigured' });
41
+ }
42
+ return Response.json({
43
+ error: {
44
+ code: 'backend_misconfigured',
45
+ message: 'The backend is not configured correctly and cannot serve requests. See `problems` for what to fix.',
46
+ problems,
47
+ },
48
+ }, { status: 503 });
49
+ }
50
+ /**
51
+ * The standalone fallback Hono app (used by the Node/local facades, which `serve()` it on the
52
+ * normal port when their boot throws a {@link ConfigValidationError}). Reflects any origin so the
53
+ * SPA can read it cross-origin.
54
+ */
55
+ export function createMisconfiguredApp(problems) {
56
+ const app = new Hono();
57
+ app.use('*', cors({
58
+ // The fallback exposes nothing secret (only the problem list + an auth-disabled config), and
59
+ // a failed boot may never have resolved the real allow-list — so reflect the caller's origin
60
+ // unconditionally to guarantee the SPA can read the error screen's data.
61
+ origin: (origin) => origin ?? '*',
62
+ allowHeaders: [...CORS_ALLOWED_HEADERS],
63
+ }));
64
+ app.all('*', (c) => buildMisconfiguredResponse(new URL(c.req.url).pathname, problems));
65
+ return app;
66
+ }
67
+ //# sourceMappingURL=misconfiguredApp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"misconfiguredApp.js","sourceRoot":"","sources":["../../src/config/misconfiguredApp.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAC3B,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAA;AAEtD,8EAA8E;AAC9E,yCAAyC;AACzC,EAAE;AACF,+FAA+F;AAC/F,+FAA+F;AAC/F,kGAAkG;AAClG,+EAA+E;AAC/E,2DAA2D;AAC3D,EAAE;AACF,8FAA8F;AAC9F,iGAAiG;AACjG,wBAAwB;AACxB,+FAA+F;AAC/F,kGAAkG;AAClG,qCAAqC;AACrC,gGAAgG;AAChG,EAAE;AACF,iGAAiG;AACjG,mGAAmG;AACnG,yEAAyE;AACzE,8EAA8E;AAE9E,MAAM,uBAAuB,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,CAAA;AAEjF;;;;GAIG;AACH,MAAM,UAAU,0BAA0B,CAAC,QAAgB,EAAE,QAAyB;IACpF,IAAI,QAAQ,KAAK,cAAc,EAAE,CAAC;QAChC,OAAO,QAAQ,CAAC,IAAI,CAAC;YACnB,OAAO,EAAE,KAAK;YACd,SAAS,EAAE,uBAAuB;YAClC,aAAa,EAAE,EAAE,QAAQ,EAAE;SAC5B,CAAC,CAAA;IACJ,CAAC;IACD,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,OAAO,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC,CAAA;IACnD,CAAC;IACD,OAAO,QAAQ,CAAC,IAAI,CAClB;QACE,KAAK,EAAE;YACL,IAAI,EAAE,uBAAuB;YAC7B,OAAO,EACL,oGAAoG;YACtG,QAAQ;SACT;KACF,EACD,EAAE,MAAM,EAAE,GAAG,EAAE,CAChB,CAAA;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,sBAAsB,CAAC,QAAyB;IAC9D,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAA;IACtB,GAAG,CAAC,GAAG,CACL,GAAG,EACH,IAAI,CAAC;QACH,6FAA6F;QAC7F,6FAA6F;QAC7F,yEAAyE;QACzE,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,IAAI,GAAG;QACjC,YAAY,EAAE,CAAC,GAAG,oBAAoB,CAAC;KACxC,CAAC,CACH,CAAA;IACD,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,0BAA0B,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAA;IACtF,OAAO,GAAG,CAAA;AACZ,CAAC"}
@@ -0,0 +1,75 @@
1
+ import type { ConfigProblem } from '@cat-factory/contracts';
2
+ export type { ConfigProblem };
3
+ /**
4
+ * Thrown by a facade's config loader (or its container build) when one or more MANDATORY env
5
+ * vars / bindings are missing or invalid. Unlike a bare `Error`, it carries a STRUCTURED,
6
+ * human-readable list of problems, which lets the boot sequence do two things instead of just
7
+ * dying with a terse message:
8
+ *
9
+ * 1. log a clear, actionable operator message ({@link formatConfigProblems}); and
10
+ * 2. serve the misconfiguration fallback backend ({@link createMisconfiguredApp}) rather than
11
+ * exiting — so the SPA renders a dedicated "backend misconfigured" screen telling the
12
+ * developer exactly which variables are missing and how to fill them.
13
+ *
14
+ * A {@link ConfigProblem} NEVER carries a secret value — only the variable's name, meaning, and
15
+ * remedy — so it is safe to both log and surface to the browser.
16
+ */
17
+ export declare class ConfigValidationError extends Error {
18
+ readonly problems: ConfigProblem[];
19
+ constructor(problems: ConfigProblem[]);
20
+ }
21
+ export declare function isConfigValidationError(err: unknown): err is ConfigValidationError;
22
+ /** Build a {@link ConfigValidationError} for a single problem (the common case). */
23
+ export declare function configProblem(problem: ConfigProblem): ConfigValidationError;
24
+ /** Render the problem list as a multi-line, operator-facing message (used as the Error message). */
25
+ export declare function formatConfigProblems(problems: ConfigProblem[]): string;
26
+ /**
27
+ * The canonical human-readable description of each mandatory env var / binding: what it means and
28
+ * how to fill it. Keeping these here (rather than re-writing the prose at every throw site) unifies
29
+ * the phrasing across the three facades, so `ENCRYPTION_KEY` reads the same whether it's the Node
30
+ * loader, the Worker loader, or local mode that flags it. A throw site spreads the matching entry:
31
+ *
32
+ * throw configProblem({ key: 'ENCRYPTION_KEY', ...ENV_HELP.ENCRYPTION_KEY })
33
+ *
34
+ * A site with an extra nuance (a length/format detail beyond "missing") overrides `remedy` inline.
35
+ */
36
+ export declare const ENV_HELP: {
37
+ DATABASE_URL: {
38
+ summary: string;
39
+ remedy: string;
40
+ };
41
+ ENCRYPTION_KEY: {
42
+ summary: string;
43
+ remedy: string;
44
+ };
45
+ AUTH_SESSION_SECRET: {
46
+ summary: string;
47
+ remedy: string;
48
+ };
49
+ AUTH_PROVIDER: {
50
+ summary: string;
51
+ remedy: string;
52
+ };
53
+ TELEMETRY_DB: {
54
+ summary: string;
55
+ remedy: string;
56
+ };
57
+ AGENT_MODELS: {
58
+ summary: string;
59
+ remedy: string;
60
+ };
61
+ CONTAINER_EXECUTOR: {
62
+ summary: string;
63
+ remedy: string;
64
+ };
65
+ };
66
+ /**
67
+ * Read a mandatory env var, throwing a {@link ConfigValidationError} with a human-readable
68
+ * meaning + remedy when it is missing/blank. `help` defaults to the {@link ENV_HELP} entry for
69
+ * `key` when one exists, so the common case is just `requireEnv(env, 'DATABASE_URL')`.
70
+ */
71
+ export declare function requireEnv(env: Record<string, string | undefined>, key: string, help?: {
72
+ summary: string;
73
+ remedy: string;
74
+ }): string;
75
+ //# sourceMappingURL=problems.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"problems.d.ts","sourceRoot":"","sources":["../../src/config/problems.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAA;AAE3D,YAAY,EAAE,aAAa,EAAE,CAAA;AAE7B;;;;;;;;;;;;;GAaG;AACH,qBAAa,qBAAsB,SAAQ,KAAK;IAC9C,QAAQ,CAAC,QAAQ,EAAE,aAAa,EAAE,CAAA;IAElC,YAAY,QAAQ,EAAE,aAAa,EAAE,EAIpC;CACF;AAED,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI,qBAAqB,CAElF;AAED,oFAAoF;AACpF,wBAAgB,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,qBAAqB,CAE3E;AAED,oGAAoG;AACpG,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,aAAa,EAAE,GAAG,MAAM,CAOtE;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,QAAQ;;QAEjB,OAAO;QAEP,MAAM;;;QAIN,OAAO;QAEP,MAAM;;;QAIN,OAAO;QAEP,MAAM;;;QAIN,OAAO;QAEP,MAAM;;;QAIN,OAAO;QAEP,MAAM;;;QAIN,OAAO;QAEP,MAAM;;;QAIN,OAAO;QAEP,MAAM;;CAGqD,CAAA;AAE/D;;;;GAIG;AACH,wBAAgB,UAAU,CACxB,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,EACvC,GAAG,EAAE,MAAM,EACX,IAAI,CAAC,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACzC,MAAM,CAYR"}
@@ -0,0 +1,97 @@
1
+ /**
2
+ * Thrown by a facade's config loader (or its container build) when one or more MANDATORY env
3
+ * vars / bindings are missing or invalid. Unlike a bare `Error`, it carries a STRUCTURED,
4
+ * human-readable list of problems, which lets the boot sequence do two things instead of just
5
+ * dying with a terse message:
6
+ *
7
+ * 1. log a clear, actionable operator message ({@link formatConfigProblems}); and
8
+ * 2. serve the misconfiguration fallback backend ({@link createMisconfiguredApp}) rather than
9
+ * exiting — so the SPA renders a dedicated "backend misconfigured" screen telling the
10
+ * developer exactly which variables are missing and how to fill them.
11
+ *
12
+ * A {@link ConfigProblem} NEVER carries a secret value — only the variable's name, meaning, and
13
+ * remedy — so it is safe to both log and surface to the browser.
14
+ */
15
+ export class ConfigValidationError extends Error {
16
+ problems;
17
+ constructor(problems) {
18
+ super(formatConfigProblems(problems));
19
+ this.name = 'ConfigValidationError';
20
+ this.problems = problems;
21
+ }
22
+ }
23
+ export function isConfigValidationError(err) {
24
+ return err instanceof ConfigValidationError;
25
+ }
26
+ /** Build a {@link ConfigValidationError} for a single problem (the common case). */
27
+ export function configProblem(problem) {
28
+ return new ConfigValidationError([problem]);
29
+ }
30
+ /** Render the problem list as a multi-line, operator-facing message (used as the Error message). */
31
+ export function formatConfigProblems(problems) {
32
+ const header = problems.length === 1
33
+ ? 'cat-factory cannot start: a mandatory configuration value is missing or invalid.'
34
+ : `cat-factory cannot start: ${problems.length} mandatory configuration values are missing or invalid.`;
35
+ const lines = problems.map((p) => ` • ${p.key}: ${p.summary}\n → ${p.remedy}`);
36
+ return [header, ...lines].join('\n');
37
+ }
38
+ /**
39
+ * The canonical human-readable description of each mandatory env var / binding: what it means and
40
+ * how to fill it. Keeping these here (rather than re-writing the prose at every throw site) unifies
41
+ * the phrasing across the three facades, so `ENCRYPTION_KEY` reads the same whether it's the Node
42
+ * loader, the Worker loader, or local mode that flags it. A throw site spreads the matching entry:
43
+ *
44
+ * throw configProblem({ key: 'ENCRYPTION_KEY', ...ENV_HELP.ENCRYPTION_KEY })
45
+ *
46
+ * A site with an extra nuance (a length/format detail beyond "missing") overrides `remedy` inline.
47
+ */
48
+ export const ENV_HELP = {
49
+ DATABASE_URL: {
50
+ summary: 'Postgres connection string — the Node service stores ALL of its state (workspaces, boards, runs, credentials) there.',
51
+ remedy: 'Set DATABASE_URL to your Postgres URL, e.g. `postgres://user:password@localhost:5432/cat_factory`. In local mode, `docker compose up` in deploy/local starts one and prints the URL.',
52
+ },
53
+ ENCRYPTION_KEY: {
54
+ summary: 'Master key that seals every per-workspace credential at rest (document/task/runner/Slack integrations, personal subscriptions, observability connections).',
55
+ remedy: 'Set ENCRYPTION_KEY to a base64-encoded key of at least 32 bytes. Generate one with `pnpm secrets` (deploy/local) or `openssl rand -base64 32`. It must stay STABLE across restarts — a fresh value orphans everything sealed under the previous one.',
56
+ },
57
+ AUTH_SESSION_SECRET: {
58
+ summary: 'HMAC key that signs the session, proxy, and machine tokens — the whole auth surface trusts it.',
59
+ remedy: 'Set AUTH_SESSION_SECRET to a random string of at least 32 characters. Generate one with `pnpm secrets` (deploy/local) or `openssl rand -hex 32`. It must stay STABLE across restarts — a fresh value forces every user to re-login.',
60
+ },
61
+ AUTH_PROVIDER: {
62
+ summary: 'A remote deployment has no anonymous tier, so at least one login provider must be configured or every protected route fails closed.',
63
+ remedy: 'Enable one of: GitHub OAuth (GITHUB_OAUTH_CLIENT_ID + GITHUB_OAUTH_CLIENT_SECRET), Google OAuth (GOOGLE_OAUTH_CLIENT_ID + GOOGLE_OAUTH_CLIENT_SECRET), or password login (AUTH_PASSWORD_ENABLED=true) — each alongside a 32+ character AUTH_SESSION_SECRET. For local dev or tests, set AUTH_DEV_OPEN=true in a non-production ENVIRONMENT instead.',
64
+ },
65
+ TELEMETRY_DB: {
66
+ summary: 'The dedicated telemetry D1 database (per-LLM-call metrics + agent-context snapshots) — kept separate from the transactional data so its append-heavy, short-retention writes never contend with domain reads.',
67
+ remedy: 'Add a `[[d1_databases]]` entry with `binding = "TELEMETRY_DB"` to your wrangler.toml and create the database with `wrangler d1 create`.',
68
+ },
69
+ AGENT_MODELS: {
70
+ summary: 'Optional per-kind model routing override, supplied as a JSON object mapping an agent kind to `{ "provider", "model" }`.',
71
+ remedy: 'Either unset AGENT_MODELS to use the built-in routing, or set it to valid JSON where every entry has string "provider" and "model" fields, e.g. `{"coder":{"provider":"workers-ai","model":"@cf/zai-org/glm-5.2"}}`.',
72
+ },
73
+ CONTAINER_EXECUTOR: {
74
+ summary: 'The repo-operating agent steps (coder, tester, merger, …) need a fully-wired container executor; running them as one-shot LLM calls would silently produce broken results.',
75
+ remedy: 'Configure a GitHub App (GITHUB_APP_PRIVATE_KEY + GITHUB_APP_ID), WORKER_PUBLIC_URL, AUTH_SESSION_SECRET, and a runner backend (the EXEC_CONTAINER binding, or a registered runner pool with RUNNERS_ENABLED).',
76
+ },
77
+ };
78
+ /**
79
+ * Read a mandatory env var, throwing a {@link ConfigValidationError} with a human-readable
80
+ * meaning + remedy when it is missing/blank. `help` defaults to the {@link ENV_HELP} entry for
81
+ * `key` when one exists, so the common case is just `requireEnv(env, 'DATABASE_URL')`.
82
+ */
83
+ export function requireEnv(env, key, help) {
84
+ const value = env[key]?.trim();
85
+ if (value)
86
+ return value;
87
+ const meaning = help ?? ENV_HELP[key];
88
+ if (!meaning) {
89
+ throw configProblem({
90
+ key,
91
+ summary: `The mandatory environment variable ${key} is not set.`,
92
+ remedy: `Set ${key} in your environment (or .env) and restart.`,
93
+ });
94
+ }
95
+ throw configProblem({ key, ...meaning });
96
+ }
97
+ //# sourceMappingURL=problems.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"problems.js","sourceRoot":"","sources":["../../src/config/problems.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;GAaG;AACH,MAAM,OAAO,qBAAsB,SAAQ,KAAK;IACrC,QAAQ,CAAiB;IAElC,YAAY,QAAyB;QACnC,KAAK,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC,CAAA;QACrC,IAAI,CAAC,IAAI,GAAG,uBAAuB,CAAA;QACnC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;IAC1B,CAAC;CACF;AAED,MAAM,UAAU,uBAAuB,CAAC,GAAY;IAClD,OAAO,GAAG,YAAY,qBAAqB,CAAA;AAC7C,CAAC;AAED,oFAAoF;AACpF,MAAM,UAAU,aAAa,CAAC,OAAsB;IAClD,OAAO,IAAI,qBAAqB,CAAC,CAAC,OAAO,CAAC,CAAC,CAAA;AAC7C,CAAC;AAED,oGAAoG;AACpG,MAAM,UAAU,oBAAoB,CAAC,QAAyB;IAC5D,MAAM,MAAM,GACV,QAAQ,CAAC,MAAM,KAAK,CAAC;QACnB,CAAC,CAAC,kFAAkF;QACpF,CAAC,CAAC,6BAA6B,QAAQ,CAAC,MAAM,yDAAyD,CAAA;IAC3G,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,EAAE,CAAC,CAAA;IAClF,OAAO,CAAC,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACtC,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,YAAY,EAAE;QACZ,OAAO,EACL,sHAAsH;QACxH,MAAM,EACJ,sLAAsL;KACzL;IACD,cAAc,EAAE;QACd,OAAO,EACL,4JAA4J;QAC9J,MAAM,EACJ,sPAAsP;KACzP;IACD,mBAAmB,EAAE;QACnB,OAAO,EACL,gGAAgG;QAClG,MAAM,EACJ,qOAAqO;KACxO;IACD,aAAa,EAAE;QACb,OAAO,EACL,qIAAqI;QACvI,MAAM,EACJ,qVAAqV;KACxV;IACD,YAAY,EAAE;QACZ,OAAO,EACL,+MAA+M;QACjN,MAAM,EACJ,yIAAyI;KAC5I;IACD,YAAY,EAAE;QACZ,OAAO,EACL,yHAAyH;QAC3H,MAAM,EACJ,sNAAsN;KACzN;IACD,kBAAkB,EAAE;QAClB,OAAO,EACL,4KAA4K;QAC9K,MAAM,EACJ,+MAA+M;KAClN;CAC4D,CAAA;AAE/D;;;;GAIG;AACH,MAAM,UAAU,UAAU,CACxB,GAAuC,EACvC,GAAW,EACX,IAA0C;IAE1C,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,CAAA;IAC9B,IAAI,KAAK;QAAE,OAAO,KAAK,CAAA;IACvB,MAAM,OAAO,GAAG,IAAI,IAAK,QAAgE,CAAC,GAAG,CAAC,CAAA;IAC9F,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,aAAa,CAAC;YAClB,GAAG;YACH,OAAO,EAAE,sCAAsC,GAAG,cAAc;YAChE,MAAM,EAAE,OAAO,GAAG,6CAA6C;SAChE,CAAC,CAAA;IACJ,CAAC;IACD,MAAM,aAAa,CAAC,EAAE,GAAG,EAAE,GAAG,OAAO,EAAE,CAAC,CAAA;AAC1C,CAAC"}
package/dist/index.d.ts CHANGED
@@ -30,6 +30,8 @@ export { mountAuthGate } from './http/authGate.js';
30
30
  export { param } from './http/params.js';
31
31
  export { handleError } from './http/errorHandler.js';
32
32
  export { CORS_ALLOWED_HEADERS, corsReflectsWhenUnset, parseAllowedOrigins, resolveCorsOrigin, } from './http/cors.js';
33
+ export { ConfigValidationError, isConfigValidationError, configProblem, formatConfigProblems, requireEnv, ENV_HELP, type ConfigProblem, } from './config/problems.js';
34
+ export { createMisconfiguredApp, buildMisconfiguredResponse } from './config/misconfiguredApp.js';
33
35
  export { base64url, base64urlToBytes, pkcs8PemToDer, timingSafeEqual } from './crypto/encoding.js';
34
36
  export { WebCryptoSecretCipher, type WebCryptoSecretCipherOptions, } from './crypto/WebCryptoSecretCipher.js';
35
37
  export { WebCryptoPersonalSecretCipher } from './crypto/WebCryptoPersonalSecretCipher.js';
@@ -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
@@ -39,6 +39,8 @@ export { mountAuthGate } from './http/authGate.js';
39
39
  export { param } from './http/params.js';
40
40
  export { handleError } from './http/errorHandler.js';
41
41
  export { CORS_ALLOWED_HEADERS, corsReflectsWhenUnset, parseAllowedOrigins, resolveCorsOrigin, } from './http/cors.js';
42
+ export { ConfigValidationError, isConfigValidationError, configProblem, formatConfigProblems, requireEnv, ENV_HELP, } from './config/problems.js';
43
+ export { createMisconfiguredApp, buildMisconfiguredResponse } from './config/misconfiguredApp.js';
42
44
  export { base64url, base64urlToBytes, pkcs8PemToDer, timingSafeEqual } from './crypto/encoding.js';
43
45
  // Runtime-neutral (Web Crypto) credential encryption + GitHub-App authentication,
44
46
  // shared by both facades so the Node service can mint installation tokens and
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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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cat-factory/server",
3
- "version": "0.96.0",
3
+ "version": "0.97.1",
4
4
  "description": "Runtime-neutral HTTP layer for the Agent Architecture Board: the Hono controllers, middleware (auth/authz/CORS/error), request helpers and the gateway seams shared by every deployment facade (Cloudflare Worker, Node service).",
5
5
  "repository": {
6
6
  "type": "git",
@@ -30,13 +30,13 @@
30
30
  "hono": "^4.12.27",
31
31
  "pino": "^10.3.1",
32
32
  "valibot": "^1.4.2",
33
- "@cat-factory/contracts": "0.113.0",
34
- "@cat-factory/integrations": "0.75.1",
35
- "@cat-factory/kernel": "0.103.0",
36
- "@cat-factory/agents": "0.40.8",
37
- "@cat-factory/orchestration": "0.86.0",
38
- "@cat-factory/spend": "0.11.5",
39
- "@cat-factory/prompt-fragments": "0.10.21"
33
+ "@cat-factory/integrations": "0.76.0",
34
+ "@cat-factory/agents": "0.40.9",
35
+ "@cat-factory/kernel": "0.104.0",
36
+ "@cat-factory/orchestration": "0.88.0",
37
+ "@cat-factory/contracts": "0.114.0",
38
+ "@cat-factory/prompt-fragments": "0.10.22",
39
+ "@cat-factory/spend": "0.11.6"
40
40
  },
41
41
  "devDependencies": {
42
42
  "@types/node": "^26.1.0",