@cat-factory/server 0.256.0 → 0.258.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 +13 -0
- package/dist/app.js.map +1 -1
- package/dist/modules/notifications/notificationActions.d.ts +27 -3
- package/dist/modules/notifications/notificationActions.d.ts.map +1 -1
- package/dist/modules/notifications/notificationActions.js +36 -7
- package/dist/modules/notifications/notificationActions.js.map +1 -1
- package/dist/modules/publicApi/PublicApiController.d.ts.map +1 -1
- package/dist/modules/publicApi/PublicApiController.js +16 -4
- package/dist/modules/publicApi/PublicApiController.js.map +1 -1
- package/dist/modules/publicApi/PublicEvidenceController.d.ts.map +1 -1
- package/dist/modules/publicApi/PublicEvidenceController.js +5 -16
- package/dist/modules/publicApi/PublicEvidenceController.js.map +1 -1
- package/dist/modules/publicApi/PublicMergeEvidenceController.d.ts +4 -0
- package/dist/modules/publicApi/PublicMergeEvidenceController.d.ts.map +1 -0
- package/dist/modules/publicApi/PublicMergeEvidenceController.js +158 -0
- package/dist/modules/publicApi/PublicMergeEvidenceController.js.map +1 -0
- package/dist/modules/publicApi/PublicSpecController.d.ts +4 -0
- package/dist/modules/publicApi/PublicSpecController.d.ts.map +1 -0
- package/dist/modules/publicApi/PublicSpecController.js +169 -0
- package/dist/modules/publicApi/PublicSpecController.js.map +1 -0
- package/dist/modules/publicApi/decisions/scope.d.ts +21 -0
- package/dist/modules/publicApi/decisions/scope.d.ts.map +1 -1
- package/dist/modules/publicApi/decisions/scope.js +26 -0
- package/dist/modules/publicApi/decisions/scope.js.map +1 -1
- package/dist/modules/publicApi/openapiDocument.generated.d.ts +1 -1
- package/dist/modules/publicApi/openapiDocument.generated.d.ts.map +1 -1
- package/dist/modules/publicApi/openapiDocument.generated.js +1 -1
- package/dist/modules/publicApi/openapiDocument.generated.js.map +1 -1
- package/dist/modules/publicApi/specProjection.d.ts +11 -0
- package/dist/modules/publicApi/specProjection.d.ts.map +1 -0
- package/dist/modules/publicApi/specProjection.js +189 -0
- package/dist/modules/publicApi/specProjection.js.map +1 -0
- package/package.json +8 -8
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openapiDocument.generated.js","sourceRoot":"","sources":["../../../src/modules/publicApi/openapiDocument.generated.ts"],"names":[],"mappings":"AAAA,qFAAqF;AACrF,EAAE;AACF,0FAA0F;AAC1F,8FAA8F;AAC9F,8FAA8F;AAC9F,8EAA8E;AAE9E,MAAM,CAAC,MAAM,YAAY,GAAG,
|
|
1
|
+
{"version":3,"file":"openapiDocument.generated.js","sourceRoot":"","sources":["../../../src/modules/publicApi/openapiDocument.generated.ts"],"names":[],"mappings":"AAAA,qFAAqF;AACrF,EAAE;AACF,0FAA0F;AAC1F,8FAA8F;AAC9F,8FAA8F;AAC9F,8EAA8E;AAE9E,MAAM,CAAC,MAAM,YAAY,GAAG,uomjBAAuomjB,CAAA"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { type PublicServiceSpec, type PublicSpecAnchor, type PublicSpecProvenance, type ServiceSpecView } from '@cat-factory/contracts';
|
|
2
|
+
/**
|
|
3
|
+
* Project a read view onto the wire, under `anchor`.
|
|
4
|
+
*
|
|
5
|
+
* The anchor is passed IN rather than re-derived: the caller is where the four outcomes are
|
|
6
|
+
* separated (an unreadable repository never reaches here at all), and a projection that recomputed
|
|
7
|
+
* it from `view.present` would be a second opinion on the one judgement this endpoint exists to
|
|
8
|
+
* make.
|
|
9
|
+
*/
|
|
10
|
+
export declare function toPublicServiceSpec(serviceId: string, anchor: PublicSpecAnchor, view: ServiceSpecView, provenance: PublicSpecProvenance): PublicServiceSpec;
|
|
11
|
+
//# sourceMappingURL=specProjection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"specProjection.d.ts","sourceRoot":"","sources":["../../../src/modules/publicApi/specProjection.ts"],"names":[],"mappings":"AAAA,OAAO,EAQL,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EAErB,KAAK,oBAAoB,EAIzB,KAAK,eAAe,EAGrB,MAAM,wBAAwB,CAAA;AAsL/B;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,gBAAgB,EACxB,IAAI,EAAE,eAAe,EACrB,UAAU,EAAE,oBAAoB,GAC/B,iBAAiB,CAgBnB"}
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
import { PUBLIC_SPEC_MAX_ACCEPTANCE, PUBLIC_SPEC_MAX_FEATURE_CHARS, PUBLIC_SPEC_MAX_FEATURE_FILES, PUBLIC_SPEC_MAX_FEATURE_TOTAL_CHARS, PUBLIC_SPEC_MAX_ISSUES, PUBLIC_SPEC_MAX_REQUIREMENTS, PUBLIC_SPEC_MAX_RULES, } from '@cat-factory/contracts';
|
|
2
|
+
// Project the reader's {@link ServiceSpecView} onto the public wire shape, BOUNDED.
|
|
3
|
+
//
|
|
4
|
+
// A pure reduction, kept out of the controller because it is the half worth testing on its own:
|
|
5
|
+
// what a cap does to a tree is a property of this function, and every rule it applies exists to
|
|
6
|
+
// keep a bounded response from reading as a smaller spec.
|
|
7
|
+
//
|
|
8
|
+
// Four rules, and each is the same rule:
|
|
9
|
+
//
|
|
10
|
+
// 1. **A cap counts against the WHOLE tree, and reports the whole tree's total.** `shown`/`total`
|
|
11
|
+
// are computed before anything is dropped, so a reader of a capped response still learns how
|
|
12
|
+
// many requirements the service declares. A count taken off the rows would be exactly the lie
|
|
13
|
+
// the truncation record exists to prevent.
|
|
14
|
+
// 2. **A cap cuts in TRAVERSAL ORDER and nothing is re-ranked.** The platform does not judge which
|
|
15
|
+
// requirement matters more, so it drops the tail rather than inventing a severity. The wire
|
|
16
|
+
// contract says so; a reader that needs a particular requirement has its id and the spec is a
|
|
17
|
+
// repository away.
|
|
18
|
+
// 3. **An emptied group/module is kept, not pruned.** A group whose requirements all fell past the
|
|
19
|
+
// cap still names itself, because a vanished group reads as a service that never had one. Same
|
|
20
|
+
// for a requirement whose criteria the acceptance budget could not fit: its id is the join key
|
|
21
|
+
// this endpoint exists for, so the criteria are what a cap cuts, never the row that names them.
|
|
22
|
+
// 4. **EVERY axis is bounded, including the ones that do not grow with the spec.** The Gherkin is
|
|
23
|
+
// capped across all files as well as within each one, and the issue list is capped too: it grows
|
|
24
|
+
// with FAILURE, so a rate-limit window part-way through a large walk would otherwise make the
|
|
25
|
+
// report of a degraded read the largest thing in a response whose every other axis is bounded.
|
|
26
|
+
/**
|
|
27
|
+
* Clamp one feature file's Gherkin to `limit`, reporting what was kept and what exists.
|
|
28
|
+
*
|
|
29
|
+
* Counted and cut in code POINTS rather than UTF-16 units, the unit the debug surface's own
|
|
30
|
+
* `chars`/`totalChars` are measured in: a `slice` on the raw string can land between the halves of
|
|
31
|
+
* a surrogate pair and emit a lone one, which is a replacement character in the response and a
|
|
32
|
+
* character count nobody can reproduce.
|
|
33
|
+
*
|
|
34
|
+
* `limit` is the smaller of the per-file cap and what is left of the response-wide one, so both
|
|
35
|
+
* bounds report through the same `chars < totalChars` a reader already has to honour.
|
|
36
|
+
*/
|
|
37
|
+
function clampFeature(file, limit) {
|
|
38
|
+
const points = [...file.content];
|
|
39
|
+
const totalChars = points.length;
|
|
40
|
+
const chars = Math.min(totalChars, Math.max(limit, 0));
|
|
41
|
+
return {
|
|
42
|
+
module: file.module,
|
|
43
|
+
group: file.group,
|
|
44
|
+
path: file.path,
|
|
45
|
+
content: chars === totalChars ? file.content : points.slice(0, chars).join(''),
|
|
46
|
+
chars,
|
|
47
|
+
totalChars,
|
|
48
|
+
truncated: chars < totalChars,
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* The feature files this response carries: at most {@link PUBLIC_SPEC_MAX_FEATURE_FILES} of them,
|
|
53
|
+
* holding at most {@link PUBLIC_SPEC_MAX_FEATURE_TOTAL_CHARS} of Gherkin between them.
|
|
54
|
+
*
|
|
55
|
+
* The file count alone bounded the wrong thing: 500 files at the 20,000-character per-file cap is
|
|
56
|
+
* a ten-megabyte body. A file the total budget cannot fit whole is carried CLAMPED rather than
|
|
57
|
+
* dropped (its own `truncated` says so) and the walk stops at the first file the budget cannot
|
|
58
|
+
* start, so `shown` counts what a caller actually received.
|
|
59
|
+
*/
|
|
60
|
+
function capFeatures(files) {
|
|
61
|
+
const features = [];
|
|
62
|
+
let charBudget = PUBLIC_SPEC_MAX_FEATURE_TOTAL_CHARS;
|
|
63
|
+
for (const file of files.slice(0, PUBLIC_SPEC_MAX_FEATURE_FILES)) {
|
|
64
|
+
if (charBudget <= 0)
|
|
65
|
+
break;
|
|
66
|
+
const clamped = clampFeature(file, Math.min(PUBLIC_SPEC_MAX_FEATURE_CHARS, charBudget));
|
|
67
|
+
charBudget -= clamped.chars;
|
|
68
|
+
features.push(clamped);
|
|
69
|
+
}
|
|
70
|
+
return {
|
|
71
|
+
features,
|
|
72
|
+
truncations: features.length < files.length
|
|
73
|
+
? [{ section: 'features', shown: features.length, total: files.length }]
|
|
74
|
+
: [],
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
/** Every group in the tree, in traversal order, so all three item caps cut the same way. */
|
|
78
|
+
function groupsOf(spec) {
|
|
79
|
+
return (spec.modules ?? []).flatMap((module) => module.groups ?? []);
|
|
80
|
+
}
|
|
81
|
+
/** What the whole tree declares, counted BEFORE anything is cut. */
|
|
82
|
+
function treeTotals(groups) {
|
|
83
|
+
let requirements = 0;
|
|
84
|
+
let rules = 0;
|
|
85
|
+
let acceptance = 0;
|
|
86
|
+
for (const group of groups) {
|
|
87
|
+
rules += (group.rules ?? []).length;
|
|
88
|
+
for (const requirement of group.requirements ?? []) {
|
|
89
|
+
requirements += 1;
|
|
90
|
+
acceptance += (requirement.acceptance ?? []).length;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
return { requirements, rules, acceptance };
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Rebuild the tree with at most {@link PUBLIC_SPEC_MAX_REQUIREMENTS} requirements,
|
|
97
|
+
* {@link PUBLIC_SPEC_MAX_RULES} rules and {@link PUBLIC_SPEC_MAX_ACCEPTANCE} acceptance criteria
|
|
98
|
+
* across it, reporting each cap that bit.
|
|
99
|
+
*
|
|
100
|
+
* The budgets are independent: a spec heavy in rules and light in requirements loses none of the
|
|
101
|
+
* latter. They are spent in traversal order, so a group is either whole, partial, or empty, and
|
|
102
|
+
* never a sample. A requirement whose criteria the acceptance budget could not fit is still
|
|
103
|
+
* CARRIED (a requirement is the join key the whole endpoint exists for), with the criteria the
|
|
104
|
+
* budget covered; the truncation row is what says the rest exist.
|
|
105
|
+
*/
|
|
106
|
+
function capTree(spec) {
|
|
107
|
+
const totals = treeTotals(groupsOf(spec));
|
|
108
|
+
const truncations = [];
|
|
109
|
+
if (totals.requirements > PUBLIC_SPEC_MAX_REQUIREMENTS) {
|
|
110
|
+
truncations.push({
|
|
111
|
+
section: 'requirements',
|
|
112
|
+
shown: PUBLIC_SPEC_MAX_REQUIREMENTS,
|
|
113
|
+
total: totals.requirements,
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
if (totals.rules > PUBLIC_SPEC_MAX_RULES) {
|
|
117
|
+
truncations.push({ section: 'rules', shown: PUBLIC_SPEC_MAX_RULES, total: totals.rules });
|
|
118
|
+
}
|
|
119
|
+
if (totals.acceptance > PUBLIC_SPEC_MAX_ACCEPTANCE) {
|
|
120
|
+
truncations.push({
|
|
121
|
+
section: 'acceptance',
|
|
122
|
+
shown: PUBLIC_SPEC_MAX_ACCEPTANCE,
|
|
123
|
+
total: totals.acceptance,
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
if (truncations.length === 0)
|
|
127
|
+
return { spec, truncations };
|
|
128
|
+
let requirementBudget = PUBLIC_SPEC_MAX_REQUIREMENTS;
|
|
129
|
+
let ruleBudget = PUBLIC_SPEC_MAX_RULES;
|
|
130
|
+
let acceptanceBudget = PUBLIC_SPEC_MAX_ACCEPTANCE;
|
|
131
|
+
const modules = (spec.modules ?? []).map((module) => ({
|
|
132
|
+
...module,
|
|
133
|
+
groups: (module.groups ?? []).map((group) => {
|
|
134
|
+
const requirements = (group.requirements ?? [])
|
|
135
|
+
.slice(0, Math.max(requirementBudget, 0))
|
|
136
|
+
.map((requirement) => {
|
|
137
|
+
const acceptance = (requirement.acceptance ?? []).slice(0, Math.max(acceptanceBudget, 0));
|
|
138
|
+
acceptanceBudget -= acceptance.length;
|
|
139
|
+
return { ...requirement, acceptance };
|
|
140
|
+
});
|
|
141
|
+
const rules = (group.rules ?? []).slice(0, Math.max(ruleBudget, 0));
|
|
142
|
+
requirementBudget -= requirements.length;
|
|
143
|
+
ruleBudget -= rules.length;
|
|
144
|
+
return { ...group, requirements, rules };
|
|
145
|
+
}),
|
|
146
|
+
}));
|
|
147
|
+
return { spec: { ...spec, modules }, truncations };
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* The read issues this response carries, capped, with a row saying so when the cap bit.
|
|
151
|
+
*
|
|
152
|
+
* The one axis that grows with FAILURE rather than with the spec: a rate-limit window part-way
|
|
153
|
+
* through a few-thousand-shard walk logs a row per shard, so an uncapped list makes the report of
|
|
154
|
+
* a degraded read the largest thing in a response whose every other axis is bounded.
|
|
155
|
+
*/
|
|
156
|
+
function capIssues(issues) {
|
|
157
|
+
if (issues.length <= PUBLIC_SPEC_MAX_ISSUES)
|
|
158
|
+
return { issues, truncations: [] };
|
|
159
|
+
return {
|
|
160
|
+
issues: issues.slice(0, PUBLIC_SPEC_MAX_ISSUES),
|
|
161
|
+
truncations: [{ section: 'issues', shown: PUBLIC_SPEC_MAX_ISSUES, total: issues.length }],
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Project a read view onto the wire, under `anchor`.
|
|
166
|
+
*
|
|
167
|
+
* The anchor is passed IN rather than re-derived: the caller is where the four outcomes are
|
|
168
|
+
* separated (an unreadable repository never reaches here at all), and a projection that recomputed
|
|
169
|
+
* it from `view.present` would be a second opinion on the one judgement this endpoint exists to
|
|
170
|
+
* make.
|
|
171
|
+
*/
|
|
172
|
+
export function toPublicServiceSpec(serviceId, anchor, view, provenance) {
|
|
173
|
+
const capped = view.spec ? capTree(view.spec) : { spec: null, truncations: [] };
|
|
174
|
+
const features = capFeatures(view.features);
|
|
175
|
+
// An absent `diagnostics` means the producer diagnosed nothing, which on this path cannot
|
|
176
|
+
// happen (the reader always sets it) but is answered as "no issues found" rather than left to
|
|
177
|
+
// throw on a view assembled by hand.
|
|
178
|
+
const issues = capIssues(view.diagnostics?.issues ?? []);
|
|
179
|
+
return {
|
|
180
|
+
serviceId,
|
|
181
|
+
anchor,
|
|
182
|
+
spec: capped.spec,
|
|
183
|
+
features: features.features,
|
|
184
|
+
provenance,
|
|
185
|
+
issues: issues.issues,
|
|
186
|
+
truncations: [...capped.truncations, ...features.truncations, ...issues.truncations],
|
|
187
|
+
};
|
|
188
|
+
}
|
|
189
|
+
//# sourceMappingURL=specProjection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"specProjection.js","sourceRoot":"","sources":["../../../src/modules/publicApi/specProjection.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.258.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",
|
|
@@ -31,13 +31,13 @@
|
|
|
31
31
|
"jose": "^6.2.8",
|
|
32
32
|
"pino": "^10.3.1",
|
|
33
33
|
"valibot": "^1.4.2",
|
|
34
|
-
"@cat-factory/agents": "0.
|
|
35
|
-
"@cat-factory/contracts": "0.
|
|
36
|
-
"@cat-factory/
|
|
37
|
-
"@cat-factory/
|
|
38
|
-
"@cat-factory/mcp-server": "0.
|
|
39
|
-
"@cat-factory/orchestration": "0.
|
|
40
|
-
"@cat-factory/spend": "0.15.
|
|
34
|
+
"@cat-factory/agents": "0.120.0",
|
|
35
|
+
"@cat-factory/contracts": "0.280.0",
|
|
36
|
+
"@cat-factory/kernel": "0.275.4",
|
|
37
|
+
"@cat-factory/integrations": "0.152.5",
|
|
38
|
+
"@cat-factory/mcp-server": "0.26.0",
|
|
39
|
+
"@cat-factory/orchestration": "0.246.0",
|
|
40
|
+
"@cat-factory/spend": "0.15.47"
|
|
41
41
|
},
|
|
42
42
|
"devDependencies": {
|
|
43
43
|
"@types/node": "^26.1.2",
|