@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.
Files changed (168) hide show
  1. package/README.md +1 -1
  2. package/dist/constants/database.d.ts +7 -0
  3. package/dist/constants/database.js +11 -0
  4. package/dist/constants/database.js.map +1 -0
  5. package/dist/constants/pages.d.ts +5 -0
  6. package/dist/constants/pages.js +6 -1
  7. package/dist/constants/pages.js.map +1 -1
  8. package/dist/database/catalog.d.ts +4 -0
  9. package/dist/database/catalog.js +25 -0
  10. package/dist/database/catalog.js.map +1 -0
  11. package/dist/frontend-module.d.ts +2 -0
  12. package/dist/frontend-module.js +18 -0
  13. package/dist/frontend-module.js.map +1 -0
  14. package/dist/index.js +2 -12
  15. package/dist/index.js.map +1 -1
  16. package/dist/logging/log-buffer.js +1 -1
  17. package/dist/logging/log-buffer.js.map +1 -1
  18. package/dist/pages/activity/page.d.ts +1 -0
  19. package/dist/pages/activity/page.js +13 -0
  20. package/dist/pages/activity/page.js.map +1 -1
  21. package/dist/pages/meta.d.ts +2 -0
  22. package/dist/pages/meta.js +3 -1
  23. package/dist/pages/meta.js.map +1 -1
  24. package/dist/pages/overview/insights.js +0 -2
  25. package/dist/pages/overview/insights.js.map +1 -1
  26. package/dist/pages/overview/page.d.ts +1 -1
  27. package/dist/pages/overview/page.js +12 -11
  28. package/dist/pages/overview/page.js.map +1 -1
  29. package/dist/pages/settings/page.d.ts +1 -0
  30. package/dist/pages/settings/page.js +1 -0
  31. package/dist/pages/settings/page.js.map +1 -1
  32. package/dist/pages/skills/page.js +7 -0
  33. package/dist/pages/skills/page.js.map +1 -1
  34. package/dist/routes/activity.js +5 -2
  35. package/dist/routes/activity.js.map +1 -1
  36. package/dist/routes/builder.js +8 -0
  37. package/dist/routes/builder.js.map +1 -1
  38. package/dist/routes/codex-account.d.ts +8 -0
  39. package/dist/routes/codex-account.js +162 -0
  40. package/dist/routes/codex-account.js.map +1 -0
  41. package/dist/routes/database.d.ts +21 -0
  42. package/dist/routes/database.js +115 -0
  43. package/dist/routes/database.js.map +1 -0
  44. package/dist/routes/index.d.ts +2 -0
  45. package/dist/routes/index.js +2 -0
  46. package/dist/routes/index.js.map +1 -1
  47. package/dist/routes/list-query.d.ts +1 -0
  48. package/dist/routes/list-query.js +9 -0
  49. package/dist/routes/list-query.js.map +1 -1
  50. package/dist/routes/metric-shapes.js +7 -4
  51. package/dist/routes/metric-shapes.js.map +1 -1
  52. package/dist/routes/metrics.d.ts +2 -2
  53. package/dist/routes/metrics.js +10 -6
  54. package/dist/routes/metrics.js.map +1 -1
  55. package/dist/types/metrics.d.ts +2 -0
  56. package/frontend-vue/app/chat/components/ConversationDrawer.vue +2 -1
  57. package/frontend-vue/app/chat/components/PanelHeader.vue +3 -1
  58. package/frontend-vue/app/chat/utils/markdown.ts +36 -20
  59. package/frontend-vue/app/chat/utils/tool-lexicon.ts +46 -0
  60. package/frontend-vue/app/components/ActivityDetail.vue +2 -5
  61. package/frontend-vue/app/components/ChatPanel.vue +3 -1
  62. package/frontend-vue/app/components/SkillDetail.vue +72 -26
  63. package/frontend-vue/app/views/RowStepper.vue +1 -1
  64. package/frontend-vue/app/views/types.ts +0 -10
  65. package/frontend-vue/i18n/locales/dms-ai-pages-en-GB.json +46 -4
  66. package/frontend-vue/i18n/locales/dms-ai-pages-fr-FR.json +46 -4
  67. package/frontend-vue/i18n/locales/dms-ai-panel-en-GB.json +8 -0
  68. package/frontend-vue/i18n/locales/dms-ai-panel-fr-FR.json +8 -0
  69. package/frontend-vue/i18n/locales/dms-ai-views-en-GB.json +1 -0
  70. package/frontend-vue/i18n/locales/dms-ai-views-fr-FR.json +1 -0
  71. package/frontend-vue/package.json +1 -1
  72. package/frontend-vue/tests/chat/markdown.test.ts +69 -0
  73. package/frontend-vue/tests/i18n-views.test.ts +63 -0
  74. package/frontend-vue/tests/panel-header-height.test.ts +40 -0
  75. package/frontend-vue/tests/panel-states.test.ts +1 -1
  76. package/package.json +7 -5
  77. package/sidecar/dist/agent/permission-preview.js +49 -2
  78. package/sidecar/dist/agent/permission-preview.js.map +1 -1
  79. package/sidecar/dist/agent/tool-kinds.d.ts +1 -0
  80. package/sidecar/dist/agent/tool-kinds.js +2 -1
  81. package/sidecar/dist/agent/tool-kinds.js.map +1 -1
  82. package/sidecar/dist/constants/builder.d.ts +7 -1
  83. package/sidecar/dist/constants/builder.js +10 -0
  84. package/sidecar/dist/constants/builder.js.map +1 -1
  85. package/sidecar/dist/constants/chatgpt.d.ts +39 -0
  86. package/sidecar/dist/constants/chatgpt.js +55 -0
  87. package/sidecar/dist/constants/chatgpt.js.map +1 -0
  88. package/sidecar/dist/constants/codex.d.ts +4 -5
  89. package/sidecar/dist/constants/codex.js +4 -5
  90. package/sidecar/dist/constants/codex.js.map +1 -1
  91. package/sidecar/dist/constants/database.d.ts +11 -0
  92. package/sidecar/dist/constants/database.js +17 -0
  93. package/sidecar/dist/constants/database.js.map +1 -0
  94. package/sidecar/dist/constants/http.d.ts +3 -0
  95. package/sidecar/dist/constants/http.js +3 -0
  96. package/sidecar/dist/constants/http.js.map +1 -1
  97. package/sidecar/dist/constants/mcp.js +2 -0
  98. package/sidecar/dist/constants/mcp.js.map +1 -1
  99. package/sidecar/dist/constants/providers.d.ts +1 -1
  100. package/sidecar/dist/constants/providers.js +1 -1
  101. package/sidecar/dist/constants/providers.js.map +1 -1
  102. package/sidecar/dist/constants/tool-kinds.d.ts +1 -0
  103. package/sidecar/dist/constants/tool-kinds.js +7 -0
  104. package/sidecar/dist/constants/tool-kinds.js.map +1 -1
  105. package/sidecar/dist/database/database-client.d.ts +11 -0
  106. package/sidecar/dist/database/database-client.js +50 -0
  107. package/sidecar/dist/database/database-client.js.map +1 -0
  108. package/sidecar/dist/index.js +6 -0
  109. package/sidecar/dist/index.js.map +1 -1
  110. package/sidecar/dist/mcp/tool-definitions.js +2 -0
  111. package/sidecar/dist/mcp/tool-definitions.js.map +1 -1
  112. package/sidecar/dist/mcp/tools/builder-gate.js +3 -1
  113. package/sidecar/dist/mcp/tools/builder-gate.js.map +1 -1
  114. package/sidecar/dist/mcp/tools/builder-project.d.ts +8 -0
  115. package/sidecar/dist/mcp/tools/builder-project.js +181 -0
  116. package/sidecar/dist/mcp/tools/builder-project.js.map +1 -0
  117. package/sidecar/dist/mcp/tools/builder.d.ts +5 -2
  118. package/sidecar/dist/mcp/tools/builder.js +5 -11
  119. package/sidecar/dist/mcp/tools/builder.js.map +1 -1
  120. package/sidecar/dist/mcp/tools/database.d.ts +6 -0
  121. package/sidecar/dist/mcp/tools/database.js +42 -0
  122. package/sidecar/dist/mcp/tools/database.js.map +1 -0
  123. package/sidecar/dist/mcp/types.d.ts +2 -0
  124. package/sidecar/dist/metrics/aggregate.js +29 -7
  125. package/sidecar/dist/metrics/aggregate.js.map +1 -1
  126. package/sidecar/dist/metrics/types.d.ts +2 -0
  127. package/sidecar/dist/providers/claude/safe-mode.js +11 -1
  128. package/sidecar/dist/providers/claude/safe-mode.js.map +1 -1
  129. package/sidecar/dist/providers/codex/chatgpt/credentials.d.ts +10 -0
  130. package/sidecar/dist/providers/codex/chatgpt/credentials.js +63 -0
  131. package/sidecar/dist/providers/codex/chatgpt/credentials.js.map +1 -0
  132. package/sidecar/dist/providers/codex/chatgpt/http.d.ts +3 -0
  133. package/sidecar/dist/providers/codex/chatgpt/http.js +66 -0
  134. package/sidecar/dist/providers/codex/chatgpt/http.js.map +1 -0
  135. package/sidecar/dist/providers/codex/chatgpt/lock.d.ts +1 -0
  136. package/sidecar/dist/providers/codex/chatgpt/lock.js +58 -0
  137. package/sidecar/dist/providers/codex/chatgpt/lock.js.map +1 -0
  138. package/sidecar/dist/providers/codex/chatgpt/login.d.ts +8 -0
  139. package/sidecar/dist/providers/codex/chatgpt/login.js +138 -0
  140. package/sidecar/dist/providers/codex/chatgpt/login.js.map +1 -0
  141. package/sidecar/dist/providers/codex/chatgpt/oauth.d.ts +38 -0
  142. package/sidecar/dist/providers/codex/chatgpt/oauth.js +167 -0
  143. package/sidecar/dist/providers/codex/chatgpt/oauth.js.map +1 -0
  144. package/sidecar/dist/providers/codex/chatgpt/store.d.ts +21 -0
  145. package/sidecar/dist/providers/codex/chatgpt/store.js +75 -0
  146. package/sidecar/dist/providers/codex/chatgpt/store.js.map +1 -0
  147. package/sidecar/dist/providers/codex/config.d.ts +1 -5
  148. package/sidecar/dist/providers/codex/config.js +27 -4
  149. package/sidecar/dist/providers/codex/config.js.map +1 -1
  150. package/sidecar/dist/providers/codex/module.js +11 -4
  151. package/sidecar/dist/providers/codex/module.js.map +1 -1
  152. package/sidecar/dist/providers/codex/process.d.ts +1 -1
  153. package/sidecar/dist/providers/codex/process.js +7 -3
  154. package/sidecar/dist/providers/codex/process.js.map +1 -1
  155. package/sidecar/dist/providers/codex/provider.d.ts +0 -1
  156. package/sidecar/dist/providers/codex/provider.js +7 -5
  157. package/sidecar/dist/providers/codex/provider.js.map +1 -1
  158. package/sidecar/dist/server/http.js +38 -0
  159. package/sidecar/dist/server/http.js.map +1 -1
  160. package/sidecar/dist/server/permission-events.js +3 -1
  161. package/sidecar/dist/server/permission-events.js.map +1 -1
  162. package/sidecar/dist/server/raw-data.js +1 -1
  163. package/sidecar/dist/server/raw-data.js.map +1 -1
  164. package/sidecar/dist/server/safety-net.js +1 -1
  165. package/sidecar/dist/server/safety-net.js.map +1 -1
  166. package/skills/dms-ai/SKILL.md +2 -1
  167. package/skills/dms-external-database/REFERENCE.md +132 -0
  168. 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":"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"}
