@antelopejs/dms-ai 0.4.1 → 0.6.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/README.md +1 -1
- package/dist/constants/database.d.ts +7 -0
- package/dist/constants/database.js +11 -0
- package/dist/constants/database.js.map +1 -0
- package/dist/constants/pages.d.ts +5 -0
- package/dist/constants/pages.js +6 -1
- package/dist/constants/pages.js.map +1 -1
- package/dist/database/catalog.d.ts +4 -0
- package/dist/database/catalog.js +25 -0
- package/dist/database/catalog.js.map +1 -0
- package/dist/frontend-module.d.ts +2 -0
- package/dist/frontend-module.js +18 -0
- package/dist/frontend-module.js.map +1 -0
- package/dist/index.js +2 -12
- package/dist/index.js.map +1 -1
- package/dist/logging/log-buffer.js +1 -1
- package/dist/logging/log-buffer.js.map +1 -1
- package/dist/pages/activity/page.d.ts +1 -0
- package/dist/pages/activity/page.js +13 -0
- package/dist/pages/activity/page.js.map +1 -1
- package/dist/pages/meta.d.ts +2 -0
- package/dist/pages/meta.js +3 -1
- package/dist/pages/meta.js.map +1 -1
- package/dist/pages/overview/insights.js +0 -2
- package/dist/pages/overview/insights.js.map +1 -1
- package/dist/pages/overview/page.d.ts +1 -1
- package/dist/pages/overview/page.js +12 -11
- package/dist/pages/overview/page.js.map +1 -1
- package/dist/pages/settings/page.d.ts +1 -0
- package/dist/pages/settings/page.js +1 -0
- package/dist/pages/settings/page.js.map +1 -1
- package/dist/pages/skills/page.js +7 -0
- package/dist/pages/skills/page.js.map +1 -1
- package/dist/routes/activity.js +5 -2
- package/dist/routes/activity.js.map +1 -1
- package/dist/routes/builder.js +8 -0
- package/dist/routes/builder.js.map +1 -1
- package/dist/routes/codex-account.d.ts +8 -0
- package/dist/routes/codex-account.js +162 -0
- package/dist/routes/codex-account.js.map +1 -0
- package/dist/routes/database.d.ts +21 -0
- package/dist/routes/database.js +115 -0
- package/dist/routes/database.js.map +1 -0
- package/dist/routes/index.d.ts +2 -0
- package/dist/routes/index.js +2 -0
- package/dist/routes/index.js.map +1 -1
- package/dist/routes/list-query.d.ts +1 -0
- package/dist/routes/list-query.js +9 -0
- package/dist/routes/list-query.js.map +1 -1
- package/dist/routes/metric-shapes.js +7 -4
- package/dist/routes/metric-shapes.js.map +1 -1
- package/dist/routes/metrics.d.ts +2 -2
- package/dist/routes/metrics.js +10 -6
- package/dist/routes/metrics.js.map +1 -1
- package/dist/types/metrics.d.ts +2 -0
- package/frontend-vue/app/chat/components/ConversationDrawer.vue +2 -1
- package/frontend-vue/app/chat/components/PanelHeader.vue +3 -1
- package/frontend-vue/app/chat/utils/markdown.ts +36 -20
- package/frontend-vue/app/chat/utils/tool-lexicon.ts +46 -0
- package/frontend-vue/app/components/ActivityDetail.vue +2 -5
- package/frontend-vue/app/components/ChatPanel.vue +3 -1
- package/frontend-vue/app/components/SkillDetail.vue +72 -26
- package/frontend-vue/app/views/RowStepper.vue +1 -1
- package/frontend-vue/app/views/types.ts +0 -10
- package/frontend-vue/i18n/locales/dms-ai-pages-en-GB.json +46 -4
- package/frontend-vue/i18n/locales/dms-ai-pages-fr-FR.json +46 -4
- package/frontend-vue/i18n/locales/dms-ai-panel-en-GB.json +8 -0
- package/frontend-vue/i18n/locales/dms-ai-panel-fr-FR.json +8 -0
- package/frontend-vue/i18n/locales/dms-ai-views-en-GB.json +1 -0
- package/frontend-vue/i18n/locales/dms-ai-views-fr-FR.json +1 -0
- package/frontend-vue/package.json +1 -1
- package/frontend-vue/tests/chat/markdown.test.ts +69 -0
- package/frontend-vue/tests/i18n-views.test.ts +63 -0
- package/frontend-vue/tests/panel-header-height.test.ts +40 -0
- package/frontend-vue/tests/panel-states.test.ts +1 -1
- package/package.json +7 -5
- package/sidecar/dist/agent/permission-preview.js +49 -2
- package/sidecar/dist/agent/permission-preview.js.map +1 -1
- package/sidecar/dist/agent/tool-kinds.d.ts +1 -0
- package/sidecar/dist/agent/tool-kinds.js +2 -1
- package/sidecar/dist/agent/tool-kinds.js.map +1 -1
- package/sidecar/dist/constants/builder.d.ts +7 -1
- package/sidecar/dist/constants/builder.js +10 -0
- package/sidecar/dist/constants/builder.js.map +1 -1
- package/sidecar/dist/constants/chatgpt.d.ts +39 -0
- package/sidecar/dist/constants/chatgpt.js +55 -0
- package/sidecar/dist/constants/chatgpt.js.map +1 -0
- package/sidecar/dist/constants/codex.d.ts +4 -5
- package/sidecar/dist/constants/codex.js +4 -5
- package/sidecar/dist/constants/codex.js.map +1 -1
- package/sidecar/dist/constants/database.d.ts +11 -0
- package/sidecar/dist/constants/database.js +17 -0
- package/sidecar/dist/constants/database.js.map +1 -0
- package/sidecar/dist/constants/http.d.ts +3 -0
- package/sidecar/dist/constants/http.js +3 -0
- package/sidecar/dist/constants/http.js.map +1 -1
- package/sidecar/dist/constants/mcp.js +2 -0
- package/sidecar/dist/constants/mcp.js.map +1 -1
- package/sidecar/dist/constants/providers.d.ts +1 -1
- package/sidecar/dist/constants/providers.js +1 -1
- package/sidecar/dist/constants/providers.js.map +1 -1
- package/sidecar/dist/constants/tool-kinds.d.ts +1 -0
- package/sidecar/dist/constants/tool-kinds.js +7 -0
- package/sidecar/dist/constants/tool-kinds.js.map +1 -1
- package/sidecar/dist/database/database-client.d.ts +11 -0
- package/sidecar/dist/database/database-client.js +50 -0
- package/sidecar/dist/database/database-client.js.map +1 -0
- package/sidecar/dist/index.js +6 -0
- package/sidecar/dist/index.js.map +1 -1
- package/sidecar/dist/mcp/tool-definitions.js +2 -0
- package/sidecar/dist/mcp/tool-definitions.js.map +1 -1
- package/sidecar/dist/mcp/tools/builder-gate.js +3 -1
- package/sidecar/dist/mcp/tools/builder-gate.js.map +1 -1
- package/sidecar/dist/mcp/tools/builder-project.d.ts +8 -0
- package/sidecar/dist/mcp/tools/builder-project.js +181 -0
- package/sidecar/dist/mcp/tools/builder-project.js.map +1 -0
- package/sidecar/dist/mcp/tools/builder.d.ts +5 -2
- package/sidecar/dist/mcp/tools/builder.js +5 -11
- package/sidecar/dist/mcp/tools/builder.js.map +1 -1
- package/sidecar/dist/mcp/tools/database.d.ts +6 -0
- package/sidecar/dist/mcp/tools/database.js +42 -0
- package/sidecar/dist/mcp/tools/database.js.map +1 -0
- package/sidecar/dist/mcp/types.d.ts +2 -0
- package/sidecar/dist/metrics/aggregate.js +29 -7
- package/sidecar/dist/metrics/aggregate.js.map +1 -1
- package/sidecar/dist/metrics/types.d.ts +2 -0
- package/sidecar/dist/providers/claude/safe-mode.js +11 -1
- package/sidecar/dist/providers/claude/safe-mode.js.map +1 -1
- package/sidecar/dist/providers/codex/chatgpt/credentials.d.ts +10 -0
- package/sidecar/dist/providers/codex/chatgpt/credentials.js +63 -0
- package/sidecar/dist/providers/codex/chatgpt/credentials.js.map +1 -0
- package/sidecar/dist/providers/codex/chatgpt/http.d.ts +3 -0
- package/sidecar/dist/providers/codex/chatgpt/http.js +66 -0
- package/sidecar/dist/providers/codex/chatgpt/http.js.map +1 -0
- package/sidecar/dist/providers/codex/chatgpt/lock.d.ts +1 -0
- package/sidecar/dist/providers/codex/chatgpt/lock.js +58 -0
- package/sidecar/dist/providers/codex/chatgpt/lock.js.map +1 -0
- package/sidecar/dist/providers/codex/chatgpt/login.d.ts +8 -0
- package/sidecar/dist/providers/codex/chatgpt/login.js +138 -0
- package/sidecar/dist/providers/codex/chatgpt/login.js.map +1 -0
- package/sidecar/dist/providers/codex/chatgpt/oauth.d.ts +38 -0
- package/sidecar/dist/providers/codex/chatgpt/oauth.js +167 -0
- package/sidecar/dist/providers/codex/chatgpt/oauth.js.map +1 -0
- package/sidecar/dist/providers/codex/chatgpt/store.d.ts +21 -0
- package/sidecar/dist/providers/codex/chatgpt/store.js +75 -0
- package/sidecar/dist/providers/codex/chatgpt/store.js.map +1 -0
- package/sidecar/dist/providers/codex/config.d.ts +1 -5
- package/sidecar/dist/providers/codex/config.js +27 -4
- package/sidecar/dist/providers/codex/config.js.map +1 -1
- package/sidecar/dist/providers/codex/module.js +11 -4
- package/sidecar/dist/providers/codex/module.js.map +1 -1
- package/sidecar/dist/providers/codex/process.d.ts +1 -1
- package/sidecar/dist/providers/codex/process.js +7 -3
- package/sidecar/dist/providers/codex/process.js.map +1 -1
- package/sidecar/dist/providers/codex/provider.d.ts +0 -1
- package/sidecar/dist/providers/codex/provider.js +7 -5
- package/sidecar/dist/providers/codex/provider.js.map +1 -1
- package/sidecar/dist/server/http.js +38 -0
- package/sidecar/dist/server/http.js.map +1 -1
- package/sidecar/dist/server/permission-events.js +3 -1
- package/sidecar/dist/server/permission-events.js.map +1 -1
- package/sidecar/dist/server/raw-data.js +1 -1
- package/sidecar/dist/server/raw-data.js.map +1 -1
- package/sidecar/dist/server/safety-net.js +1 -1
- package/sidecar/dist/server/safety-net.js.map +1 -1
- package/skills/dms-ai/SKILL.md +2 -1
- package/skills/dms-external-database/REFERENCE.md +132 -0
- package/skills/dms-external-database/SKILL.md +142 -0
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
12
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.AICodexAccountController = void 0;
|
|
16
|
+
const interface_api_1 = require("@antelopejs/interface-api");
|
|
17
|
+
const auth_1 = require("@antelopejs/interface-dms/auth");
|
|
18
|
+
const confirm_dialog_1 = require("@antelopejs/interface-dms/base/confirm-dialog");
|
|
19
|
+
const data_types_1 = require("@antelopejs/interface-dms/base/data-types");
|
|
20
|
+
const i18n_1 = require("../constants/i18n");
|
|
21
|
+
const module_1 = require("../constants/module");
|
|
22
|
+
const pages_1 = require("../constants/pages");
|
|
23
|
+
const sidecar_1 = require("../sidecar");
|
|
24
|
+
const vocabulary_1 = require("../vocabulary");
|
|
25
|
+
const banner_1 = require("./banner");
|
|
26
|
+
const sidecar_results_1 = require("./sidecar-results");
|
|
27
|
+
const ACCOUNT_PATH = "/codex/account";
|
|
28
|
+
const LOGOUT_PATH = "/codex/logout";
|
|
29
|
+
const CALLBACK_PATH = "/codex/callback";
|
|
30
|
+
const PASTED_URL_FIELD = "url";
|
|
31
|
+
const NO_STORE = { "Cache-Control": "no-store" };
|
|
32
|
+
function text(...segments) {
|
|
33
|
+
return (0, vocabulary_1.i18nKey)(i18n_1.I18N_SECTIONS.SETTINGS, "chatgpt", ...segments);
|
|
34
|
+
}
|
|
35
|
+
const SIGN_OUT_ACTION = {
|
|
36
|
+
label: text("signed_in", "action"),
|
|
37
|
+
icon: "i-ph-sign-out",
|
|
38
|
+
color: "neutral",
|
|
39
|
+
confirm: {
|
|
40
|
+
title: text("sign_out_confirm", "title"),
|
|
41
|
+
description: text("sign_out_confirm", "description"),
|
|
42
|
+
confirmLabel: text("signed_in", "action"),
|
|
43
|
+
color: "error",
|
|
44
|
+
},
|
|
45
|
+
target: {
|
|
46
|
+
type: "api",
|
|
47
|
+
url: pages_1.PAGE_ROUTES.CODEX_LOGOUT,
|
|
48
|
+
method: "POST",
|
|
49
|
+
successMessage: text("signed_out_toast"),
|
|
50
|
+
},
|
|
51
|
+
};
|
|
52
|
+
function signedInBanner(account) {
|
|
53
|
+
return {
|
|
54
|
+
tone: "success",
|
|
55
|
+
size: "sm",
|
|
56
|
+
icon: "i-ph-open-ai-logo",
|
|
57
|
+
title: {
|
|
58
|
+
key: text("signed_in", "title"),
|
|
59
|
+
params: { email: account.email ?? "" },
|
|
60
|
+
},
|
|
61
|
+
description: text("signed_in", "description"),
|
|
62
|
+
actions: [SIGN_OUT_ACTION],
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
const PASTE_ACTION = {
|
|
66
|
+
label: text("paste", "action"),
|
|
67
|
+
icon: "i-ph-clipboard-text",
|
|
68
|
+
color: "neutral",
|
|
69
|
+
confirm: (0, confirm_dialog_1.serializeConfirmDialog)({
|
|
70
|
+
title: text("paste", "title"),
|
|
71
|
+
description: text("paste", "description"),
|
|
72
|
+
icon: "i-ph-clipboard-text",
|
|
73
|
+
confirmLabel: text("paste", "confirm"),
|
|
74
|
+
fields: [
|
|
75
|
+
{
|
|
76
|
+
id: PASTED_URL_FIELD,
|
|
77
|
+
label: text("paste", "field"),
|
|
78
|
+
type: new data_types_1.DefaultDataTypes.StringType({
|
|
79
|
+
placeholder: "http://127.0.0.1:…/auth/chatgpt/callback?code=…",
|
|
80
|
+
}),
|
|
81
|
+
required: true,
|
|
82
|
+
},
|
|
83
|
+
],
|
|
84
|
+
}),
|
|
85
|
+
target: {
|
|
86
|
+
type: "api",
|
|
87
|
+
url: pages_1.PAGE_ROUTES.CODEX_CALLBACK,
|
|
88
|
+
method: "POST",
|
|
89
|
+
successMessage: text("paste", "success"),
|
|
90
|
+
},
|
|
91
|
+
};
|
|
92
|
+
function signedOutBanner(loginUrl) {
|
|
93
|
+
return {
|
|
94
|
+
tone: "info",
|
|
95
|
+
size: "sm",
|
|
96
|
+
icon: "i-ph-open-ai-logo",
|
|
97
|
+
title: text("signed_out", "title"),
|
|
98
|
+
description: text("signed_out", "description"),
|
|
99
|
+
actions: [
|
|
100
|
+
{
|
|
101
|
+
label: text("signed_out", "action"),
|
|
102
|
+
icon: "i-ph-sign-in",
|
|
103
|
+
target: { type: "external", url: loginUrl, newTab: true },
|
|
104
|
+
},
|
|
105
|
+
PASTE_ACTION,
|
|
106
|
+
],
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
function accountBanner(account) {
|
|
110
|
+
if (account.isSignedIn)
|
|
111
|
+
return signedInBanner(account);
|
|
112
|
+
return account.loginUrl === undefined
|
|
113
|
+
? null
|
|
114
|
+
: signedOutBanner(account.loginUrl);
|
|
115
|
+
}
|
|
116
|
+
let AICodexAccountController = class AICodexAccountController extends (0, interface_api_1.Controller)(module_1.ROUTE_PREFIX) {
|
|
117
|
+
async banner() {
|
|
118
|
+
try {
|
|
119
|
+
const response = await (0, sidecar_1.requestSidecar)(ACCOUNT_PATH);
|
|
120
|
+
const content = response.isOk
|
|
121
|
+
? accountBanner(response.body)
|
|
122
|
+
: null;
|
|
123
|
+
return interface_api_1.HTTPResult.withHeaders((0, banner_1.bannerAnswer)(content), NO_STORE);
|
|
124
|
+
}
|
|
125
|
+
catch {
|
|
126
|
+
return interface_api_1.HTTPResult.withHeaders((0, banner_1.bannerAnswer)(null), NO_STORE);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
finishSignIn(body) {
|
|
130
|
+
return (0, sidecar_results_1.relay)(CALLBACK_PATH, (answer) => answer, {
|
|
131
|
+
method: "POST",
|
|
132
|
+
body: { url: body?.[PASTED_URL_FIELD] },
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
logout() {
|
|
136
|
+
return (0, sidecar_results_1.relay)(LOGOUT_PATH, (body) => body, { method: "POST" });
|
|
137
|
+
}
|
|
138
|
+
};
|
|
139
|
+
exports.AICodexAccountController = AICodexAccountController;
|
|
140
|
+
__decorate([
|
|
141
|
+
(0, interface_api_1.Get)(`${ACCOUNT_PATH}/banner`),
|
|
142
|
+
__metadata("design:type", Function),
|
|
143
|
+
__metadata("design:paramtypes", []),
|
|
144
|
+
__metadata("design:returntype", Promise)
|
|
145
|
+
], AICodexAccountController.prototype, "banner", null);
|
|
146
|
+
__decorate([
|
|
147
|
+
(0, interface_api_1.Post)(CALLBACK_PATH),
|
|
148
|
+
__param(0, (0, interface_api_1.JSONBody)()),
|
|
149
|
+
__metadata("design:type", Function),
|
|
150
|
+
__metadata("design:paramtypes", [Object]),
|
|
151
|
+
__metadata("design:returntype", Promise)
|
|
152
|
+
], AICodexAccountController.prototype, "finishSignIn", null);
|
|
153
|
+
__decorate([
|
|
154
|
+
(0, interface_api_1.Post)(LOGOUT_PATH),
|
|
155
|
+
__metadata("design:type", Function),
|
|
156
|
+
__metadata("design:paramtypes", []),
|
|
157
|
+
__metadata("design:returntype", Promise)
|
|
158
|
+
], AICodexAccountController.prototype, "logout", null);
|
|
159
|
+
exports.AICodexAccountController = AICodexAccountController = __decorate([
|
|
160
|
+
(0, auth_1.AuthOwnerOnly)()
|
|
161
|
+
], AICodexAccountController);
|
|
162
|
+
//# sourceMappingURL=codex-account.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codex-account.js","sourceRoot":"","sources":["../../src/routes/codex-account.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,6DAMmC;AAKnC,yDAA+D;AAC/D,kFAAuF;AACvF,0EAA6E;AAC7E,4CAAkD;AAClD,gDAAmD;AACnD,8CAAiD;AACjD,wCAA4C;AAC5C,8CAAwC;AACxC,qCAAwC;AACxC,uDAA0C;AAE1C,MAAM,YAAY,GAAG,gBAAgB,CAAC;AACtC,MAAM,WAAW,GAAG,eAAe,CAAC;AACpC,MAAM,aAAa,GAAG,iBAAiB,CAAC;AAExC,MAAM,gBAAgB,GAAG,KAAK,CAAC;AAC/B,MAAM,QAAQ,GAAG,EAAE,eAAe,EAAE,UAAU,EAAE,CAAC;AAUjD,SAAS,IAAI,CAAC,GAAG,QAAkB;IACjC,OAAO,IAAA,oBAAO,EAAC,oBAAa,CAAC,QAAQ,EAAE,SAAS,EAAE,GAAG,QAAQ,CAAC,CAAC;AACjE,CAAC;AAED,MAAM,eAAe,GAAuB;IAC1C,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC;IAClC,IAAI,EAAE,eAAe;IACrB,KAAK,EAAE,SAAS;IAChB,OAAO,EAAE;QACP,KAAK,EAAE,IAAI,CAAC,kBAAkB,EAAE,OAAO,CAAC;QACxC,WAAW,EAAE,IAAI,CAAC,kBAAkB,EAAE,aAAa,CAAC;QACpD,YAAY,EAAE,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC;QACzC,KAAK,EAAE,OAAO;KACf;IACD,MAAM,EAAE;QACN,IAAI,EAAE,KAAK;QACX,GAAG,EAAE,mBAAW,CAAC,YAAY;QAC7B,MAAM,EAAE,MAAM;QACd,cAAc,EAAE,IAAI,CAAC,kBAAkB,CAAC;KACzC;CACF,CAAC;AAEF,SAAS,cAAc,CAAC,OAAqB;IAC3C,OAAO;QACL,IAAI,EAAE,SAAS;QACf,IAAI,EAAE,IAAI;QACV,IAAI,EAAE,mBAAmB;QACzB,KAAK,EAAE;YACL,GAAG,EAAE,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC;YAC/B,MAAM,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,EAAE,EAAE;SACvC;QACD,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC;QAC7C,OAAO,EAAE,CAAC,eAAe,CAAC;KAC3B,CAAC;AACJ,CAAC;AAKD,MAAM,YAAY,GAAuB;IACvC,KAAK,EAAE,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC;IAC9B,IAAI,EAAE,qBAAqB;IAC3B,KAAK,EAAE,SAAS;IAChB,OAAO,EAAE,IAAA,uCAAsB,EAAC;QAC9B,KAAK,EAAE,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC;QAC7B,WAAW,EAAE,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC;QACzC,IAAI,EAAE,qBAAqB;QAC3B,YAAY,EAAE,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC;QACtC,MAAM,EAAE;YACN;gBACE,EAAE,EAAE,gBAAgB;gBACpB,KAAK,EAAE,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC;gBAC7B,IAAI,EAAE,IAAI,6BAAgB,CAAC,UAAU,CAAC;oBACpC,WAAW,EAAE,iDAAiD;iBAC/D,CAAC;gBACF,QAAQ,EAAE,IAAI;aACf;SACF;KACF,CAAC;IACF,MAAM,EAAE;QACN,IAAI,EAAE,KAAK;QACX,GAAG,EAAE,mBAAW,CAAC,cAAc;QAC/B,MAAM,EAAE,MAAM;QACd,cAAc,EAAE,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC;KACzC;CACF,CAAC;AAEF,SAAS,eAAe,CAAC,QAAgB;IACvC,OAAO;QACL,IAAI,EAAE,MAAM;QACZ,IAAI,EAAE,IAAI;QACV,IAAI,EAAE,mBAAmB;QACzB,KAAK,EAAE,IAAI,CAAC,YAAY,EAAE,OAAO,CAAC;QAClC,WAAW,EAAE,IAAI,CAAC,YAAY,EAAE,aAAa,CAAC;QAC9C,OAAO,EAAE;YACP;gBACE,KAAK,EAAE,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC;gBACnC,IAAI,EAAE,cAAc;gBACpB,MAAM,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE;aAC1D;YACD,YAAY;SACb;KACF,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,OAAqB;IAC1C,IAAI,OAAO,CAAC,UAAU;QAAE,OAAO,cAAc,CAAC,OAAO,CAAC,CAAC;IACvD,OAAO,OAAO,CAAC,QAAQ,KAAK,SAAS;QACnC,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,eAAe,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;AACxC,CAAC;AAQM,IAAM,wBAAwB,GAA9B,MAAM,wBAAyB,SAAQ,IAAA,0BAAU,EAAC,qBAAY,CAAC;IAE9D,AAAN,KAAK,CAAC,MAAM;QACV,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,IAAA,wBAAc,EAAC,YAAY,CAAC,CAAC;YACpD,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI;gBAC3B,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAoB,CAAC;gBAC9C,CAAC,CAAC,IAAI,CAAC;YACT,OAAO,0BAAU,CAAC,WAAW,CAAC,IAAA,qBAAY,EAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,CAAC;QACjE,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,0BAAU,CAAC,WAAW,CAAC,IAAA,qBAAY,EAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,CAAC;QAC9D,CAAC;IACH,CAAC;IAGD,YAAY,CAAa,IAA8B;QACrD,OAAO,IAAA,uBAAK,EAAC,aAAa,EAAE,CAAC,MAAe,EAAE,EAAE,CAAC,MAAM,EAAE;YACvD,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,gBAAgB,CAAC,EAAE;SACxC,CAAC,CAAC;IACL,CAAC;IAGD,MAAM;QACJ,OAAO,IAAA,uBAAK,EAAC,WAAW,EAAE,CAAC,IAAa,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACzE,CAAC;CACF,CAAA;AA1BY,4DAAwB;AAE7B;IADL,IAAA,mBAAG,EAAC,GAAG,YAAY,SAAS,CAAC;;;;sDAW7B;AAGD;IADC,IAAA,oBAAI,EAAC,aAAa,CAAC;IACN,WAAA,IAAA,wBAAQ,GAAE,CAAA;;;;4DAKvB;AAGD;IADC,IAAA,oBAAI,EAAC,WAAW,CAAC;;;;sDAGjB;mCAzBU,wBAAwB;IADpC,IAAA,oBAAa,GAAE;GACH,wBAAwB,CA0BpC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { ProfileRequest, ReferenceCheck } from "@antelopejs/interface-database-catalog";
|
|
2
|
+
interface ConnectionBody {
|
|
3
|
+
connection?: string;
|
|
4
|
+
}
|
|
5
|
+
interface RelationsBody extends ConnectionBody {
|
|
6
|
+
schemas?: string[];
|
|
7
|
+
}
|
|
8
|
+
interface DescribeBody extends ConnectionBody {
|
|
9
|
+
relations?: string[];
|
|
10
|
+
}
|
|
11
|
+
interface ProfileBody extends ConnectionBody, Partial<ProfileRequest> {
|
|
12
|
+
references?: ReferenceCheck[];
|
|
13
|
+
}
|
|
14
|
+
declare const AIDatabaseController_base: import("@antelopejs/interface-api").ControllerClass<object>;
|
|
15
|
+
export declare class AIDatabaseController extends AIDatabaseController_base {
|
|
16
|
+
connections(token?: string): Promise<unknown>;
|
|
17
|
+
relations(token?: string, body?: RelationsBody): Promise<unknown>;
|
|
18
|
+
describe(token?: string, body?: DescribeBody): Promise<unknown>;
|
|
19
|
+
profile(token?: string, body?: ProfileBody): Promise<unknown>;
|
|
20
|
+
}
|
|
21
|
+
export {};
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
12
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.AIDatabaseController = void 0;
|
|
16
|
+
const interface_api_1 = require("@antelopejs/interface-api");
|
|
17
|
+
const database_1 = require("../constants/database");
|
|
18
|
+
const module_1 = require("../constants/module");
|
|
19
|
+
const sidecar_1 = require("../constants/sidecar");
|
|
20
|
+
const catalog_1 = require("../database/catalog");
|
|
21
|
+
const sidecar_auth_1 = require("./sidecar-auth");
|
|
22
|
+
function unknownConnection(connection) {
|
|
23
|
+
return new interface_api_1.HTTPResult(database_1.HTTP_NOT_FOUND, {
|
|
24
|
+
error: "unknown_connection",
|
|
25
|
+
connection,
|
|
26
|
+
known: (0, catalog_1.listConnections)(),
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
async function onCatalog(token, connection, work) {
|
|
30
|
+
if (!(0, sidecar_auth_1.isSidecarRequest)(token)) {
|
|
31
|
+
return (0, sidecar_auth_1.sidecarForbidden)();
|
|
32
|
+
}
|
|
33
|
+
const catalog = connection ? (0, catalog_1.catalogOf)(connection) : undefined;
|
|
34
|
+
if (!catalog) {
|
|
35
|
+
return unknownConnection(connection);
|
|
36
|
+
}
|
|
37
|
+
try {
|
|
38
|
+
return await work(catalog);
|
|
39
|
+
}
|
|
40
|
+
catch (err) {
|
|
41
|
+
return new interface_api_1.HTTPResult(database_1.HTTP_CATALOG_FAILED, {
|
|
42
|
+
error: "catalog_failed",
|
|
43
|
+
detail: err instanceof Error ? err.message : String(err),
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
async function describeConnection(connection) {
|
|
48
|
+
try {
|
|
49
|
+
return { connection, ...(await (0, catalog_1.catalogOf)(connection)?.Info()) };
|
|
50
|
+
}
|
|
51
|
+
catch (err) {
|
|
52
|
+
return {
|
|
53
|
+
connection,
|
|
54
|
+
error: err instanceof Error ? err.message : String(err),
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
class AIDatabaseController extends (0, interface_api_1.Controller)(module_1.ROUTE_PREFIX) {
|
|
59
|
+
async connections(token) {
|
|
60
|
+
if (!(0, sidecar_auth_1.isSidecarRequest)(token)) {
|
|
61
|
+
return (0, sidecar_auth_1.sidecarForbidden)();
|
|
62
|
+
}
|
|
63
|
+
return Promise.all((0, catalog_1.listConnections)().map(describeConnection));
|
|
64
|
+
}
|
|
65
|
+
relations(token, body) {
|
|
66
|
+
return onCatalog(token, body?.connection, (catalog) => catalog.ListRelations(body?.schemas));
|
|
67
|
+
}
|
|
68
|
+
describe(token, body) {
|
|
69
|
+
return onCatalog(token, body?.connection, (catalog) => catalog.DescribeRelations(body?.relations ?? []));
|
|
70
|
+
}
|
|
71
|
+
profile(token, body) {
|
|
72
|
+
return onCatalog(token, body?.connection, async (catalog) => ({
|
|
73
|
+
profile: body?.relation
|
|
74
|
+
? await catalog.Profile({
|
|
75
|
+
relation: body.relation,
|
|
76
|
+
columns: body.columns,
|
|
77
|
+
})
|
|
78
|
+
: undefined,
|
|
79
|
+
references: await Promise.all((body?.references ?? []).map((check) => catalog.CheckReference(check))),
|
|
80
|
+
}));
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
exports.AIDatabaseController = AIDatabaseController;
|
|
84
|
+
__decorate([
|
|
85
|
+
(0, interface_api_1.Get)(database_1.DATABASE_CONNECTIONS_PATH),
|
|
86
|
+
__param(0, (0, interface_api_1.Parameter)(sidecar_1.SIDECAR_AUTH_HEADER, "header")),
|
|
87
|
+
__metadata("design:type", Function),
|
|
88
|
+
__metadata("design:paramtypes", [String]),
|
|
89
|
+
__metadata("design:returntype", Promise)
|
|
90
|
+
], AIDatabaseController.prototype, "connections", null);
|
|
91
|
+
__decorate([
|
|
92
|
+
(0, interface_api_1.Post)(database_1.DATABASE_RELATIONS_PATH),
|
|
93
|
+
__param(0, (0, interface_api_1.Parameter)(sidecar_1.SIDECAR_AUTH_HEADER, "header")),
|
|
94
|
+
__param(1, (0, interface_api_1.JSONBody)()),
|
|
95
|
+
__metadata("design:type", Function),
|
|
96
|
+
__metadata("design:paramtypes", [String, Object]),
|
|
97
|
+
__metadata("design:returntype", Promise)
|
|
98
|
+
], AIDatabaseController.prototype, "relations", null);
|
|
99
|
+
__decorate([
|
|
100
|
+
(0, interface_api_1.Post)(database_1.DATABASE_DESCRIBE_PATH),
|
|
101
|
+
__param(0, (0, interface_api_1.Parameter)(sidecar_1.SIDECAR_AUTH_HEADER, "header")),
|
|
102
|
+
__param(1, (0, interface_api_1.JSONBody)()),
|
|
103
|
+
__metadata("design:type", Function),
|
|
104
|
+
__metadata("design:paramtypes", [String, Object]),
|
|
105
|
+
__metadata("design:returntype", Promise)
|
|
106
|
+
], AIDatabaseController.prototype, "describe", null);
|
|
107
|
+
__decorate([
|
|
108
|
+
(0, interface_api_1.Post)(database_1.DATABASE_PROFILE_PATH),
|
|
109
|
+
__param(0, (0, interface_api_1.Parameter)(sidecar_1.SIDECAR_AUTH_HEADER, "header")),
|
|
110
|
+
__param(1, (0, interface_api_1.JSONBody)()),
|
|
111
|
+
__metadata("design:type", Function),
|
|
112
|
+
__metadata("design:paramtypes", [String, Object]),
|
|
113
|
+
__metadata("design:returntype", Promise)
|
|
114
|
+
], AIDatabaseController.prototype, "profile", null);
|
|
115
|
+
//# sourceMappingURL=database.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"database.js","sourceRoot":"","sources":["../../src/routes/database.ts"],"names":[],"mappings":"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"}
|
package/dist/routes/index.d.ts
CHANGED
package/dist/routes/index.js
CHANGED
|
@@ -18,6 +18,8 @@ __exportStar(require("./activity"), exports);
|
|
|
18
18
|
__exportStar(require("./builder"), exports);
|
|
19
19
|
__exportStar(require("./changes"), exports);
|
|
20
20
|
__exportStar(require("./channels"), exports);
|
|
21
|
+
__exportStar(require("./codex-account"), exports);
|
|
22
|
+
__exportStar(require("./database"), exports);
|
|
21
23
|
__exportStar(require("./health"), exports);
|
|
22
24
|
__exportStar(require("./logs"), exports);
|
|
23
25
|
__exportStar(require("./metrics"), exports);
|
package/dist/routes/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/routes/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,6CAA2B;AAC3B,4CAA0B;AAC1B,4CAA0B;AAC1B,6CAA2B;AAC3B,2CAAyB;AACzB,yCAAuB;AACvB,4CAA0B;AAC1B,mDAAiC;AACjC,6CAA2B;AAC3B,iDAA+B;AAC/B,2CAAyB;AACzB,2CAAyB"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/routes/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,6CAA2B;AAC3B,4CAA0B;AAC1B,4CAA0B;AAC1B,6CAA2B;AAC3B,kDAAgC;AAChC,6CAA2B;AAC3B,2CAAyB;AACzB,yCAAuB;AACvB,4CAA0B;AAC1B,mDAAiC;AACjC,6CAA2B;AAC3B,iDAA+B;AAC/B,2CAAyB;AACzB,2CAAyB"}
|
|
@@ -5,5 +5,6 @@ interface FilterMapping {
|
|
|
5
5
|
}
|
|
6
6
|
export type FilterMappings = Readonly<Record<string, FilterMapping>>;
|
|
7
7
|
export declare function sidecarListParams(search: URLSearchParams, mappings?: FilterMappings): QueryParams;
|
|
8
|
+
export declare function periodParams(search: URLSearchParams): QueryParams;
|
|
8
9
|
export declare function filteredValue(search: URLSearchParams, column: string): string | undefined;
|
|
9
10
|
export {};
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.sidecarListParams = sidecarListParams;
|
|
4
|
+
exports.periodParams = periodParams;
|
|
4
5
|
exports.filteredValue = filteredValue;
|
|
5
6
|
const PASSED_PARAMS = ["offset", "limit", "search"];
|
|
7
|
+
const PERIOD_PARAMS = ["from", "to"];
|
|
6
8
|
const FILTER_PARAM_PREFIX = "filter_";
|
|
7
9
|
const EQUALS_MODE_PREFIX = "is:";
|
|
8
10
|
function equalsValue(raw) {
|
|
@@ -28,6 +30,13 @@ function sidecarListParams(search, mappings = {}) {
|
|
|
28
30
|
}
|
|
29
31
|
return { ...params, ...filterParams(search, mappings) };
|
|
30
32
|
}
|
|
33
|
+
function periodParams(search) {
|
|
34
|
+
const params = {};
|
|
35
|
+
for (const name of PERIOD_PARAMS) {
|
|
36
|
+
params[name] = search.get(name) ?? undefined;
|
|
37
|
+
}
|
|
38
|
+
return params;
|
|
39
|
+
}
|
|
31
40
|
function filteredValue(search, column) {
|
|
32
41
|
return equalsValue(search.get(`${FILTER_PARAM_PREFIX}${column}`));
|
|
33
42
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list-query.js","sourceRoot":"","sources":["../../src/routes/list-query.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"list-query.js","sourceRoot":"","sources":["../../src/routes/list-query.ts"],"names":[],"mappings":";;AA4CA,8CASC;AAMD,oCAMC;AAGD,sCAKC;AAtED,MAAM,aAAa,GAAG,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,CAAU,CAAC;AAE7D,MAAM,aAAa,GAAG,CAAC,MAAM,EAAE,IAAI,CAAU,CAAC;AAC9C,MAAM,mBAAmB,GAAG,SAAS,CAAC;AAEtC,MAAM,kBAAkB,GAAG,KAAK,CAAC;AAajC,SAAS,WAAW,CAAC,GAAkB;IACrC,IAAI,GAAG,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,kBAAkB,CAAC;QAAE,OAAO,SAAS,CAAC;IAC1E,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;IACnD,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AAC9C,CAAC;AAED,SAAS,YAAY,CACnB,MAAuB,EACvB,QAAwB;IAExB,MAAM,MAAM,GAAgB,EAAE,CAAC;IAC/B,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QACzD,MAAM,KAAK,GAAG,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,mBAAmB,GAAG,MAAM,EAAE,CAAC,CAAC,CAAC;QACzE,IAAI,KAAK,KAAK,SAAS;YAAE,SAAS;QAClC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IACzE,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAMD,SAAgB,iBAAiB,CAC/B,MAAuB,EACvB,WAA2B,EAAE;IAE7B,MAAM,MAAM,GAAgB,EAAE,CAAC;IAC/B,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;QACjC,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,SAAS,CAAC;IAC/C,CAAC;IACD,OAAO,EAAE,GAAG,MAAM,EAAE,GAAG,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC;AAC1D,CAAC;AAMD,SAAgB,YAAY,CAAC,MAAuB;IAClD,MAAM,MAAM,GAAgB,EAAE,CAAC;IAC/B,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;QACjC,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,SAAS,CAAC;IAC/C,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAGD,SAAgB,aAAa,CAC3B,MAAuB,EACvB,MAAc;IAEd,OAAO,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,mBAAmB,GAAG,MAAM,EAAE,CAAC,CAAC,CAAC;AACpE,CAAC"}
|
|
@@ -42,13 +42,15 @@ function deletionsRow(breakdown) {
|
|
|
42
42
|
];
|
|
43
43
|
}
|
|
44
44
|
function allowedPayload(breakdown) {
|
|
45
|
-
const
|
|
45
|
+
const counted = new Map(breakdown.items.map((item) => [item.id, item]));
|
|
46
46
|
const rows = Object.entries(vocabulary_1.ALLOWED_BY).flatMap(([id, entry]) => {
|
|
47
|
-
const
|
|
48
|
-
if (value
|
|
47
|
+
const item = counted.get(id);
|
|
48
|
+
if (!item?.value)
|
|
49
49
|
return [];
|
|
50
50
|
const title = (0, vocabulary_1.vocabularyLabel)(ACTIVITY, "allowed_by", id);
|
|
51
|
-
return [
|
|
51
|
+
return [
|
|
52
|
+
{ id, title, value: item.value, delta: item.delta, icon: entry.icon },
|
|
53
|
+
];
|
|
52
54
|
});
|
|
53
55
|
return { items: [...rows, ...deletionsRow(breakdown)] };
|
|
54
56
|
}
|
|
@@ -59,6 +61,7 @@ function toolRow(tool) {
|
|
|
59
61
|
title: known ? (0, vocabulary_1.toolLabel)(ACTIVITY, known.name) : (0, vocabulary_1.bareToolName)(tool.id),
|
|
60
62
|
description: (0, vocabulary_1.vocabularyLabel)(ACTIVITY, "tool_source", tool.source),
|
|
61
63
|
value: tool.value,
|
|
64
|
+
delta: tool.delta,
|
|
62
65
|
icon: known?.icon ?? vocabulary_1.TOOL_SOURCES[tool.source]?.icon ?? FALLBACK_TOOL_ICON,
|
|
63
66
|
};
|
|
64
67
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metric-shapes.js","sourceRoot":"","sources":["../../src/routes/metric-shapes.ts"],"names":[],"mappings":";;AA2CA,gCAQC;AAgBD,
|
|
1
|
+
{"version":3,"file":"metric-shapes.js","sourceRoot":"","sources":["../../src/routes/metric-shapes.ts"],"names":[],"mappings":"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"}
|
package/dist/routes/metrics.d.ts
CHANGED
|
@@ -3,8 +3,8 @@ declare const AIMetricsController_base: import("@antelopejs/interface-api").Cont
|
|
|
3
3
|
export declare class AIMetricsController extends AIMetricsController_base {
|
|
4
4
|
kpi(metric: string, from?: string, to?: string, compareFrom?: string, compareTo?: string): Promise<KpiPayload>;
|
|
5
5
|
series(from?: string, to?: string, compareFrom?: string, compareTo?: string): Promise<ChartPayload>;
|
|
6
|
-
allowed(from?: string, to?: string): Promise<TopListPayload>;
|
|
7
|
-
topTools(from?: string, to?: string, limit?: string): Promise<TopListPayload>;
|
|
6
|
+
allowed(from?: string, to?: string, compareFrom?: string, compareTo?: string): Promise<TopListPayload>;
|
|
7
|
+
topTools(from?: string, to?: string, limit?: string, compareFrom?: string, compareTo?: string): Promise<TopListPayload>;
|
|
8
8
|
usage(days?: string): Promise<ChartPayload>;
|
|
9
9
|
usageSummary(days?: string): Promise<unknown>;
|
|
10
10
|
}
|
package/dist/routes/metrics.js
CHANGED
|
@@ -40,12 +40,12 @@ let AIMetricsController = class AIMetricsController extends (0, interface_api_1.
|
|
|
40
40
|
const period = { from, to, compareFrom, compareTo };
|
|
41
41
|
return (0, sidecar_1.readSidecar)(`/metrics/series${(0, sidecar_1.buildQuery)(period)}`, EMPTY_CHART);
|
|
42
42
|
}
|
|
43
|
-
allowed(from, to) {
|
|
44
|
-
const period = { from, to };
|
|
43
|
+
allowed(from, to, compareFrom, compareTo) {
|
|
44
|
+
const period = { from, to, compareFrom, compareTo };
|
|
45
45
|
return readMetric("/metrics/allowed", period, EMPTY_ALLOWED, metric_shapes_1.allowedPayload);
|
|
46
46
|
}
|
|
47
|
-
topTools(from, to, limit) {
|
|
48
|
-
const params = { from, to, limit };
|
|
47
|
+
topTools(from, to, limit, compareFrom, compareTo) {
|
|
48
|
+
const params = { from, to, compareFrom, compareTo, limit };
|
|
49
49
|
return readMetric("/metrics/top-tools", params, EMPTY_TOOLS, metric_shapes_1.topToolsPayload);
|
|
50
50
|
}
|
|
51
51
|
usage(days) {
|
|
@@ -81,8 +81,10 @@ __decorate([
|
|
|
81
81
|
(0, interface_api_1.Get)("allowed"),
|
|
82
82
|
__param(0, (0, interface_api_1.Parameter)("from", "query")),
|
|
83
83
|
__param(1, (0, interface_api_1.Parameter)("to", "query")),
|
|
84
|
+
__param(2, (0, interface_api_1.Parameter)("compareFrom", "query")),
|
|
85
|
+
__param(3, (0, interface_api_1.Parameter)("compareTo", "query")),
|
|
84
86
|
__metadata("design:type", Function),
|
|
85
|
-
__metadata("design:paramtypes", [String, String]),
|
|
87
|
+
__metadata("design:paramtypes", [String, String, String, String]),
|
|
86
88
|
__metadata("design:returntype", Promise)
|
|
87
89
|
], AIMetricsController.prototype, "allowed", null);
|
|
88
90
|
__decorate([
|
|
@@ -90,8 +92,10 @@ __decorate([
|
|
|
90
92
|
__param(0, (0, interface_api_1.Parameter)("from", "query")),
|
|
91
93
|
__param(1, (0, interface_api_1.Parameter)("to", "query")),
|
|
92
94
|
__param(2, (0, interface_api_1.Parameter)("limit", "query")),
|
|
95
|
+
__param(3, (0, interface_api_1.Parameter)("compareFrom", "query")),
|
|
96
|
+
__param(4, (0, interface_api_1.Parameter)("compareTo", "query")),
|
|
93
97
|
__metadata("design:type", Function),
|
|
94
|
-
__metadata("design:paramtypes", [String, String, String]),
|
|
98
|
+
__metadata("design:paramtypes", [String, String, String, String, String]),
|
|
95
99
|
__metadata("design:returntype", Promise)
|
|
96
100
|
], AIMetricsController.prototype, "topTools", null);
|
|
97
101
|
__decorate([
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metrics.js","sourceRoot":"","sources":["../../src/routes/metrics.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,6DAAuE;AACvE,yDAA+D;AAC/D,gDAAmD;AACnD,wCAKoB;AAUpB,mDAMyB;AAGzB,MAAM,SAAS,GAAe,EAAE,KAAK,EAAE,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC;AAC1D,MAAM,WAAW,GAAiB,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;AAC3D,MAAM,aAAa,GAAqB;IACtC,KAAK,EAAE,EAAE;IACT,cAAc,EAAE,CAAC;IACjB,SAAS,EAAE,CAAC;CACb,CAAC;AACF,MAAM,WAAW,GAAa,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;AAC5C,MAAM,WAAW,GAAgB,EAAE,IAAI,EAAE,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,CAAC;AAWhF,KAAK,UAAU,UAAU,CACvB,IAAY,EACZ,MAAmB,EACnB,QAAW,EACX,KAAqB;IAErB,OAAO,KAAK,CAAC,MAAM,IAAA,qBAAW,EAAC,GAAG,IAAI,GAAG,IAAA,oBAAU,EAAC,MAAM,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC;AAC5E,CAAC;AAOM,IAAM,mBAAmB,GAAzB,MAAM,mBAAoB,SAAQ,IAAA,0BAAU,EAAC,GAAG,qBAAY,UAAU,CAAC;IAE5E,GAAG,CAC6B,MAAc,EAChB,IAAa,EACf,EAAW,EACF,WAAoB,EACtB,SAAkB;QAEnD,MAAM,MAAM,GAAiB,EAAE,IAAI,EAAE,EAAE,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC;QAClE,MAAM,IAAI,GAAG,gBAAgB,IAAA,qBAAW,EAAC,MAAM,CAAC,EAAE,CAAC;QACnD,OAAO,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,IAAA,0BAAU,EAAC,MAAM,CAAC,CAAC,CAAC;IACjE,CAAC;IAGD,MAAM,CACwB,IAAa,EACf,EAAW,EACF,WAAoB,EACtB,SAAkB;QAEnD,MAAM,MAAM,GAAiB,EAAE,IAAI,EAAE,EAAE,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC;QAClE,OAAO,IAAA,qBAAW,EAAC,kBAAkB,IAAA,oBAAU,EAAC,MAAM,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC;IAC1E,CAAC;IAGD,OAAO,CACuB,IAAa,EACf,EAAW;
|
|
1
|
+
{"version":3,"file":"metrics.js","sourceRoot":"","sources":["../../src/routes/metrics.ts"],"names":[],"mappings":"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"}
|
package/dist/types/metrics.d.ts
CHANGED
|
@@ -31,6 +31,7 @@ export interface TopListItem {
|
|
|
31
31
|
title: string;
|
|
32
32
|
description?: string;
|
|
33
33
|
value: number;
|
|
34
|
+
delta?: number;
|
|
34
35
|
icon?: string;
|
|
35
36
|
}
|
|
36
37
|
export interface TopListPayload {
|
|
@@ -39,6 +40,7 @@ export interface TopListPayload {
|
|
|
39
40
|
interface CountedValue {
|
|
40
41
|
id: string;
|
|
41
42
|
value: number;
|
|
43
|
+
delta?: number;
|
|
42
44
|
}
|
|
43
45
|
export interface AllowedBreakdown {
|
|
44
46
|
items: CountedValue[];
|
|
@@ -297,11 +297,12 @@ function onKeydown(event: KeyboardEvent): void {
|
|
|
297
297
|
box-shadow: var(--dms-shadow-modal);
|
|
298
298
|
}
|
|
299
299
|
|
|
300
|
+
/* Matches the panel header it covers (see PanelHeader). */
|
|
300
301
|
.cb-drawer__head {
|
|
301
302
|
display: flex;
|
|
302
303
|
align-items: center;
|
|
303
304
|
gap: 8px;
|
|
304
|
-
height:
|
|
305
|
+
height: var(--ui-header-height);
|
|
305
306
|
padding: 0 8px 0 14px;
|
|
306
307
|
border-bottom: 1px solid var(--ui-border);
|
|
307
308
|
}
|
|
@@ -147,12 +147,14 @@ const moreItems = computed(() => [
|
|
|
147
147
|
</template>
|
|
148
148
|
|
|
149
149
|
<style scoped>
|
|
150
|
+
/* Same height as the DMS navbar beside the panel, so both bottom borders
|
|
151
|
+
line up: the navbar sizes itself (border included) with this variable. */
|
|
150
152
|
.cb__head {
|
|
151
153
|
display: flex;
|
|
152
154
|
flex: none;
|
|
153
155
|
align-items: center;
|
|
154
156
|
gap: 10px;
|
|
155
|
-
height:
|
|
157
|
+
height: var(--ui-header-height);
|
|
156
158
|
padding: 0 8px 0 14px;
|
|
157
159
|
border-bottom: 1px solid var(--ui-border);
|
|
158
160
|
}
|
|
@@ -48,19 +48,27 @@ const LINK_REL = "noopener noreferrer";
|
|
|
48
48
|
const NEWLINES = /\r\n?/g;
|
|
49
49
|
const LINE_BREAK = "\n";
|
|
50
50
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
51
|
+
/**
|
|
52
|
+
* The parser shared by every renderer: no raw HTML, safe links opening in a
|
|
53
|
+
* new tab, images shown as links. `breaks` alone differs between them.
|
|
54
|
+
*/
|
|
55
|
+
function createParser(breaks: boolean): MarkdownIt {
|
|
56
|
+
const parser = new MarkdownIt({ html: false, linkify: true, breaks });
|
|
57
|
+
parser.validateLink = (url) => SAFE_URL.test(url.trim());
|
|
58
|
+
parser.renderer.rules.link_open = (tokens, idx, options, _env, self) => {
|
|
59
|
+
tokens[idx].attrSet("target", LINK_TARGET);
|
|
60
|
+
tokens[idx].attrSet("rel", LINK_REL);
|
|
61
|
+
return self.renderToken(tokens, idx, options);
|
|
62
|
+
};
|
|
63
|
+
parser.renderer.rules.image = (tokens, idx, options, env, self) => {
|
|
64
|
+
const token = tokens[idx];
|
|
65
|
+
const src = token.attrGet("src") ?? "";
|
|
66
|
+
const alt = self.renderInlineAsText(token.children ?? [], options, env);
|
|
67
|
+
const label = parser.utils.escapeHtml(imageLinkLabel(alt, src));
|
|
68
|
+
return `<a href="${parser.utils.escapeHtml(src)}" target="${LINK_TARGET}" rel="${LINK_REL}">${label}</a>`;
|
|
69
|
+
};
|
|
70
|
+
return parser;
|
|
71
|
+
}
|
|
64
72
|
|
|
65
73
|
function imageDestination(src: string): string {
|
|
66
74
|
try {
|
|
@@ -75,13 +83,11 @@ function imageLinkLabel(alt: string, src: string): string {
|
|
|
75
83
|
return alt ? `${alt} (${destination})` : destination;
|
|
76
84
|
}
|
|
77
85
|
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
return `<a href="${md.utils.escapeHtml(src)}" target="${LINK_TARGET}" rel="${LINK_REL}">${label}</a>`;
|
|
84
|
-
};
|
|
86
|
+
// A chat message keeps every newline the model wrote as a line break.
|
|
87
|
+
const md = createParser(true);
|
|
88
|
+
// A document (a SKILL.md) is hard-wrapped at a fixed column: a single newline
|
|
89
|
+
// inside a paragraph is a CommonMark soft break, rendered as a space.
|
|
90
|
+
const documentMd = createParser(false);
|
|
85
91
|
|
|
86
92
|
let purifier: Purifier | null = null;
|
|
87
93
|
|
|
@@ -109,6 +115,16 @@ export function renderMarkdown(source: string): string {
|
|
|
109
115
|
return sanitize(md.render(normalize(source)));
|
|
110
116
|
}
|
|
111
117
|
|
|
118
|
+
/**
|
|
119
|
+
* A Markdown document (a SKILL.md) as sanitized HTML. Unlike
|
|
120
|
+
* {@link renderMarkdown}, a single newline inside a paragraph is a space, so a
|
|
121
|
+
* hard-wrapped source reflows to the reader's width; a blank line still starts
|
|
122
|
+
* a new paragraph.
|
|
123
|
+
*/
|
|
124
|
+
export function renderDocument(source: string): string {
|
|
125
|
+
return sanitize(documentMd.render(normalize(source)));
|
|
126
|
+
}
|
|
127
|
+
|
|
112
128
|
interface TopLevelBlock {
|
|
113
129
|
tokens: Token[];
|
|
114
130
|
startLine: number;
|