@nocobase/app-plugin-foundation 0.0.0-stage → 0.1.0-beta.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/CHANGELOG.md +32 -0
- package/README.md +86 -2
- package/dist/cli/index.d.ts +4 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +16 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/module-manifest.d.ts +9 -0
- package/dist/cli/module-manifest.d.ts.map +1 -0
- package/dist/cli/module-manifest.js +12 -0
- package/dist/cli/module-manifest.js.map +1 -0
- package/dist/client/api.d.ts +17 -0
- package/dist/client/api.d.ts.map +1 -0
- package/dist/client/api.js +51 -0
- package/dist/client/api.js.map +1 -0
- package/dist/client/business-modules.d.ts +5 -0
- package/dist/client/business-modules.d.ts.map +1 -0
- package/dist/client/business-modules.js +81 -0
- package/dist/client/business-modules.js.map +1 -0
- package/dist/client/components/capability-icons.d.ts +4 -0
- package/dist/client/components/capability-icons.d.ts.map +1 -0
- package/dist/client/components/capability-icons.js +17 -0
- package/dist/client/components/capability-icons.js.map +1 -0
- package/dist/client/components/format.d.ts +7 -0
- package/dist/client/components/format.d.ts.map +1 -0
- package/dist/client/components/format.js +42 -0
- package/dist/client/components/format.js.map +1 -0
- package/dist/client/components/foundation-page.d.ts +15 -0
- package/dist/client/components/foundation-page.d.ts.map +1 -0
- package/dist/client/components/foundation-page.js +207 -0
- package/dist/client/components/foundation-page.js.map +1 -0
- package/dist/client/components/foundation-translation.d.ts +12 -0
- package/dist/client/components/foundation-translation.d.ts.map +1 -0
- package/dist/client/components/foundation-translation.js +19 -0
- package/dist/client/components/foundation-translation.js.map +1 -0
- package/dist/client/components/module-matrix.d.ts +9 -0
- package/dist/client/components/module-matrix.d.ts.map +1 -0
- package/dist/client/components/module-matrix.js +56 -0
- package/dist/client/components/module-matrix.js.map +1 -0
- package/dist/client/components/ui/button.d.ts +8 -0
- package/dist/client/components/ui/button.d.ts.map +1 -0
- package/dist/client/components/ui/button.js +35 -0
- package/dist/client/components/ui/button.js.map +1 -0
- package/dist/client/components/ui/collapsible.d.ts +7 -0
- package/dist/client/components/ui/collapsible.d.ts.map +1 -0
- package/dist/client/components/ui/collapsible.js +13 -0
- package/dist/client/components/ui/collapsible.js.map +1 -0
- package/dist/client/components/ui/table.d.ts +11 -0
- package/dist/client/components/ui/table.d.ts.map +1 -0
- package/dist/client/components/ui/table.js +28 -0
- package/dist/client/components/ui/table.js.map +1 -0
- package/dist/client/index.d.ts +6 -0
- package/dist/client/index.d.ts.map +1 -0
- package/dist/client/index.js +7 -0
- package/dist/client/index.js.map +1 -0
- package/dist/client/locales/de-DE.d.ts +4 -0
- package/dist/client/locales/de-DE.d.ts.map +1 -0
- package/dist/client/locales/de-DE.js +315 -0
- package/dist/client/locales/de-DE.js.map +1 -0
- package/dist/client/locales/en-US.d.ts +317 -0
- package/dist/client/locales/en-US.d.ts.map +1 -0
- package/dist/client/locales/en-US.js +315 -0
- package/dist/client/locales/en-US.js.map +1 -0
- package/dist/client/locales/es-ES.d.ts +4 -0
- package/dist/client/locales/es-ES.d.ts.map +1 -0
- package/dist/client/locales/es-ES.js +316 -0
- package/dist/client/locales/es-ES.js.map +1 -0
- package/dist/client/locales/fr-FR.d.ts +4 -0
- package/dist/client/locales/fr-FR.d.ts.map +1 -0
- package/dist/client/locales/fr-FR.js +316 -0
- package/dist/client/locales/fr-FR.js.map +1 -0
- package/dist/client/locales/id-ID.d.ts +4 -0
- package/dist/client/locales/id-ID.d.ts.map +1 -0
- package/dist/client/locales/id-ID.js +315 -0
- package/dist/client/locales/id-ID.js.map +1 -0
- package/dist/client/locales/index.d.ts +4 -0
- package/dist/client/locales/index.d.ts.map +1 -0
- package/dist/client/locales/index.js +14 -0
- package/dist/client/locales/index.js.map +1 -0
- package/dist/client/locales/ja-JP.d.ts +4 -0
- package/dist/client/locales/ja-JP.d.ts.map +1 -0
- package/dist/client/locales/ja-JP.js +315 -0
- package/dist/client/locales/ja-JP.js.map +1 -0
- package/dist/client/locales/pt-BR.d.ts +4 -0
- package/dist/client/locales/pt-BR.d.ts.map +1 -0
- package/dist/client/locales/pt-BR.js +316 -0
- package/dist/client/locales/pt-BR.js.map +1 -0
- package/dist/client/locales/vi-VN.d.ts +4 -0
- package/dist/client/locales/vi-VN.d.ts.map +1 -0
- package/dist/client/locales/vi-VN.js +315 -0
- package/dist/client/locales/vi-VN.js.map +1 -0
- package/dist/client/locales/zh-CN.d.ts +4 -0
- package/dist/client/locales/zh-CN.d.ts.map +1 -0
- package/dist/client/locales/zh-CN.js +315 -0
- package/dist/client/locales/zh-CN.js.map +1 -0
- package/dist/client/locales/zh-TW.d.ts +4 -0
- package/dist/client/locales/zh-TW.d.ts.map +1 -0
- package/dist/client/locales/zh-TW.js +315 -0
- package/dist/client/locales/zh-TW.js.map +1 -0
- package/dist/client/navigation.d.ts +8 -0
- package/dist/client/navigation.d.ts.map +1 -0
- package/dist/client/navigation.js +21 -0
- package/dist/client/navigation.js.map +1 -0
- package/dist/client/plugin.d.ts +11 -0
- package/dist/client/plugin.d.ts.map +1 -0
- package/dist/client/plugin.js +10 -0
- package/dist/client/plugin.js.map +1 -0
- package/dist/client/provider-inventory.d.ts +6 -0
- package/dist/client/provider-inventory.d.ts.map +1 -0
- package/dist/client/provider-inventory.js +49 -0
- package/dist/client/provider-inventory.js.map +1 -0
- package/dist/client/routes.d.ts +18 -0
- package/dist/client/routes.d.ts.map +1 -0
- package/dist/client/routes.js +41 -0
- package/dist/client/routes.js.map +1 -0
- package/dist/package.d.ts +2 -0
- package/dist/package.d.ts.map +1 -0
- package/dist/package.js +2 -0
- package/dist/package.js.map +1 -0
- package/dist/server/capabilities/data.d.ts +7 -0
- package/dist/server/capabilities/data.d.ts.map +1 -0
- package/dist/server/capabilities/data.js +108 -0
- package/dist/server/capabilities/data.js.map +1 -0
- package/dist/server/capabilities/index.d.ts +5 -0
- package/dist/server/capabilities/index.d.ts.map +1 -0
- package/dist/server/capabilities/index.js +24 -0
- package/dist/server/capabilities/index.js.map +1 -0
- package/dist/server/capabilities/intelligence.d.ts +4 -0
- package/dist/server/capabilities/intelligence.d.ts.map +1 -0
- package/dist/server/capabilities/intelligence.js +97 -0
- package/dist/server/capabilities/intelligence.js.map +1 -0
- package/dist/server/capabilities/messaging.d.ts +4 -0
- package/dist/server/capabilities/messaging.d.ts.map +1 -0
- package/dist/server/capabilities/messaging.js +108 -0
- package/dist/server/capabilities/messaging.js.map +1 -0
- package/dist/server/capabilities/people.d.ts +4 -0
- package/dist/server/capabilities/people.d.ts.map +1 -0
- package/dist/server/capabilities/people.js +151 -0
- package/dist/server/capabilities/people.js.map +1 -0
- package/dist/server/capabilities/platform.d.ts +10 -0
- package/dist/server/capabilities/platform.d.ts.map +1 -0
- package/dist/server/capabilities/platform.js +143 -0
- package/dist/server/capabilities/platform.js.map +1 -0
- package/dist/server/capabilities/processes.d.ts +3 -0
- package/dist/server/capabilities/processes.d.ts.map +1 -0
- package/dist/server/capabilities/processes.js +86 -0
- package/dist/server/capabilities/processes.js.map +1 -0
- package/dist/server/capabilities/types.d.ts +38 -0
- package/dist/server/capabilities/types.d.ts.map +1 -0
- package/dist/server/capabilities/types.js +23 -0
- package/dist/server/capabilities/types.js.map +1 -0
- package/dist/server/catalog.d.ts +3 -0
- package/dist/server/catalog.d.ts.map +1 -0
- package/dist/server/catalog.js +44 -0
- package/dist/server/catalog.js.map +1 -0
- package/dist/server/index.d.ts +6 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +5 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/inventory.d.ts +48 -0
- package/dist/server/inventory.d.ts.map +1 -0
- package/dist/server/inventory.js +158 -0
- package/dist/server/inventory.js.map +1 -0
- package/dist/server/module-manifest.d.ts +10 -0
- package/dist/server/module-manifest.d.ts.map +1 -0
- package/dist/server/module-manifest.js +65 -0
- package/dist/server/module-manifest.js.map +1 -0
- package/dist/server/module-sources.d.ts +5 -0
- package/dist/server/module-sources.d.ts.map +1 -0
- package/dist/server/module-sources.js +535 -0
- package/dist/server/module-sources.js.map +1 -0
- package/dist/server/packages.d.ts +18 -0
- package/dist/server/packages.d.ts.map +1 -0
- package/dist/server/packages.js +62 -0
- package/dist/server/packages.js.map +1 -0
- package/dist/server/plugin.d.ts +4 -0
- package/dist/server/plugin.d.ts.map +1 -0
- package/dist/server/plugin.js +12 -0
- package/dist/server/plugin.js.map +1 -0
- package/dist/server/provider-inventory.d.ts +13 -0
- package/dist/server/provider-inventory.d.ts.map +1 -0
- package/dist/server/provider-inventory.js +180 -0
- package/dist/server/provider-inventory.js.map +1 -0
- package/dist/server/providers/foundation.d.ts +7 -0
- package/dist/server/providers/foundation.d.ts.map +1 -0
- package/dist/server/providers/foundation.js +24 -0
- package/dist/server/providers/foundation.js.map +1 -0
- package/dist/server/providers/index.d.ts +4 -0
- package/dist/server/providers/index.d.ts.map +1 -0
- package/dist/server/providers/index.js +6 -0
- package/dist/server/providers/index.js.map +1 -0
- package/dist/server/routes/index.d.ts +6 -0
- package/dist/server/routes/index.d.ts.map +1 -0
- package/dist/server/routes/index.js +54 -0
- package/dist/server/routes/index.js.map +1 -0
- package/dist/server/routes/schemas.d.ts +7 -0
- package/dist/server/routes/schemas.d.ts.map +1 -0
- package/dist/server/routes/schemas.js +138 -0
- package/dist/server/routes/schemas.js.map +1 -0
- package/dist/server/services/foundation.d.ts +37 -0
- package/dist/server/services/foundation.d.ts.map +1 -0
- package/dist/server/services/foundation.js +175 -0
- package/dist/server/services/foundation.js.map +1 -0
- package/dist/server/source-evidence.d.ts +19 -0
- package/dist/server/source-evidence.d.ts.map +1 -0
- package/dist/server/source-evidence.js +169 -0
- package/dist/server/source-evidence.js.map +1 -0
- package/dist/server/tokens.d.ts +12 -0
- package/dist/server/tokens.d.ts.map +1 -0
- package/dist/server/tokens.js +3 -0
- package/dist/server/tokens.js.map +1 -0
- package/dist/shared/available-capabilities.d.ts +6 -0
- package/dist/shared/available-capabilities.d.ts.map +1 -0
- package/dist/shared/available-capabilities.js +66 -0
- package/dist/shared/available-capabilities.js.map +1 -0
- package/dist/shared/foundation.d.ts +142 -0
- package/dist/shared/foundation.d.ts.map +1 -0
- package/dist/shared/foundation.js +39 -0
- package/dist/shared/foundation.js.map +1 -0
- package/package.json +106 -3
- package/skills/nocobase-app-plugin-foundation/SKILL.md +68 -0
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { driveManagerToken } from '@nocobase/app-server/drive';
|
|
2
|
+
import { systemCollectionOwner } from '../catalog.js';
|
|
3
|
+
import { total } from '../inventory.js';
|
|
4
|
+
import { fact, metric, NO_DATABASE, } from './types.js';
|
|
5
|
+
const RELATION_TYPES = new Set([
|
|
6
|
+
'belongsTo',
|
|
7
|
+
'hasOne',
|
|
8
|
+
'hasMany',
|
|
9
|
+
'belongsToMany',
|
|
10
|
+
]);
|
|
11
|
+
/** The Collections that hold the application's own data rather than a NocoBase package's. */
|
|
12
|
+
export function applicationCollections(probe) {
|
|
13
|
+
return probe.inventory.collections.filter((collection) => systemCollectionOwner(collection.name) === undefined);
|
|
14
|
+
}
|
|
15
|
+
export const dataModeling = {
|
|
16
|
+
key: 'dataModeling',
|
|
17
|
+
packages: [
|
|
18
|
+
'@nocobase/db',
|
|
19
|
+
'@nocobase/repository-input',
|
|
20
|
+
'@nocobase/snowflake',
|
|
21
|
+
],
|
|
22
|
+
async collect({ probe }) {
|
|
23
|
+
if (!probe)
|
|
24
|
+
return NO_DATABASE;
|
|
25
|
+
const own = applicationCollections(probe);
|
|
26
|
+
// A view reads rows another Collection already holds, so only tables count towards the records.
|
|
27
|
+
const tables = own.filter((collection) => collection.kind === 'table');
|
|
28
|
+
const records = total(await Promise.all(tables.map((collection) => probe.count(collection.name))));
|
|
29
|
+
const definitions = await Promise.all(own.map((collection) => probe.inventory.definition(collection.name)));
|
|
30
|
+
const fields = definitions.flatMap((definition) => definition?.fields ?? []);
|
|
31
|
+
const relations = fields.filter((field) => RELATION_TYPES.has(field.type));
|
|
32
|
+
return {
|
|
33
|
+
status: 'active',
|
|
34
|
+
facts: own.length === 0
|
|
35
|
+
? [fact('noApplicationCollections')]
|
|
36
|
+
: [
|
|
37
|
+
fact('applicationCollections', {
|
|
38
|
+
count: own.length,
|
|
39
|
+
names: own.map((collection) => collection.title ?? collection.name),
|
|
40
|
+
}),
|
|
41
|
+
...(relations.length > 0
|
|
42
|
+
? [fact('relations', { count: relations.length })]
|
|
43
|
+
: []),
|
|
44
|
+
],
|
|
45
|
+
metrics: [
|
|
46
|
+
metric('businessRecords', records.value, {
|
|
47
|
+
complete: records.complete,
|
|
48
|
+
}),
|
|
49
|
+
metric('businessCollections', tables.length),
|
|
50
|
+
metric('views', own.length - tables.length),
|
|
51
|
+
metric('fields', fields.length - relations.length),
|
|
52
|
+
metric('relations', relations.length),
|
|
53
|
+
metric('systemCollections', probe.inventory.collections.length - own.length),
|
|
54
|
+
],
|
|
55
|
+
};
|
|
56
|
+
},
|
|
57
|
+
};
|
|
58
|
+
/** The columns the file plugin requires of a file Collection (`FILE_COLUMNS` in `@nocobase/app-plugin-file`). */
|
|
59
|
+
const FILE_COLUMNS = [
|
|
60
|
+
'disk',
|
|
61
|
+
'key',
|
|
62
|
+
'filename',
|
|
63
|
+
'ext',
|
|
64
|
+
'mimeType',
|
|
65
|
+
'size',
|
|
66
|
+
];
|
|
67
|
+
export const files = {
|
|
68
|
+
key: 'files',
|
|
69
|
+
packages: ['@nocobase/app-plugin-file', '@nocobase/drive'],
|
|
70
|
+
async collect({ probe, container }) {
|
|
71
|
+
if (!probe)
|
|
72
|
+
return NO_DATABASE;
|
|
73
|
+
const candidates = await Promise.all(applicationCollections(probe)
|
|
74
|
+
.filter((collection) => collection.kind === 'table')
|
|
75
|
+
.map(async (collection) => {
|
|
76
|
+
const names = await probe.fieldNames(collection.name);
|
|
77
|
+
return names !== null &&
|
|
78
|
+
FILE_COLUMNS.every((column) => names.includes(column))
|
|
79
|
+
? collection
|
|
80
|
+
: undefined;
|
|
81
|
+
}));
|
|
82
|
+
const fileCollections = candidates.filter((collection) => collection !== undefined);
|
|
83
|
+
if (fileCollections.length === 0)
|
|
84
|
+
return { status: 'unused', reason: 'noFileCollection' };
|
|
85
|
+
const counts = total(await Promise.all(fileCollections.map((collection) => probe.count(collection.name))));
|
|
86
|
+
const bytes = total(await Promise.all(fileCollections.map((collection) => probe.sum(collection.name, 'size'))));
|
|
87
|
+
const hasDrive = container.has(driveManagerToken);
|
|
88
|
+
return {
|
|
89
|
+
status: hasDrive ? 'active' : 'needsSetup',
|
|
90
|
+
...(hasDrive ? {} : { reason: 'noDrive' }),
|
|
91
|
+
facts: [
|
|
92
|
+
fact('fileCollections', {
|
|
93
|
+
count: fileCollections.length,
|
|
94
|
+
names: fileCollections.map((collection) => collection.title ?? collection.name),
|
|
95
|
+
}),
|
|
96
|
+
],
|
|
97
|
+
metrics: [
|
|
98
|
+
metric('files', counts.value, { complete: counts.complete }),
|
|
99
|
+
metric('storedBytes', bytes.value, {
|
|
100
|
+
unit: 'bytes',
|
|
101
|
+
complete: bytes.complete,
|
|
102
|
+
}),
|
|
103
|
+
metric('fileCollections', fileCollections.length),
|
|
104
|
+
],
|
|
105
|
+
};
|
|
106
|
+
},
|
|
107
|
+
};
|
|
108
|
+
//# sourceMappingURL=data.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data.js","sourceRoot":"","sources":["../../../server/capabilities/data.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { CapabilityCollector } from './types.js';
|
|
2
|
+
/** Ordered adapters, independently extensible without a fixed capability enum. */
|
|
3
|
+
export declare const CAPABILITY_COLLECTORS: readonly CapabilityCollector[];
|
|
4
|
+
export type { CapabilityCollector, CollectorContext } from './types.js';
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../server/capabilities/index.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAkBtD,kFAAkF;AAClF,eAAO,MAAM,qBAAqB,EAAE,SAAS,mBAAmB,EAAe,CAAC;AAEhF,YAAY,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { dataModeling, files } from './data.js';
|
|
2
|
+
import { aiAgents, knowledge } from './intelligence.js';
|
|
3
|
+
import { mail, notifications } from './messaging.js';
|
|
4
|
+
import { permissions, usersAndOrganizations } from './people.js';
|
|
5
|
+
import { audit, integrations, operations, userInterface } from './platform.js';
|
|
6
|
+
import { workflows } from './processes.js';
|
|
7
|
+
const collectors = [
|
|
8
|
+
dataModeling,
|
|
9
|
+
files,
|
|
10
|
+
usersAndOrganizations,
|
|
11
|
+
permissions,
|
|
12
|
+
workflows,
|
|
13
|
+
aiAgents,
|
|
14
|
+
knowledge,
|
|
15
|
+
mail,
|
|
16
|
+
notifications,
|
|
17
|
+
integrations,
|
|
18
|
+
userInterface,
|
|
19
|
+
audit,
|
|
20
|
+
operations,
|
|
21
|
+
];
|
|
22
|
+
/** Ordered adapters, independently extensible without a fixed capability enum. */
|
|
23
|
+
export const CAPABILITY_COLLECTORS = collectors;
|
|
24
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../server/capabilities/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACjE,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC/E,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAG3C,MAAM,UAAU,GAAmC;IACjD,YAAY;IACZ,KAAK;IACL,qBAAqB;IACrB,WAAW;IACX,SAAS;IACT,QAAQ;IACR,SAAS;IACT,IAAI;IACJ,aAAa;IACb,YAAY;IACZ,aAAa;IACb,KAAK;IACL,UAAU;CACX,CAAC;AAEF,kFAAkF;AAClF,MAAM,CAAC,MAAM,qBAAqB,GAAmC,UAAU,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"intelligence.d.ts","sourceRoot":"","sources":["../../../server/capabilities/intelligence.ts"],"names":[],"mappings":"AAEA,OAAO,EAIL,KAAK,mBAAmB,EACzB,MAAM,YAAY,CAAC;AAEpB,eAAO,MAAM,QAAQ,EAAE,mBAmEtB,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,mBAwBvB,CAAC"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { total } from '../inventory.js';
|
|
2
|
+
import { fact, metric, NO_DATABASE, } from './types.js';
|
|
3
|
+
export const aiAgents = {
|
|
4
|
+
key: 'aiAgents',
|
|
5
|
+
packages: [
|
|
6
|
+
'@nocobase/app-plugin-agents',
|
|
7
|
+
'@nocobase/app-plugin-agent-sessions',
|
|
8
|
+
'@nocobase/app-plugin-ai-employee',
|
|
9
|
+
],
|
|
10
|
+
async collect({ probe }) {
|
|
11
|
+
if (!probe)
|
|
12
|
+
return NO_DATABASE;
|
|
13
|
+
if (!probe.has('agModelServices'))
|
|
14
|
+
return { status: 'unused', reason: 'notRegistered' };
|
|
15
|
+
const [services, agents, runners, runs, modelCalls, input, output] = await Promise.all([
|
|
16
|
+
probe.count('agModelServices', { enabled: true }),
|
|
17
|
+
probe.has('agAgents') ? probe.count('agAgents') : Promise.resolve(0),
|
|
18
|
+
probe.has('agRunners') ? probe.count('agRunners') : Promise.resolve(0),
|
|
19
|
+
probe.has('agRuns') ? probe.count('agRuns') : Promise.resolve(0),
|
|
20
|
+
probe.has('agModelUsage')
|
|
21
|
+
? probe.count('agModelUsage')
|
|
22
|
+
: Promise.resolve(0),
|
|
23
|
+
probe.has('agModelUsage')
|
|
24
|
+
? probe.sum('agModelUsage', 'inputTokens')
|
|
25
|
+
: Promise.resolve(0),
|
|
26
|
+
probe.has('agModelUsage')
|
|
27
|
+
? probe.sum('agModelUsage', 'outputTokens')
|
|
28
|
+
: Promise.resolve(0),
|
|
29
|
+
]);
|
|
30
|
+
const tokens = total([input, output]);
|
|
31
|
+
// Two paths run an agent: an online one calls a model service, a runner one runs a coding tool on a runner.
|
|
32
|
+
const online = (services ?? 0) > 0 && (agents ?? 0) > 0;
|
|
33
|
+
const runner = (runners ?? 0) > 0;
|
|
34
|
+
const parts = [
|
|
35
|
+
(services ?? 0) > 0
|
|
36
|
+
? { key: 'modelServices', status: 'active' }
|
|
37
|
+
: {
|
|
38
|
+
key: 'modelServices',
|
|
39
|
+
status: 'needsSetup',
|
|
40
|
+
reason: 'noModelService',
|
|
41
|
+
},
|
|
42
|
+
(agents ?? 0) > 0
|
|
43
|
+
? { key: 'agents', status: 'active' }
|
|
44
|
+
: { key: 'agents', status: 'needsSetup', reason: 'noAgent' },
|
|
45
|
+
runner
|
|
46
|
+
? { key: 'runners', status: 'active' }
|
|
47
|
+
: { key: 'runners', status: 'unused' },
|
|
48
|
+
];
|
|
49
|
+
const active = online || runner;
|
|
50
|
+
return {
|
|
51
|
+
status: active ? 'active' : 'needsSetup',
|
|
52
|
+
...(active ? {} : { reason: 'noModelOrRunner' }),
|
|
53
|
+
facts: active
|
|
54
|
+
? [fact('agents', { count: agents ?? 0, runs: runs ?? 0 })]
|
|
55
|
+
: [],
|
|
56
|
+
metrics: [
|
|
57
|
+
metric('agents', agents),
|
|
58
|
+
metric('modelServices', services),
|
|
59
|
+
metric('runners', runners),
|
|
60
|
+
metric('runs', runs),
|
|
61
|
+
metric('modelCalls', modelCalls),
|
|
62
|
+
metric('tokens', tokens.value, {
|
|
63
|
+
unit: 'tokens',
|
|
64
|
+
complete: tokens.complete,
|
|
65
|
+
}),
|
|
66
|
+
],
|
|
67
|
+
parts,
|
|
68
|
+
};
|
|
69
|
+
},
|
|
70
|
+
};
|
|
71
|
+
export const knowledge = {
|
|
72
|
+
key: 'knowledge',
|
|
73
|
+
packages: ['@nocobase/app-plugin-knowledge'],
|
|
74
|
+
async collect({ probe }) {
|
|
75
|
+
if (!probe)
|
|
76
|
+
return NO_DATABASE;
|
|
77
|
+
if (!probe.has('kbSpaces'))
|
|
78
|
+
return { status: 'unused', reason: 'notRegistered' };
|
|
79
|
+
const [spaces, docs, chunks] = await Promise.all([
|
|
80
|
+
probe.count('kbSpaces'),
|
|
81
|
+
probe.has('kbDocs') ? probe.count('kbDocs') : Promise.resolve(0),
|
|
82
|
+
probe.has('kbChunks') ? probe.count('kbChunks') : Promise.resolve(0),
|
|
83
|
+
]);
|
|
84
|
+
const active = (docs ?? 0) > 0;
|
|
85
|
+
return {
|
|
86
|
+
status: active ? 'active' : 'needsSetup',
|
|
87
|
+
...(active ? {} : { reason: 'noDocuments' }),
|
|
88
|
+
facts: active ? [fact('documents', { count: docs ?? 0 })] : [],
|
|
89
|
+
metrics: [
|
|
90
|
+
metric('documents', docs),
|
|
91
|
+
metric('spaces', spaces),
|
|
92
|
+
metric('chunks', chunks),
|
|
93
|
+
],
|
|
94
|
+
};
|
|
95
|
+
},
|
|
96
|
+
};
|
|
97
|
+
//# sourceMappingURL=intelligence.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"intelligence.js","sourceRoot":"","sources":["../../../server/capabilities/intelligence.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"messaging.d.ts","sourceRoot":"","sources":["../../../server/capabilities/messaging.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,mBAAmB,EACzB,MAAM,YAAY,CAAC;AAKpB,eAAO,MAAM,IAAI,EAAE,mBA0ClB,CAAC;AAIF,eAAO,MAAM,aAAa,EAAE,mBAyE3B,CAAC"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { countOf, fact, metric, NO_DATABASE, } from './types.js';
|
|
2
|
+
/** Account states that need someone to act before the mailbox syncs again. */
|
|
3
|
+
const ATTENTION_STATES = ['reauthorizationRequired', 'suspended', 'revoked'];
|
|
4
|
+
export const mail = {
|
|
5
|
+
key: 'mail',
|
|
6
|
+
packages: ['@nocobase/app-plugin-mail', '@nocobase/mailer'],
|
|
7
|
+
async collect({ probe }) {
|
|
8
|
+
if (!probe)
|
|
9
|
+
return NO_DATABASE;
|
|
10
|
+
if (!probe.has('mailAccounts'))
|
|
11
|
+
return { status: 'unused', reason: 'notRegistered' };
|
|
12
|
+
const [accounts, messages, submissions] = await Promise.all([
|
|
13
|
+
probe.groupCount('mailAccounts', 'status'),
|
|
14
|
+
probe.has('mailMessages')
|
|
15
|
+
? probe.count('mailMessages')
|
|
16
|
+
: Promise.resolve(0),
|
|
17
|
+
probe.has('mailSubmissions')
|
|
18
|
+
? probe.groupCount('mailSubmissions', 'status')
|
|
19
|
+
: Promise.resolve(new Map()),
|
|
20
|
+
]);
|
|
21
|
+
const connected = countOf(accounts, ['active']);
|
|
22
|
+
const attention = countOf(accounts, ATTENTION_STATES);
|
|
23
|
+
const active = (connected ?? 0) > 0;
|
|
24
|
+
return {
|
|
25
|
+
status: active ? 'active' : 'needsSetup',
|
|
26
|
+
...(active ? {} : { reason: 'noConnectedMailbox' }),
|
|
27
|
+
facts: [
|
|
28
|
+
...(active ? [fact('mailboxes', { count: connected ?? 0 })] : []),
|
|
29
|
+
...((attention ?? 0) > 0
|
|
30
|
+
? [fact('mailboxesNeedAttention', { count: attention ?? 0 })]
|
|
31
|
+
: []),
|
|
32
|
+
],
|
|
33
|
+
metrics: [
|
|
34
|
+
metric('connectedMailboxes', connected),
|
|
35
|
+
metric('mailboxesNeedAttention', attention),
|
|
36
|
+
metric('messages', messages),
|
|
37
|
+
metric('submissions', submissions === null
|
|
38
|
+
? null
|
|
39
|
+
: [...submissions.values()].reduce((sum, count) => sum + count, 0)),
|
|
40
|
+
metric('failedSubmissions', countOf(submissions, ['failed'])),
|
|
41
|
+
],
|
|
42
|
+
};
|
|
43
|
+
},
|
|
44
|
+
};
|
|
45
|
+
const IN_FLIGHT = ['pending', 'preparing', 'submitting', 'retrying'];
|
|
46
|
+
export const notifications = {
|
|
47
|
+
key: 'notifications',
|
|
48
|
+
packages: [
|
|
49
|
+
'@nocobase/app-plugin-notification',
|
|
50
|
+
'@nocobase/app-plugin-notification-in-app',
|
|
51
|
+
'@nocobase/app-plugin-notification-providers',
|
|
52
|
+
'@nocobase/app-plugin-notification-web-push',
|
|
53
|
+
],
|
|
54
|
+
async collect({ probe, config }) {
|
|
55
|
+
if (!probe)
|
|
56
|
+
return NO_DATABASE;
|
|
57
|
+
if (!probe.has('notificationDeliveries'))
|
|
58
|
+
return { status: 'unused', reason: 'notRegistered' };
|
|
59
|
+
const channels = Object.entries(config.get('notification')?.channels ?? {});
|
|
60
|
+
const [dispatches, deliveries, attempts, inApp, inAppRead] = await Promise.all([
|
|
61
|
+
probe.has('notificationDispatches')
|
|
62
|
+
? probe.count('notificationDispatches')
|
|
63
|
+
: Promise.resolve(0),
|
|
64
|
+
probe.groupCount('notificationDeliveries', 'status'),
|
|
65
|
+
probe.has('notificationDeliveryAttempts')
|
|
66
|
+
? probe.count('notificationDeliveryAttempts')
|
|
67
|
+
: Promise.resolve(0),
|
|
68
|
+
probe.has('notificationInAppItems')
|
|
69
|
+
? probe.count('notificationInAppItems')
|
|
70
|
+
: Promise.resolve(undefined),
|
|
71
|
+
probe.has('notificationInAppItems')
|
|
72
|
+
? probe.count('notificationInAppItems', (filter) => filter.date('readAt').notEmpty())
|
|
73
|
+
: Promise.resolve(undefined),
|
|
74
|
+
]);
|
|
75
|
+
const active = channels.length > 0;
|
|
76
|
+
return {
|
|
77
|
+
status: active ? 'active' : 'needsSetup',
|
|
78
|
+
...(active ? {} : { reason: 'noChannel' }),
|
|
79
|
+
facts: active
|
|
80
|
+
? [
|
|
81
|
+
fact('channels', {
|
|
82
|
+
count: channels.length,
|
|
83
|
+
names: channels.map(([name, channel]) => `${name} (${typeof channel.provider === 'string' ? channel.provider : '?'})`),
|
|
84
|
+
}),
|
|
85
|
+
]
|
|
86
|
+
: [],
|
|
87
|
+
metrics: [
|
|
88
|
+
// Accepted by the provider, which is not the same as read or even received.
|
|
89
|
+
metric('acceptedDeliveries', countOf(deliveries, ['accepted'])),
|
|
90
|
+
metric('notifications', dispatches),
|
|
91
|
+
metric('deliveries', deliveries === null
|
|
92
|
+
? null
|
|
93
|
+
: [...deliveries.values()].reduce((sum, count) => sum + count, 0)),
|
|
94
|
+
metric('failedDeliveries', countOf(deliveries, ['failed'])),
|
|
95
|
+
metric('pendingDeliveries', countOf(deliveries, IN_FLIGHT)),
|
|
96
|
+
metric('deliveryAttempts', attempts),
|
|
97
|
+
...(inApp === undefined
|
|
98
|
+
? []
|
|
99
|
+
: [
|
|
100
|
+
metric('inAppMessages', inApp),
|
|
101
|
+
metric('inAppMessagesRead', inAppRead ?? null),
|
|
102
|
+
]),
|
|
103
|
+
metric('channels', channels.length),
|
|
104
|
+
],
|
|
105
|
+
};
|
|
106
|
+
},
|
|
107
|
+
};
|
|
108
|
+
//# sourceMappingURL=messaging.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"messaging.js","sourceRoot":"","sources":["../../../server/capabilities/messaging.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"people.d.ts","sourceRoot":"","sources":["../../../server/capabilities/people.ts"],"names":[],"mappings":"AAIA,OAAO,EAIL,KAAK,mBAAmB,EACzB,MAAM,YAAY,CAAC;AAEpB,eAAO,MAAM,qBAAqB,EAAE,mBAwCnC,CAAC;AAQF,eAAO,MAAM,WAAW,EAAE,mBAkFzB,CAAC"}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
import { fact, metric, NO_DATABASE, } from './types.js';
|
|
2
|
+
export const usersAndOrganizations = {
|
|
3
|
+
key: 'usersAndOrganizations',
|
|
4
|
+
packages: [
|
|
5
|
+
'@nocobase/app-plugin-authentication',
|
|
6
|
+
'@nocobase/app-plugin-users',
|
|
7
|
+
'@nocobase/app-plugin-user-management',
|
|
8
|
+
],
|
|
9
|
+
async collect({ probe }) {
|
|
10
|
+
if (!probe)
|
|
11
|
+
return NO_DATABASE;
|
|
12
|
+
if (!probe.has('user'))
|
|
13
|
+
return { status: 'unused', reason: 'noAccounts' };
|
|
14
|
+
// Deleted accounts stay as records for what they did; they are not accounts any more.
|
|
15
|
+
const accounts = await probe.count('user', (filter) => filter.date('deletedAt').empty());
|
|
16
|
+
const disabled = await probe.count('user', (filter) => filter.and([
|
|
17
|
+
filter.date('deletedAt').empty(),
|
|
18
|
+
filter.date('disabledAt').notEmpty(),
|
|
19
|
+
]));
|
|
20
|
+
const invitations = probe.has('userInvitations')
|
|
21
|
+
? await probe.count('userInvitations')
|
|
22
|
+
: undefined;
|
|
23
|
+
return {
|
|
24
|
+
status: 'active',
|
|
25
|
+
facts: accounts === null ? [] : [fact('accounts', { count: accounts })],
|
|
26
|
+
metrics: [
|
|
27
|
+
metric('accounts', accounts),
|
|
28
|
+
metric('disabledAccounts', disabled),
|
|
29
|
+
...(invitations === undefined
|
|
30
|
+
? []
|
|
31
|
+
: [metric('invitations', invitations)]),
|
|
32
|
+
],
|
|
33
|
+
// NocoBase Core has no organization model of its own yet: departments and teams are the application's.
|
|
34
|
+
parts: [
|
|
35
|
+
{ key: 'accounts', status: 'active' },
|
|
36
|
+
{ key: 'organizations', status: 'unused', reason: 'notProvided' },
|
|
37
|
+
],
|
|
38
|
+
};
|
|
39
|
+
},
|
|
40
|
+
};
|
|
41
|
+
const RULE_COLLECTIONS = [
|
|
42
|
+
{ part: 'sharingRules', collection: 'authorizationSharingRules' },
|
|
43
|
+
{ part: 'restrictionRules', collection: 'authorizationRestrictionRules' },
|
|
44
|
+
{ part: 'defaultAccess', collection: 'authorizationDefaultAccessRules' },
|
|
45
|
+
];
|
|
46
|
+
export const permissions = {
|
|
47
|
+
key: 'permissions',
|
|
48
|
+
packages: [
|
|
49
|
+
'@nocobase/app-plugin-authorization',
|
|
50
|
+
'@nocobase/authorization',
|
|
51
|
+
'@nocobase/app-plugin-authz-default-access',
|
|
52
|
+
'@nocobase/app-plugin-authz-sharing-rules',
|
|
53
|
+
'@nocobase/app-plugin-authz-restriction-rules',
|
|
54
|
+
],
|
|
55
|
+
async collect({ probe, config }) {
|
|
56
|
+
if (!probe)
|
|
57
|
+
return NO_DATABASE;
|
|
58
|
+
if (!probe.has('authorizationPermissionSets'))
|
|
59
|
+
return { status: 'unused', reason: 'notRegistered' };
|
|
60
|
+
const rootSet = config.get('authorization')
|
|
61
|
+
?.permissionSets?.rootSet ?? 'root';
|
|
62
|
+
const sets = await probe.records('authorizationPermissionSets');
|
|
63
|
+
const assignments = probe.has('authorizationPermissionSetAssignments')
|
|
64
|
+
? await probe.groupCount('authorizationPermissionSetAssignments', 'permissionSetKey')
|
|
65
|
+
: new Map();
|
|
66
|
+
// Holding the root set grants everything without a grant, so its own grants say nothing about the application.
|
|
67
|
+
const grantedSets = sets?.filter((set) => set.key !== rootSet);
|
|
68
|
+
const grants = grantedSets?.reduce((sum, set) => sum + grantCount(set.grants), 0) ??
|
|
69
|
+
null;
|
|
70
|
+
const assigned = assignments === null
|
|
71
|
+
? null
|
|
72
|
+
: [...assignments.entries()]
|
|
73
|
+
.filter(([key]) => key !== rootSet)
|
|
74
|
+
.reduce((sum, [, count]) => sum + count, 0);
|
|
75
|
+
const rules = await Promise.all(RULE_COLLECTIONS.map(async ({ part, collection }) => ({
|
|
76
|
+
part,
|
|
77
|
+
count: probe.has(collection)
|
|
78
|
+
? await probe.count(collection)
|
|
79
|
+
: undefined,
|
|
80
|
+
})));
|
|
81
|
+
const parts = [
|
|
82
|
+
{
|
|
83
|
+
key: 'permissionSets',
|
|
84
|
+
status: (grants ?? 0) > 0 ? 'active' : 'needsSetup',
|
|
85
|
+
},
|
|
86
|
+
...rules.map(({ part, count }) => count === undefined
|
|
87
|
+
? { key: part, status: 'unused', reason: 'notRegistered' }
|
|
88
|
+
: (count ?? 0) > 0
|
|
89
|
+
? { key: part, status: 'active' }
|
|
90
|
+
: { key: part, status: 'unused' }),
|
|
91
|
+
];
|
|
92
|
+
const ruleCount = rules.reduce((sum, rule) => sum + (rule.count ?? 0), 0);
|
|
93
|
+
const active = (grants ?? 0) > 0 || ruleCount > 0;
|
|
94
|
+
return {
|
|
95
|
+
status: active ? 'active' : 'needsSetup',
|
|
96
|
+
...(active ? {} : { reason: 'onlyUnrestrictedAccess' }),
|
|
97
|
+
facts: [
|
|
98
|
+
...(grantedSets === undefined
|
|
99
|
+
? []
|
|
100
|
+
: [
|
|
101
|
+
fact('permissionSets', {
|
|
102
|
+
count: grantedSets.length,
|
|
103
|
+
names: grantedSets.map((set) => text(set.title, set.key)),
|
|
104
|
+
}),
|
|
105
|
+
]),
|
|
106
|
+
...(ruleCount > 0 ? [fact('accessRules', { count: ruleCount })] : []),
|
|
107
|
+
],
|
|
108
|
+
metrics: [
|
|
109
|
+
metric('grants', grants),
|
|
110
|
+
metric('permissionSets', grantedSets?.length ?? null),
|
|
111
|
+
metric('assignments', assigned),
|
|
112
|
+
...rules
|
|
113
|
+
.filter((rule) => rule.count !== undefined)
|
|
114
|
+
.map((rule) => metric(rule.part, rule.count ?? null)),
|
|
115
|
+
],
|
|
116
|
+
parts,
|
|
117
|
+
};
|
|
118
|
+
},
|
|
119
|
+
};
|
|
120
|
+
function grantCount(value) {
|
|
121
|
+
let grants = value;
|
|
122
|
+
if (typeof grants === 'string') {
|
|
123
|
+
try {
|
|
124
|
+
grants = JSON.parse(grants);
|
|
125
|
+
}
|
|
126
|
+
catch {
|
|
127
|
+
return 0;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
return Array.isArray(grants) ? grants.length : 0;
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* A stored title, falling back to the record's key. A built-in record stores a translation key as JSON in its text
|
|
134
|
+
* column, which the page translates; anything else is plain text.
|
|
135
|
+
*/
|
|
136
|
+
function text(title, fallback) {
|
|
137
|
+
if (typeof title === 'string' && title.startsWith('{')) {
|
|
138
|
+
try {
|
|
139
|
+
const { key, ns } = JSON.parse(title);
|
|
140
|
+
if (typeof key === 'string' && typeof ns === 'string')
|
|
141
|
+
return { key, ns };
|
|
142
|
+
}
|
|
143
|
+
catch {
|
|
144
|
+
// Not a translation key after all: shown as written.
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
if (typeof title === 'string' && title)
|
|
148
|
+
return title;
|
|
149
|
+
return typeof fallback === 'string' ? fallback : '';
|
|
150
|
+
}
|
|
151
|
+
//# sourceMappingURL=people.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"people.js","sourceRoot":"","sources":["../../../server/capabilities/people.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { type CapabilityCollector } from './types.js';
|
|
2
|
+
export declare const integrations: CapabilityCollector;
|
|
3
|
+
/**
|
|
4
|
+
* What the server can tell about the interface: whether the NocoBase client serves it and which languages the
|
|
5
|
+
* application offers. The page adds the pages and menu entries it registers, which only the browser knows.
|
|
6
|
+
*/
|
|
7
|
+
export declare const userInterface: CapabilityCollector;
|
|
8
|
+
export declare const audit: CapabilityCollector;
|
|
9
|
+
export declare const operations: CapabilityCollector;
|
|
10
|
+
//# sourceMappingURL=platform.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"platform.d.ts","sourceRoot":"","sources":["../../../server/capabilities/platform.ts"],"names":[],"mappings":"AAQA,OAAO,EAIL,KAAK,mBAAmB,EACzB,MAAM,YAAY,CAAC;AAEpB,eAAO,MAAM,YAAY,EAAE,mBA2B1B,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,aAAa,EAAE,mBAsB3B,CAAC;AAEF,eAAO,MAAM,KAAK,EAAE,mBAQnB,CAAC;AAgBF,eAAO,MAAM,UAAU,EAAE,mBAoDxB,CAAC"}
|