@owlmeans/bot 0.1.18-rc.2 → 0.1.18
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 +23 -21
- package/agent-meta/manifest.json +2 -2
- package/agent-meta/skills/bot/SKILL.md +68 -46
- package/build/consts.d.ts +6 -31
- package/build/consts.d.ts.map +1 -1
- package/build/consts.js +10 -36
- package/build/consts.js.map +1 -1
- package/build/consts.local.d.ts +3 -1
- package/build/consts.local.d.ts.map +1 -1
- package/build/consts.local.js +3 -1
- package/build/consts.local.js.map +1 -1
- package/build/helpers/index.d.ts +2 -2
- package/build/helpers/index.js +1 -1
- package/build/helpers/text/types.d.ts +35 -0
- package/build/helpers/text/types.d.ts.map +1 -0
- package/build/helpers/{rule → text}/types.js.map +1 -1
- package/build/helpers/text.d.ts +4 -0
- package/build/helpers/text.d.ts.map +1 -0
- package/build/helpers/text.js +77 -0
- package/build/helpers/text.js.map +1 -0
- package/build/protocols/types.d.ts +2 -17
- package/build/protocols/types.d.ts.map +1 -1
- package/build/protocols.d.ts +1 -1
- package/build/protocols.d.ts.map +1 -1
- package/build/protocols.js +2 -7
- package/build/protocols.js.map +1 -1
- package/build/schemas.d.ts +2 -4
- package/build/schemas.d.ts.map +1 -1
- package/build/schemas.js +3 -31
- package/build/schemas.js.map +1 -1
- package/build/types.d.ts +7 -41
- package/build/types.d.ts.map +1 -1
- package/build/utils/aliases/types.d.ts +0 -5
- package/build/utils/aliases/types.d.ts.map +1 -1
- package/build/utils/aliases.d.ts.map +1 -1
- package/build/utils/aliases.js +0 -5
- package/build/utils/aliases.js.map +1 -1
- package/package.json +7 -7
- package/src/consts.local.ts +4 -1
- package/src/consts.ts +6 -37
- package/src/helpers/index.ts +2 -2
- package/src/helpers/text/types.ts +35 -0
- package/src/helpers/text.ts +91 -0
- package/src/protocols/types.ts +2 -12
- package/src/protocols.ts +4 -21
- package/src/schemas.ts +5 -39
- package/src/types.ts +7 -45
- package/src/utils/aliases/types.ts +0 -1
- package/src/utils/aliases.ts +0 -5
- package/tests/protocols.spec.ts +3 -7
- package/tests/schemas.spec.ts +2 -30
- package/tests/text.spec.ts +101 -0
- package/tests/update.spec.ts +4 -10
- package/build/helpers/rule/types.d.ts +0 -26
- package/build/helpers/rule/types.d.ts.map +0 -1
- package/build/helpers/rule.d.ts +0 -4
- package/build/helpers/rule.d.ts.map +0 -1
- package/build/helpers/rule.js +0 -71
- package/build/helpers/rule.js.map +0 -1
- package/src/helpers/rule/types.ts +0 -26
- package/src/helpers/rule.ts +0 -89
- package/tests/rule.spec.ts +0 -129
- /package/build/helpers/{rule → text}/types.js +0 -0
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { BotTextMatch } from '../consts.js';
|
|
2
|
+
import { BOT_PHRASE_SEPARATOR_PATTERN, BOT_SPACE_PATTERN, BOT_TOKEN_PATTERN } from '../consts.local.js';
|
|
3
|
+
export const createBotTextHelper = () => {
|
|
4
|
+
/**
|
|
5
|
+
* NFKC, then a case fold: upper-casing first maps what lower-casing alone keeps apart (`ß` → `SS`
|
|
6
|
+
* → `ss`, final `ς` → `Σ` → `σ`), and NFKC again recomposes what the case mapping decomposed.
|
|
7
|
+
*/
|
|
8
|
+
const fold = (text) => typeof text === 'string' ? text.normalize('NFKC').toUpperCase().toLowerCase().normalize('NFKC') : '';
|
|
9
|
+
const tokensOf = (text) => fold(text).match(BOT_TOKEN_PATTERN) ?? [];
|
|
10
|
+
/** The folded text with whitespace runs collapsed — the `contains` form and the dedupe key. */
|
|
11
|
+
const spacedOf = (text) => fold(text).replace(BOT_SPACE_PATTERN, ' ').trim();
|
|
12
|
+
const hasPhrase = (tokens, phrase) => {
|
|
13
|
+
for (let at = 0; at + phrase.length <= tokens.length; at++) {
|
|
14
|
+
if (phrase.every((token, offset) => tokens[at + offset] === token)) {
|
|
15
|
+
return true;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
return false;
|
|
19
|
+
};
|
|
20
|
+
const matched = (text, phrases, mode = BotTextMatch.Word) => {
|
|
21
|
+
if (typeof text !== 'string' || text.trim() === '' || !Array.isArray(phrases)) {
|
|
22
|
+
return [];
|
|
23
|
+
}
|
|
24
|
+
// Folded once per text, never per phrase.
|
|
25
|
+
let tokens;
|
|
26
|
+
let spaced;
|
|
27
|
+
const found = (phrase) => {
|
|
28
|
+
if (mode === BotTextMatch.Contains) {
|
|
29
|
+
const needle = spacedOf(phrase);
|
|
30
|
+
spaced ??= spacedOf(text);
|
|
31
|
+
return needle !== '' && spaced.includes(needle);
|
|
32
|
+
}
|
|
33
|
+
const words = tokensOf(phrase);
|
|
34
|
+
tokens ??= tokensOf(text);
|
|
35
|
+
return words.length > 0 && hasPhrase(tokens, words);
|
|
36
|
+
};
|
|
37
|
+
const seen = new Set();
|
|
38
|
+
const result = [];
|
|
39
|
+
for (const phrase of phrases) {
|
|
40
|
+
if (typeof phrase !== 'string') {
|
|
41
|
+
continue;
|
|
42
|
+
}
|
|
43
|
+
const key = spacedOf(phrase);
|
|
44
|
+
if (key === '' || seen.has(key)) {
|
|
45
|
+
continue;
|
|
46
|
+
}
|
|
47
|
+
seen.add(key);
|
|
48
|
+
if (found(phrase)) {
|
|
49
|
+
result.push(phrase);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
return result;
|
|
53
|
+
};
|
|
54
|
+
const phrasesOf = (input) => {
|
|
55
|
+
const items = typeof input === 'string' ? [input] : Array.isArray(input) ? input : [];
|
|
56
|
+
const seen = new Set();
|
|
57
|
+
const result = [];
|
|
58
|
+
for (const item of items) {
|
|
59
|
+
if (typeof item !== 'string') {
|
|
60
|
+
continue;
|
|
61
|
+
}
|
|
62
|
+
for (const part of item.split(BOT_PHRASE_SEPARATOR_PATTERN)) {
|
|
63
|
+
const phrase = part.replace(BOT_SPACE_PATTERN, ' ').trim();
|
|
64
|
+
const key = spacedOf(phrase);
|
|
65
|
+
if (key === '' || seen.has(key)) {
|
|
66
|
+
continue;
|
|
67
|
+
}
|
|
68
|
+
seen.add(key);
|
|
69
|
+
result.push(phrase);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
return result;
|
|
73
|
+
};
|
|
74
|
+
return { fold, tokensOf, matched, phrasesOf };
|
|
75
|
+
};
|
|
76
|
+
export const botTextHelper = createBotTextHelper();
|
|
77
|
+
//# sourceMappingURL=text.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"text.js","sourceRoot":"","sources":["../../src/helpers/text.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { EntrypointProtocol, OpenRequest, OpenValue } from '@owlmeans/entrypoint';
|
|
2
2
|
import type { RouteParent } from '@owlmeans/route';
|
|
3
3
|
import type { BotPlatform } from '../consts.js';
|
|
4
|
-
import type { BotActivity, BotConnection, BotConnectionInput,
|
|
4
|
+
import type { BotActivity, BotConnection, BotConnectionInput, BotSimulateInput, BotSimulateResult } from '../types.js';
|
|
5
5
|
/** Where a bot tree mounts. Every leaf alias derives from `alias` (`<alias>:connection:list` …). */
|
|
6
6
|
export interface BotBaseOptions {
|
|
7
7
|
alias: string;
|
|
@@ -25,17 +25,13 @@ export interface BotProtocolOptions {
|
|
|
25
25
|
export interface BotHookProtocolOptions {
|
|
26
26
|
base: BotBaseOptions;
|
|
27
27
|
}
|
|
28
|
-
/** `:id` of a connection
|
|
28
|
+
/** `:id` of a connection. */
|
|
29
29
|
export interface BotIdParams {
|
|
30
30
|
id: string;
|
|
31
31
|
}
|
|
32
32
|
export interface BotRemoveResult {
|
|
33
33
|
id: string;
|
|
34
34
|
}
|
|
35
|
-
export interface BotRuleListQuery {
|
|
36
|
-
/** Rules of this connection plus the scope-wide ones; every rule of the scope when absent. */
|
|
37
|
-
connection?: string;
|
|
38
|
-
}
|
|
39
35
|
export interface BotActivityQuery {
|
|
40
36
|
connection?: string;
|
|
41
37
|
/** 1 … `BOT_ACTIVITY_LIMIT_MAX`; `BOT_ACTIVITY_LIMIT_DEFAULT` when absent. */
|
|
@@ -82,17 +78,6 @@ export interface BotProtocols {
|
|
|
82
78
|
body: BotSimulateInput;
|
|
83
79
|
}, BotSimulateResult>;
|
|
84
80
|
};
|
|
85
|
-
rule: {
|
|
86
|
-
list: EntrypointProtocol<{
|
|
87
|
-
query: BotRuleListQuery;
|
|
88
|
-
}, BotRule[]>;
|
|
89
|
-
save: EntrypointProtocol<{
|
|
90
|
-
body: BotRuleInput;
|
|
91
|
-
}, BotRule>;
|
|
92
|
-
remove: EntrypointProtocol<{
|
|
93
|
-
params: BotIdParams;
|
|
94
|
-
}, BotRemoveResult>;
|
|
95
|
-
};
|
|
96
81
|
activity: {
|
|
97
82
|
/** Newest first. */
|
|
98
83
|
list: EntrypointProtocol<{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/protocols/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAA;AACtF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAClD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAC/C,OAAO,KAAK,EACV,WAAW,EAAE,aAAa,EAAE,kBAAkB,EAAE,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/protocols/types.ts"],"names":[],"mappings":"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"}
|
package/build/protocols.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { BotHookProtocolOptions, BotHookProtocols, BotProtocolOptions, BotProtocols } from './protocols/types.js';
|
|
2
2
|
/**
|
|
3
|
-
* Declare one managing surface of the bot — connections
|
|
3
|
+
* Declare one managing surface of the bot — connections and activity — as an immutable tree a
|
|
4
4
|
* server binds and a client calls.
|
|
5
5
|
*
|
|
6
6
|
* Every leaf hangs under ONE base that carries the guards and the gate, so they cannot drift apart;
|
package/build/protocols.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"protocols.d.ts","sourceRoot":"","sources":["../src/protocols.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAC0E,sBAAsB,EAC1G,gBAAgB,EAA6B,kBAAkB,EAAE,YAAY,EAC9E,MAAM,sBAAsB,CAAA;
|
|
1
|
+
{"version":3,"file":"protocols.d.ts","sourceRoot":"","sources":["../src/protocols.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAC0E,sBAAsB,EAC1G,gBAAgB,EAA6B,kBAAkB,EAAE,YAAY,EAC9E,MAAM,sBAAsB,CAAA;AAQ7B;;;;;;;GAOG;AACH,eAAO,MAAM,gBAAgB,SAAU,kBAAkB,KAAG,YA6C3D,CAAA;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,oBAAoB,SAAU,sBAAsB,KAAG,gBAqBnE,CAAA"}
|
package/build/protocols.js
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { contract, openProtocol, protocol, typed } from '@owlmeans/entrypoint';
|
|
2
2
|
import { backend, route, RouteMethod } from '@owlmeans/route';
|
|
3
|
-
import { BotActivityQuerySchema, BotChallengeQuerySchema, BotConnectionInputSchema, BotHookParamsSchema, BotIdParamsSchema,
|
|
3
|
+
import { BotActivityQuerySchema, BotChallengeQuerySchema, BotConnectionInputSchema, BotHookParamsSchema, BotIdParamsSchema, BotSimulateInputSchema, } from './schemas.js';
|
|
4
4
|
import { botAliasUtils } from './utils/aliases.js';
|
|
5
5
|
const mountOf = (base) => ({
|
|
6
6
|
...(base.parent != null ? { parent: base.parent } : {}),
|
|
7
7
|
...(base.service != null ? { service: base.service } : {}),
|
|
8
8
|
});
|
|
9
9
|
/**
|
|
10
|
-
* Declare one managing surface of the bot — connections
|
|
10
|
+
* Declare one managing surface of the bot — connections and activity — as an immutable tree a
|
|
11
11
|
* server binds and a client calls.
|
|
12
12
|
*
|
|
13
13
|
* Every leaf hangs under ONE base that carries the guards and the gate, so they cannot drift apart;
|
|
@@ -33,11 +33,6 @@ export const makeBotProtocols = (opts) => {
|
|
|
33
33
|
body: typed(BotSimulateInputSchema),
|
|
34
34
|
}, typed())),
|
|
35
35
|
}),
|
|
36
|
-
rule: Object.freeze({
|
|
37
|
-
list: protocol(leaf(aliases.rule.list, '/rules', RouteMethod.GET), contract.request({ query: typed(BotRuleListQuerySchema) }, typed())),
|
|
38
|
-
save: protocol(leaf(aliases.rule.save, '/rules', RouteMethod.POST), contract.request({ body: typed(BotRuleInputSchema) }, typed())),
|
|
39
|
-
remove: protocol(leaf(aliases.rule.remove, '/rules/:id', RouteMethod.DELETE), contract.request({ params: typed(BotIdParamsSchema) }, typed())),
|
|
40
|
-
}),
|
|
41
36
|
activity: Object.freeze({
|
|
42
37
|
list: protocol(leaf(aliases.activity.list, '/activity', RouteMethod.GET), contract.request({ query: typed(BotActivityQuerySchema) }, typed())),
|
|
43
38
|
}),
|
package/build/protocols.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"protocols.js","sourceRoot":"","sources":["../src/protocols.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAA;AAC9E,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAqB,MAAM,iBAAiB,CAAA;AAChF,OAAO,EACL,sBAAsB,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,mBAAmB,EAAE,iBAAiB,EACjH,
|
|
1
|
+
{"version":3,"file":"protocols.js","sourceRoot":"","sources":["../src/protocols.ts"],"names":[],"mappings":"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"}
|
package/build/schemas.d.ts
CHANGED
|
@@ -1,11 +1,9 @@
|
|
|
1
1
|
import type { JSONSchemaType } from 'ajv';
|
|
2
|
-
import type { BotActivityQuery, BotChallengeQuery, BotHookParams, BotIdParams
|
|
3
|
-
import type { BotConnectionInput,
|
|
2
|
+
import type { BotActivityQuery, BotChallengeQuery, BotHookParams, BotIdParams } from './protocols/types.js';
|
|
3
|
+
import type { BotConnectionInput, BotSimulateInput } from './types.js';
|
|
4
4
|
export declare const BotIdParamsSchema: JSONSchemaType<BotIdParams>;
|
|
5
5
|
export declare const BotConnectionInputSchema: JSONSchemaType<BotConnectionInput>;
|
|
6
|
-
export declare const BotRuleInputSchema: JSONSchemaType<BotRuleInput>;
|
|
7
6
|
export declare const BotSimulateInputSchema: JSONSchemaType<BotSimulateInput>;
|
|
8
|
-
export declare const BotRuleListQuerySchema: JSONSchemaType<BotRuleListQuery>;
|
|
9
7
|
/** A query string arrives as text: the server coerces `limit` before this checks it. */
|
|
10
8
|
export declare const BotActivityQuerySchema: JSONSchemaType<BotActivityQuery>;
|
|
11
9
|
export declare const BotHookParamsSchema: JSONSchemaType<BotHookParams>;
|
package/build/schemas.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../src/schemas.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,KAAK,CAAA;
|
|
1
|
+
{"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../src/schemas.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,KAAK,CAAA;AAKzC,OAAO,KAAK,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAC3G,OAAO,KAAK,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AActE,eAAO,MAAM,iBAAiB,6BAK5B,CAAA;AAEF,eAAO,MAAM,wBAAwB,oCAoBnC,CAAA;AAEF,eAAO,MAAM,sBAAsB,kCAuCjC,CAAA;AAEF,wFAAwF;AACxF,eAAO,MAAM,sBAAsB,kCAQjC,CAAA;AAEF,eAAO,MAAM,mBAAmB,+BAQ9B,CAAA;AAEF;;;GAGG;AACH,eAAO,MAAM,uBAAuB,mCASlC,CAAA"}
|
package/build/schemas.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { BOT_ACTIVITY_LIMIT_MAX, BOT_CREDENTIAL_KEY_PATTERN, BOT_CREDENTIAL_MAX, BOT_CREDENTIALS_MAX, BOT_ID_MAX, BOT_ID_PATTERN,
|
|
1
|
+
import { BOT_ACTIVITY_LIMIT_MAX, BOT_CREDENTIAL_KEY_PATTERN, BOT_CREDENTIAL_MAX, BOT_CREDENTIALS_MAX, BOT_ID_MAX, BOT_ID_PATTERN, BOT_LABEL_MAX, BOT_NAME_MAX, BOT_TEXT_MAX, BotChatKind, BotPlatform, BotTransport, } from './consts.js';
|
|
2
2
|
/**
|
|
3
3
|
* Hand-written request schemas, cast: an optional key is OPTIONAL, never `null` — the wire matches the
|
|
4
|
-
* TypeScript type exactly
|
|
5
|
-
*
|
|
4
|
+
* TypeScript type exactly, and nothing is nullable. `additionalProperties: false` everywhere a client
|
|
5
|
+
* writes.
|
|
6
6
|
*/
|
|
7
7
|
const cast = (schema) => schema;
|
|
8
8
|
const Id = { type: 'string', minLength: 1, maxLength: BOT_ID_MAX, pattern: BOT_ID_PATTERN };
|
|
@@ -36,28 +36,6 @@ export const BotConnectionInputSchema = cast({
|
|
|
36
36
|
required: ['platform', 'label'],
|
|
37
37
|
additionalProperties: false,
|
|
38
38
|
});
|
|
39
|
-
export const BotRuleInputSchema = cast({
|
|
40
|
-
type: 'object',
|
|
41
|
-
properties: {
|
|
42
|
-
id: Id,
|
|
43
|
-
connection: { ...Id, nullable: true },
|
|
44
|
-
name: { type: 'string', minLength: 1, maxLength: BOT_RULE_NAME_MAX },
|
|
45
|
-
keywords: {
|
|
46
|
-
type: 'array',
|
|
47
|
-
items: { type: 'string', minLength: 1, maxLength: BOT_KEYWORD_MAX },
|
|
48
|
-
minItems: 1,
|
|
49
|
-
maxItems: BOT_KEYWORDS_MAX,
|
|
50
|
-
},
|
|
51
|
-
mode: { type: 'string', enum: Object.values(BotMatchMode) },
|
|
52
|
-
action: { type: 'string', enum: Object.values(BotRuleAction) },
|
|
53
|
-
reply: { type: 'string', maxLength: BOT_REPLY_MAX },
|
|
54
|
-
instruction: { type: 'string', maxLength: BOT_INSTRUCTION_MAX },
|
|
55
|
-
enabled: { type: 'boolean' },
|
|
56
|
-
order: { type: 'number' },
|
|
57
|
-
},
|
|
58
|
-
required: ['name', 'keywords', 'action'],
|
|
59
|
-
additionalProperties: false,
|
|
60
|
-
});
|
|
61
39
|
export const BotSimulateInputSchema = cast({
|
|
62
40
|
type: 'object',
|
|
63
41
|
properties: {
|
|
@@ -98,12 +76,6 @@ export const BotSimulateInputSchema = cast({
|
|
|
98
76
|
required: ['text'],
|
|
99
77
|
additionalProperties: false,
|
|
100
78
|
});
|
|
101
|
-
export const BotRuleListQuerySchema = cast({
|
|
102
|
-
type: 'object',
|
|
103
|
-
properties: { connection: Id },
|
|
104
|
-
required: [],
|
|
105
|
-
additionalProperties: false,
|
|
106
|
-
});
|
|
107
79
|
/** A query string arrives as text: the server coerces `limit` before this checks it. */
|
|
108
80
|
export const BotActivityQuerySchema = cast({
|
|
109
81
|
type: 'object',
|
package/build/schemas.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schemas.js","sourceRoot":"","sources":["../src/schemas.ts"],"names":[],"mappings":"AACA,OAAO,EACL,sBAAsB,EAAE,0BAA0B,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,UAAU,EACvG,cAAc,EAAE,
|
|
1
|
+
{"version":3,"file":"schemas.js","sourceRoot":"","sources":["../src/schemas.ts"],"names":[],"mappings":"AACA,OAAO,EACL,sBAAsB,EAAE,0BAA0B,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,UAAU,EACvG,cAAc,EAAE,aAAa,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,YAAY,GAClG,MAAM,aAAa,CAAA;AAIpB;;;;GAIG;AACH,MAAM,IAAI,GAAG,CAAI,MAAc,EAAqB,EAAE,CAAC,MAAsC,CAAA;AAE7F,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,cAAc,EAAE,CAAA;AAC3F,MAAM,IAAI,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,YAAY,EAAE,CAAA;AACxD,4GAA4G;AAC5G,MAAM,UAAU,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE,CAAA;AAE1E,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,CAAc;IACjD,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IACtB,QAAQ,EAAE,CAAC,IAAI,CAAC;IAChB,oBAAoB,EAAE,KAAK;CAC5B,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,wBAAwB,GAAG,IAAI,CAAqB;IAC/D,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE;QACV,EAAE,EAAE,EAAE;QACN,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE;QAC9D,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,EAAE,aAAa,EAAE;QACjE,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE;QAChE,OAAO,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;QAC5B,iGAAiG;QACjG,6BAA6B;QAC7B,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,aAAa,EAAE,EAAE,OAAO,EAAE,0BAA0B,EAAE;YACtD,oBAAoB,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,kBAAkB,EAAE;YACvE,aAAa,EAAE,mBAAmB;YAClC,QAAQ,EAAE,EAAE;SACb;KACF;IACD,QAAQ,EAAE,CAAC,UAAU,EAAE,OAAO,CAAC;IAC/B,oBAAoB,EAAE,KAAK;CAC5B,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAAG,IAAI,CAAmB;IAC3D,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE;QACV,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,EAAE,YAAY,EAAE;QAC/D,IAAI,EAAE;YACJ,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,EAAE,EAAE,UAAU;gBACd,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE;gBAC1D,KAAK,EAAE,IAAI;gBACX,MAAM,EAAE,UAAU;gBAClB,KAAK,EAAE,UAAU;aAClB;YACD,QAAQ,EAAE,EAAE;YACZ,oBAAoB,EAAE,KAAK;SAC5B;QACD,MAAM,EAAE;YACN,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,EAAE,EAAE,UAAU;gBACd,IAAI,EAAE,IAAI;gBACV,QAAQ,EAAE,IAAI;gBACd,GAAG,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;aACzB;YACD,QAAQ,EAAE,EAAE;YACZ,oBAAoB,EAAE,KAAK;SAC5B;QACD,OAAO,EAAE;YACP,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,EAAE,EAAE,UAAU;gBACd,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,YAAY,EAAE;aAClD;YACD,QAAQ,EAAE,CAAC,IAAI,CAAC;YAChB,oBAAoB,EAAE,KAAK;SAC5B;KACF;IACD,QAAQ,EAAE,CAAC,MAAM,CAAC;IAClB,oBAAoB,EAAE,KAAK;CAC5B,CAAC,CAAA;AAEF,wFAAwF;AACxF,MAAM,CAAC,MAAM,sBAAsB,GAAG,IAAI,CAAmB;IAC3D,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE;QACV,UAAU,EAAE,EAAE;QACd,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,sBAAsB,EAAE;KACxE;IACD,QAAQ,EAAE,EAAE;IACZ,oBAAoB,EAAE,KAAK;CAC5B,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG,IAAI,CAAgB;IACrD,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE;QACV,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE;QAC9D,UAAU,EAAE,EAAE;KACf;IACD,QAAQ,EAAE,CAAC,UAAU,EAAE,YAAY,CAAC;IACpC,oBAAoB,EAAE,KAAK;CAC5B,CAAC,CAAA;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,IAAI,CAAoB;IAC7D,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE;QACV,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,YAAY,EAAE;QACvD,kBAAkB,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,kBAAkB,EAAE;QACrE,eAAe,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,kBAAkB,EAAE;KACnE;IACD,QAAQ,EAAE,EAAE;IACZ,oBAAoB,EAAE,IAAI;CAC3B,CAAC,CAAA"}
|
package/build/types.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { BotActionKind, BotChatKind, BotConnectionStatus,
|
|
1
|
+
import type { BotActionKind, BotChatKind, BotConnectionStatus, BotPlatform, BotReceiveMode, BotTransport, BotUpdateKind } from './consts.js';
|
|
2
2
|
/** One credential a platform needs — what the panel draws an input for. */
|
|
3
3
|
export interface BotCredentialField {
|
|
4
4
|
key: string;
|
|
@@ -109,42 +109,6 @@ export interface BotCommand {
|
|
|
109
109
|
name: string;
|
|
110
110
|
args: string;
|
|
111
111
|
}
|
|
112
|
-
/** A keyword group: the keywords and what the bot does with a message that matches them. */
|
|
113
|
-
export interface BotRule {
|
|
114
|
-
id: string;
|
|
115
|
-
scope: string;
|
|
116
|
-
/** One connection only; `null` or absent applies to every connection of the scope. */
|
|
117
|
-
connection?: string | null;
|
|
118
|
-
name: string;
|
|
119
|
-
keywords: string[];
|
|
120
|
-
mode: BotMatchMode;
|
|
121
|
-
action: BotRuleAction;
|
|
122
|
-
/** The fixed text of `reply` / `warn` (and the confirmation of `record`). */
|
|
123
|
-
reply?: string;
|
|
124
|
-
/** What the product's agent is told for this group. */
|
|
125
|
-
instruction?: string;
|
|
126
|
-
enabled: boolean;
|
|
127
|
-
order: number;
|
|
128
|
-
createdAt: string;
|
|
129
|
-
updatedAt: string;
|
|
130
|
-
}
|
|
131
|
-
export interface BotRuleInput {
|
|
132
|
-
id?: string;
|
|
133
|
-
connection?: string | null;
|
|
134
|
-
name: string;
|
|
135
|
-
keywords: string[];
|
|
136
|
-
mode?: BotMatchMode;
|
|
137
|
-
action: BotRuleAction;
|
|
138
|
-
reply?: string;
|
|
139
|
-
instruction?: string;
|
|
140
|
-
enabled?: boolean;
|
|
141
|
-
order?: number;
|
|
142
|
-
}
|
|
143
|
-
/** A rule a message matched, with the rule's keywords (as stored) that matched it. */
|
|
144
|
-
export interface BotMatch {
|
|
145
|
-
rule: BotRule;
|
|
146
|
-
keywords: string[];
|
|
147
|
-
}
|
|
148
112
|
/** A normalized inbound update, as a handler receives it. */
|
|
149
113
|
export interface BotUpdate {
|
|
150
114
|
id: string;
|
|
@@ -158,8 +122,6 @@ export interface BotUpdate {
|
|
|
158
122
|
command?: BotCommand;
|
|
159
123
|
/** A direct message, a mention of the bot, or a reply to it. */
|
|
160
124
|
addressed: boolean;
|
|
161
|
-
/** Enabled rules of the scope (and connection) the text matches, by order. */
|
|
162
|
-
matches: BotMatch[];
|
|
163
125
|
receivedAt: string;
|
|
164
126
|
raw?: unknown;
|
|
165
127
|
}
|
|
@@ -180,8 +142,12 @@ export interface BotActivity {
|
|
|
180
142
|
action: BotActionKind;
|
|
181
143
|
target?: BotActivityTarget;
|
|
182
144
|
text?: string;
|
|
183
|
-
/**
|
|
184
|
-
|
|
145
|
+
/**
|
|
146
|
+
* An opaque reference the acting handler passed (`{ ref }` on the action) — e.g. the id of the
|
|
147
|
+
* application's own record it followed, such as the keyword group a message matched. The bot
|
|
148
|
+
* packages never read it.
|
|
149
|
+
*/
|
|
150
|
+
ref?: string;
|
|
185
151
|
ok: boolean;
|
|
186
152
|
/** Why it failed, as a short sentence a person reads. */
|
|
187
153
|
error?: string;
|
package/build/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EAAE,WAAW,EAAE,mBAAmB,EAAE,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/utils/aliases/types.ts"],"names":[],"mappings":"AAAA,mGAAmG;AACnG,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,UAAU,EAAE;QACnB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;QACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;QACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;QACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;QACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;KAC1B,CAAA;IACD,QAAQ,CAAC,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/utils/aliases/types.ts"],"names":[],"mappings":"AAAA,mGAAmG;AACnG,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,UAAU,EAAE;QACnB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;QACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;QACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;QACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;QACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;KAC1B,CAAA;IACD,QAAQ,CAAC,QAAQ,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAA;CAC7C;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;CAC3B;AAED,MAAM,WAAW,aAAa;IAC5B,sFAAsF;IACtF,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,UAAU,CAAA;IACxC,cAAc,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,cAAc,CAAA;CACjD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aliases.d.ts","sourceRoot":"","sources":["../../src/utils/aliases.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAc,aAAa,EAAkB,MAAM,oBAAoB,CAAA;AAEnF,eAAO,MAAM,mBAAmB,QAAO,
|
|
1
|
+
{"version":3,"file":"aliases.d.ts","sourceRoot":"","sources":["../../src/utils/aliases.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAc,aAAa,EAAkB,MAAM,oBAAoB,CAAA;AAEnF,eAAO,MAAM,mBAAmB,QAAO,aAoBtC,CAAA;AAED,eAAO,MAAM,aAAa,eAAwB,CAAA"}
|
package/build/utils/aliases.js
CHANGED
|
@@ -8,11 +8,6 @@ export const createBotAliasUtils = () => {
|
|
|
8
8
|
remove: `${base}:connection:remove`,
|
|
9
9
|
simulate: `${base}:connection:simulate`,
|
|
10
10
|
}),
|
|
11
|
-
rule: Object.freeze({
|
|
12
|
-
list: `${base}:rule:list`,
|
|
13
|
-
save: `${base}:rule:save`,
|
|
14
|
-
remove: `${base}:rule:remove`,
|
|
15
|
-
}),
|
|
16
11
|
activity: Object.freeze({ list: `${base}:activity:list` }),
|
|
17
12
|
});
|
|
18
13
|
const botHookAliases = (base) => Object.freeze({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aliases.js","sourceRoot":"","sources":["../../src/utils/aliases.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,mBAAmB,GAAG,GAAkB,EAAE;IACrD,MAAM,UAAU,GAAG,CAAC,IAAY,EAAc,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC;QAC7D,IAAI;QACJ,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC;YACxB,IAAI,EAAE,GAAG,IAAI,kBAAkB;YAC/B,IAAI,EAAE,GAAG,IAAI,kBAAkB;YAC/B,MAAM,EAAE,GAAG,IAAI,oBAAoB;YACnC,MAAM,EAAE,GAAG,IAAI,oBAAoB;YACnC,QAAQ,EAAE,GAAG,IAAI,sBAAsB;SACxC,CAAC;QACF,
|
|
1
|
+
{"version":3,"file":"aliases.js","sourceRoot":"","sources":["../../src/utils/aliases.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,mBAAmB,GAAG,GAAkB,EAAE;IACrD,MAAM,UAAU,GAAG,CAAC,IAAY,EAAc,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC;QAC7D,IAAI;QACJ,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC;YACxB,IAAI,EAAE,GAAG,IAAI,kBAAkB;YAC/B,IAAI,EAAE,GAAG,IAAI,kBAAkB;YAC/B,MAAM,EAAE,GAAG,IAAI,oBAAoB;YACnC,MAAM,EAAE,GAAG,IAAI,oBAAoB;YACnC,QAAQ,EAAE,GAAG,IAAI,sBAAsB;SACxC,CAAC;QACF,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,GAAG,IAAI,gBAAgB,EAAE,CAAC;KAC3D,CAAC,CAAA;IAEF,MAAM,cAAc,GAAG,CAAC,IAAY,EAAkB,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC;QACrE,IAAI;QACJ,OAAO,EAAE,GAAG,IAAI,UAAU;QAC1B,SAAS,EAAE,GAAG,IAAI,YAAY;KAC/B,CAAC,CAAA;IAEF,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,CAAA;AACvC,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,aAAa,GAAG,mBAAmB,EAAE,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@owlmeans/bot",
|
|
3
|
-
"version": "0.1.18
|
|
3
|
+
"version": "0.1.18",
|
|
4
4
|
"license": "MIT",
|
|
5
|
-
"description": "Runtime-free, browser-safe contract of OwlMeans chat bots
|
|
5
|
+
"description": "Runtime-free, browser-safe contract of OwlMeans chat bots \u2014 platforms (Telegram, WhatsApp, Discord, Slack) and their descriptors, connections, normalized updates and activity, the Unicode-aware text helper and command parser, the operator/member and hook protocol trees with their AJV schemas, and the bot error family.",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"scripts": {
|
|
8
8
|
"build": "tsc -b",
|
|
@@ -23,16 +23,16 @@
|
|
|
23
23
|
}
|
|
24
24
|
},
|
|
25
25
|
"dependencies": {
|
|
26
|
-
"@owlmeans/context": "^0.1.18
|
|
27
|
-
"@owlmeans/entrypoint": "^0.1.18
|
|
28
|
-
"@owlmeans/error": "^0.1.18
|
|
29
|
-
"@owlmeans/route": "^0.1.18
|
|
26
|
+
"@owlmeans/context": "^0.1.18",
|
|
27
|
+
"@owlmeans/entrypoint": "^0.1.18",
|
|
28
|
+
"@owlmeans/error": "^0.1.18",
|
|
29
|
+
"@owlmeans/route": "^0.1.18"
|
|
30
30
|
},
|
|
31
31
|
"peerDependencies": {
|
|
32
32
|
"ajv": "*"
|
|
33
33
|
},
|
|
34
34
|
"devDependencies": {
|
|
35
|
-
"@owlmeans/dep-config": "
|
|
35
|
+
"@owlmeans/dep-config": "^0.1.18",
|
|
36
36
|
"@types/bun": "^1.4.2",
|
|
37
37
|
"ajv": "^8.20.0",
|
|
38
38
|
"nodemon": "^3.1.14",
|
package/src/consts.local.ts
CHANGED
|
@@ -4,9 +4,12 @@
|
|
|
4
4
|
*/
|
|
5
5
|
export const BOT_TOKEN_PATTERN = /[\p{L}\p{M}\p{N}_]+/gu
|
|
6
6
|
|
|
7
|
-
/** Any whitespace run — collapsed to one space before a `contains` comparison and in a
|
|
7
|
+
/** Any whitespace run — collapsed to one space before a `contains` comparison and in a typed phrase. */
|
|
8
8
|
export const BOT_SPACE_PATTERN = /\s+/gu
|
|
9
9
|
|
|
10
|
+
/** What separates the phrases of a typed list: commas (ASCII, full-width, ideographic) and line breaks. */
|
|
11
|
+
export const BOT_PHRASE_SEPARATOR_PATTERN = /[,,、\r\n]+/u
|
|
12
|
+
|
|
10
13
|
/**
|
|
11
14
|
* A `/command`, optionally addressed `@ToBot`, ending at whitespace or at the end of the text, then
|
|
12
15
|
* its arguments.
|
package/src/consts.ts
CHANGED
|
@@ -56,24 +56,8 @@ export enum BotActionKind {
|
|
|
56
56
|
Note = 'note',
|
|
57
57
|
}
|
|
58
58
|
|
|
59
|
-
/**
|
|
60
|
-
|
|
61
|
-
*
|
|
62
|
-
* A product vocabulary, not a platform one: `warn` is a reply, `record` is a request record of the
|
|
63
|
-
* product, `agent` hands the message to the product's own agent.
|
|
64
|
-
*/
|
|
65
|
-
export enum BotRuleAction {
|
|
66
|
-
Delete = 'delete',
|
|
67
|
-
Warn = 'warn',
|
|
68
|
-
Mute = 'mute',
|
|
69
|
-
Ban = 'ban',
|
|
70
|
-
Reply = 'reply',
|
|
71
|
-
Record = 'record',
|
|
72
|
-
Agent = 'agent',
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
/** How a rule's keywords are compared with a message. */
|
|
76
|
-
export enum BotMatchMode {
|
|
59
|
+
/** How `botTextHelper.matched` compares a phrase with a message. */
|
|
60
|
+
export enum BotTextMatch {
|
|
77
61
|
/** Whole words and whole phrases (consecutive words), Unicode-aware and case-insensitive. */
|
|
78
62
|
Word = 'word',
|
|
79
63
|
/** A case-insensitive substring — also the mode for scripts written without spaces. */
|
|
@@ -93,7 +77,7 @@ export enum BotChatKind {
|
|
|
93
77
|
Channel = 'channel',
|
|
94
78
|
}
|
|
95
79
|
|
|
96
|
-
/** The longest identifier (connection,
|
|
80
|
+
/** The longest identifier (connection, activity, update) the wire accepts. */
|
|
97
81
|
export const BOT_ID_MAX = 128
|
|
98
82
|
|
|
99
83
|
/** What an identifier on the wire may look like — it is also a path segment of the hook URL. */
|
|
@@ -102,21 +86,6 @@ export const BOT_ID_PATTERN = '^[A-Za-z0-9][A-Za-z0-9_.:-]*$'
|
|
|
102
86
|
/** The longest connection label. */
|
|
103
87
|
export const BOT_LABEL_MAX = 120
|
|
104
88
|
|
|
105
|
-
/** The longest rule (keyword group) name. */
|
|
106
|
-
export const BOT_RULE_NAME_MAX = 120
|
|
107
|
-
|
|
108
|
-
/** How many keywords one rule keeps. */
|
|
109
|
-
export const BOT_KEYWORDS_MAX = 200
|
|
110
|
-
|
|
111
|
-
/** The longest keyword or phrase, in code points. */
|
|
112
|
-
export const BOT_KEYWORD_MAX = 100
|
|
113
|
-
|
|
114
|
-
/** The longest fixed reply text of a rule. */
|
|
115
|
-
export const BOT_REPLY_MAX = 4096
|
|
116
|
-
|
|
117
|
-
/** The longest instruction a rule hands to the product's agent. */
|
|
118
|
-
export const BOT_INSTRUCTION_MAX = 4000
|
|
119
|
-
|
|
120
89
|
/** The longest message text the simulator accepts. */
|
|
121
90
|
export const BOT_TEXT_MAX = 4096
|
|
122
91
|
|
|
@@ -140,9 +109,9 @@ export const BOT_ACTIVITY_LIMIT_DEFAULT = 50
|
|
|
140
109
|
|
|
141
110
|
/**
|
|
142
111
|
* The permission the MEMBER mount's gate requires (`gates: { alias: OIDC_GATE, params:
|
|
143
|
-
* [BOT_MANAGE_PERMISSION] }`) — who may connect an organization's bots
|
|
144
|
-
*
|
|
145
|
-
*
|
|
112
|
+
* [BOT_MANAGE_PERMISSION] }`) — who may connect an organization's bots and read its bot activity.
|
|
113
|
+
* In a product whose users work in organizations, an organization's owners hold it by default;
|
|
114
|
+
* otherwise it is only ever granted explicitly.
|
|
146
115
|
*/
|
|
147
116
|
export const BOT_MANAGE_PERMISSION = 'bot--manage'
|
|
148
117
|
|
package/src/helpers/index.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export type * from './
|
|
1
|
+
export type * from './text/types.js'
|
|
2
2
|
export type * from './command/types.js'
|
|
3
3
|
export type * from './platform/types.js'
|
|
4
|
-
export * from './
|
|
4
|
+
export * from './text.js'
|
|
5
5
|
export * from './command.js'
|
|
6
6
|
export * from './platform.js'
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { BotTextMatch } from '../../consts.js'
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Unicode-aware comparison of a message with phrases — the pure primitive a bot handler matches
|
|
5
|
+
* message text with (the application's own keyword groups, a command's argument, a reply's text).
|
|
6
|
+
*
|
|
7
|
+
* Both sides fold the same way: NFKC, then a case fold, then NFKC again (`ß` ≡ `ss`, `Ё` ≡ `ё`,
|
|
8
|
+
* full-width ≡ ASCII, ligatures ≡ their letters); accents are kept (`cafe` is not `café`).
|
|
9
|
+
*/
|
|
10
|
+
export interface BotTextHelper {
|
|
11
|
+
/** The folded form of a text: NFKC, upper- then lower-cased, NFKC again. */
|
|
12
|
+
fold: (text: string) => string
|
|
13
|
+
/**
|
|
14
|
+
* The folded tokens of a text: runs of letters, combining marks, digits and `_`; everything else
|
|
15
|
+
* (punctuation, spaces, symbols) splits. `[]` for a text with none.
|
|
16
|
+
*/
|
|
17
|
+
tokensOf: (text: string) => string[]
|
|
18
|
+
/**
|
|
19
|
+
* The phrases found in `text`, in the order they were given, each once — a phrase whose folded
|
|
20
|
+
* form repeats an earlier one is skipped, so the first spelling answers.
|
|
21
|
+
*
|
|
22
|
+
* `word` (the default): the phrase's tokens appear in the text as CONSECUTIVE tokens (`free money`
|
|
23
|
+
* matches `FREE, money!`, not `money for free`), and a phrase with no letters or digits never
|
|
24
|
+
* matches. `contains`: the folded phrase is a substring of the folded text, whitespace runs of both
|
|
25
|
+
* collapsed to one space — also the mode for scripts written without spaces (Chinese, Japanese,
|
|
26
|
+
* Thai). An empty or blank phrase never matches; an empty text matches nothing.
|
|
27
|
+
*/
|
|
28
|
+
matched: (text: string, phrases: readonly string[], mode?: BotTextMatch) => string[]
|
|
29
|
+
/**
|
|
30
|
+
* A phrase list as a person typed it: every item split on commas and line breaks, each phrase
|
|
31
|
+
* trimmed with inner whitespace runs collapsed to one space, empties dropped, and a phrase whose
|
|
32
|
+
* folded form repeats an earlier one dropped (the first spelling kept).
|
|
33
|
+
*/
|
|
34
|
+
phrasesOf: (input: string | readonly string[]) => string[]
|
|
35
|
+
}
|