@cat-factory/orchestration 0.149.2 → 0.150.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.
- package/dist/container/dependencies.d.ts +8 -1
- package/dist/container/dependencies.d.ts.map +1 -1
- package/dist/container/platform-modules.d.ts.map +1 -1
- package/dist/container/platform-modules.js +13 -0
- package/dist/container/platform-modules.js.map +1 -1
- package/dist/container.d.ts +3 -0
- package/dist/container.d.ts.map +1 -1
- package/dist/container.js +1 -0
- package/dist/container.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/modules/execution/AgentContextBuilder.d.ts +1 -0
- package/dist/modules/execution/AgentContextBuilder.d.ts.map +1 -1
- package/dist/modules/execution/AgentContextBuilder.js +9 -1
- package/dist/modules/execution/AgentContextBuilder.js.map +1 -1
- package/dist/modules/execution/ExecutionService.d.ts +8 -6
- package/dist/modules/execution/ExecutionService.d.ts.map +1 -1
- package/dist/modules/execution/ExecutionService.js +14 -6
- package/dist/modules/execution/ExecutionService.js.map +1 -1
- package/dist/modules/execution/GateHelperDispatcher.d.ts.map +1 -1
- package/dist/modules/execution/GateHelperDispatcher.js +2 -2
- package/dist/modules/execution/GateHelperDispatcher.js.map +1 -1
- package/dist/modules/execution/HumanTestController.d.ts.map +1 -1
- package/dist/modules/execution/HumanTestController.js +2 -2
- package/dist/modules/execution/HumanTestController.js.map +1 -1
- package/dist/modules/execution/RalphController.d.ts.map +1 -1
- package/dist/modules/execution/RalphController.js +2 -2
- package/dist/modules/execution/RalphController.js.map +1 -1
- package/dist/modules/execution/RunDispatcher.d.ts.map +1 -1
- package/dist/modules/execution/RunDispatcher.js +16 -3
- package/dist/modules/execution/RunDispatcher.js.map +1 -1
- package/dist/modules/execution/TesterController.d.ts.map +1 -1
- package/dist/modules/execution/TesterController.js +3 -4
- package/dist/modules/execution/TesterController.js.map +1 -1
- package/dist/modules/execution/VisualConfirmationController.d.ts.map +1 -1
- package/dist/modules/execution/VisualConfirmationController.js +2 -2
- package/dist/modules/execution/VisualConfirmationController.js.map +1 -1
- package/dist/modules/execution/step-fold.logic.d.ts +13 -1
- package/dist/modules/execution/step-fold.logic.d.ts.map +1 -1
- package/dist/modules/execution/step-fold.logic.js +23 -2
- package/dist/modules/execution/step-fold.logic.js.map +1 -1
- package/dist/modules/reports/ReportsService.d.ts +29 -0
- package/dist/modules/reports/ReportsService.d.ts.map +1 -0
- package/dist/modules/reports/ReportsService.js +64 -0
- package/dist/modules/reports/ReportsService.js.map +1 -0
- package/dist/modules/reports/reports.logic.d.ts +36 -0
- package/dist/modules/reports/reports.logic.d.ts.map +1 -0
- package/dist/modules/reports/reports.logic.js +104 -0
- package/dist/modules/reports/reports.logic.js.map +1 -0
- package/package.json +11 -11
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { REPORT_WINDOWS, alignWindowStart, buildSpendTrend, foldTotals, toActivityRow, toSpendRow, } from './reports.logic.js';
|
|
2
|
+
/**
|
|
3
|
+
* Cross-cutting usage analytics: composes the rollups behind {@link ReportsRepository}
|
|
4
|
+
* into the Reports view — spend sliced by model and agent kind, spend and run activity
|
|
5
|
+
* sliced by workspace / service / task type, and a spend trend, over a time window.
|
|
6
|
+
*
|
|
7
|
+
* The dual of {@link PlatformObservabilityService}: that answers "is the deployment
|
|
8
|
+
* healthy", this answers "where are the money and the work going". Every breakdown is one
|
|
9
|
+
* SQL GROUP BY, and they are independent aggregates run in parallel — NOT an N+1. The
|
|
10
|
+
* reshaping (totals fold, trend zero-fill) is the pure logic in `reports.logic.ts`.
|
|
11
|
+
*/
|
|
12
|
+
export class ReportsService {
|
|
13
|
+
deps;
|
|
14
|
+
constructor(deps) {
|
|
15
|
+
this.deps = deps;
|
|
16
|
+
}
|
|
17
|
+
async summarize(accountId, window, workspaceId) {
|
|
18
|
+
const { windowMs, bucketMs } = REPORT_WINDOWS[window];
|
|
19
|
+
const until = this.deps.clock.now();
|
|
20
|
+
// Snapped to a bucket edge so the trend's leading column is a COMPLETE bucket; every
|
|
21
|
+
// breakdown and the totals aggregate over the same snapped window, so the tiles and the
|
|
22
|
+
// chart can never describe different spans. See `alignWindowStart`.
|
|
23
|
+
const since = alignWindowStart(until, windowMs, bucketMs);
|
|
24
|
+
const scope = { accountId, workspaceId: workspaceId ?? null };
|
|
25
|
+
const range = { since, until };
|
|
26
|
+
const repo = this.deps.reportsRepository;
|
|
27
|
+
const [byModel, byAgentKind, spendByWorkspace, spendByService, spendByTaskType, activityByWorkspace, activityByService, activityByTaskType, trend,] = await Promise.all([
|
|
28
|
+
repo.spendByDimension(scope, 'model', range),
|
|
29
|
+
repo.spendByDimension(scope, 'agentKind', range),
|
|
30
|
+
repo.spendByDimension(scope, 'workspace', range),
|
|
31
|
+
repo.spendByDimension(scope, 'service', range),
|
|
32
|
+
repo.spendByDimension(scope, 'taskType', range),
|
|
33
|
+
repo.activityByDimension(scope, 'workspace', range),
|
|
34
|
+
repo.activityByDimension(scope, 'service', range),
|
|
35
|
+
repo.activityByDimension(scope, 'taskType', range),
|
|
36
|
+
repo.spendTrend(scope, range, bucketMs),
|
|
37
|
+
]);
|
|
38
|
+
const spendByModel = byModel.map(toSpendRow);
|
|
39
|
+
return {
|
|
40
|
+
window,
|
|
41
|
+
generatedAt: until,
|
|
42
|
+
since,
|
|
43
|
+
workspaceId: workspaceId ?? null,
|
|
44
|
+
currency: this.deps.currency,
|
|
45
|
+
// Every spend breakdown partitions the same ledger rows, so the totals fold from
|
|
46
|
+
// whichever one is at hand rather than costing a sixth query.
|
|
47
|
+
totals: foldTotals(spendByModel),
|
|
48
|
+
spend: {
|
|
49
|
+
byModel: spendByModel,
|
|
50
|
+
byAgentKind: byAgentKind.map(toSpendRow),
|
|
51
|
+
byWorkspace: spendByWorkspace.map(toSpendRow),
|
|
52
|
+
byService: spendByService.map(toSpendRow),
|
|
53
|
+
byTaskType: spendByTaskType.map(toSpendRow),
|
|
54
|
+
},
|
|
55
|
+
activity: {
|
|
56
|
+
byWorkspace: activityByWorkspace.map(toActivityRow),
|
|
57
|
+
byService: activityByService.map(toActivityRow),
|
|
58
|
+
byTaskType: activityByTaskType.map(toActivityRow),
|
|
59
|
+
},
|
|
60
|
+
trend: { bucketMs, points: buildSpendTrend(trend, since, until, bucketMs) },
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=ReportsService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ReportsService.js","sourceRoot":"","sources":["../../../src/modules/reports/ReportsService.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type { ReportActivityRow, ReportSpendRow, ReportTotals, ReportTrendPoint, ReportWindow } from '@cat-factory/contracts';
|
|
2
|
+
import type { ReportActivityGroup, ReportSpendGroup, ReportSpendTrendBucket } from '@cat-factory/kernel';
|
|
3
|
+
/**
|
|
4
|
+
* The window's start, snapped DOWN to a bucket edge.
|
|
5
|
+
*
|
|
6
|
+
* `until - windowMs` lands wherever the request happened to arrive, which leaves the trend's
|
|
7
|
+
* first bucket holding a fraction of a bucket's data while rendering at the same width as
|
|
8
|
+
* its complete neighbours — a reader has no way to tell the short leading column from a
|
|
9
|
+
* genuinely quiet period, which is the one thing a trend must not get wrong. Snapping down
|
|
10
|
+
* makes every bucket complete except the trailing in-progress one, whose partialness is
|
|
11
|
+
* inherent and understood. The cost is that a window covers UP TO one bucket more than its
|
|
12
|
+
* nominal length; the projection reports the real `since` so the view says what it charted.
|
|
13
|
+
*/
|
|
14
|
+
export declare function alignWindowStart(until: number, windowMs: number, bucketMs: number): number;
|
|
15
|
+
/** Per-window sizing: how far back to aggregate and how wide each trend bucket is. */
|
|
16
|
+
export declare const REPORT_WINDOWS: Record<ReportWindow, {
|
|
17
|
+
windowMs: number;
|
|
18
|
+
bucketMs: number;
|
|
19
|
+
}>;
|
|
20
|
+
/** Widen a port spend group into its wire row (the shapes match; this pins the boundary). */
|
|
21
|
+
export declare function toSpendRow(group: ReportSpendGroup): ReportSpendRow;
|
|
22
|
+
/** Widen a port activity group into its wire row. */
|
|
23
|
+
export declare function toActivityRow(group: ReportActivityGroup): ReportActivityRow;
|
|
24
|
+
/**
|
|
25
|
+
* Window-wide totals, summed from ONE breakdown. Every spend breakdown partitions the
|
|
26
|
+
* same ledger rows, so any of them totals identically — folding the model breakdown in JS
|
|
27
|
+
* costs nothing and avoids a sixth aggregate query purely to restate it.
|
|
28
|
+
*/
|
|
29
|
+
export declare function foldTotals(rows: ReportSpendRow[]): ReportTotals;
|
|
30
|
+
/**
|
|
31
|
+
* Fold the sparse trend buckets into a contiguous, zero-filled, oldest-first series
|
|
32
|
+
* spanning `[since, until]` at `bucketMs` resolution — so a quiet period reads as a flat
|
|
33
|
+
* run of zeros rather than a collapsed gap that implies continuous spend.
|
|
34
|
+
*/
|
|
35
|
+
export declare function buildSpendTrend(buckets: ReportSpendTrendBucket[], since: number, until: number, bucketMs: number): ReportTrendPoint[];
|
|
36
|
+
//# sourceMappingURL=reports.logic.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reports.logic.d.ts","sourceRoot":"","sources":["../../../src/modules/reports/reports.logic.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,iBAAiB,EACjB,cAAc,EACd,YAAY,EACZ,gBAAgB,EAChB,YAAY,EACb,MAAM,wBAAwB,CAAA;AAC/B,OAAO,KAAK,EACV,mBAAmB,EACnB,gBAAgB,EAChB,sBAAsB,EACvB,MAAM,qBAAqB,CAAA;AAM5B;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE1F;AAED,sFAAsF;AACtF,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,YAAY,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAKvF,CAAA;AAED,6FAA6F;AAC7F,wBAAgB,UAAU,CAAC,KAAK,EAAE,gBAAgB,GAAG,cAAc,CAUlE;AAED,qDAAqD;AACrD,wBAAgB,aAAa,CAAC,KAAK,EAAE,mBAAmB,GAAG,iBAAiB,CAW3E;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,cAAc,EAAE,GAAG,YAAY,CAgB/D;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,sBAAsB,EAAE,EACjC,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,GACf,gBAAgB,EAAE,CAyBpB"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
// Pure reshaping behind the reports read: the port returns raw grouped rows; these
|
|
2
|
+
// functions fold them into the wire projection. Kept pure (no clock, no I/O) so they're
|
|
3
|
+
// unit-tested directly, mirroring `platform-observability.logic.ts`.
|
|
4
|
+
/**
|
|
5
|
+
* The window's start, snapped DOWN to a bucket edge.
|
|
6
|
+
*
|
|
7
|
+
* `until - windowMs` lands wherever the request happened to arrive, which leaves the trend's
|
|
8
|
+
* first bucket holding a fraction of a bucket's data while rendering at the same width as
|
|
9
|
+
* its complete neighbours — a reader has no way to tell the short leading column from a
|
|
10
|
+
* genuinely quiet period, which is the one thing a trend must not get wrong. Snapping down
|
|
11
|
+
* makes every bucket complete except the trailing in-progress one, whose partialness is
|
|
12
|
+
* inherent and understood. The cost is that a window covers UP TO one bucket more than its
|
|
13
|
+
* nominal length; the projection reports the real `since` so the view says what it charted.
|
|
14
|
+
*/
|
|
15
|
+
export function alignWindowStart(until, windowMs, bucketMs) {
|
|
16
|
+
return Math.floor((until - windowMs) / bucketMs) * bucketMs;
|
|
17
|
+
}
|
|
18
|
+
/** Per-window sizing: how far back to aggregate and how wide each trend bucket is. */
|
|
19
|
+
export const REPORT_WINDOWS = {
|
|
20
|
+
'24h': { windowMs: 24 * 60 * 60_000, bucketMs: 60 * 60_000 }, // 24 × 1h buckets
|
|
21
|
+
'7d': { windowMs: 7 * 24 * 60 * 60_000, bucketMs: 6 * 60 * 60_000 }, // 28 × 6h buckets
|
|
22
|
+
'30d': { windowMs: 30 * 24 * 60 * 60_000, bucketMs: 24 * 60 * 60_000 }, // 30 × 1d buckets
|
|
23
|
+
'90d': { windowMs: 90 * 24 * 60 * 60_000, bucketMs: 3 * 24 * 60 * 60_000 }, // 30 × 3d buckets
|
|
24
|
+
};
|
|
25
|
+
/** Widen a port spend group into its wire row (the shapes match; this pins the boundary). */
|
|
26
|
+
export function toSpendRow(group) {
|
|
27
|
+
return {
|
|
28
|
+
key: group.key,
|
|
29
|
+
label: group.label,
|
|
30
|
+
inputTokens: group.inputTokens,
|
|
31
|
+
outputTokens: group.outputTokens,
|
|
32
|
+
calls: group.calls,
|
|
33
|
+
meteredCost: group.meteredCost,
|
|
34
|
+
subscriptionCost: group.subscriptionCost,
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
/** Widen a port activity group into its wire row. */
|
|
38
|
+
export function toActivityRow(group) {
|
|
39
|
+
return {
|
|
40
|
+
key: group.key,
|
|
41
|
+
label: group.label,
|
|
42
|
+
runs: group.runs,
|
|
43
|
+
done: group.done,
|
|
44
|
+
failed: group.failed,
|
|
45
|
+
running: group.running,
|
|
46
|
+
other: group.other,
|
|
47
|
+
avgDurationMs: group.avgDurationMs,
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Window-wide totals, summed from ONE breakdown. Every spend breakdown partitions the
|
|
52
|
+
* same ledger rows, so any of them totals identically — folding the model breakdown in JS
|
|
53
|
+
* costs nothing and avoids a sixth aggregate query purely to restate it.
|
|
54
|
+
*/
|
|
55
|
+
export function foldTotals(rows) {
|
|
56
|
+
const totals = {
|
|
57
|
+
inputTokens: 0,
|
|
58
|
+
outputTokens: 0,
|
|
59
|
+
calls: 0,
|
|
60
|
+
meteredCost: 0,
|
|
61
|
+
subscriptionCost: 0,
|
|
62
|
+
};
|
|
63
|
+
for (const row of rows) {
|
|
64
|
+
totals.inputTokens += row.inputTokens;
|
|
65
|
+
totals.outputTokens += row.outputTokens;
|
|
66
|
+
totals.calls += row.calls;
|
|
67
|
+
totals.meteredCost += row.meteredCost;
|
|
68
|
+
totals.subscriptionCost += row.subscriptionCost;
|
|
69
|
+
}
|
|
70
|
+
return totals;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Fold the sparse trend buckets into a contiguous, zero-filled, oldest-first series
|
|
74
|
+
* spanning `[since, until]` at `bucketMs` resolution — so a quiet period reads as a flat
|
|
75
|
+
* run of zeros rather than a collapsed gap that implies continuous spend.
|
|
76
|
+
*/
|
|
77
|
+
export function buildSpendTrend(buckets, since, until, bucketMs) {
|
|
78
|
+
const byStart = new Map();
|
|
79
|
+
const empty = (start) => ({
|
|
80
|
+
start,
|
|
81
|
+
meteredCost: 0,
|
|
82
|
+
subscriptionCost: 0,
|
|
83
|
+
calls: 0,
|
|
84
|
+
inputTokens: 0,
|
|
85
|
+
outputTokens: 0,
|
|
86
|
+
});
|
|
87
|
+
const first = Math.floor(since / bucketMs) * bucketMs;
|
|
88
|
+
const last = Math.floor(until / bucketMs) * bucketMs;
|
|
89
|
+
for (let start = first; start <= last; start += bucketMs)
|
|
90
|
+
byStart.set(start, empty(start));
|
|
91
|
+
for (const bucket of buckets) {
|
|
92
|
+
// A bucket outside the zero-filled span (a clock skew, or a row stamped in the
|
|
93
|
+
// future) still belongs in the series — add it rather than silently discarding spend.
|
|
94
|
+
const point = byStart.get(bucket.bucketStart) ?? empty(bucket.bucketStart);
|
|
95
|
+
point.meteredCost += bucket.meteredCost;
|
|
96
|
+
point.subscriptionCost += bucket.subscriptionCost;
|
|
97
|
+
point.calls += bucket.calls;
|
|
98
|
+
point.inputTokens += bucket.inputTokens;
|
|
99
|
+
point.outputTokens += bucket.outputTokens;
|
|
100
|
+
byStart.set(bucket.bucketStart, point);
|
|
101
|
+
}
|
|
102
|
+
return [...byStart.values()].sort((a, b) => a.start - b.start);
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=reports.logic.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reports.logic.js","sourceRoot":"","sources":["../../../src/modules/reports/reports.logic.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cat-factory/orchestration",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.150.1",
|
|
4
4
|
"description": "Delivery-workflow engine for the Agent Architecture Board (execution, bootstrap, pipelines, board, boardScan, requirements, and composition root).",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -25,20 +25,20 @@
|
|
|
25
25
|
},
|
|
26
26
|
"dependencies": {
|
|
27
27
|
"ai": "^7.0.37",
|
|
28
|
-
"@cat-factory/agents": "0.
|
|
29
|
-
"@cat-factory/caching": "0.10.
|
|
30
|
-
"@cat-factory/contracts": "0.
|
|
31
|
-
"@cat-factory/integrations": "0.103.
|
|
32
|
-
"@cat-factory/kernel": "0.
|
|
33
|
-
"@cat-factory/prompt-fragments": "0.
|
|
34
|
-
"@cat-factory/sandbox": "0.9.
|
|
35
|
-
"@cat-factory/spend": "0.12.
|
|
36
|
-
"@cat-factory/workspaces": "0.18.
|
|
28
|
+
"@cat-factory/agents": "0.75.0",
|
|
29
|
+
"@cat-factory/caching": "0.10.55",
|
|
30
|
+
"@cat-factory/contracts": "0.177.0",
|
|
31
|
+
"@cat-factory/integrations": "0.103.2",
|
|
32
|
+
"@cat-factory/kernel": "0.170.0",
|
|
33
|
+
"@cat-factory/prompt-fragments": "0.15.0",
|
|
34
|
+
"@cat-factory/sandbox": "0.9.161",
|
|
35
|
+
"@cat-factory/spend": "0.12.99",
|
|
36
|
+
"@cat-factory/workspaces": "0.18.15"
|
|
37
37
|
},
|
|
38
38
|
"devDependencies": {
|
|
39
39
|
"typescript": "7.0.2",
|
|
40
40
|
"vitest": "^4.1.10",
|
|
41
|
-
"@cat-factory/sandbox-fixtures": "0.7.
|
|
41
|
+
"@cat-factory/sandbox-fixtures": "0.7.208"
|
|
42
42
|
},
|
|
43
43
|
"scripts": {
|
|
44
44
|
"build": "tsc -b tsconfig.build.json",
|