@cat-factory/server 0.13.2 → 0.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/app.d.ts.map +1 -1
- package/dist/app.js +2 -0
- package/dist/app.js.map +1 -1
- package/dist/http/env.d.ts +10 -1
- package/dist/http/env.d.ts.map +1 -1
- package/dist/modules/serviceSpec/ServiceSpecController.d.ts +16 -0
- package/dist/modules/serviceSpec/ServiceSpecController.d.ts.map +1 -0
- package/dist/modules/serviceSpec/ServiceSpecController.js +47 -0
- package/dist/modules/serviceSpec/ServiceSpecController.js.map +1 -0
- package/dist/modules/serviceSpec/readServiceSpec.d.ts +5 -0
- package/dist/modules/serviceSpec/readServiceSpec.d.ts.map +1 -0
- package/dist/modules/serviceSpec/readServiceSpec.js +189 -0
- package/dist/modules/serviceSpec/readServiceSpec.js.map +1 -0
- package/package.json +8 -8
package/dist/app.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAChC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA;
|
|
1
|
+
{"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAChC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA;AA4C3C;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CAAC,CAAC,SAAS,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAyD5E"}
|
package/dist/app.js
CHANGED
|
@@ -34,6 +34,7 @@ import { localModelEndpointController } from './modules/localModels/LocalModelEn
|
|
|
34
34
|
import { openRouterCatalogController } from './modules/openrouter/OpenRouterCatalogController.js';
|
|
35
35
|
import { userApiKeyController, workspaceApiKeyController, } from './modules/providers/ApiKeyController.js';
|
|
36
36
|
import { serviceMountController } from './modules/services/ServiceMountController.js';
|
|
37
|
+
import { serviceSpecController } from './modules/serviceSpec/ServiceSpecController.js';
|
|
37
38
|
import { taskSourceController } from './modules/tasks/TaskSourceController.js';
|
|
38
39
|
import { workspaceController } from './modules/workspaces/WorkspaceController.js';
|
|
39
40
|
/**
|
|
@@ -93,6 +94,7 @@ export function registerCoreControllers(app) {
|
|
|
93
94
|
app.route('/workspaces/:workspaceId', recurringPipelineController());
|
|
94
95
|
app.route('/workspaces/:workspaceId', trackerSettingsController());
|
|
95
96
|
app.route('/workspaces/:workspaceId', serviceMountController());
|
|
97
|
+
app.route('/workspaces/:workspaceId', serviceSpecController());
|
|
96
98
|
app.route('/workspaces/:workspaceId', fragmentLibraryController('workspace'));
|
|
97
99
|
app.route('/workspaces/:workspaceId', githubController());
|
|
98
100
|
app.route('/workspaces/:workspaceId', slackController());
|
package/dist/app.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app.js","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"app.js","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"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"}
|
package/dist/http/env.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { AgentRunRepository, ConsensusSessionRepository } from '@cat-factory/kernel';
|
|
1
|
+
import type { AgentRunRepository, ConsensusSessionRepository, ResolveRunRepoContext } from '@cat-factory/kernel';
|
|
2
2
|
import type { ApiKeyService, LocalModelEndpointService, OpenRouterCatalogService, PersonalSubscriptionService, ProviderSubscriptionService } from '@cat-factory/integrations';
|
|
3
3
|
import type { Core } from '@cat-factory/orchestration';
|
|
4
4
|
import type { SessionPayload } from '../auth/signing.js';
|
|
@@ -16,6 +16,15 @@ export interface ServerContainer extends Core {
|
|
|
16
16
|
consensusSessionRepository?: ConsensusSessionRepository;
|
|
17
17
|
/** Per-facade runtime seams (real-time delivery, …) the shared controllers use. */
|
|
18
18
|
gateways: RuntimeGateways;
|
|
19
|
+
/**
|
|
20
|
+
* Resolve a block's run repo (installation + repo + default branch) bound to a
|
|
21
|
+
* checkout-free {@link RepoFiles}. The engine uses it to run a registered kind's
|
|
22
|
+
* pre/post-ops; the shared service-spec read controller reuses it to read the sharded
|
|
23
|
+
* `spec/` artifact off the default branch. Present only when GitHub is wired (the same
|
|
24
|
+
* composition both facades already build via `makeResolveRunRepoContext`); absent → the
|
|
25
|
+
* spec endpoint returns an empty view.
|
|
26
|
+
*/
|
|
27
|
+
resolveRunRepoContext?: ResolveRunRepoContext;
|
|
19
28
|
/**
|
|
20
29
|
* The workspace subscription-token pool (Claude Code / Codex credentials).
|
|
21
30
|
* Present only when the facade wired the provider-subscription repository.
|
package/dist/http/env.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../src/http/env.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../src/http/env.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,kBAAkB,EAClB,0BAA0B,EAC1B,qBAAqB,EACtB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,KAAK,EACV,aAAa,EACb,yBAAyB,EACzB,wBAAwB,EACxB,2BAA2B,EAC3B,2BAA2B,EAC5B,MAAM,2BAA2B,CAAA;AAClC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,4BAA4B,CAAA;AACtD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AACxD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AACnD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAQ7D,MAAM,WAAW,eAAgB,SAAQ,IAAI;IAC3C,MAAM,EAAE,SAAS,CAAA;IACjB,8EAA8E;IAC9E,kBAAkB,EAAE,kBAAkB,CAAA;IACtC;;;;OAIG;IACH,0BAA0B,CAAC,EAAE,0BAA0B,CAAA;IACvD,mFAAmF;IACnF,QAAQ,EAAE,eAAe,CAAA;IACzB;;;;;;;OAOG;IACH,qBAAqB,CAAC,EAAE,qBAAqB,CAAA;IAC7C;;;OAGG;IACH,aAAa,CAAC,EAAE,2BAA2B,CAAA;IAC3C;;;;OAIG;IACH,qBAAqB,CAAC,EAAE,2BAA2B,CAAA;IACnD;;;;;OAKG;IACH,OAAO,CAAC,EAAE,aAAa,CAAA;IACvB;;;;;OAKG;IACH,uBAAuB,CAAC,EAAE,OAAO,CAAA;IACjC;;;;;OAKG;IACH,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,GAAG,SAAS,CAAA;IAC5D;;;;;;OAMG;IACH,mBAAmB,CAAC,EAAE,yBAAyB,CAAA;IAC/C;;;;;OAKG;IACH,iBAAiB,CAAC,EAAE,wBAAwB,CAAA;CAC7C;AAED,4FAA4F;AAC5F,MAAM,MAAM,MAAM,GAAG;IACnB,SAAS,EAAE;QACT,SAAS,EAAE,eAAe,CAAA;QAC1B,yEAAyE;QACzE,IAAI,CAAC,EAAE,cAAc,CAAA;KACtB,CAAA;CACF,CAAA"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Hono } from 'hono';
|
|
2
|
+
import type { AppEnv } from '../../http/env.js';
|
|
3
|
+
/**
|
|
4
|
+
* Workspace-scoped service-spec read endpoint. The prescriptive spec lives sharded in the
|
|
5
|
+
* service repo under `spec/`; the SPA cannot read a repo, so this reassembles the tree from
|
|
6
|
+
* the repo's DEFAULT branch (main) and serves it for the inspector's "View Requirements"
|
|
7
|
+
* window. Read-only: it never writes the repo.
|
|
8
|
+
*
|
|
9
|
+
* It resolves the block's repo through the same `resolveRunRepoContext` seam the engine uses
|
|
10
|
+
* to bind a run's pre/post-ops (installation + repo + default branch), so it is
|
|
11
|
+
* runtime-symmetric — both facades wire the resolver. When GitHub isn't connected (no
|
|
12
|
+
* resolver, no linked repo) or no spec exists yet, it returns `{ present: false }` so the
|
|
13
|
+
* window shows an empty state instead of erroring. Mounted under `/workspaces/:workspaceId`.
|
|
14
|
+
*/
|
|
15
|
+
export declare function serviceSpecController(): Hono<AppEnv>;
|
|
16
|
+
//# sourceMappingURL=ServiceSpecController.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ServiceSpecController.d.ts","sourceRoot":"","sources":["../../../src/modules/serviceSpec/ServiceSpecController.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAC3B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAM/C;;;;;;;;;;;GAWG;AACH,wBAAgB,qBAAqB,IAAI,IAAI,CAAC,MAAM,CAAC,CA0BpD"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { EMPTY_SERVICE_SPEC_VIEW } from '@cat-factory/contracts';
|
|
2
|
+
import { Hono } from 'hono';
|
|
3
|
+
import { param } from '../../http/params.js';
|
|
4
|
+
import { readServiceSpec } from './readServiceSpec.js';
|
|
5
|
+
const EMPTY = EMPTY_SERVICE_SPEC_VIEW;
|
|
6
|
+
/**
|
|
7
|
+
* Workspace-scoped service-spec read endpoint. The prescriptive spec lives sharded in the
|
|
8
|
+
* service repo under `spec/`; the SPA cannot read a repo, so this reassembles the tree from
|
|
9
|
+
* the repo's DEFAULT branch (main) and serves it for the inspector's "View Requirements"
|
|
10
|
+
* window. Read-only: it never writes the repo.
|
|
11
|
+
*
|
|
12
|
+
* It resolves the block's repo through the same `resolveRunRepoContext` seam the engine uses
|
|
13
|
+
* to bind a run's pre/post-ops (installation + repo + default branch), so it is
|
|
14
|
+
* runtime-symmetric — both facades wire the resolver. When GitHub isn't connected (no
|
|
15
|
+
* resolver, no linked repo) or no spec exists yet, it returns `{ present: false }` so the
|
|
16
|
+
* window shows an empty state instead of erroring. Mounted under `/workspaces/:workspaceId`.
|
|
17
|
+
*/
|
|
18
|
+
export function serviceSpecController() {
|
|
19
|
+
const app = new Hono();
|
|
20
|
+
app.get('/blocks/:blockId/spec', async (c) => {
|
|
21
|
+
const container = c.get('container');
|
|
22
|
+
const resolve = container.resolveRunRepoContext;
|
|
23
|
+
if (!resolve)
|
|
24
|
+
return c.json(EMPTY);
|
|
25
|
+
let ctx;
|
|
26
|
+
try {
|
|
27
|
+
ctx = await resolve(param(c, 'workspaceId'), param(c, 'blockId'));
|
|
28
|
+
}
|
|
29
|
+
catch {
|
|
30
|
+
// A block under no linked service throws in the resolver; treat as "no spec" for the
|
|
31
|
+
// read path rather than surfacing the misconfiguration to the inspector.
|
|
32
|
+
return c.json(EMPTY);
|
|
33
|
+
}
|
|
34
|
+
if (!ctx)
|
|
35
|
+
return c.json(EMPTY);
|
|
36
|
+
// `readServiceSpec` is total (every repo read is guarded), but keep a defensive fallback
|
|
37
|
+
// so a transient GitHub failure can never 500 the inspector — it shows an empty state.
|
|
38
|
+
try {
|
|
39
|
+
return c.json(await readServiceSpec(ctx.repo, ctx.baseBranch));
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
return c.json(EMPTY);
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
return app;
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=ServiceSpecController.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ServiceSpecController.js","sourceRoot":"","sources":["../../../src/modules/serviceSpec/ServiceSpecController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAA;AAChE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAE3B,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAA;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAEtD,MAAM,KAAK,GAAG,uBAAuB,CAAA;AAErC;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,qBAAqB;IACnC,MAAM,GAAG,GAAG,IAAI,IAAI,EAAU,CAAA;IAE9B,GAAG,CAAC,GAAG,CAAC,uBAAuB,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QAC3C,MAAM,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;QACpC,MAAM,OAAO,GAAG,SAAS,CAAC,qBAAqB,CAAA;QAC/C,IAAI,CAAC,OAAO;YAAE,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAClC,IAAI,GAAG,CAAA;QACP,IAAI,CAAC;YACH,GAAG,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAA;QACnE,CAAC;QAAC,MAAM,CAAC;YACP,qFAAqF;YACrF,yEAAyE;YACzE,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QACtB,CAAC;QACD,IAAI,CAAC,GAAG;YAAE,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAC9B,yFAAyF;QACzF,uFAAuF;QACvF,IAAI,CAAC;YACH,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,eAAe,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC,CAAA;QAChE,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QACtB,CAAC;IACH,CAAC,CAAC,CAAA;IAEF,OAAO,GAAG,CAAA;AACZ,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { type ServiceSpecView } from '@cat-factory/contracts';
|
|
2
|
+
import type { RepoFiles } from '@cat-factory/kernel';
|
|
3
|
+
/** Read + reassemble the spec on `ref` (the repo default branch). Never throws. */
|
|
4
|
+
export declare function readServiceSpec(repo: RepoFiles, ref: string): Promise<ServiceSpecView>;
|
|
5
|
+
//# sourceMappingURL=readServiceSpec.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"readServiceSpec.d.ts","sourceRoot":"","sources":["../../../src/modules/serviceSpec/readServiceSpec.ts"],"names":[],"mappings":"AAAA,OAAO,EAUL,KAAK,eAAe,EAIrB,MAAM,wBAAwB,CAAA;AAC/B,OAAO,KAAK,EAAoB,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAoGtE,mFAAmF;AACnF,wBAAsB,eAAe,CAAC,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAoF5F"}
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
import { EMPTY_SERVICE_SPEC_VIEW, SPEC_FEATURES_DIR, SPEC_MODULES_DIR, SPEC_SERVICE_PATH, safeParseDomainRule, safeParseRequirementGroup, safeParseRequirementItem, safeParseSpecModule, } from '@cat-factory/contracts';
|
|
2
|
+
// Reassemble the SHARDED `spec/` artifact into a single {@link ServiceSpecView} for the
|
|
3
|
+
// SPA, reading it checkout-free from the repo's default branch (main) via {@link RepoFiles}.
|
|
4
|
+
// The spec-writer harness writes the tree across many files (one canonical JSON shard per
|
|
5
|
+
// feature group, plus seeded Gherkin `.feature` files) so concurrent task branches merge
|
|
6
|
+
// cleanly; the slugs are filesystem-only (collision-suffixed, name-sorted), so the only way
|
|
7
|
+
// to recover the tree is to walk the directories — names live inside the shards, not the
|
|
8
|
+
// paths. This is the read-side mirror of the harness's `readExistingSpec`, over HTTP.
|
|
9
|
+
//
|
|
10
|
+
// Two resilience properties this reader guarantees, so the inspector never sees a 500 or a
|
|
11
|
+
// misleading "no spec" state:
|
|
12
|
+
// 1. Every repo read is total — a non-404 GitHub error (rate limit, 5xx, network) is
|
|
13
|
+
// treated as "missing" rather than thrown, so a flaky read degrades to a partial view
|
|
14
|
+
// instead of erroring the controller.
|
|
15
|
+
// 2. The tree is validated PER NODE, down to the individual requirement/rule — a malformed
|
|
16
|
+
// module shard is dropped without the rest of the tree, and a group shard is salvaged one
|
|
17
|
+
// requirement/rule at a time (so ONE field past a schema cap the lenient writer never
|
|
18
|
+
// enforced drops only that requirement, not the whole group with its valid siblings).
|
|
19
|
+
const EMPTY = EMPTY_SERVICE_SPEC_VIEW;
|
|
20
|
+
// Cap concurrent GitHub reads so a large spec doesn't fire a burst of dozens of parallel
|
|
21
|
+
// requests at once (GitHub flags high concurrency as secondary-rate-limit abuse). The reads
|
|
22
|
+
// are still parallel, just bounded.
|
|
23
|
+
const READ_CONCURRENCY = 12;
|
|
24
|
+
function parseJson(content) {
|
|
25
|
+
try {
|
|
26
|
+
return JSON.parse(content);
|
|
27
|
+
}
|
|
28
|
+
catch {
|
|
29
|
+
return undefined;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
/** A trimmed non-empty string, else undefined — so a blank value falls back like a missing one. */
|
|
33
|
+
function nonEmptyString(value) {
|
|
34
|
+
return typeof value === 'string' && value.trim() !== '' ? value.trim() : undefined;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Parse one group shard, salvaging it PER REQUIREMENT/RULE. A strict whole-shard parse is
|
|
38
|
+
* tried first (the happy path). On failure — typically ONE field past a schema cap the
|
|
39
|
+
* lenient writer never enforces (e.g. a >120-char requirement title) — the group is rebuilt
|
|
40
|
+
* from its individually-validated requirements/rules, so one bad item drops only itself, not
|
|
41
|
+
* the whole group with its valid siblings. Returns undefined only when even the group's own
|
|
42
|
+
* identity (its name) is unrecoverable.
|
|
43
|
+
*/
|
|
44
|
+
function coerceGroupShard(value) {
|
|
45
|
+
const strict = safeParseRequirementGroup(value);
|
|
46
|
+
if (strict)
|
|
47
|
+
return strict;
|
|
48
|
+
if (!value || typeof value !== 'object' || Array.isArray(value))
|
|
49
|
+
return undefined;
|
|
50
|
+
const raw = value;
|
|
51
|
+
const requirements = (Array.isArray(raw.requirements) ? raw.requirements : [])
|
|
52
|
+
.map(safeParseRequirementItem)
|
|
53
|
+
.filter((r) => r !== undefined);
|
|
54
|
+
const rules = (Array.isArray(raw.rules) ? raw.rules : [])
|
|
55
|
+
.map(safeParseDomainRule)
|
|
56
|
+
.filter((r) => r !== undefined);
|
|
57
|
+
// Re-validate the rebuilt group: this enforces the group-level fields (name/summary) while
|
|
58
|
+
// the requirements/rules are already valid. A bad group name is unrecoverable ⇒ undefined.
|
|
59
|
+
return safeParseRequirementGroup({ ...raw, requirements, rules });
|
|
60
|
+
}
|
|
61
|
+
/** Read a file, treating ANY error (incl. non-404) as "missing" so the reader never throws. */
|
|
62
|
+
async function safeGetFile(repo, path, ref) {
|
|
63
|
+
try {
|
|
64
|
+
return await repo.getFile(path, ref);
|
|
65
|
+
}
|
|
66
|
+
catch {
|
|
67
|
+
return null;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
/** List a directory, treating ANY error as "empty" so the reader never throws. */
|
|
71
|
+
async function safeList(repo, path, ref) {
|
|
72
|
+
try {
|
|
73
|
+
return await repo.listDirectory(path, ref);
|
|
74
|
+
}
|
|
75
|
+
catch {
|
|
76
|
+
return [];
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
/** Map `items` through `fn` with at most `limit` in flight; results preserve input order. */
|
|
80
|
+
async function mapLimit(items, limit, fn) {
|
|
81
|
+
const results = new Array(items.length);
|
|
82
|
+
let next = 0;
|
|
83
|
+
const worker = async () => {
|
|
84
|
+
while (next < items.length) {
|
|
85
|
+
const i = next++;
|
|
86
|
+
results[i] = await fn(items[i], i);
|
|
87
|
+
}
|
|
88
|
+
};
|
|
89
|
+
await Promise.all(Array.from({ length: Math.min(limit, items.length) }, worker));
|
|
90
|
+
return results;
|
|
91
|
+
}
|
|
92
|
+
/** Read + reassemble the spec on `ref` (the repo default branch). Never throws. */
|
|
93
|
+
export async function readServiceSpec(repo, ref) {
|
|
94
|
+
// The presence anchor: no readable object `spec/service.json` ⇒ no spec on this branch.
|
|
95
|
+
const serviceFile = await safeGetFile(repo, SPEC_SERVICE_PATH, ref);
|
|
96
|
+
if (!serviceFile)
|
|
97
|
+
return EMPTY;
|
|
98
|
+
const parsedService = parseJson(serviceFile.content);
|
|
99
|
+
// A non-object anchor (null / array / scalar) is a half-written or corrupt file — treat as
|
|
100
|
+
// "no spec" rather than reading garbage downstream.
|
|
101
|
+
if (!parsedService || typeof parsedService !== 'object' || Array.isArray(parsedService)) {
|
|
102
|
+
return EMPTY;
|
|
103
|
+
}
|
|
104
|
+
const service = parsedService;
|
|
105
|
+
// Walk `spec/modules/<moduleSlug>/` — each dir is one module, name-sorted by the writer.
|
|
106
|
+
const moduleDirs = (await safeList(repo, SPEC_MODULES_DIR, ref)).filter((e) => e.type === 'dir');
|
|
107
|
+
const moduleSlugToName = new Map();
|
|
108
|
+
const groupSlugToName = new Map();
|
|
109
|
+
// Phase A: per module, read its `_module.json` (for the display name) and list its shards.
|
|
110
|
+
const moduleInfos = await mapLimit(moduleDirs, READ_CONCURRENCY, async (dir) => {
|
|
111
|
+
const slug = dir.name;
|
|
112
|
+
const [meta, entries] = await Promise.all([
|
|
113
|
+
safeGetFile(repo, `${dir.path}/_module.json`, ref),
|
|
114
|
+
safeList(repo, dir.path, ref),
|
|
115
|
+
]);
|
|
116
|
+
const metaObj = (meta ? parseJson(meta.content) : undefined);
|
|
117
|
+
// Fall back to the slug for a blank name too (not only a missing one): `??` keeps `""`,
|
|
118
|
+
// which then fails the module schema and would silently drop the whole module + its
|
|
119
|
+
// valid groups. A corrupt/half-written `_module.json` should degrade to the slug instead.
|
|
120
|
+
const moduleName = nonEmptyString(metaObj?.name) ?? slug;
|
|
121
|
+
moduleSlugToName.set(slug, moduleName);
|
|
122
|
+
// Every `*.json` except `_module.json` is one canonical group shard.
|
|
123
|
+
const shards = entries.filter((e) => e.type === 'file' && e.name.endsWith('.json') && e.name !== '_module.json');
|
|
124
|
+
return { slug, moduleName, summary: metaObj?.summary ?? '', shards };
|
|
125
|
+
});
|
|
126
|
+
// Phase B: read every group shard across all modules through one bounded queue (this is the
|
|
127
|
+
// largest fan-out), then validate PER SHARD so a malformed group is dropped, not the tree.
|
|
128
|
+
const shardRefs = moduleInfos.flatMap((m) => m.shards.map((entry) => ({
|
|
129
|
+
moduleSlug: m.slug,
|
|
130
|
+
groupSlug: entry.name.replace(/\.json$/, ''),
|
|
131
|
+
entry,
|
|
132
|
+
})));
|
|
133
|
+
const shardContents = await mapLimit(shardRefs, READ_CONCURRENCY, async (s) => ({
|
|
134
|
+
ref: s,
|
|
135
|
+
file: await safeGetFile(repo, s.entry.path, ref),
|
|
136
|
+
}));
|
|
137
|
+
const groupsByModule = new Map();
|
|
138
|
+
for (const { ref: s, file } of shardContents) {
|
|
139
|
+
const group = file ? coerceGroupShard(parseJson(file.content)) : undefined;
|
|
140
|
+
if (!group)
|
|
141
|
+
continue;
|
|
142
|
+
groupSlugToName.set(`${s.moduleSlug}/${s.groupSlug}`, group.name);
|
|
143
|
+
const list = groupsByModule.get(s.moduleSlug) ?? [];
|
|
144
|
+
list.push(group);
|
|
145
|
+
groupsByModule.set(s.moduleSlug, list);
|
|
146
|
+
}
|
|
147
|
+
const modules = moduleInfos
|
|
148
|
+
.map((m) => safeParseSpecModule({
|
|
149
|
+
name: m.moduleName,
|
|
150
|
+
summary: m.summary,
|
|
151
|
+
groups: groupsByModule.get(m.slug) ?? [],
|
|
152
|
+
}))
|
|
153
|
+
.filter((m) => m !== undefined);
|
|
154
|
+
// Build the doc from the per-node-validated pieces directly, so a missing/empty service
|
|
155
|
+
// name (the SPA falls back to the block title) degrades to showing the modules rather than
|
|
156
|
+
// blanking the whole view.
|
|
157
|
+
const spec = {
|
|
158
|
+
service: typeof service.service === 'string' ? service.service : '',
|
|
159
|
+
summary: typeof service.summary === 'string' ? service.summary : '',
|
|
160
|
+
modules,
|
|
161
|
+
};
|
|
162
|
+
const features = await readFeatureFiles(repo, ref, moduleSlugToName, groupSlugToName);
|
|
163
|
+
return { present: true, spec, features };
|
|
164
|
+
}
|
|
165
|
+
/** Read the seeded Gherkin `.feature` files under `spec/features/<module>/<group>.feature`. */
|
|
166
|
+
async function readFeatureFiles(repo, ref, moduleSlugToName, groupSlugToName) {
|
|
167
|
+
const moduleDirs = (await safeList(repo, SPEC_FEATURES_DIR, ref)).filter((e) => e.type === 'dir');
|
|
168
|
+
const perModule = await mapLimit(moduleDirs, READ_CONCURRENCY, async (dir) => {
|
|
169
|
+
const entries = await safeList(repo, dir.path, ref);
|
|
170
|
+
return entries
|
|
171
|
+
.filter((e) => e.type === 'file' && e.name.endsWith('.feature'))
|
|
172
|
+
.map((entry) => ({ slug: dir.name, entry }));
|
|
173
|
+
});
|
|
174
|
+
const featureRefs = perModule.flat();
|
|
175
|
+
const read = await mapLimit(featureRefs, READ_CONCURRENCY, async (fr) => {
|
|
176
|
+
const file = await safeGetFile(repo, fr.entry.path, ref);
|
|
177
|
+
if (!file)
|
|
178
|
+
return null;
|
|
179
|
+
const groupSlug = fr.entry.name.replace(/\.feature$/, '');
|
|
180
|
+
return {
|
|
181
|
+
module: moduleSlugToName.get(fr.slug) ?? fr.slug,
|
|
182
|
+
group: groupSlugToName.get(`${fr.slug}/${groupSlug}`) ?? groupSlug,
|
|
183
|
+
path: fr.entry.path,
|
|
184
|
+
content: file.content,
|
|
185
|
+
};
|
|
186
|
+
});
|
|
187
|
+
return read.filter((x) => x !== null);
|
|
188
|
+
}
|
|
189
|
+
//# sourceMappingURL=readServiceSpec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"readServiceSpec.js","sourceRoot":"","sources":["../../../src/modules/serviceSpec/readServiceSpec.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.
|
|
3
|
+
"version": "0.14.0",
|
|
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",
|
|
@@ -28,13 +28,13 @@
|
|
|
28
28
|
"hono": "^4.12.27",
|
|
29
29
|
"pino": "^10.3.1",
|
|
30
30
|
"valibot": "^1.4.1",
|
|
31
|
-
"@cat-factory/agents": "0.11.
|
|
32
|
-
"@cat-factory/contracts": "0.
|
|
33
|
-
"@cat-factory/integrations": "0.10.
|
|
34
|
-
"@cat-factory/kernel": "0.13.
|
|
35
|
-
"@cat-factory/orchestration": "0.10.
|
|
36
|
-
"@cat-factory/prompt-fragments": "0.7.
|
|
37
|
-
"@cat-factory/spend": "0.8.
|
|
31
|
+
"@cat-factory/agents": "0.11.5",
|
|
32
|
+
"@cat-factory/contracts": "0.14.0",
|
|
33
|
+
"@cat-factory/integrations": "0.10.3",
|
|
34
|
+
"@cat-factory/kernel": "0.13.3",
|
|
35
|
+
"@cat-factory/orchestration": "0.10.3",
|
|
36
|
+
"@cat-factory/prompt-fragments": "0.7.10",
|
|
37
|
+
"@cat-factory/spend": "0.8.8"
|
|
38
38
|
},
|
|
39
39
|
"devDependencies": {
|
|
40
40
|
"typescript": "7.0.1-rc",
|