@owox/backend 0.30.0 → 0.30.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/src/data-marts/dto/domain/list-data-marts.command.d.ts +3 -1
- package/dist/src/data-marts/dto/domain/list-data-marts.command.js +3 -1
- package/dist/src/data-marts/facades/mcp-data-marts.facade.d.ts +13 -0
- package/dist/src/data-marts/facades/mcp-data-marts.facade.impl.d.ts +2 -1
- package/dist/src/data-marts/facades/mcp-data-marts.facade.impl.js +31 -7
- package/dist/src/data-marts/services/blended-field-display-name.d.ts +7 -0
- package/dist/src/data-marts/services/blended-field-display-name.js +8 -0
- package/dist/src/data-marts/services/blended-report-data.service.js +2 -1
- package/dist/src/data-marts/services/data-mart.service.d.ts +2 -0
- package/dist/src/data-marts/services/data-mart.service.js +3 -0
- package/dist/src/data-marts/services/report-sql-composer.service.js +2 -1
- package/dist/src/data-marts/use-cases/list-data-marts.service.js +1 -0
- package/dist/src/data-marts/use-cases/query-data-mart.service.js +13 -2
- package/dist/src/ee/mcp/instructions/mcp-system-instructions.d.ts +1 -1
- package/dist/src/ee/mcp/instructions/mcp-system-instructions.js +4 -2
- package/dist/src/ee/mcp/tools/add-destination.tool.d.ts +1 -0
- package/dist/src/ee/mcp/tools/add-destination.tool.js +7 -0
- package/dist/src/ee/mcp/tools/create-report-run-schedule.tool.d.ts +4 -1
- package/dist/src/ee/mcp/tools/create-report-run-schedule.tool.js +9 -2
- package/dist/src/ee/mcp/tools/data-mart-catalog.tool.d.ts +24 -4
- package/dist/src/ee/mcp/tools/data-mart-catalog.tool.js +29 -11
- package/dist/src/ee/mcp/tools/data-mart-details.tool.d.ts +16 -2
- package/dist/src/ee/mcp/tools/data-mart-details.tool.js +25 -4
- package/dist/src/ee/mcp/tools/data-mart-ui-path.d.ts +2 -0
- package/dist/src/ee/mcp/tools/data-mart-ui-path.js +9 -0
- package/dist/src/ee/mcp/tools/delete-report-run-schedule.tool.d.ts +4 -1
- package/dist/src/ee/mcp/tools/delete-report-run-schedule.tool.js +9 -2
- package/dist/src/ee/mcp/tools/get-data-mart-reports.tool.d.ts +9 -1
- package/dist/src/ee/mcp/tools/get-data-mart-reports.tool.js +18 -3
- package/dist/src/ee/mcp/tools/list-destinations.tool.d.ts +6 -1
- package/dist/src/ee/mcp/tools/list-destinations.tool.js +15 -3
- package/dist/src/ee/mcp/tools/list-report-run-schedules.tool.d.ts +16 -1
- package/dist/src/ee/mcp/tools/list-report-run-schedules.tool.js +21 -6
- package/dist/src/ee/mcp/tools/mcp-project-summary.util.d.ts +7 -0
- package/dist/src/ee/mcp/tools/mcp-project-summary.util.js +17 -0
- package/dist/src/ee/mcp/tools/query-data-mart.tool.d.ts +65 -2
- package/dist/src/ee/mcp/tools/query-data-mart.tool.js +72 -8
- package/dist/src/ee/mcp/tools/search-data-marts.tool.d.ts +13 -1
- package/dist/src/ee/mcp/tools/search-data-marts.tool.js +21 -11
- package/dist/src/ee/mcp/tools/summarize-data-catalog.tool.d.ts +13 -1
- package/dist/src/ee/mcp/tools/summarize-data-catalog.tool.js +17 -7
- package/dist/src/ee/mcp/tools/tabular-serializer.d.ts +6 -0
- package/dist/src/ee/mcp/tools/tabular-serializer.js +32 -3
- package/dist/src/ee/mcp/tools/update-report-run-schedule.tool.d.ts +4 -1
- package/dist/src/ee/mcp/tools/update-report-run-schedule.tool.js +9 -2
- package/package.json +4 -4
|
@@ -1,9 +1,37 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ROWS_PAYLOAD_BYTE_CAP = void 0;
|
|
4
|
+
exports.formatTsvColumnLabels = formatTsvColumnLabels;
|
|
4
5
|
exports.serializeTsvWithByteCap = serializeTsvWithByteCap;
|
|
5
6
|
exports.serializeTsv = serializeTsv;
|
|
6
7
|
exports.ROWS_PAYLOAD_BYTE_CAP = 131072;
|
|
8
|
+
function escapeTsvText(value) {
|
|
9
|
+
return value
|
|
10
|
+
.replace(/\\/g, '\\\\')
|
|
11
|
+
.replace(/\t/g, '\\t')
|
|
12
|
+
.replace(/\n/g, '\\n')
|
|
13
|
+
.replace(/\r/g, '\\r');
|
|
14
|
+
}
|
|
15
|
+
function formatTsvColumnLabels(columns) {
|
|
16
|
+
const baseLabels = columns.map(column => column.displayName.trim() || column.name);
|
|
17
|
+
const labelCounts = new Map();
|
|
18
|
+
for (const label of baseLabels) {
|
|
19
|
+
labelCounts.set(label, (labelCounts.get(label) ?? 0) + 1);
|
|
20
|
+
}
|
|
21
|
+
const usedLabels = new Set();
|
|
22
|
+
return baseLabels.map((label, index) => {
|
|
23
|
+
const column = columns[index];
|
|
24
|
+
const candidate = (labelCounts.get(label) ?? 0) > 1 ? `${label} (${column.name})` : label;
|
|
25
|
+
let result = candidate;
|
|
26
|
+
let collisionNumber = 2;
|
|
27
|
+
while (usedLabels.has(result)) {
|
|
28
|
+
result = `${candidate} [${column.name} ${collisionNumber}]`;
|
|
29
|
+
collisionNumber++;
|
|
30
|
+
}
|
|
31
|
+
usedLabels.add(result);
|
|
32
|
+
return result;
|
|
33
|
+
});
|
|
34
|
+
}
|
|
7
35
|
function stringifyObjectCell(v) {
|
|
8
36
|
try {
|
|
9
37
|
return JSON.stringify(v, (_key, val) => (typeof val === 'bigint' ? val.toString() : val));
|
|
@@ -16,10 +44,11 @@ function cell(v) {
|
|
|
16
44
|
if (v === null || v === undefined)
|
|
17
45
|
return '';
|
|
18
46
|
const s = typeof v === 'object' && !(v instanceof Date) ? stringifyObjectCell(v) : String(v);
|
|
19
|
-
return s
|
|
47
|
+
return escapeTsvText(s);
|
|
20
48
|
}
|
|
21
49
|
function serializeTsvWithByteCap(columns, rows, maxBytes) {
|
|
22
|
-
const
|
|
50
|
+
const headerColumns = columns.map(escapeTsvText);
|
|
51
|
+
const header = headerColumns.join('\t');
|
|
23
52
|
let total = Buffer.byteLength(header, 'utf8');
|
|
24
53
|
const lines = [header];
|
|
25
54
|
let count = 0;
|
|
@@ -32,7 +61,7 @@ function serializeTsvWithByteCap(columns, rows, maxBytes) {
|
|
|
32
61
|
lines.push(line);
|
|
33
62
|
count++;
|
|
34
63
|
}
|
|
35
|
-
return { tsv: lines.join('\n'), rowCount: count, capped: count < rows.length };
|
|
64
|
+
return { tsv: lines.join('\n'), headerColumns, rowCount: count, capped: count < rows.length };
|
|
36
65
|
}
|
|
37
66
|
function serializeTsv(columns, rows) {
|
|
38
67
|
return serializeTsvWithByteCap(columns, rows, Number.POSITIVE_INFINITY).tsv;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
import type { McpScope } from '@owox/idp-protocol';
|
|
3
|
+
import { PublicOriginService } from '../../../common/config/public-origin.service';
|
|
3
4
|
import { type McpScheduledTriggersFacade } from '../../../data-marts/facades/mcp-scheduled-triggers.facade';
|
|
4
5
|
import type { McpAuthContext } from '../auth/mcp-auth-context';
|
|
5
6
|
import { type McpToolDefinition, type McpToolResult } from './mcp-tool.definition';
|
|
@@ -22,6 +23,7 @@ declare const inputSchema: z.ZodObject<{
|
|
|
22
23
|
type UpdateReportRunScheduleInput = z.infer<typeof inputSchema>;
|
|
23
24
|
export declare class UpdateReportRunScheduleTool implements McpToolDefinition<UpdateReportRunScheduleInput> {
|
|
24
25
|
private readonly facade;
|
|
26
|
+
private readonly publicOriginService;
|
|
25
27
|
readonly name = "update_report_run_schedule";
|
|
26
28
|
readonly description = "Updates one existing report run schedule identified by trigger_id (get it from list_report_run_schedules). This changes cron_expression, and optionally time_zone and is_active; it does not change the report target and does not create another schedule. To add another schedule for the same report, call create_report_run_schedule instead. time_zone must be a valid IANA timezone (e.g. \"Europe/Kyiv\"); if omitted, the schedule keeps its current timezone. If is_active is omitted, the schedule keeps its current active state.";
|
|
27
29
|
readonly zodSchema: {
|
|
@@ -33,6 +35,7 @@ export declare class UpdateReportRunScheduleTool implements McpToolDefinition<Up
|
|
|
33
35
|
readonly outputSchema: {
|
|
34
36
|
trigger_id: z.ZodString;
|
|
35
37
|
report_id: z.ZodString;
|
|
38
|
+
schedules_url: z.ZodString;
|
|
36
39
|
cron_expression: z.ZodString;
|
|
37
40
|
time_zone: z.ZodString;
|
|
38
41
|
is_active: z.ZodBoolean;
|
|
@@ -45,7 +48,7 @@ export declare class UpdateReportRunScheduleTool implements McpToolDefinition<Up
|
|
|
45
48
|
openWorldHint: boolean;
|
|
46
49
|
};
|
|
47
50
|
readonly requiredScopes: McpScope[];
|
|
48
|
-
constructor(facade: McpScheduledTriggersFacade);
|
|
51
|
+
constructor(facade: McpScheduledTriggersFacade, publicOriginService: PublicOriginService);
|
|
49
52
|
parseInput(input: unknown): UpdateReportRunScheduleInput;
|
|
50
53
|
handler(input: UpdateReportRunScheduleInput, context: McpAuthContext): Promise<McpToolResult>;
|
|
51
54
|
}
|
|
@@ -15,8 +15,11 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
15
15
|
exports.UpdateReportRunScheduleTool = void 0;
|
|
16
16
|
const common_1 = require("@nestjs/common");
|
|
17
17
|
const zod_1 = require("zod");
|
|
18
|
+
const public_origin_service_1 = require("../../../common/config/public-origin.service");
|
|
18
19
|
const mcp_scheduled_triggers_facade_1 = require("../../../data-marts/facades/mcp-scheduled-triggers.facade");
|
|
19
20
|
const mcp_tool_definition_1 = require("./mcp-tool.definition");
|
|
21
|
+
const data_mart_ui_path_1 = require("./data-mart-ui-path");
|
|
22
|
+
const mcp_public_url_util_1 = require("./mcp-public-url.util");
|
|
20
23
|
const inputSchema = zod_1.z
|
|
21
24
|
.object({
|
|
22
25
|
trigger_id: zod_1.z.string().trim().min(1),
|
|
@@ -27,12 +30,14 @@ const inputSchema = zod_1.z
|
|
|
27
30
|
.strict();
|
|
28
31
|
let UpdateReportRunScheduleTool = class UpdateReportRunScheduleTool {
|
|
29
32
|
facade;
|
|
33
|
+
publicOriginService;
|
|
30
34
|
name = 'update_report_run_schedule';
|
|
31
35
|
description = 'Updates one existing report run schedule identified by trigger_id (get it from list_report_run_schedules). This changes cron_expression, and optionally time_zone and is_active; it does not change the report target and does not create another schedule. To add another schedule for the same report, call create_report_run_schedule instead. time_zone must be a valid IANA timezone (e.g. "Europe/Kyiv"); if omitted, the schedule keeps its current timezone. If is_active is omitted, the schedule keeps its current active state.';
|
|
32
36
|
zodSchema = inputSchema.shape;
|
|
33
37
|
outputSchema = {
|
|
34
38
|
trigger_id: zod_1.z.string(),
|
|
35
39
|
report_id: zod_1.z.string(),
|
|
40
|
+
schedules_url: zod_1.z.string().describe('Open report schedules in OWOX.'),
|
|
36
41
|
cron_expression: zod_1.z.string(),
|
|
37
42
|
time_zone: zod_1.z.string(),
|
|
38
43
|
is_active: zod_1.z.boolean(),
|
|
@@ -45,8 +50,9 @@ let UpdateReportRunScheduleTool = class UpdateReportRunScheduleTool {
|
|
|
45
50
|
openWorldHint: false,
|
|
46
51
|
};
|
|
47
52
|
requiredScopes = ['mcp:read', 'mcp:write'];
|
|
48
|
-
constructor(facade) {
|
|
53
|
+
constructor(facade, publicOriginService) {
|
|
49
54
|
this.facade = facade;
|
|
55
|
+
this.publicOriginService = publicOriginService;
|
|
50
56
|
}
|
|
51
57
|
parseInput(input) {
|
|
52
58
|
return inputSchema.parse(input);
|
|
@@ -63,6 +69,7 @@ let UpdateReportRunScheduleTool = class UpdateReportRunScheduleTool {
|
|
|
63
69
|
return (0, mcp_tool_definition_1.jsonToolResult)({
|
|
64
70
|
trigger_id: result.triggerId,
|
|
65
71
|
report_id: result.reportId,
|
|
72
|
+
schedules_url: (0, mcp_public_url_util_1.joinPublicOrigin)(this.publicOriginService.getPublicOrigin(), (0, data_mart_ui_path_1.buildReportSchedulesUiPath)(context.projectId)),
|
|
66
73
|
cron_expression: result.cronExpression,
|
|
67
74
|
time_zone: result.timeZone,
|
|
68
75
|
is_active: result.isActive,
|
|
@@ -74,6 +81,6 @@ exports.UpdateReportRunScheduleTool = UpdateReportRunScheduleTool;
|
|
|
74
81
|
exports.UpdateReportRunScheduleTool = UpdateReportRunScheduleTool = __decorate([
|
|
75
82
|
(0, common_1.Injectable)(),
|
|
76
83
|
__param(0, (0, common_1.Inject)(mcp_scheduled_triggers_facade_1.MCP_SCHEDULED_TRIGGERS_FACADE)),
|
|
77
|
-
__metadata("design:paramtypes", [Object])
|
|
84
|
+
__metadata("design:paramtypes", [Object, public_origin_service_1.PublicOriginService])
|
|
78
85
|
], UpdateReportRunScheduleTool);
|
|
79
86
|
//# sourceMappingURL=update-report-run-schedule.tool.js.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@owox/backend",
|
|
3
|
-
"version": "0.30.
|
|
3
|
+
"version": "0.30.1",
|
|
4
4
|
"description": "OWOX Data Marts Backend - Full-stack data orchestration platform",
|
|
5
5
|
"author": "OWOX",
|
|
6
6
|
"license": "ELv2",
|
|
@@ -86,9 +86,9 @@
|
|
|
86
86
|
"@opentelemetry/exporter-trace-otlp-http": "^0.220.0",
|
|
87
87
|
"@opentelemetry/sdk-trace-base": "^2.9.0",
|
|
88
88
|
"@opentelemetry/sdk-trace-node": "^2.9.0",
|
|
89
|
-
"@owox/connectors": "0.30.
|
|
90
|
-
"@owox/idp-protocol": "0.30.
|
|
91
|
-
"@owox/internal-helpers": "0.30.
|
|
89
|
+
"@owox/connectors": "0.30.1",
|
|
90
|
+
"@owox/idp-protocol": "0.30.1",
|
|
91
|
+
"@owox/internal-helpers": "0.30.1",
|
|
92
92
|
"better-sqlite3": "^12.2.0",
|
|
93
93
|
"class-transformer": "^0.5.1",
|
|
94
94
|
"class-validator": "^0.14.2",
|