@stratusagent/agents 0.13.6 → 0.14.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/dist/credential-env.d.ts +41 -0
- package/dist/credential-env.d.ts.map +1 -0
- package/dist/credential-env.js +77 -0
- package/dist/credential-env.js.map +1 -0
- package/dist/events.d.ts +66 -0
- package/dist/events.d.ts.map +1 -0
- package/dist/events.js +180 -0
- package/dist/events.js.map +1 -0
- package/dist/index.d.ts +5 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -2
- package/dist/index.js.map +1 -1
- package/dist/schedules.d.ts +14 -4
- package/dist/schedules.d.ts.map +1 -1
- package/dist/schedules.js +15 -0
- package/dist/schedules.js.map +1 -1
- package/dist/tools/channel.d.ts +44 -0
- package/dist/tools/channel.d.ts.map +1 -0
- package/dist/tools/channel.js +90 -0
- package/dist/tools/channel.js.map +1 -0
- package/dist/tools/credentials.d.ts +1 -0
- package/dist/tools/credentials.d.ts.map +1 -1
- package/dist/tools/credentials.js +16 -4
- package/dist/tools/credentials.js.map +1 -1
- package/dist/tools/gateway-only.d.ts.map +1 -1
- package/dist/tools/gateway-only.js +4 -1
- package/dist/tools/gateway-only.js.map +1 -1
- package/dist/tools/message.d.ts +16 -0
- package/dist/tools/message.d.ts.map +1 -1
- package/dist/tools/message.js +64 -7
- package/dist/tools/message.js.map +1 -1
- package/dist/tools/schedule.d.ts +4 -2
- package/dist/tools/schedule.d.ts.map +1 -1
- package/dist/tools/schedule.js +62 -2
- package/dist/tools/schedule.js.map +1 -1
- package/package.json +2 -2
- package/skills/stratus/SKILL.md +16 -10
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Which environment variables a stored credential may be put in for a shell
|
|
3
|
+
* command, decided once for every surface that sets or asks for one: tool-shell
|
|
4
|
+
* when it runs the command, the gateway when an agent asks for a key with
|
|
5
|
+
* `env`, the CLI when an operator binds one, and the credential link page.
|
|
6
|
+
* Two copies of this list drifted is the reason it lives here: a name the
|
|
7
|
+
* request-time check let through and the command-time check refused would
|
|
8
|
+
* be a form an approver answered for nothing.
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Environment variables that carry options for a command the permission
|
|
12
|
+
* engine judges by its arguments. tool-shell never passes them to a child.
|
|
13
|
+
*/
|
|
14
|
+
export declare const COMMAND_OPTION_VARIABLES: readonly ["RIPGREP_CONFIG_PATH", "GREP_OPTIONS", "GZIP"];
|
|
15
|
+
/**
|
|
16
|
+
* Variables that make git use a repository other than the one the command
|
|
17
|
+
* runs in, which the permission engine finds from the working directory.
|
|
18
|
+
* Identity and config (`GIT_CONFIG_GLOBAL`, author names) are untouched.
|
|
19
|
+
*/
|
|
20
|
+
export declare const GIT_REPOSITORY_VARIABLES: readonly string[];
|
|
21
|
+
/**
|
|
22
|
+
* Variables that make a shell run code before the command, or read it
|
|
23
|
+
* differently from the permission engine. `CDPATH` sends a relative `cd`
|
|
24
|
+
* somewhere other than the working directory the engine follows it from.
|
|
25
|
+
* `BASHOPTS`, `SHELLOPTS` and `POSIXLY_CORRECT` switch on shell options at
|
|
26
|
+
* startup (`cdable_vars` makes `cd HOME` follow `$HOME`).
|
|
27
|
+
*/
|
|
28
|
+
export declare const SHELL_STARTUP_VARIABLES: readonly string[];
|
|
29
|
+
/**
|
|
30
|
+
* Why `variable` cannot carry a credential into a shell command, or
|
|
31
|
+
* undefined when it can. A sentence for whoever chose it.
|
|
32
|
+
*
|
|
33
|
+
* `requested: true` is the rule for a name an agent asked for
|
|
34
|
+
* (`credential.request`'s `env`), which must also look like a secret's.
|
|
35
|
+
* Without it, the operator's rule: only the refused list applies, the same
|
|
36
|
+
* one tool-shell's `credentialsEnv` has always kept.
|
|
37
|
+
*/
|
|
38
|
+
export declare const credentialVariableProblem: (variable: string, options?: {
|
|
39
|
+
requested?: boolean;
|
|
40
|
+
}) => string | undefined;
|
|
41
|
+
//# sourceMappingURL=credential-env.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"credential-env.d.ts","sourceRoot":"","sources":["../src/credential-env.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH;;;GAGG;AAKH,eAAO,MAAM,wBAAwB,0DAA2D,CAAC;AAEjG;;;;GAIG;AACH,eAAO,MAAM,wBAAwB,EAAE,SAAS,MAAM,EAErD,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,uBAAuB,EAAE,SAAS,MAAM,EAEpD,CAAC;AAiBF;;;;;;;;GAQG;AACH,eAAO,MAAM,yBAAyB,GAAI,UAAU,MAAM,EAAE,UAAS;IAAE,SAAS,CAAC,EAAE,OAAO,CAAA;CAAO,KAAG,MAAM,GAAG,SAkB5G,CAAC"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Which environment variables a stored credential may be put in for a shell
|
|
3
|
+
* command, decided once for every surface that sets or asks for one: tool-shell
|
|
4
|
+
* when it runs the command, the gateway when an agent asks for a key with
|
|
5
|
+
* `env`, the CLI when an operator binds one, and the credential link page.
|
|
6
|
+
* Two copies of this list drifted is the reason it lives here: a name the
|
|
7
|
+
* request-time check let through and the command-time check refused would
|
|
8
|
+
* be a form an approver answered for nothing.
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Environment variables that carry options for a command the permission
|
|
12
|
+
* engine judges by its arguments. tool-shell never passes them to a child.
|
|
13
|
+
*/
|
|
14
|
+
// Not POSIXLY_CORRECT here: macOS's /bin/sh exports it to every command it
|
|
15
|
+
// runs, so the permission engine reads arguments both ways instead (see
|
|
16
|
+
// `operandsToo` in @stratusagent/permissions). It is a shell startup variable
|
|
17
|
+
// below, which keeps it out of a credential.
|
|
18
|
+
export const COMMAND_OPTION_VARIABLES = ['RIPGREP_CONFIG_PATH', 'GREP_OPTIONS', 'GZIP'];
|
|
19
|
+
/**
|
|
20
|
+
* Variables that make git use a repository other than the one the command
|
|
21
|
+
* runs in, which the permission engine finds from the working directory.
|
|
22
|
+
* Identity and config (`GIT_CONFIG_GLOBAL`, author names) are untouched.
|
|
23
|
+
*/
|
|
24
|
+
export const GIT_REPOSITORY_VARIABLES = [
|
|
25
|
+
'GIT_DIR', 'GIT_WORK_TREE', 'GIT_COMMON_DIR', 'GIT_INDEX_FILE', 'GIT_OBJECT_DIRECTORY', 'GIT_ALTERNATE_OBJECT_DIRECTORIES', 'GIT_NAMESPACE',
|
|
26
|
+
];
|
|
27
|
+
/**
|
|
28
|
+
* Variables that make a shell run code before the command, or read it
|
|
29
|
+
* differently from the permission engine. `CDPATH` sends a relative `cd`
|
|
30
|
+
* somewhere other than the working directory the engine follows it from.
|
|
31
|
+
* `BASHOPTS`, `SHELLOPTS` and `POSIXLY_CORRECT` switch on shell options at
|
|
32
|
+
* startup (`cdable_vars` makes `cd HOME` follow `$HOME`).
|
|
33
|
+
*/
|
|
34
|
+
export const SHELL_STARTUP_VARIABLES = [
|
|
35
|
+
'BASH_ENV', 'ENV', 'ZDOTDIR', 'CDPATH', 'BASHOPTS', 'SHELLOPTS', 'POSIXLY_CORRECT',
|
|
36
|
+
];
|
|
37
|
+
/** Variables a credential must not replace: what finds programs and where they keep their files. */
|
|
38
|
+
const RESERVED_CREDENTIAL_VARIABLES = ['PATH', 'HOME', 'SHELL', 'USER', 'LOGNAME', 'TMPDIR', 'PWD', 'IFS'];
|
|
39
|
+
const VARIABLE_NAME = /^[A-Za-z_][A-Za-z0-9_]*$/;
|
|
40
|
+
/**
|
|
41
|
+
* What a variable an agent names must look like: a secret's. The model picks
|
|
42
|
+
* the name, and a variable can change what an allowed command does
|
|
43
|
+
* (`GIT_SSH_COMMAND`, `NODE_OPTIONS`, `LD_PRELOAD`), which would get around
|
|
44
|
+
* the permission engine's judgment of the command text. Every name a CLI
|
|
45
|
+
* reads a token from that we know of has one of these endings. Anything
|
|
46
|
+
* else (`DATABASE_URL`) is an operator's call, made on the machine.
|
|
47
|
+
*/
|
|
48
|
+
const REQUESTED_VARIABLE_NAME = /^[A-Z][A-Z0-9_]*_(TOKEN|KEY|SECRET|PASSWORD|SID|ID)$/;
|
|
49
|
+
/**
|
|
50
|
+
* Why `variable` cannot carry a credential into a shell command, or
|
|
51
|
+
* undefined when it can. A sentence for whoever chose it.
|
|
52
|
+
*
|
|
53
|
+
* `requested: true` is the rule for a name an agent asked for
|
|
54
|
+
* (`credential.request`'s `env`), which must also look like a secret's.
|
|
55
|
+
* Without it, the operator's rule: only the refused list applies, the same
|
|
56
|
+
* one tool-shell's `credentialsEnv` has always kept.
|
|
57
|
+
*/
|
|
58
|
+
export const credentialVariableProblem = (variable, options = {}) => {
|
|
59
|
+
if (!VARIABLE_NAME.test(variable)) {
|
|
60
|
+
return `${JSON.stringify(variable)} is not an environment variable name. Use letters, digits and underscores, not starting with a digit.`;
|
|
61
|
+
}
|
|
62
|
+
if (RESERVED_CREDENTIAL_VARIABLES.includes(variable)
|
|
63
|
+
|| COMMAND_OPTION_VARIABLES.includes(variable)
|
|
64
|
+
|| SHELL_STARTUP_VARIABLES.includes(variable)
|
|
65
|
+
|| GIT_REPOSITORY_VARIABLES.includes(variable)
|
|
66
|
+
|| variable.startsWith('BASH_FUNC_')) {
|
|
67
|
+
return `A credential can't be put in ${variable}, because it changes how commands are found or run. `
|
|
68
|
+
+ 'Use the variable a CLI reads its token from, such as GH_TOKEN.';
|
|
69
|
+
}
|
|
70
|
+
if (options.requested === true && !REQUESTED_VARIABLE_NAME.test(variable)) {
|
|
71
|
+
return `${variable} doesn't look like a secret's variable. An agent may only ask for one in uppercase ending in `
|
|
72
|
+
+ '_TOKEN, _KEY, _SECRET, _PASSWORD, _SID or _ID (GH_TOKEN, TWILIO_AUTH_TOKEN). '
|
|
73
|
+
+ 'Any other name is your operator\'s to bind on the machine with `stratus credential env`.';
|
|
74
|
+
}
|
|
75
|
+
return undefined;
|
|
76
|
+
};
|
|
77
|
+
//# sourceMappingURL=credential-env.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"credential-env.js","sourceRoot":"","sources":["../src/credential-env.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH;;;GAGG;AACH,2EAA2E;AAC3E,wEAAwE;AACxE,8EAA8E;AAC9E,6CAA6C;AAC7C,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,qBAAqB,EAAE,cAAc,EAAE,MAAM,CAAU,CAAC;AAEjG;;;;GAIG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAsB;IACzD,SAAS,EAAE,eAAe,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,kCAAkC,EAAE,eAAe;CAC5I,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAsB;IACxD,UAAU,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,WAAW,EAAE,iBAAiB;CACnF,CAAC;AAEF,oGAAoG;AACpG,MAAM,6BAA6B,GAAsB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;AAE9H,MAAM,aAAa,GAAG,0BAA0B,CAAC;AAEjD;;;;;;;GAOG;AACH,MAAM,uBAAuB,GAAG,sDAAsD,CAAC;AAEvF;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,QAAgB,EAAE,UAAmC,EAAE,EAAsB,EAAE;IACvH,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;QAClC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,uGAAuG,CAAC;IAC5I,CAAC;IACD,IAAI,6BAA6B,CAAC,QAAQ,CAAC,QAAQ,CAAC;WAC9C,wBAA8C,CAAC,QAAQ,CAAC,QAAQ,CAAC;WAClE,uBAAuB,CAAC,QAAQ,CAAC,QAAQ,CAAC;WAC1C,wBAAwB,CAAC,QAAQ,CAAC,QAAQ,CAAC;WAC3C,QAAQ,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QACvC,OAAO,gCAAgC,QAAQ,sDAAsD;cACjG,gEAAgE,CAAC;IACvE,CAAC;IACD,IAAI,OAAO,CAAC,SAAS,KAAK,IAAI,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1E,OAAO,GAAG,QAAQ,+FAA+F;cAC7G,+EAA+E;cAC/E,0FAA0F,CAAC;IACjG,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC,CAAC"}
|
package/dist/events.d.ts
ADDED
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import type { JsonValue } from '@stratusagent/core';
|
|
2
|
+
/**
|
|
3
|
+
* An event as a trigger sees it: CloudEvents 1.0 context attributes plus its
|
|
4
|
+
* data. Attributes are strings, by their CloudEvents names (`id`, `source`,
|
|
5
|
+
* `specversion`, `type`, and optionally `subject`, `time`, and extensions
|
|
6
|
+
* such as the GitHub mapping's `actor` and `author`). Every value here came
|
|
7
|
+
* from outside: a valid signature proves who delivered it, not who wrote it.
|
|
8
|
+
*/
|
|
9
|
+
export interface InboundEvent {
|
|
10
|
+
attributes: Readonly<Record<string, string>>;
|
|
11
|
+
data?: JsonValue;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* A filter expression, in the six dialects every CloudEvents Subscriptions
|
|
15
|
+
* implementation must support (Subscriptions API 0.1, 3.2.4.1.1). Matching is
|
|
16
|
+
* case-sensitive. No code, no regex, no model: it runs on every delivery,
|
|
17
|
+
* before anything else can spend money.
|
|
18
|
+
*
|
|
19
|
+
* One Stratus extension: a key starting `data.` is a dotted path into the
|
|
20
|
+
* event's JSON data, and matches only a string there. The Codex use case
|
|
21
|
+
* needs it, because a Codex result and its in-progress summary differ only in
|
|
22
|
+
* the first line of the comment body.
|
|
23
|
+
*/
|
|
24
|
+
export type EventFilter = {
|
|
25
|
+
exact: Record<string, string>;
|
|
26
|
+
} | {
|
|
27
|
+
prefix: Record<string, string>;
|
|
28
|
+
} | {
|
|
29
|
+
suffix: Record<string, string>;
|
|
30
|
+
} | {
|
|
31
|
+
all: EventFilter[];
|
|
32
|
+
} | {
|
|
33
|
+
any: EventFilter[];
|
|
34
|
+
} | {
|
|
35
|
+
not: EventFilter;
|
|
36
|
+
};
|
|
37
|
+
/**
|
|
38
|
+
* A daily window in which a trigger's firings are held, not sent: `from` and
|
|
39
|
+
* `to` are `HH:MM` on a 24-hour clock in `timeZone` (IANA). A window whose
|
|
40
|
+
* `to` is earlier than its `from` runs across midnight.
|
|
41
|
+
*/
|
|
42
|
+
export interface QuietHours {
|
|
43
|
+
from: string;
|
|
44
|
+
to: string;
|
|
45
|
+
timeZone: string;
|
|
46
|
+
}
|
|
47
|
+
/** A trigger fires at most this many turns an hour unless it says otherwise. */
|
|
48
|
+
export declare const DEFAULT_EVENT_MAX_PER_HOUR = 12;
|
|
49
|
+
/**
|
|
50
|
+
* Validate a filter and return a canonical copy that shares nothing with the
|
|
51
|
+
* input. Throws a sentence naming the problem: an unknown dialect is refused
|
|
52
|
+
* at creation, as the Subscriptions spec requires, never ignored at match
|
|
53
|
+
* time where nobody would hear about it.
|
|
54
|
+
*/
|
|
55
|
+
export declare const parseEventFilter: (raw: unknown) => EventFilter;
|
|
56
|
+
/**
|
|
57
|
+
* Whether `event` passes `filter`. An attribute the event lacks matches no
|
|
58
|
+
* comparison, so `not` of that comparison is true, as the dialects define.
|
|
59
|
+
* Expects a filter that went through `parseEventFilter`.
|
|
60
|
+
*/
|
|
61
|
+
export declare const matchesEventFilter: (filter: EventFilter, event: InboundEvent) => boolean;
|
|
62
|
+
/** Validate quiet hours, throwing a sentence that names the problem. */
|
|
63
|
+
export declare const parseQuietHours: (raw: unknown) => QuietHours;
|
|
64
|
+
/** Whether `now` falls inside the window, in the window's own time zone. */
|
|
65
|
+
export declare const isWithinQuietHours: (quietHours: QuietHours, now: Date) => boolean;
|
|
66
|
+
//# sourceMappingURL=events.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AASpD;;;;;;GAMG;AACH,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC7C,IAAI,CAAC,EAAE,SAAS,CAAC;CAClB;AAED;;;;;;;;;;GAUG;AACH,MAAM,MAAM,WAAW,GACnB;IAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,GACjC;IAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,GAClC;IAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,GAClC;IAAE,GAAG,EAAE,WAAW,EAAE,CAAA;CAAE,GACtB;IAAE,GAAG,EAAE,WAAW,EAAE,CAAA;CAAE,GACtB;IAAE,GAAG,EAAE,WAAW,CAAA;CAAE,CAAC;AAEzB;;;;GAIG;AACH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,gFAAgF;AAChF,eAAO,MAAM,0BAA0B,KAAK,CAAC;AA+C7C;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,GAAI,KAAK,OAAO,KAAG,WA8C/C,CAAC;AA8BF;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,GAAI,QAAQ,WAAW,EAAE,OAAO,YAAY,KAAG,OAiB7E,CAAC;AASF,wEAAwE;AACxE,eAAO,MAAM,eAAe,GAAI,KAAK,OAAO,KAAG,UAsB9C,CAAC;AAEF,4EAA4E;AAC5E,eAAO,MAAM,kBAAkB,GAAI,YAAY,UAAU,EAAE,KAAK,IAAI,KAAG,OAatE,CAAC"}
|
package/dist/events.js
ADDED
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
/** A trigger fires at most this many turns an hour unless it says otherwise. */
|
|
2
|
+
export const DEFAULT_EVENT_MAX_PER_HOUR = 12;
|
|
3
|
+
const DIALECTS = ['exact', 'prefix', 'suffix', 'all', 'any', 'not'];
|
|
4
|
+
/**
|
|
5
|
+
* Bounds on a filter's shape. A person approves a trigger by reading its
|
|
6
|
+
* filter, and the listener evaluates every filter on every delivery; both
|
|
7
|
+
* stop working on a filter nobody can read.
|
|
8
|
+
*/
|
|
9
|
+
const MAX_FILTER_DEPTH = 8;
|
|
10
|
+
const MAX_FILTER_NODES = 64;
|
|
11
|
+
// CloudEvents attribute names are lowercase ASCII letters and digits. The
|
|
12
|
+
// `data.` extension's segments are any non-empty JSON key without a dot.
|
|
13
|
+
const ATTRIBUTE_NAME = /^[a-z0-9]+$/;
|
|
14
|
+
const DATA_PATH = /^data(\.[^.]+)+$/;
|
|
15
|
+
const isPlainObject = (value) => typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
16
|
+
const parseComparison = (dialect, raw) => {
|
|
17
|
+
if (!isPlainObject(raw)) {
|
|
18
|
+
throw new Error(`A "${dialect}" filter takes an object of attribute names to strings, e.g. { "${dialect}": { "type": "com.github.push" } }.`);
|
|
19
|
+
}
|
|
20
|
+
const entries = Object.entries(raw);
|
|
21
|
+
if (entries.length === 0) {
|
|
22
|
+
throw new Error(`A "${dialect}" filter needs at least one attribute to compare.`);
|
|
23
|
+
}
|
|
24
|
+
const out = {};
|
|
25
|
+
for (const [name, value] of entries) {
|
|
26
|
+
if (!ATTRIBUTE_NAME.test(name) && !DATA_PATH.test(name)) {
|
|
27
|
+
throw new Error(`"${name}" is not an attribute name a filter can use. Use a CloudEvents attribute (lowercase letters and digits, e.g. type, subject, actor) or a data path like data.review.body.`);
|
|
28
|
+
}
|
|
29
|
+
if (typeof value !== 'string') {
|
|
30
|
+
throw new Error(`The "${dialect}" value for "${name}" must be a string.`);
|
|
31
|
+
}
|
|
32
|
+
if (value.length === 0) {
|
|
33
|
+
throw new Error(`The "${dialect}" value for "${name}" is empty; the CloudEvents filter dialects do not allow empty values.`);
|
|
34
|
+
}
|
|
35
|
+
out[name] = value;
|
|
36
|
+
}
|
|
37
|
+
return out;
|
|
38
|
+
};
|
|
39
|
+
/**
|
|
40
|
+
* Validate a filter and return a canonical copy that shares nothing with the
|
|
41
|
+
* input. Throws a sentence naming the problem: an unknown dialect is refused
|
|
42
|
+
* at creation, as the Subscriptions spec requires, never ignored at match
|
|
43
|
+
* time where nobody would hear about it.
|
|
44
|
+
*/
|
|
45
|
+
export const parseEventFilter = (raw) => {
|
|
46
|
+
let nodes = 0;
|
|
47
|
+
const parse = (value, depth) => {
|
|
48
|
+
if (depth > MAX_FILTER_DEPTH) {
|
|
49
|
+
throw new Error(`This filter is nested more than ${MAX_FILTER_DEPTH} levels deep; flatten it with "all" or "any".`);
|
|
50
|
+
}
|
|
51
|
+
nodes += 1;
|
|
52
|
+
if (nodes > MAX_FILTER_NODES) {
|
|
53
|
+
throw new Error(`This filter is too large (over ${MAX_FILTER_NODES} expressions); a person approving it has to be able to read it.`);
|
|
54
|
+
}
|
|
55
|
+
if (!isPlainObject(value)) {
|
|
56
|
+
throw new Error('A filter is an object with one dialect key: exact, prefix, suffix, all, any or not.');
|
|
57
|
+
}
|
|
58
|
+
const keys = Object.keys(value);
|
|
59
|
+
if (keys.length !== 1) {
|
|
60
|
+
throw new Error(`A filter expression has exactly one dialect key; this one has ${keys.length}${keys.length > 0 ? ` (${keys.join(', ')})` : ''}.`);
|
|
61
|
+
}
|
|
62
|
+
const dialect = keys[0];
|
|
63
|
+
const body = value[dialect];
|
|
64
|
+
switch (dialect) {
|
|
65
|
+
case 'exact':
|
|
66
|
+
case 'prefix':
|
|
67
|
+
case 'suffix':
|
|
68
|
+
return { [dialect]: parseComparison(dialect, body) };
|
|
69
|
+
case 'all':
|
|
70
|
+
case 'any': {
|
|
71
|
+
if (!Array.isArray(body)) {
|
|
72
|
+
throw new Error(`An "${dialect}" filter takes an array of filter expressions.`);
|
|
73
|
+
}
|
|
74
|
+
if (body.length === 0) {
|
|
75
|
+
throw new Error(`An "${dialect}" filter needs at least one filter expression.`);
|
|
76
|
+
}
|
|
77
|
+
const children = body.map((child) => parse(child, depth + 1));
|
|
78
|
+
return dialect === 'all' ? { all: children } : { any: children };
|
|
79
|
+
}
|
|
80
|
+
case 'not': {
|
|
81
|
+
if (!isPlainObject(body)) {
|
|
82
|
+
throw new Error('A "not" filter takes one filter expression (an object), not an array.');
|
|
83
|
+
}
|
|
84
|
+
return { not: parse(body, depth + 1) };
|
|
85
|
+
}
|
|
86
|
+
default:
|
|
87
|
+
throw new Error(`"${dialect}" is not a supported filter dialect. Use one of ${DIALECTS.join(', ')}.`);
|
|
88
|
+
}
|
|
89
|
+
};
|
|
90
|
+
return parse(raw, 1);
|
|
91
|
+
};
|
|
92
|
+
/** The string at a `data.` path, or undefined when the path leads anywhere else. */
|
|
93
|
+
const dataString = (data, path) => {
|
|
94
|
+
let cursor = data;
|
|
95
|
+
for (const segment of path.split('.').slice(1)) {
|
|
96
|
+
// Own keys of plain objects only: a path through an array index or the
|
|
97
|
+
// prototype (`constructor.name`) is not something the sender wrote.
|
|
98
|
+
if (!isPlainObject(cursor) || !Object.hasOwn(cursor, segment)) {
|
|
99
|
+
return undefined;
|
|
100
|
+
}
|
|
101
|
+
cursor = cursor[segment];
|
|
102
|
+
}
|
|
103
|
+
return typeof cursor === 'string' ? cursor : undefined;
|
|
104
|
+
};
|
|
105
|
+
const valueOf = (event, name) => name.startsWith('data.')
|
|
106
|
+
? dataString(event.data, name)
|
|
107
|
+
: Object.hasOwn(event.attributes, name) ? event.attributes[name] : undefined;
|
|
108
|
+
const compare = (event, pairs, test) => Object.entries(pairs).every(([name, expected]) => {
|
|
109
|
+
const actual = valueOf(event, name);
|
|
110
|
+
return actual !== undefined && test(actual, expected);
|
|
111
|
+
});
|
|
112
|
+
/**
|
|
113
|
+
* Whether `event` passes `filter`. An attribute the event lacks matches no
|
|
114
|
+
* comparison, so `not` of that comparison is true, as the dialects define.
|
|
115
|
+
* Expects a filter that went through `parseEventFilter`.
|
|
116
|
+
*/
|
|
117
|
+
export const matchesEventFilter = (filter, event) => {
|
|
118
|
+
if ('exact' in filter) {
|
|
119
|
+
return compare(event, filter.exact, (actual, expected) => actual === expected);
|
|
120
|
+
}
|
|
121
|
+
if ('prefix' in filter) {
|
|
122
|
+
return compare(event, filter.prefix, (actual, expected) => actual.startsWith(expected));
|
|
123
|
+
}
|
|
124
|
+
if ('suffix' in filter) {
|
|
125
|
+
return compare(event, filter.suffix, (actual, expected) => actual.endsWith(expected));
|
|
126
|
+
}
|
|
127
|
+
if ('all' in filter) {
|
|
128
|
+
return filter.all.every((child) => matchesEventFilter(child, event));
|
|
129
|
+
}
|
|
130
|
+
if ('any' in filter) {
|
|
131
|
+
return filter.any.some((child) => matchesEventFilter(child, event));
|
|
132
|
+
}
|
|
133
|
+
return !matchesEventFilter(filter.not, event);
|
|
134
|
+
};
|
|
135
|
+
const CLOCK_TIME = /^([01]\d|2[0-3]):([0-5]\d)$/;
|
|
136
|
+
const minutesOf = (text) => {
|
|
137
|
+
const match = CLOCK_TIME.exec(text);
|
|
138
|
+
return Number(match[1]) * 60 + Number(match[2]);
|
|
139
|
+
};
|
|
140
|
+
/** Validate quiet hours, throwing a sentence that names the problem. */
|
|
141
|
+
export const parseQuietHours = (raw) => {
|
|
142
|
+
if (!isPlainObject(raw)) {
|
|
143
|
+
throw new Error('quietHours is an object: { "from": "22:00", "to": "07:00", "timeZone": "America/New_York" }.');
|
|
144
|
+
}
|
|
145
|
+
const { from, to, timeZone } = raw;
|
|
146
|
+
for (const [name, value] of [['from', from], ['to', to]]) {
|
|
147
|
+
if (typeof value !== 'string' || !CLOCK_TIME.test(value)) {
|
|
148
|
+
throw new Error(`quietHours.${name} must be a 24-hour time written HH:MM, like "22:00".`);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
if (from === to) {
|
|
152
|
+
throw new Error('quietHours.from and quietHours.to are the same time, which leaves no window.');
|
|
153
|
+
}
|
|
154
|
+
if (typeof timeZone !== 'string' || timeZone.trim().length === 0) {
|
|
155
|
+
throw new Error('quietHours.timeZone is required: an IANA time zone like "America/New_York" or "UTC".');
|
|
156
|
+
}
|
|
157
|
+
try {
|
|
158
|
+
new Intl.DateTimeFormat('en-US', { timeZone });
|
|
159
|
+
}
|
|
160
|
+
catch {
|
|
161
|
+
throw new Error(`"${timeZone}" is not a time zone this host knows. Use an IANA name like "America/New_York" or "UTC".`);
|
|
162
|
+
}
|
|
163
|
+
return { from: from, to: to, timeZone };
|
|
164
|
+
};
|
|
165
|
+
/** Whether `now` falls inside the window, in the window's own time zone. */
|
|
166
|
+
export const isWithinQuietHours = (quietHours, now) => {
|
|
167
|
+
const parts = new Intl.DateTimeFormat('en-US', {
|
|
168
|
+
timeZone: quietHours.timeZone,
|
|
169
|
+
hour: '2-digit',
|
|
170
|
+
minute: '2-digit',
|
|
171
|
+
hourCycle: 'h23',
|
|
172
|
+
}).formatToParts(now);
|
|
173
|
+
const hour = Number(parts.find((part) => part.type === 'hour')?.value);
|
|
174
|
+
const minute = Number(parts.find((part) => part.type === 'minute')?.value);
|
|
175
|
+
const at = hour * 60 + minute;
|
|
176
|
+
const from = minutesOf(quietHours.from);
|
|
177
|
+
const to = minutesOf(quietHours.to);
|
|
178
|
+
return from < to ? at >= from && at < to : at >= from || at < to;
|
|
179
|
+
};
|
|
180
|
+
//# sourceMappingURL=events.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events.js","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -3,12 +3,15 @@ export { type DefineAgentInput, defineAgent } from './define.ts';
|
|
|
3
3
|
export { isDelegateAllowed, type ParsedSoul, type ParseSoulOptions, parseSoul, formatSoul, } from './soul.ts';
|
|
4
4
|
export { SKILL_ID_PATTERN, SKILL_ID_MAX_LENGTH, isValidSkillId, isLoadableSkillId, SKILL_ID_RULE, SKILL_DESCRIPTION_MAX_LENGTH, SKILL_COMPATIBILITY_MAX_LENGTH, type ParsedSkillDocument, parseSkillDocument, type ValidateSkillDocumentOptions, type SkillValidation, validateSkillDocument, type LazySkillInput, createLazySkill, } from './skills.ts';
|
|
5
5
|
export { type ScheduleDestination, canonicalDestination, sameConversation, type ScheduleCadence, type ScheduleRecord, parseInterval, parseCronExpression, nextFireAfter, describeCadence, SCHEDULE_ID_METADATA_KEY, SCHEDULED_TURN_METADATA_KEY, type ScheduleCreateInput, type SchedulerHandle, describeSchedule, } from './schedules.ts';
|
|
6
|
+
export { type InboundEvent, type EventFilter, type QuietHours, DEFAULT_EVENT_MAX_PER_HOUR, parseEventFilter, matchesEventFilter, parseQuietHours, isWithinQuietHours, } from './events.ts';
|
|
6
7
|
export { type AgentRouteRule, type AgentRouter, createAgentRouter, createAgentTeam, } from './router.ts';
|
|
7
8
|
export { MEMORY_TOOL_NAME, createRememberTool, RECALL_TOOL_NAME, createRecallTool, FORGET_TOOL_NAME, createForgetTool, PIN_TOOL_NAME, createPinTool, type MemoryToolOptions, } from './tools/memory.ts';
|
|
8
9
|
export { DELEGATE_TOOL_NAME, DELEGATED_BY_METADATA_KEY, ROOT_SESSION_ID_METADATA_KEY, DELEGATION_DEPTH_METADATA_KEY, DELEGATED_SESSION_ID_MARKER, DEFAULT_MAX_DELEGATION_DEPTH, isDelegatedSession, delegatingSessionIdOf, outstandingDelegationFor, withoutDelegation, type DelegateDispatch, type DelegateToolOptions, createDelegateTool, } from './tools/delegate.ts';
|
|
9
|
-
export { SCHEDULE_EVERY_TOOL_NAME, SCHEDULE_AT_TOOL_NAME, SCHEDULE_LIST_TOOL_NAME, SCHEDULE_CANCEL_TOOL_NAME, createScheduleTools, } from './tools/schedule.ts';
|
|
10
|
-
export { MESSAGE_SEND_TOOL_NAME, type OutboundMessenger, createMessageSendTool, type DefaultThreadResolver, MESSAGE_READ_TOOL_NAME, MESSAGE_READ_MAX_LIMIT, MESSAGE_READ_TEXT_BUDGET, type ConversationReader, type ConversationReadRefusal, createMessageReadTool, directMessageReadRefusal, } from './tools/message.ts';
|
|
10
|
+
export { SCHEDULE_EVERY_TOOL_NAME, SCHEDULE_AT_TOOL_NAME, SCHEDULE_ON_TOOL_NAME, SCHEDULE_LIST_TOOL_NAME, SCHEDULE_CANCEL_TOOL_NAME, createScheduleTools, } from './tools/schedule.ts';
|
|
11
|
+
export { MESSAGE_SEND_TOOL_NAME, type OutboundMessenger, createMessageSendTool, type DefaultThreadResolver, MESSAGE_READ_TOOL_NAME, MESSAGE_READ_MAX_LIMIT, MESSAGE_READ_BOOKMARK_BUDGET, MESSAGE_READ_TEXT_BUDGET, type ConversationReader, type ConversationReadRefusal, createMessageReadTool, directMessageReadRefusal, } from './tools/message.ts';
|
|
12
|
+
export { CHANNEL_CREATE_TOOL_NAME, type ConversationCreator, createChannelCreateTool, } from './tools/channel.ts';
|
|
11
13
|
export { CREDENTIAL_REQUEST_TOOL_NAME, type CredentialRequester, createCredentialRequestTool, } from './tools/credentials.ts';
|
|
14
|
+
export { COMMAND_OPTION_VARIABLES, GIT_REPOSITORY_VARIABLES, SHELL_STARTUP_VARIABLES, credentialVariableProblem, } from './credential-env.ts';
|
|
12
15
|
export { GATEWAY_ONLY_TOOL_NAMES } from './tools/gateway-only.ts';
|
|
13
16
|
export { loadStratusSkill, STRATUS_SKILL_PATH } from './builtin-skills.ts';
|
|
14
17
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAMA,OAAO,EACL,YAAY,EACZ,iBAAiB,EACjB,mBAAmB,EACnB,gBAAgB,EAChB,mBAAmB,EACnB,cAAc,EACd,oBAAoB,EACpB,qBAAqB,EACrB,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,KAAK,gBAAgB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAEjE,OAAO,EACL,iBAAiB,EACjB,KAAK,UAAU,EACf,KAAK,gBAAgB,EACrB,SAAS,EACT,UAAU,GACX,MAAM,WAAW,CAAC;AAEnB,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,cAAc,EACd,iBAAiB,EACjB,aAAa,EACb,4BAA4B,EAC5B,8BAA8B,EAC9B,KAAK,mBAAmB,EACxB,kBAAkB,EAClB,KAAK,4BAA4B,EACjC,KAAK,eAAe,EACpB,qBAAqB,EACrB,KAAK,cAAc,EACnB,eAAe,GAChB,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,KAAK,mBAAmB,EACxB,oBAAoB,EACpB,gBAAgB,EAChB,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,aAAa,EACb,mBAAmB,EACnB,aAAa,EACb,eAAe,EACf,wBAAwB,EACxB,2BAA2B,EAC3B,KAAK,mBAAmB,EACxB,KAAK,eAAe,EACpB,gBAAgB,GACjB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,WAAW,EAChB,iBAAiB,EACjB,eAAe,GAChB,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,aAAa,EACb,aAAa,EACb,KAAK,iBAAiB,GACvB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,kBAAkB,EAClB,yBAAyB,EACzB,4BAA4B,EAC5B,6BAA6B,EAC7B,2BAA2B,EAC3B,4BAA4B,EAC5B,kBAAkB,EAClB,qBAAqB,EACrB,wBAAwB,EACxB,iBAAiB,EACjB,KAAK,gBAAgB,EACrB,KAAK,mBAAmB,EACxB,kBAAkB,GACnB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,wBAAwB,EACxB,qBAAqB,EACrB,uBAAuB,EACvB,yBAAyB,EACzB,mBAAmB,GACpB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,sBAAsB,EACtB,KAAK,iBAAiB,EACtB,qBAAqB,EACrB,KAAK,qBAAqB,EAC1B,sBAAsB,EACtB,sBAAsB,EACtB,wBAAwB,EACxB,KAAK,kBAAkB,EACvB,KAAK,uBAAuB,EAC5B,qBAAqB,EACrB,wBAAwB,GACzB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,4BAA4B,EAC5B,KAAK,mBAAmB,EACxB,2BAA2B,GAC5B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -8,12 +8,15 @@ export { defineAgent } from "./define.js";
|
|
|
8
8
|
export { isDelegateAllowed, parseSoul, formatSoul, } from "./soul.js";
|
|
9
9
|
export { SKILL_ID_PATTERN, SKILL_ID_MAX_LENGTH, isValidSkillId, isLoadableSkillId, SKILL_ID_RULE, SKILL_DESCRIPTION_MAX_LENGTH, SKILL_COMPATIBILITY_MAX_LENGTH, parseSkillDocument, validateSkillDocument, createLazySkill, } from "./skills.js";
|
|
10
10
|
export { canonicalDestination, sameConversation, parseInterval, parseCronExpression, nextFireAfter, describeCadence, SCHEDULE_ID_METADATA_KEY, SCHEDULED_TURN_METADATA_KEY, describeSchedule, } from "./schedules.js";
|
|
11
|
+
export { DEFAULT_EVENT_MAX_PER_HOUR, parseEventFilter, matchesEventFilter, parseQuietHours, isWithinQuietHours, } from "./events.js";
|
|
11
12
|
export { createAgentRouter, createAgentTeam, } from "./router.js";
|
|
12
13
|
export { MEMORY_TOOL_NAME, createRememberTool, RECALL_TOOL_NAME, createRecallTool, FORGET_TOOL_NAME, createForgetTool, PIN_TOOL_NAME, createPinTool, } from "./tools/memory.js";
|
|
13
14
|
export { DELEGATE_TOOL_NAME, DELEGATED_BY_METADATA_KEY, ROOT_SESSION_ID_METADATA_KEY, DELEGATION_DEPTH_METADATA_KEY, DELEGATED_SESSION_ID_MARKER, DEFAULT_MAX_DELEGATION_DEPTH, isDelegatedSession, delegatingSessionIdOf, outstandingDelegationFor, withoutDelegation, createDelegateTool, } from "./tools/delegate.js";
|
|
14
|
-
export { SCHEDULE_EVERY_TOOL_NAME, SCHEDULE_AT_TOOL_NAME, SCHEDULE_LIST_TOOL_NAME, SCHEDULE_CANCEL_TOOL_NAME, createScheduleTools, } from "./tools/schedule.js";
|
|
15
|
-
export { MESSAGE_SEND_TOOL_NAME, createMessageSendTool, MESSAGE_READ_TOOL_NAME, MESSAGE_READ_MAX_LIMIT, MESSAGE_READ_TEXT_BUDGET, createMessageReadTool, directMessageReadRefusal, } from "./tools/message.js";
|
|
15
|
+
export { SCHEDULE_EVERY_TOOL_NAME, SCHEDULE_AT_TOOL_NAME, SCHEDULE_ON_TOOL_NAME, SCHEDULE_LIST_TOOL_NAME, SCHEDULE_CANCEL_TOOL_NAME, createScheduleTools, } from "./tools/schedule.js";
|
|
16
|
+
export { MESSAGE_SEND_TOOL_NAME, createMessageSendTool, MESSAGE_READ_TOOL_NAME, MESSAGE_READ_MAX_LIMIT, MESSAGE_READ_BOOKMARK_BUDGET, MESSAGE_READ_TEXT_BUDGET, createMessageReadTool, directMessageReadRefusal, } from "./tools/message.js";
|
|
17
|
+
export { CHANNEL_CREATE_TOOL_NAME, createChannelCreateTool, } from "./tools/channel.js";
|
|
16
18
|
export { CREDENTIAL_REQUEST_TOOL_NAME, createCredentialRequestTool, } from "./tools/credentials.js";
|
|
19
|
+
export { COMMAND_OPTION_VARIABLES, GIT_REPOSITORY_VARIABLES, SHELL_STARTUP_VARIABLES, credentialVariableProblem, } from "./credential-env.js";
|
|
17
20
|
export { GATEWAY_ONLY_TOOL_NAMES } from "./tools/gateway-only.js";
|
|
18
21
|
export { loadStratusSkill, STRATUS_SKILL_PATH } from "./builtin-skills.js";
|
|
19
22
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,wEAAwE;AACxE,wEAAwE;AACxE,mEAAmE;AACnE,mDAAmD;AAEnD,OAAO,EACL,YAAY,EACZ,iBAAiB,EACjB,mBAAmB,EACnB,gBAAgB,EAChB,mBAAmB,EACnB,cAAc,EACd,oBAAoB,EACpB,qBAAqB,EACrB,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAyB,WAAW,EAAE,MAAM,aAAa,CAAC;AAEjE,OAAO,EACL,iBAAiB,EAGjB,SAAS,EACT,UAAU,GACX,MAAM,WAAW,CAAC;AAEnB,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,cAAc,EACd,iBAAiB,EACjB,aAAa,EACb,4BAA4B,EAC5B,8BAA8B,EAE9B,kBAAkB,EAGlB,qBAAqB,EAErB,eAAe,GAChB,MAAM,aAAa,CAAC;AAErB,OAAO,EAEL,oBAAoB,EACpB,gBAAgB,EAGhB,aAAa,EACb,mBAAmB,EACnB,aAAa,EACb,eAAe,EACf,wBAAwB,EACxB,2BAA2B,EAG3B,gBAAgB,GACjB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAGL,iBAAiB,EACjB,eAAe,GAChB,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,aAAa,EACb,aAAa,GAEd,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,kBAAkB,EAClB,yBAAyB,EACzB,4BAA4B,EAC5B,6BAA6B,EAC7B,2BAA2B,EAC3B,4BAA4B,EAC5B,kBAAkB,EAClB,qBAAqB,EACrB,wBAAwB,EACxB,iBAAiB,EAGjB,kBAAkB,GACnB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,wBAAwB,EACxB,qBAAqB,EACrB,uBAAuB,EACvB,yBAAyB,EACzB,mBAAmB,GACpB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,sBAAsB,EAEtB,qBAAqB,EAErB,sBAAsB,EACtB,sBAAsB,EACtB,wBAAwB,EAGxB,qBAAqB,EACrB,wBAAwB,GACzB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,4BAA4B,EAE5B,2BAA2B,GAC5B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,wEAAwE;AACxE,wEAAwE;AACxE,mEAAmE;AACnE,mDAAmD;AAEnD,OAAO,EACL,YAAY,EACZ,iBAAiB,EACjB,mBAAmB,EACnB,gBAAgB,EAChB,mBAAmB,EACnB,cAAc,EACd,oBAAoB,EACpB,qBAAqB,EACrB,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAyB,WAAW,EAAE,MAAM,aAAa,CAAC;AAEjE,OAAO,EACL,iBAAiB,EAGjB,SAAS,EACT,UAAU,GACX,MAAM,WAAW,CAAC;AAEnB,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,cAAc,EACd,iBAAiB,EACjB,aAAa,EACb,4BAA4B,EAC5B,8BAA8B,EAE9B,kBAAkB,EAGlB,qBAAqB,EAErB,eAAe,GAChB,MAAM,aAAa,CAAC;AAErB,OAAO,EAEL,oBAAoB,EACpB,gBAAgB,EAGhB,aAAa,EACb,mBAAmB,EACnB,aAAa,EACb,eAAe,EACf,wBAAwB,EACxB,2BAA2B,EAG3B,gBAAgB,GACjB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAIL,0BAA0B,EAC1B,gBAAgB,EAChB,kBAAkB,EAClB,eAAe,EACf,kBAAkB,GACnB,MAAM,aAAa,CAAC;AAErB,OAAO,EAGL,iBAAiB,EACjB,eAAe,GAChB,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,aAAa,EACb,aAAa,GAEd,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,kBAAkB,EAClB,yBAAyB,EACzB,4BAA4B,EAC5B,6BAA6B,EAC7B,2BAA2B,EAC3B,4BAA4B,EAC5B,kBAAkB,EAClB,qBAAqB,EACrB,wBAAwB,EACxB,iBAAiB,EAGjB,kBAAkB,GACnB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,wBAAwB,EACxB,qBAAqB,EACrB,qBAAqB,EACrB,uBAAuB,EACvB,yBAAyB,EACzB,mBAAmB,GACpB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,sBAAsB,EAEtB,qBAAqB,EAErB,sBAAsB,EACtB,sBAAsB,EACtB,4BAA4B,EAC5B,wBAAwB,EAGxB,qBAAqB,EACrB,wBAAwB,GACzB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,wBAAwB,EAExB,uBAAuB,GACxB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,4BAA4B,EAE5B,2BAA2B,GAC5B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,wBAAwB,EACxB,wBAAwB,EACxB,uBAAuB,EACvB,yBAAyB,GAC1B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC"}
|
package/dist/schedules.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { JsonObject, TrustLevel } from '@stratusagent/core';
|
|
2
|
+
import type { EventFilter, QuietHours } from './events.ts';
|
|
2
3
|
/**
|
|
3
4
|
* Where a schedule reports, or a `message.send` speaks: a channel kind plus
|
|
4
5
|
* a channel-native id — the same convention approver lists use, because
|
|
@@ -26,10 +27,12 @@ export interface ScheduleDestination {
|
|
|
26
27
|
*/
|
|
27
28
|
export declare const canonicalDestination: (destination: ScheduleDestination) => string;
|
|
28
29
|
/**
|
|
29
|
-
* When a schedule runs.
|
|
30
|
-
*
|
|
31
|
-
*
|
|
32
|
-
*
|
|
30
|
+
* When a schedule runs. Separate shapes rather than one string, because each
|
|
31
|
+
* is advanced differently: an interval adds itself to the previous slot, a
|
|
32
|
+
* cron expression is searched forward, a one-shot has no next at all, and an
|
|
33
|
+
* event trigger (card 590) has no slots: it fires when a delivery from its
|
|
34
|
+
* operator-configured `source` passes its `filter`, so the due scan never
|
|
35
|
+
* sees it.
|
|
33
36
|
*/
|
|
34
37
|
export type ScheduleCadence = {
|
|
35
38
|
kind: 'every';
|
|
@@ -40,6 +43,13 @@ export type ScheduleCadence = {
|
|
|
40
43
|
} | {
|
|
41
44
|
kind: 'at';
|
|
42
45
|
at: string;
|
|
46
|
+
} | {
|
|
47
|
+
kind: 'event';
|
|
48
|
+
source: string;
|
|
49
|
+
filter: EventFilter;
|
|
50
|
+
quietHours?: QuietHours;
|
|
51
|
+
/** Turns per hour at most; `DEFAULT_EVENT_MAX_PER_HOUR` when absent. */
|
|
52
|
+
maxPerHour?: number;
|
|
43
53
|
};
|
|
44
54
|
/** One durable schedule, exactly as the human approved it. */
|
|
45
55
|
export interface ScheduleRecord {
|
package/dist/schedules.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schedules.d.ts","sourceRoot":"","sources":["../src/schedules.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"schedules.d.ts","sourceRoot":"","sources":["../src/schedules.ts"],"names":[],"mappings":"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"}
|
package/dist/schedules.js
CHANGED
|
@@ -143,6 +143,9 @@ export const nextFireAfter = (cadence, after) => {
|
|
|
143
143
|
}
|
|
144
144
|
return at.getTime() > after.getTime() ? at : undefined;
|
|
145
145
|
}
|
|
146
|
+
case 'event':
|
|
147
|
+
// Fired by deliveries, never by the clock.
|
|
148
|
+
return undefined;
|
|
146
149
|
default:
|
|
147
150
|
return undefined;
|
|
148
151
|
}
|
|
@@ -163,6 +166,8 @@ export const describeCadence = (cadence) => {
|
|
|
163
166
|
return `cron ${cadence.expression}`;
|
|
164
167
|
case 'at':
|
|
165
168
|
return `once at ${cadence.at}`;
|
|
169
|
+
case 'event':
|
|
170
|
+
return `on ${cadence.source} events`;
|
|
166
171
|
default:
|
|
167
172
|
return 'unknown';
|
|
168
173
|
}
|
|
@@ -236,6 +241,16 @@ export const describeSchedule = (record) => ({
|
|
|
236
241
|
trust: record.trust ?? 'unknown',
|
|
237
242
|
...(record.destination ? { destination: canonicalDestination(record.destination) } : {}),
|
|
238
243
|
...(record.destination?.thread ? { thread: record.destination.thread } : {}),
|
|
244
|
+
...(record.cadence.kind === 'event'
|
|
245
|
+
? {
|
|
246
|
+
event: {
|
|
247
|
+
source: record.cadence.source,
|
|
248
|
+
filter: record.cadence.filter,
|
|
249
|
+
...(record.cadence.quietHours ? { quietHours: { ...record.cadence.quietHours } } : {}),
|
|
250
|
+
...(record.cadence.maxPerHour !== undefined ? { maxPerHour: record.cadence.maxPerHour } : {}),
|
|
251
|
+
},
|
|
252
|
+
}
|
|
253
|
+
: {}),
|
|
239
254
|
...(record.nextFireAt ? { nextFireAt: record.nextFireAt } : {}),
|
|
240
255
|
...(record.lastFiredAt ? { lastFiredAt: record.lastFiredAt } : {}),
|
|
241
256
|
createdAt: record.createdAt,
|
package/dist/schedules.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schedules.js","sourceRoot":"","sources":["../src/schedules.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"schedules.js","sourceRoot":"","sources":["../src/schedules.ts"],"names":[],"mappings":"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"}
|