@@ -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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"}
@@ -2,6 +2,8 @@ export * from "./activity";
2
2
  export * from "./builder";
3
3
  export * from "./changes";
4
4
  export * from "./channels";
5
+ export * from "./codex-account";
6
+ export * from "./database";
5
7
  export * from "./health";
6
8
  export * from "./logs";
7
9
  export * from "./metrics";
@@ -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);
@@ -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":";;AA0CA,8CASC;AAGD,sCAKC;AAxDD,MAAM,aAAa,GAAG,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,CAAU,CAAC;AAC7D,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;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"}
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 counts = new Map(breakdown.items.map((item) => [item.id, item.value]));
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 value = counts.get(id) ?? 0;
48
- if (value === 0)
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 [{ id, title, value, icon: entry.icon }];
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":"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"}
1
+ {"version":3,"file":"metric-shapes.js","sourceRoot":"","sources":["../../src/routes/metric-shapes.ts"],"names":[],"mappings":"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"}
@@ -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
  }
@@ -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":"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"}
1
+ {"version":3,"file":"metrics.js","sourceRoot":"","sources":["../../src/routes/metrics.ts"],"names":[],"mappings":"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"}
@@ -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: 52px;
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: 52px;
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
- const md = new MarkdownIt({
52
- html: false,
53
- linkify: true,
54
- breaks: true,
55
- });
56
-
57
- md.validateLink = (url) => SAFE_URL.test(url.trim());
58
-
59
- md.renderer.rules.link_open = (tokens, idx, options, _env, self) => {
60
- tokens[idx].attrSet("target", LINK_TARGET);
61
- tokens[idx].attrSet("rel", LINK_REL);
62
- return self.renderToken(tokens, idx, options);
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
- md.renderer.rules.image = (tokens, idx, options, env, self) => {
79
- const token = tokens[idx];
80
- const src = token.attrGet("src") ?? "";
81
- const alt = self.renderInlineAsText(token.children ?? [], options, env);
82
- const label = md.utils.escapeHtml(imageLinkLabel(alt, src));
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;