@agentick/guardrails 0.0.1

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.
@@ -0,0 +1,4 @@
1
+
2
+ > @agentick/guardrails@0.0.1 build /Users/rlindgren/Documents/tentickle/packages/guardrails
3
+ > tsc -p tsconfig.build.json
4
+
@@ -0,0 +1,4 @@
1
+
2
+ > @agentick/guardrails@0.0.1 typecheck /Users/rlindgren/Documents/tentickle/packages/guardrails
3
+ > tsc -p tsconfig.build.json --noEmit
4
+
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2024 Agentick Contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,115 @@
1
+ # @agentick/guardrails
2
+
3
+ Guardrail middleware for Agentick — gate tool execution with rules and classifiers.
4
+
5
+ ## Install
6
+
7
+ ```bash
8
+ pnpm add @agentick/guardrails
9
+ ```
10
+
11
+ ## Quick Start
12
+
13
+ ```typescript
14
+ import { toolGuardrail, deny, allow } from "@agentick/guardrails";
15
+
16
+ const guardrail = toolGuardrail({
17
+ rules: [
18
+ deny("file_delete", "exec_*"),
19
+ allow("file_read", "file_write"),
20
+ ],
21
+ });
22
+
23
+ app.use(guardrail);
24
+ ```
25
+
26
+ ## API
27
+
28
+ ### `toolGuardrail(config)`
29
+
30
+ Create middleware that gates tool execution.
31
+
32
+ ```typescript
33
+ toolGuardrail({
34
+ rules?: GuardrailRule[],
35
+ classify?: GuardrailClassifier,
36
+ onDeny?: (toolName: string, reason: string) => void,
37
+ })
38
+ ```
39
+
40
+ Only intercepts procedures with `operationName === "tool:run"`. Other procedures pass through.
41
+
42
+ ### `deny(...patterns)`
43
+
44
+ Create a deny rule.
45
+
46
+ ```typescript
47
+ deny("file_delete", "exec_*")
48
+ // { patterns: ["file_delete", "exec_*"], action: "deny" }
49
+ ```
50
+
51
+ ### `allow(...patterns)`
52
+
53
+ Create an allow rule.
54
+
55
+ ```typescript
56
+ allow("file_read", "search")
57
+ // { patterns: ["file_read", "search"], action: "allow" }
58
+ ```
59
+
60
+ ## Rule Patterns
61
+
62
+ Patterns support `*` wildcard matching:
63
+
64
+ | Pattern | Matches |
65
+ | ----------- | -------------------------------- |
66
+ | `"search"` | Exact match only |
67
+ | `"file_*"` | `file_read`, `file_write`, ... |
68
+ | `"*_admin"` | `read_admin`, `write_admin`, ... |
69
+ | `"*"` | Everything |
70
+
71
+ ## Evaluation Order
72
+
73
+ 1. **Static rules** — first-match-wins
74
+ - `deny` → throw `GuardrailDenied`
75
+ - `allow` → skip classifier, proceed
76
+ 2. **Classifier** — only runs if no rule matched
77
+ - Return `{ action: "deny", reason }` to block
78
+ - Return `null` / `undefined` / `{ action: "allow" }` to proceed
79
+ 3. **Default** — allow
80
+
81
+ ## Classifier
82
+
83
+ ```typescript
84
+ const guardrail = toolGuardrail({
85
+ classify: async (call, envelope) => {
86
+ if (call.input?.dangerous) {
87
+ return { action: "deny", reason: "Dangerous input detected" };
88
+ }
89
+ return null; // allow
90
+ },
91
+ });
92
+ ```
93
+
94
+ ## Error Handling
95
+
96
+ Denied tools throw `GuardrailDenied` (extends `GuardError`):
97
+
98
+ ```typescript
99
+ import { isGuardError } from "@agentick/shared";
100
+
101
+ try {
102
+ await tool.run(input);
103
+ } catch (error) {
104
+ if (isGuardError(error)) {
105
+ // Access denied — error.code === "GUARD_DENIED"
106
+ }
107
+ }
108
+ ```
109
+
110
+ The model sees a tool error result with the denial reason, allowing it to try a different approach.
111
+
112
+ ## Future
113
+
114
+ - `inputGuardrail` — gate based on user input content
115
+ - `outputGuardrail` — gate based on model output content
@@ -0,0 +1 @@
1
+ {"fileNames":["../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es5.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2016.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.core.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.collection.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.generator.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.promise.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2016.intl.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.date.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.object.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.string.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.intl.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.intl.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.promise.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.array.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.object.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.string.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.intl.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.date.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.promise.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.string.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.intl.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.number.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.promise.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.string.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.intl.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.array.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.error.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.intl.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.object.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.string.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.regexp.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.esnext.disposable.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.esnext.float16.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.decorators.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.decorators.legacy.d.ts","../../shared/src/block-types.ts","../../shared/src/tools.ts","../../shared/src/blocks.ts","../../shared/src/messages.ts","../../shared/src/models.ts","../../shared/src/protocol.ts","../../shared/src/streaming.ts","../../shared/src/input.ts","../../shared/src/timeline.ts","../../shared/src/errors.ts","../../shared/src/identity.ts","../../shared/src/devtools.ts","../../shared/src/model-catalog.ts","../../shared/src/index.ts","../src/errors.ts","../../kernel/src/telemetry.ts","../../kernel/src/channel.ts","../../kernel/src/procedure-graph.ts","../../kernel/src/stream.ts","../../kernel/src/execution-tracker.ts","../../kernel/src/event-buffer.ts","../../../node_modules/.pnpm/zod@4.3.5/node_modules/zod/v3/helpers/typealiases.d.cts","../../../node_modules/.pnpm/zod@4.3.5/node_modules/zod/v3/helpers/util.d.cts","../../../node_modules/.pnpm/zod@4.3.5/node_modules/zod/v3/zoderror.d.cts","../../../node_modules/.pnpm/zod@4.3.5/node_modules/zod/v3/locales/en.d.cts","../../../node_modules/.pnpm/zod@4.3.5/node_modules/zod/v3/errors.d.cts","../../../node_modules/.pnpm/zod@4.3.5/node_modules/zod/v3/helpers/parseutil.d.cts","../../../node_modules/.pnpm/zod@4.3.5/node_modules/zod/v3/helpers/enumutil.d.cts","../../../node_modules/.pnpm/zod@4.3.5/node_modules/zod/v3/helpers/errorutil.d.cts","../../../node_modules/.pnpm/zod@4.3.5/node_modules/zod/v3/helpers/partialutil.d.cts","../../../node_modules/.pnpm/zod@4.3.5/node_modules/zod/v3/standard-schema.d.cts","../../../node_modules/.pnpm/zod@4.3.5/node_modules/zod/v3/types.d.cts","../../../node_modules/.pnpm/zod@4.3.5/node_modules/zod/v3/external.d.cts","../../../node_modules/.pnpm/zod@4.3.5/node_modules/zod/v3/index.d.cts","../../../node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@4.3.5/node_modules/zod-to-json-schema/dist/types/parsers/any.d.ts","../../../node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@4.3.5/node_modules/zod-to-json-schema/dist/types/errormessages.d.ts","../../../node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@4.3.5/node_modules/zod-to-json-schema/dist/types/parsers/array.d.ts","../../../node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@4.3.5/node_modules/zod-to-json-schema/dist/types/parsers/bigint.d.ts","../../../node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@4.3.5/node_modules/zod-to-json-schema/dist/types/parsers/boolean.d.ts","../../../node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@4.3.5/node_modules/zod-to-json-schema/dist/types/parsers/number.d.ts","../../../node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@4.3.5/node_modules/zod-to-json-schema/dist/types/parsers/date.d.ts","../../../node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@4.3.5/node_modules/zod-to-json-schema/dist/types/parsers/enum.d.ts","../../../node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@4.3.5/node_modules/zod-to-json-schema/dist/types/parsers/intersection.d.ts","../../../node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@4.3.5/node_modules/zod-to-json-schema/dist/types/parsers/literal.d.ts","../../../node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@4.3.5/node_modules/zod-to-json-schema/dist/types/parsers/string.d.ts","../../../node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@4.3.5/node_modules/zod-to-json-schema/dist/types/parsers/record.d.ts","../../../node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@4.3.5/node_modules/zod-to-json-schema/dist/types/parsers/map.d.ts","../../../node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@4.3.5/node_modules/zod-to-json-schema/dist/types/parsers/nativeenum.d.ts","../../../node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@4.3.5/node_modules/zod-to-json-schema/dist/types/parsers/never.d.ts","../../../node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@4.3.5/node_modules/zod-to-json-schema/dist/types/parsers/null.d.ts","../../../node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@4.3.5/node_modules/zod-to-json-schema/dist/types/parsers/nullable.d.ts","../../../node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@4.3.5/node_modules/zod-to-json-schema/dist/types/parsers/object.d.ts","../../../node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@4.3.5/node_modules/zod-to-json-schema/dist/types/parsers/set.d.ts","../../../node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@4.3.5/node_modules/zod-to-json-schema/dist/types/parsers/tuple.d.ts","../../../node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@4.3.5/node_modules/zod-to-json-schema/dist/types/parsers/undefined.d.ts","../../../node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@4.3.5/node_modules/zod-to-json-schema/dist/types/parsers/union.d.ts","../../../node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@4.3.5/node_modules/zod-to-json-schema/dist/types/parsers/unknown.d.ts","../../../node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@4.3.5/node_modules/zod-to-json-schema/dist/types/parsetypes.d.ts","../../../node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@4.3.5/node_modules/zod-to-json-schema/dist/types/refs.d.ts","../../../node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@4.3.5/node_modules/zod-to-json-schema/dist/types/options.d.ts","../../../node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@4.3.5/node_modules/zod-to-json-schema/dist/types/getrelativepath.d.ts","../../../node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@4.3.5/node_modules/zod-to-json-schema/dist/types/parsedef.d.ts","../../../node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@4.3.5/node_modules/zod-to-json-schema/dist/types/parsers/branded.d.ts","../../../node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@4.3.5/node_modules/zod-to-json-schema/dist/types/parsers/catch.d.ts","../../../node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@4.3.5/node_modules/zod-to-json-schema/dist/types/parsers/default.d.ts","../../../node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@4.3.5/node_modules/zod-to-json-schema/dist/types/parsers/effects.d.ts","../../../node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@4.3.5/node_modules/zod-to-json-schema/dist/types/parsers/optional.d.ts","../../../node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@4.3.5/node_modules/zod-to-json-schema/dist/types/parsers/pipeline.d.ts","../../../node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@4.3.5/node_modules/zod-to-json-schema/dist/types/parsers/promise.d.ts","../../../node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@4.3.5/node_modules/zod-to-json-schema/dist/types/parsers/readonly.d.ts","../../../node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@4.3.5/node_modules/zod-to-json-schema/dist/types/selectparser.d.ts","../../../node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@4.3.5/node_modules/zod-to-json-schema/dist/types/zodtojsonschema.d.ts","../../../node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@4.3.5/node_modules/zod-to-json-schema/dist/types/index.d.ts","../../../node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/json-schema.d.cts","../../../node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/standard-schema.d.cts","../../../node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/registries.d.cts","../../../node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/to-json-schema.d.cts","../../../node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/util.d.cts","../../../node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/versions.d.cts","../../../node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/schemas.d.cts","../../../node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/checks.d.cts","../../../node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/errors.d.cts","../../../node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/core.d.cts","../../../node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/parse.d.cts","../../../node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/regexes.d.cts","../../../node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/locales/ar.d.cts","../../../node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/locales/az.d.cts","../../../node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/locales/be.d.cts","../../../node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/locales/bg.d.cts","../../../node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/locales/ca.d.cts","../../../node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/locales/cs.d.cts","../../../node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/locales/da.d.cts","../../../node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/locales/de.d.cts","../../../node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/locales/en.d.cts","../../../node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/locales/eo.d.cts","../../../node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/locales/es.d.cts","../../../node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/locales/fa.d.cts","../../../node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/locales/fi.d.cts","../../../node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/locales/fr.d.cts","../../../node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/locales/fr-ca.d.cts","../../../node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/locales/he.d.cts","../../../node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/locales/hu.d.cts","../../../node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/locales/hy.d.cts","../../../node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/locales/id.d.cts","../../../node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/locales/is.d.cts","../../../node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/locales/it.d.cts","../../../node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/locales/ja.d.cts","../../../node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/locales/ka.d.cts","../../../node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/locales/kh.d.cts","../../../node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/locales/km.d.cts","../../../node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/locales/ko.d.cts","../../../node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/locales/lt.d.cts","../../../node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/locales/mk.d.cts","../../../node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/locales/ms.d.cts","../../../node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/locales/nl.d.cts","../../../node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/locales/no.d.cts","../../../node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/locales/ota.d.cts","../../../node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/locales/ps.d.cts","../../../node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/locales/pl.d.cts","../../../node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/locales/pt.d.cts","../../../node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/locales/ru.d.cts","../../../node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/locales/sl.d.cts","../../../node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/locales/sv.d.cts","../../../node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/locales/ta.d.cts","../../../node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/locales/th.d.cts","../../../node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/locales/tr.d.cts","../../../node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/locales/ua.d.cts","../../../node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/locales/uk.d.cts","../../../node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/locales/ur.d.cts","../../../node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/locales/uz.d.cts","../../../node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/locales/vi.d.cts","../../../node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/locales/zh-cn.d.cts","../../../node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/locales/zh-tw.d.cts","../../../node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/locales/yo.d.cts","../../../node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/locales/index.d.cts","../../../node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/doc.d.cts","../../../node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/api.d.cts","../../../node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/json-schema-processors.d.cts","../../../node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/json-schema-generator.d.cts","../../../node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/index.d.cts","../../../node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/classic/errors.d.cts","../../../node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/classic/parse.d.cts","../../../node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/classic/schemas.d.cts","../../../node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/classic/checks.d.cts","../../../node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/classic/compat.d.cts","../../../node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/classic/from-json-schema.d.cts","../../../node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/classic/iso.d.cts","../../../node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/classic/coerce.d.cts","../../../node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/classic/external.d.cts","../../../node_modules/.pnpm/zod@4.3.5/node_modules/zod/index.d.cts","../../kernel/src/schema.ts","../../kernel/src/procedure.ts","../../kernel/src/context.ts","../../kernel/src/otel-provider.ts","../../kernel/src/execution-helpers.ts","../../kernel/src/metrics-helpers.ts","../../kernel/src/channel-helpers.ts","../../../node_modules/.pnpm/@types+node@25.0.9/node_modules/@types/node/compatibility/iterators.d.ts","../../../node_modules/.pnpm/@types+node@25.0.9/node_modules/@types/node/globals.typedarray.d.ts","../../../node_modules/.pnpm/@types+node@25.0.9/node_modules/@types/node/buffer.buffer.d.ts","../../../node_modules/.pnpm/@types+node@25.0.9/node_modules/@types/node/globals.d.ts","../../../node_modules/.pnpm/@types+node@25.0.9/node_modules/@types/node/web-globals/abortcontroller.d.ts","../../../node_modules/.pnpm/@types+node@25.0.9/node_modules/@types/node/web-globals/blob.d.ts","../../../node_modules/.pnpm/@types+node@25.0.9/node_modules/@types/node/web-globals/console.d.ts","../../../node_modules/.pnpm/@types+node@25.0.9/node_modules/@types/node/web-globals/crypto.d.ts","../../../node_modules/.pnpm/@types+node@25.0.9/node_modules/@types/node/web-globals/domexception.d.ts","../../../node_modules/.pnpm/@types+node@25.0.9/node_modules/@types/node/web-globals/encoding.d.ts","../../../node_modules/.pnpm/@types+node@25.0.9/node_modules/@types/node/web-globals/events.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/utility.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/header.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/readable.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/fetch.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/formdata.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/connector.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/client-stats.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/client.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/errors.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/dispatcher.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/global-dispatcher.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/global-origin.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/pool-stats.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/pool.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/handlers.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/balanced-pool.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/h2c-client.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/agent.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/mock-interceptor.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/mock-call-history.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/mock-agent.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/mock-client.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/mock-pool.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/snapshot-agent.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/mock-errors.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/proxy-agent.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/env-http-proxy-agent.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/retry-handler.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/retry-agent.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/api.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/cache-interceptor.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/interceptors.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/util.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/cookies.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/patch.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/websocket.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/eventsource.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/diagnostics-channel.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/content-type.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/cache.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/index.d.ts","../../../node_modules/.pnpm/@types+node@25.0.9/node_modules/@types/node/web-globals/fetch.d.ts","../../../node_modules/.pnpm/@types+node@25.0.9/node_modules/@types/node/web-globals/importmeta.d.ts","../../../node_modules/.pnpm/@types+node@25.0.9/node_modules/@types/node/web-globals/messaging.d.ts","../../../node_modules/.pnpm/@types+node@25.0.9/node_modules/@types/node/web-globals/navigator.d.ts","../../../node_modules/.pnpm/@types+node@25.0.9/node_modules/@types/node/web-globals/performance.d.ts","../../../node_modules/.pnpm/@types+node@25.0.9/node_modules/@types/node/web-globals/storage.d.ts","../../../node_modules/.pnpm/@types+node@25.0.9/node_modules/@types/node/web-globals/streams.d.ts","../../../node_modules/.pnpm/@types+node@25.0.9/node_modules/@types/node/web-globals/timers.d.ts","../../../node_modules/.pnpm/@types+node@25.0.9/node_modules/@types/node/web-globals/url.d.ts","../../../node_modules/.pnpm/@types+node@25.0.9/node_modules/@types/node/assert.d.ts","../../../node_modules/.pnpm/@types+node@25.0.9/node_modules/@types/node/assert/strict.d.ts","../../../node_modules/.pnpm/@types+node@25.0.9/node_modules/@types/node/async_hooks.d.ts","../../../node_modules/.pnpm/@types+node@25.0.9/node_modules/@types/node/buffer.d.ts","../../../node_modules/.pnpm/@types+node@25.0.9/node_modules/@types/node/child_process.d.ts","../../../node_modules/.pnpm/@types+node@25.0.9/node_modules/@types/node/cluster.d.ts","../../../node_modules/.pnpm/@types+node@25.0.9/node_modules/@types/node/console.d.ts","../../../node_modules/.pnpm/@types+node@25.0.9/node_modules/@types/node/constants.d.ts","../../../node_modules/.pnpm/@types+node@25.0.9/node_modules/@types/node/crypto.d.ts","../../../node_modules/.pnpm/@types+node@25.0.9/node_modules/@types/node/dgram.d.ts","../../../node_modules/.pnpm/@types+node@25.0.9/node_modules/@types/node/diagnostics_channel.d.ts","../../../node_modules/.pnpm/@types+node@25.0.9/node_modules/@types/node/dns.d.ts","../../../node_modules/.pnpm/@types+node@25.0.9/node_modules/@types/node/dns/promises.d.ts","../../../node_modules/.pnpm/@types+node@25.0.9/node_modules/@types/node/domain.d.ts","../../../node_modules/.pnpm/@types+node@25.0.9/node_modules/@types/node/events.d.ts","../../../node_modules/.pnpm/@types+node@25.0.9/node_modules/@types/node/fs.d.ts","../../../node_modules/.pnpm/@types+node@25.0.9/node_modules/@types/node/fs/promises.d.ts","../../../node_modules/.pnpm/@types+node@25.0.9/node_modules/@types/node/http.d.ts","../../../node_modules/.pnpm/@types+node@25.0.9/node_modules/@types/node/http2.d.ts","../../../node_modules/.pnpm/@types+node@25.0.9/node_modules/@types/node/https.d.ts","../../../node_modules/.pnpm/@types+node@25.0.9/node_modules/@types/node/inspector.d.ts","../../../node_modules/.pnpm/@types+node@25.0.9/node_modules/@types/node/inspector.generated.d.ts","../../../node_modules/.pnpm/@types+node@25.0.9/node_modules/@types/node/inspector/promises.d.ts","../../../node_modules/.pnpm/@types+node@25.0.9/node_modules/@types/node/module.d.ts","../../../node_modules/.pnpm/@types+node@25.0.9/node_modules/@types/node/net.d.ts","../../../node_modules/.pnpm/@types+node@25.0.9/node_modules/@types/node/os.d.ts","../../../node_modules/.pnpm/@types+node@25.0.9/node_modules/@types/node/path.d.ts","../../../node_modules/.pnpm/@types+node@25.0.9/node_modules/@types/node/path/posix.d.ts","../../../node_modules/.pnpm/@types+node@25.0.9/node_modules/@types/node/path/win32.d.ts","../../../node_modules/.pnpm/@types+node@25.0.9/node_modules/@types/node/perf_hooks.d.ts","../../../node_modules/.pnpm/@types+node@25.0.9/node_modules/@types/node/process.d.ts","../../../node_modules/.pnpm/@types+node@25.0.9/node_modules/@types/node/punycode.d.ts","../../../node_modules/.pnpm/@types+node@25.0.9/node_modules/@types/node/querystring.d.ts","../../../node_modules/.pnpm/@types+node@25.0.9/node_modules/@types/node/quic.d.ts","../../../node_modules/.pnpm/@types+node@25.0.9/node_modules/@types/node/readline.d.ts","../../../node_modules/.pnpm/@types+node@25.0.9/node_modules/@types/node/readline/promises.d.ts","../../../node_modules/.pnpm/@types+node@25.0.9/node_modules/@types/node/repl.d.ts","../../../node_modules/.pnpm/@types+node@25.0.9/node_modules/@types/node/sea.d.ts","../../../node_modules/.pnpm/@types+node@25.0.9/node_modules/@types/node/sqlite.d.ts","../../../node_modules/.pnpm/@types+node@25.0.9/node_modules/@types/node/stream.d.ts","../../../node_modules/.pnpm/@types+node@25.0.9/node_modules/@types/node/stream/consumers.d.ts","../../../node_modules/.pnpm/@types+node@25.0.9/node_modules/@types/node/stream/promises.d.ts","../../../node_modules/.pnpm/@types+node@25.0.9/node_modules/@types/node/stream/web.d.ts","../../../node_modules/.pnpm/@types+node@25.0.9/node_modules/@types/node/string_decoder.d.ts","../../../node_modules/.pnpm/@types+node@25.0.9/node_modules/@types/node/test.d.ts","../../../node_modules/.pnpm/@types+node@25.0.9/node_modules/@types/node/test/reporters.d.ts","../../../node_modules/.pnpm/@types+node@25.0.9/node_modules/@types/node/timers.d.ts","../../../node_modules/.pnpm/@types+node@25.0.9/node_modules/@types/node/timers/promises.d.ts","../../../node_modules/.pnpm/@types+node@25.0.9/node_modules/@types/node/tls.d.ts","../../../node_modules/.pnpm/@types+node@25.0.9/node_modules/@types/node/trace_events.d.ts","../../../node_modules/.pnpm/@types+node@25.0.9/node_modules/@types/node/tty.d.ts","../../../node_modules/.pnpm/@types+node@25.0.9/node_modules/@types/node/url.d.ts","../../../node_modules/.pnpm/@types+node@25.0.9/node_modules/@types/node/util.d.ts","../../../node_modules/.pnpm/@types+node@25.0.9/node_modules/@types/node/util/types.d.ts","../../../node_modules/.pnpm/@types+node@25.0.9/node_modules/@types/node/v8.d.ts","../../../node_modules/.pnpm/@types+node@25.0.9/node_modules/@types/node/vm.d.ts","../../../node_modules/.pnpm/@types+node@25.0.9/node_modules/@types/node/wasi.d.ts","../../../node_modules/.pnpm/@types+node@25.0.9/node_modules/@types/node/worker_threads.d.ts","../../../node_modules/.pnpm/@types+node@25.0.9/node_modules/@types/node/zlib.d.ts","../../../node_modules/.pnpm/@types+node@25.0.9/node_modules/@types/node/index.d.ts","../../../node_modules/.pnpm/pino-std-serializers@7.1.0/node_modules/pino-std-serializers/index.d.ts","../../../node_modules/.pnpm/sonic-boom@4.2.0/node_modules/sonic-boom/types/index.d.ts","../../../node_modules/.pnpm/pino@9.14.0/node_modules/pino/pino.d.ts","../../kernel/src/logger.ts","../../kernel/src/guard.ts","../../kernel/src/index.ts","../src/types.ts","../src/policy.ts","../src/tool.ts","../src/index.ts"],"fileIdsList":[[219,278,279,281,289,293,296,298,299,300,312],[219,280,281,289,293,296,298,299,300,312],[281,289,293,296,298,299,300,312],[219,281,289,293,296,298,299,300,312,320],[219,281,282,287,289,292,293,296,298,299,300,302,312,317,329],[219,281,282,283,289,292,293,296,298,299,300,312],[219,281,289,293,296,298,299,300,312],[219,281,284,289,293,296,298,299,300,312,330],[219,281,285,286,289,293,296,298,299,300,303,312],[219,281,286,289,293,296,298,299,300,312,317,326],[219,281,287,289,292,293,296,298,299,300,302,312],[219,280,281,288,289,293,296,298,299,300,312],[219,281,289,290,293,296,298,299,300,312],[219,281,289,291,292,293,296,298,299,300,312],[219,280,281,289,292,293,296,298,299,300,312],[219,281,289,292,293,294,296,298,299,300,312,317,329],[219,281,289,292,293,294,296,298,299,300,312,317,320],[219,268,281,289,292,293,295,296,298,299,300,302,312,317,329],[219,281,289,292,293,295,296,298,299,300,302,312,317,326,329],[219,281,289,293,295,296,297,298,299,300,312,317,326,329],[217,218,219,220,221,222,223,224,225,226,227,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336],[219,281,289,292,293,296,298,299,300,312],[219,281,289,293,296,298,300,312],[219,281,289,293,296,298,299,300,301,312,329],[219,281,289,292,293,296,298,299,300,302,312,317],[219,281,289,293,296,298,299,300,303,312],[219,281,289,293,296,298,299,300,304,312],[219,281,289,292,293,296,298,299,300,307,312],[219,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336],[219,281,289,293,296,298,299,300,309,312],[219,281,289,293,296,298,299,300,310,312],[219,281,286,289,293,296,298,299,300,302,312,320],[219,281,289,292,293,296,298,299,300,312,313],[219,281,289,293,296,298,299,300,312,314,330,333],[219,281,289,292,293,296,298,299,300,312,317,319,320],[219,281,289,293,296,298,299,300,312,318,320],[219,281,289,293,296,298,299,300,312,320,330],[219,281,289,293,296,298,299,300,312,321],[219,278,281,289,293,296,298,299,300,312,317,323],[219,281,289,293,296,298,299,300,312,317,322],[219,281,289,292,293,296,298,299,300,312,324,325],[219,281,289,293,296,298,299,300,312,324,325],[219,281,286,289,293,296,298,299,300,302,312,317,326],[219,281,289,293,296,298,299,300,312,327],[219,281,289,293,296,298,299,300,302,312,328],[219,281,289,293,295,296,298,299,300,310,312,329],[219,281,289,293,296,298,299,300,312,330,331],[219,281,286,289,293,296,298,299,300,312,331],[219,281,289,293,296,298,299,300,312,317,332],[219,281,289,293,296,298,299,300,301,312,333],[219,281,289,293,296,298,299,300,312,334],[219,281,284,289,293,296,298,299,300,312],[219,281,286,289,293,296,298,299,300,312],[219,281,289,293,296,298,299,300,312,330],[219,268,281,289,293,296,298,299,300,312],[219,281,289,293,296,298,299,300,312,329],[219,281,289,293,296,298,299,300,312,335],[219,281,289,293,296,298,299,300,307,312],[219,281,289,293,296,298,299,300,312,325],[219,268,281,289,292,293,294,296,298,299,300,307,312,317,320,329,332,333,335],[219,281,289,293,296,298,299,300,312,317,336],[219,281,289,293,295,296,298,299,300,312,337],[219,281,289,292,293,296,298,299,300,312,335,338,339],[219,281,289,292,293,296,298,299,300,312,337],[219,234,237,240,241,281,289,293,296,298,299,300,312,329],[219,237,281,289,293,296,298,299,300,312,317,329],[219,237,241,281,289,293,296,298,299,300,312,329],[219,281,289,293,296,298,299,300,312,317],[219,231,281,289,293,296,298,299,300,312],[219,235,281,289,293,296,298,299,300,312],[219,233,234,237,281,289,293,296,298,299,300,312,329],[219,281,289,293,296,298,299,300,302,312,326],[219,281,289,293,296,298,299,300,312,337],[219,231,281,289,293,296,298,299,300,312,337],[219,233,237,281,289,293,296,298,299,300,302,312,329],[219,228,229,230,232,236,281,289,292,293,296,298,299,300,312,317,329],[219,237,245,253,281,289,293,296,298,299,300,312],[219,229,235,281,289,293,296,298,299,300,312],[219,237,262,263,281,289,293,296,298,299,300,312],[219,229,232,237,281,289,293,296,298,299,300,312,320,329,337],[219,237,281,289,293,296,298,299,300,312],[219,233,237,281,289,293,296,298,299,300,312,329],[219,228,281,289,293,296,298,299,300,312],[219,231,232,233,235,236,237,238,239,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,263,264,265,266,267,281,289,293,296,298,299,300,312],[219,237,255,258,281,289,293,296,298,299,300,312],[219,237,245,246,247,281,289,293,296,298,299,300,312],[219,235,237,246,248,281,289,293,296,298,299,300,312],[219,236,281,289,293,296,298,299,300,312],[219,229,231,237,281,289,293,296,298,299,300,312],[219,237,241,246,248,281,289,293,296,298,299,300,312],[219,241,281,289,293,296,298,299,300,312],[219,235,237,240,281,289,293,296,298,299,300,312,329],[219,229,233,237,245,281,289,293,296,298,299,300,312],[219,237,255,281,289,293,296,298,299,300,312],[219,248,281,289,293,296,298,299,300,312],[219,231,237,262,281,289,293,296,298,299,300,312,320,335,337],[117,118,219,281,289,293,296,298,299,300,312],[94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,219,281,289,293,296,298,299,300,312],[93,117,118,219,281,289,293,296,298,299,300,312],[118,219,281,289,293,296,298,299,300,312],[93,95,117,118,219,281,289,293,296,298,299,300,312],[93,95,118,219,281,289,293,296,298,299,300,312],[93,95,99,118,119,219,281,289,293,296,298,299,300,312],[93,219,281,289,293,296,298,299,300,312],[93,118,219,281,289,293,296,298,299,300,312],[93,105,117,118,219,281,289,293,296,298,299,300,312],[94,118,219,281,289,293,296,298,299,300,312],[93,109,117,118,219,281,289,293,296,298,299,300,312],[93,102,117,118,219,281,289,293,296,298,299,300,312],[93,101,104,117,118,219,281,289,293,296,298,299,300,312],[94,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,219,281,289,293,296,298,299,300,312],[93,117,119,219,281,289,293,296,298,299,300,312],[208,219,281,289,293,296,298,299,300,312],[83,84,219,281,289,293,296,298,299,300,312],[81,82,83,85,86,91,219,281,289,293,296,298,299,300,312],[82,83,219,281,289,293,296,298,299,300,312],[91,219,281,289,293,296,298,299,300,312],[92,219,281,289,293,296,298,299,300,312],[83,219,281,289,293,296,298,299,300,312],[81,82,83,86,87,88,89,90,219,281,289,293,296,298,299,300,312],[81,82,93,219,281,289,293,296,298,299,300,312],[199,219,281,289,293,296,298,299,300,312],[199,202,219,281,289,293,296,298,299,300,312],[194,197,199,200,201,202,203,204,205,206,207,219,281,289,293,296,298,299,300,312],[133,135,202,219,281,289,293,296,298,299,300,312],[199,200,219,281,289,293,296,298,299,300,312],[134,199,201,219,281,289,293,296,298,299,300,312],[135,137,139,140,141,142,219,281,289,293,296,298,299,300,312],[137,139,141,142,219,281,289,293,296,298,299,300,312],[137,139,141,219,281,289,293,296,298,299,300,312],[134,137,139,140,142,219,281,289,293,296,298,299,300,312],[133,135,136,137,138,139,140,141,142,143,144,194,195,196,197,198,219,281,289,293,296,298,299,300,312],[133,135,136,139,219,281,289,293,296,298,299,300,312],[135,136,139,219,281,289,293,296,298,299,300,312],[139,142,219,281,289,293,296,298,299,300,312],[133,134,136,137,138,140,141,142,219,281,289,293,296,298,299,300,312],[133,134,135,139,199,219,281,289,293,296,298,299,300,312],[139,140,141,142,219,281,289,293,296,298,299,300,312],[141,219,281,289,293,296,298,299,300,312],[145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,219,281,289,293,296,298,299,300,312],[73,219,281,289,293,296,298,299,300,312],[74,219,281,289,293,296,298,299,300,312,344,345,346],[219,281,289,293,296,298,299,300,312,344],[74,219,281,289,293,296,298,299,300,312,343,344,345],[219,281,289,293,296,298,299,300,312,343],[76,212,219,281,289,293,296,298,299,300,312],[75,212,219,281,289,292,293,296,298,299,300,312],[73,76,77,211,219,280,281,289,292,293,296,298,299,300,312],[77,79,212,219,281,289,293,296,298,299,300,312],[73,75,77,78,212,219,281,289,293,296,298,299,300,312],[73,211,219,281,289,293,296,298,299,300,312],[73,75,76,77,78,79,80,210,211,212,213,214,215,216,219,281,289,293,296,298,299,300,312,341,342],[212,219,281,289,293,296,298,299,300,312,340],[212,219,281,289,293,296,298,299,300,312],[75,219,281,289,293,296,298,299,300,312],[73,77,79,80,210,212,219,281,286,289,292,293,296,298,299,300,312],[132,209,219,281,289,293,296,298,299,300,312],[211,212,219,281,289,293,296,298,299,300,312],[60,61,219,281,289,293,296,298,299,300,312],[60,61,62,63,64,65,66,67,68,69,70,71,72,219,281,289,293,296,298,299,300,312],[62,63,219,281,289,293,296,298,299,300,312],[60,62,219,281,289,293,296,298,299,300,312],[61,63,66,219,281,289,293,296,298,299,300,312],[63,219,281,289,293,296,298,299,300,312],[60,61,62,63,64,65,219,281,289,293,296,298,299,300,312],[62,219,281,289,293,296,298,299,300,312]],"fileInfos":[{"version":"c430d44666289dae81f30fa7b2edebf186ecc91a2d4c71266ea6ae76388792e1","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","impliedFormat":1},{"version":"ee7bad0c15b58988daa84371e0b89d313b762ab83cb5b31b8a2d1162e8eb41c2","impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"fb0f136d372979348d59b3f5020b4cdb81b5504192b1cacff5d1fbba29378aa1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"a680117f487a4d2f30ea46f1b4b7f58bef1480456e18ba53ee85c2746eeca012","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true,"impliedFormat":1},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true,"impliedFormat":1},{"version":"959d36cddf5e7d572a65045b876f2956c973a586da58e5d26cde519184fd9b8a","affectsGlobalScope":true,"impliedFormat":1},{"version":"965f36eae237dd74e6cca203a43e9ca801ce38824ead814728a2807b1910117d","affectsGlobalScope":true,"impliedFormat":1},{"version":"3925a6c820dcb1a06506c90b1577db1fdbf7705d65b62b99dce4be75c637e26b","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a3d63ef2b853447ec4f749d3f368ce642264246e02911fcb1590d8c161b8005","affectsGlobalScope":true,"impliedFormat":1},{"version":"8cdf8847677ac7d20486e54dd3fcf09eda95812ac8ace44b4418da1bbbab6eb8","affectsGlobalScope":true,"impliedFormat":1},{"version":"8444af78980e3b20b49324f4a16ba35024fef3ee069a0eb67616ea6ca821c47a","affectsGlobalScope":true,"impliedFormat":1},{"version":"3287d9d085fbd618c3971944b65b4be57859f5415f495b33a6adc994edd2f004","affectsGlobalScope":true,"impliedFormat":1},{"version":"b4b67b1a91182421f5df999988c690f14d813b9850b40acd06ed44691f6727ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"51ad4c928303041605b4d7ae32e0c1ee387d43a24cd6f1ebf4a2699e1076d4fa","affectsGlobalScope":true,"impliedFormat":1},{"version":"196cb558a13d4533a5163286f30b0509ce0210e4b316c56c38d4c0fd2fb38405","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},"10e5a93e628d3f6d6989728c121cd56ce71090683ba55f2bf14af928e8eb1095","5788883dcaf788dc42d98606ad8c82855091f938e78bfd5e123caa50c49cd636","de69abd82ede9742e9ef58fc1cc718d8fa4e93e892a7e1f58dfab5a3b1fcd856","28990cec8b3365f599898f42be61860254604d8832a03c4fd26b20074b052853","71ce83e202c590e5951c38c5a2f1f88aa3863196d1304727f168b28829c78d47","e2a4f8fc6dfc8c8d277fa01271e3e9ca3b795ec36a9c94682f12f75082c7c145","73bc05d32497689769ab035fd1604457f767d2ed1d36fb7ef57cc33eb8085d85","e7e98ffec995fc6f576e2c46d758b010c6e670d18237e8deac640a7e41a4841d","afb6708f35f9f9ce1d5bc9e91995442fa6dcaab56e089537386d82e0b8a71646","e7c4db4426dcb193726e11db629ceaded22716bd8c2405aea2b364ef0ef42239","d4e74a5097f915ccf61aac0e612b5169c28a49ff63864963d04db7eb8fee0a9c","624c889a7d43466227128c034d8f4fe65e3e6a7410a97d0058dc6789993f269e","ab94756f3e0432a8fdf275cd493a4a8ae7d0030aa78321d5cf1ee0a001c3253e","a305105678a9fa9928b3482060cf6b5ee691c90f6e364ddd02e6d29820ea6143",{"version":"ef69af1a024d6572de19b81a0aca407161335d8e60b81b8e270c55cecddf0de2","signature":"97d469540f162ff7fd2aeede057024c74dd005989969e5dba37f6b787e92e900"},"214326ab44d910f1e930b688dffccd812395c09c1b8abd149f93100bdfb10da8","ff3c2a539818791a0395aae078752f22ceabd4780b5966013a86168470c0423f","d795acf2d76236d7fc7ab12571271c34ba695a1e67e5a22dead7e8cd9f97538a","0eb5b7d15f2f91ae62697a2f148217e99875b1eef1963fa367799a17dc81ab7e","083bd79c2a9abad7e949d78d3090fbec30af2a53340becf55aec36e135cf483d","ac462382a92d8989efa876f7944e0d67be42cbc1575ac72d69f5c7adb6a068ba",{"version":"d3cfde44f8089768ebb08098c96d01ca260b88bccf238d55eee93f1c620ff5a5","impliedFormat":1},{"version":"293eadad9dead44c6fd1db6de552663c33f215c55a1bfa2802a1bceed88ff0ec","impliedFormat":1},{"version":"36eb5babc665b890786550d4a8cb20ef7105673a6d5551fbdd7012877bb26942","impliedFormat":1},{"version":"fec412ded391a7239ef58f455278154b62939370309c1fed322293d98c8796a6","impliedFormat":1},{"version":"e3498cf5e428e6c6b9e97bd88736f26d6cf147dedbfa5a8ad3ed8e05e059af8a","impliedFormat":1},{"version":"dba3f34531fd9b1b6e072928b6f885aa4d28dd6789cbd0e93563d43f4b62da53","impliedFormat":1},{"version":"f672c876c1a04a223cf2023b3d91e8a52bb1544c576b81bf64a8fec82be9969c","impliedFormat":1},{"version":"e4b03ddcf8563b1c0aee782a185286ed85a255ce8a30df8453aade2188bbc904","impliedFormat":1},{"version":"2329d90062487e1eaca87b5e06abcbbeeecf80a82f65f949fd332cfcf824b87b","impliedFormat":1},{"version":"25b3f581e12ede11e5739f57a86e8668fbc0124f6649506def306cad2c59d262","impliedFormat":1},{"version":"93c3e73824ad57f98fd23b39335dbdae2db0bd98199b0dc0b9ccc60bf3c5134a","impliedFormat":1},{"version":"a9ebb67d6bbead6044b43714b50dcb77b8f7541ffe803046fdec1714c1eba206","impliedFormat":1},{"version":"833e92c058d033cde3f29a6c7603f517001d1ddd8020bc94d2067a3bc69b2a8e","impliedFormat":1},{"version":"ef38456e22b0bffcd9ff28dc1a7138e84918a212e6960dd620cc3000341c0ebe","impliedFormat":1},{"version":"07a1cea63a067c0845029ea6e1933af842783efa3006510f504b1f09bd2ebff0","impliedFormat":1},{"version":"814187370f99638f6bb69c838d19dcdb20a41cb65627cfc16a04d9cc4522fc82","impliedFormat":1},{"version":"7df3ea6fcd7e74ab59724700357df41a12d8f57e22f3e5da36dc645f20753152","impliedFormat":1},{"version":"0e8edbe744dfc3ce65e9fa2283f1f0eb2c0aaaec4df19765f51c346e45452cda","impliedFormat":1},{"version":"a7559733f2f5f9ae4d071cef99c505870e167ee830c75faf121f34408b99afbe","impliedFormat":1},{"version":"9b6e899f6fa0cf536eead034fcae436ab6ecd9442153ee06a0fb5b01475bff85","impliedFormat":1},{"version":"1b399336f32abd1c83610e5c95337fdcf2dd5414cf4b44c1ff4927d2cd8f1cf2","impliedFormat":1},{"version":"55ddb00c1810d07a092af6a816f89a6e63c3c4ef04c9c27d36a7dd59bf59b5ae","impliedFormat":1},{"version":"5ecb3df85ac1c4a7e7a1e9761a5bfb52a65eef8e94e1280e1bff6389cd453099","impliedFormat":1},{"version":"9af342002e6b793ca8a69b322cf8347250c129b45dbca8731baaa66ec553561b","impliedFormat":1},{"version":"e01ab496375025f3e54f832d43f840c589e57eb2e5986421f791f51bbcbc494e","impliedFormat":1},{"version":"539cc98696e783f3fe32422a89f8a34479ce056adb211dd60b6a89550d3b9b7f","impliedFormat":1},{"version":"11d5d9c9b11fbd1537ecec72ec38f993d0358c42f7c98569998a04bbbf57d07c","impliedFormat":1},{"version":"c26c383b08e47dfbd741193ef1e7f8f002ac3b0d2f6bf3d4b6b9a99ee2d9378e","impliedFormat":1},{"version":"75473b178a514d8768d6ead4a4da267aa6bedeeb792cd9437e45b46fa2dcf608","impliedFormat":1},{"version":"e82a6fc9b90adc5270daa1e467feb3a2ae5393180839d7a347acd1d9ebe04493","impliedFormat":1},{"version":"3d877e9f51aabdb77efeea746c0c09464274dcaf7364e6e64880e9c2eaa8c990","impliedFormat":1},{"version":"9830d91d01b457b113b36b56d4534ba8fc42bc3c195a2108dc3431e9f77340c7","impliedFormat":1},{"version":"1e7d16304d31f287ec09753214b755eb78e1122432d06dc771f5c123199273b1","impliedFormat":1},{"version":"acca4486b08bf5dc91c23d65f47181bd13f82571969c85e8df474fa6bc5c2a88","impliedFormat":1},{"version":"296dcaf11fa0122dfe78a1d97bea96aa9bccb73098bc739ab253281ad192dffb","impliedFormat":1},{"version":"971dc452ac09307ee049acb21bbd30a82d1c163377465d6b33fd4d677ed2385d","impliedFormat":1},{"version":"226b58896f4f01f4c669d908f32c657bcab1a83f3aebb2f3d711a4fe7ba2a2d6","impliedFormat":1},{"version":"8a818c9cf372e5c5818d846d761ff59c531caa3b0aa62c5686be1df31dc08296","impliedFormat":1},{"version":"f01c60b06afe23316efccaaa8b6ccb5f507b8e6eadf5e2a84c6fe350aebaa1bd","impliedFormat":1},{"version":"9a447607a90667c6db7737f30d2429f6f06efde55a47a2a3eeebc52e866d153e","impliedFormat":1},{"version":"ecc6f977713316ef4339f32631ecb619a40a3061fa86ff3776591920d9977e24","impliedFormat":1},{"version":"0aea84fed0ab80d54f32a40aaf5f4d58c8a5259dd5f9fe39dbcd584575dbb100","impliedFormat":1},{"version":"a1769100f50f3e190c2ea2ed2a711e6798c70f9ad806b54c597a5b64488007b0","impliedFormat":1},{"version":"8105a77b1ce063fd0f60080d8985e01cb92516237cb4a254547ce7548e8916e5","impliedFormat":1},{"version":"dc6b3b3383218cc2c556687fd7ac7b6b1d9ad3abaf50da7f04a2d7a01abaee19","impliedFormat":1},{"version":"879443705ef53b56d8f5b944ea2c24bd5b37a1341eb0142789c2e2567d6bb6e1","impliedFormat":1},{"version":"44c18ff24c5c5b7883ca2e1b1d4236db715ca5cfd9b87705e1a7e4591b4b445e","impliedFormat":1},{"version":"3cceb8a1fe59bc1d233764bfef78e6c72a468e2af1e06a92e282b1848c78bc31","impliedFormat":1},{"version":"ed96d25fa3170958d1d376e653ade8e653638d3fb819a4792a503a5505eea849","impliedFormat":1},{"version":"a005dc547fff460703595b4c0faccb7ec68a5870a4d0e5a2932dc1fd59cc9856","impliedFormat":1},{"version":"dccbbf8ce85ea99cdbdc2269d55f75bc1fbad77d96c40fd82bd73af3fb8f39e4","impliedFormat":1},{"version":"449babe88138e129aef94c1696b527898f9e13ab62bce129daee0e85266e48a7","impliedFormat":1},{"version":"c1a2e05eb6d7ca8d7e4a7f4c93ccf0c2857e842a64c98eaee4d85841ee9855e6","impliedFormat":1},{"version":"835fb2909ce458740fb4a49fc61709896c6864f5ce3db7f0a88f06c720d74d02","impliedFormat":1},{"version":"6e5857f38aa297a859cab4ec891408659218a5a2610cd317b6dcbef9979459cc","impliedFormat":1},{"version":"ead8e39c2e11891f286b06ae2aa71f208b1802661fcdb2425cffa4f494a68854","impliedFormat":1},{"version":"82919acbb38870fcf5786ec1292f0f5afe490f9b3060123e48675831bd947192","impliedFormat":1},{"version":"e222701788ec77bd57c28facbbd142eadf5c749a74d586bc2f317db7e33544b1","impliedFormat":1},{"version":"09154713fae0ed7befacdad783e5bd1970c06fc41a5f866f7f933b96312ce764","impliedFormat":1},{"version":"8d67b13da77316a8a2fabc21d340866ddf8a4b99e76a6c951cc45189142df652","impliedFormat":1},{"version":"a91c8d28d10fee7fe717ddf3743f287b68770c813c98f796b6e38d5d164bd459","impliedFormat":1},{"version":"68add36d9632bc096d7245d24d6b0b8ad5f125183016102a3dad4c9c2438ccb0","impliedFormat":1},{"version":"3a819c2928ee06bbcc84e2797fd3558ae2ebb7e0ed8d87f71732fb2e2acc87b4","impliedFormat":1},{"version":"f6f827cd43e92685f194002d6b52a9408309cda1cec46fb7ca8489a95cbd2fd4","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"a270a1a893d1aee5a3c1c8c276cd2778aa970a2741ee2ccf29cc3210d7da80f5","impliedFormat":1},{"version":"add0ce7b77ba5b308492fa68f77f24d1ed1d9148534bdf05ac17c30763fc1a79","impliedFormat":1},{"version":"8926594ee895917e90701d8cbb5fdf77fc238b266ac540f929c7253f8ad6233d","impliedFormat":1},{"version":"2f67911e4bf4e0717dc2ded248ce2d5e4398d945ee13889a6852c1233ea41508","impliedFormat":1},{"version":"d8430c275b0f59417ea8e173cfb888a4477b430ec35b595bf734f3ec7a7d729f","impliedFormat":1},{"version":"69364df1c776372d7df1fb46a6cb3a6bf7f55e700f533a104e3f9d70a32bec18","impliedFormat":1},{"version":"6042774c61ece4ba77b3bf375f15942eb054675b7957882a00c22c0e4fe5865c","impliedFormat":1},{"version":"5a3bd57ed7a9d9afef74c75f77fce79ba3c786401af9810cdf45907c4e93f30e","impliedFormat":1},{"version":"ed8763205f02fb65e84eff7432155258df7f93b7d938f01785cb447d043d53f3","impliedFormat":1},{"version":"30db853bb2e60170ba11e39ab48bacecb32d06d4def89eedf17e58ebab762a65","impliedFormat":1},{"version":"e27451b24234dfed45f6cf22112a04955183a99c42a2691fb4936d63cfe42761","impliedFormat":1},{"version":"2316301dd223d31962d917999acf8e543e0119c5d24ec984c9f22cb23247160c","impliedFormat":1},{"version":"58d65a2803c3b6629b0e18c8bf1bc883a686fcf0333230dd0151ab6e85b74307","impliedFormat":1},{"version":"e818471014c77c103330aee11f00a7a00b37b35500b53ea6f337aefacd6174c9","impliedFormat":1},{"version":"d4a5b1d2ff02c37643e18db302488cd64c342b00e2786e65caac4e12bda9219b","impliedFormat":1},{"version":"29f823cbe0166e10e7176a94afe609a24b9e5af3858628c541ff8ce1727023cd","impliedFormat":1},"843e887a49378423a4d59881b6955487fb9adbd1482608df670db0cf819c6b2b","beb76216e83e5bc8ee07c0a5420111ede754665edaaab0a295fd02217176d647","1d17c49aa65fe361f3a80f9bfebdd9e00ecf25ce167f36c75f5ffa913a0773d6","d57ce7e14549227d66ce61cc79b65940e12bd43a7566ea9e6cff12b25f47ddd9","406ad6cba7692842834ed6236bf2c6c69abddbbd2491b1dd0be7cf4493ab3b28","734a0d0e00f61db05e8bed49856eac1a5dad81f1cea04bf0636f1d1fd854e75d","d48256d70022a85bfed6b55b4ac6a7cf7f59529c8dd574bea85c74350c76b164",{"version":"d153a11543fd884b596587ccd97aebbeed950b26933ee000f94009f1ab142848","affectsGlobalScope":true,"impliedFormat":1},{"version":"0ccdaa19852d25ecd84eec365c3bfa16e7859cadecf6e9ca6d0dbbbee439743f","affectsGlobalScope":true,"impliedFormat":1},{"version":"438b41419b1df9f1fbe33b5e1b18f5853432be205991d1b19f5b7f351675541e","affectsGlobalScope":true,"impliedFormat":1},{"version":"096116f8fedc1765d5bd6ef360c257b4a9048e5415054b3bf3c41b07f8951b0b","affectsGlobalScope":true,"impliedFormat":1},{"version":"e5e01375c9e124a83b52ee4b3244ed1a4d214a6cfb54ac73e164a823a4a7860a","affectsGlobalScope":true,"impliedFormat":1},{"version":"f90ae2bbce1505e67f2f6502392e318f5714bae82d2d969185c4a6cecc8af2fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"4b58e207b93a8f1c88bbf2a95ddc686ac83962b13830fe8ad3f404ffc7051fb4","affectsGlobalScope":true,"impliedFormat":1},{"version":"1fefabcb2b06736a66d2904074d56268753654805e829989a46a0161cd8412c5","affectsGlobalScope":true,"impliedFormat":1},{"version":"9798340ffb0d067d69b1ae5b32faa17ab31b82466a3fc00d8f2f2df0c8554aaa","affectsGlobalScope":true,"impliedFormat":1},{"version":"c18a99f01eb788d849ad032b31cafd49de0b19e083fe775370834c5675d7df8e","affectsGlobalScope":true,"impliedFormat":1},{"version":"5247874c2a23b9a62d178ae84f2db6a1d54e6c9a2e7e057e178cc5eea13757fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"cdcf9ea426ad970f96ac930cd176d5c69c6c24eebd9fc580e1572d6c6a88f62c","impliedFormat":1},{"version":"23cd712e2ce083d68afe69224587438e5914b457b8acf87073c22494d706a3d0","impliedFormat":1},{"version":"487b694c3de27ddf4ad107d4007ad304d29effccf9800c8ae23c2093638d906a","impliedFormat":1},{"version":"3a80bc85f38526ca3b08007ee80712e7bb0601df178b23fbf0bf87036fce40ce","impliedFormat":1},{"version":"ccf4552357ce3c159ef75f0f0114e80401702228f1898bdc9402214c9499e8c0","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"68834d631c8838c715f225509cfc3927913b9cc7a4870460b5b60c8dbdb99baf","impliedFormat":1},{"version":"2931540c47ee0ff8a62860e61782eb17b155615db61e36986e54645ec67f67c2","impliedFormat":1},{"version":"ccab02f3920fc75c01174c47fcf67882a11daf16baf9e81701d0a94636e94556","impliedFormat":1},{"version":"f6faf5f74e4c4cc309a6c6a6c4da02dbb840be5d3e92905a23dcd7b2b0bd1986","impliedFormat":1},{"version":"ea6bc8de8b59f90a7a3960005fd01988f98fd0784e14bc6922dde2e93305ec7d","impliedFormat":1},{"version":"36107995674b29284a115e21a0618c4c2751b32a8766dd4cb3ba740308b16d59","impliedFormat":1},{"version":"914a0ae30d96d71915fc519ccb4efbf2b62c0ddfb3a3fc6129151076bc01dc60","impliedFormat":1},{"version":"33e981bf6376e939f99bd7f89abec757c64897d33c005036b9a10d9587d80187","impliedFormat":1},{"version":"7fd1b31fd35876b0aa650811c25ec2c97a3c6387e5473eb18004bed86cdd76b6","impliedFormat":1},{"version":"b41767d372275c154c7ea6c9d5449d9a741b8ce080f640155cc88ba1763e35b3","impliedFormat":1},{"version":"3bacf516d686d08682751a3bd2519ea3b8041a164bfb4f1d35728993e70a2426","impliedFormat":1},{"version":"7fb266686238369442bd1719bc0d7edd0199da4fb8540354e1ff7f16669b4323","impliedFormat":1},{"version":"0a60a292b89ca7218b8616f78e5bbd1c96b87e048849469cccb4355e98af959a","impliedFormat":1},{"version":"0b6e25234b4eec6ed96ab138d96eb70b135690d7dd01f3dd8a8ab291c35a683a","impliedFormat":1},{"version":"9666f2f84b985b62400d2e5ab0adae9ff44de9b2a34803c2c5bd3c8325b17dc0","impliedFormat":1},{"version":"40cd35c95e9cf22cfa5bd84e96408b6fcbca55295f4ff822390abb11afbc3dca","impliedFormat":1},{"version":"b1616b8959bf557feb16369c6124a97a0e74ed6f49d1df73bb4b9ddf68acf3f3","impliedFormat":1},{"version":"5b03a034c72146b61573aab280f295b015b9168470f2df05f6080a2122f9b4df","impliedFormat":1},{"version":"40b463c6766ca1b689bfcc46d26b5e295954f32ad43e37ee6953c0a677e4ae2b","impliedFormat":1},{"version":"249b9cab7f5d628b71308c7d9bb0a808b50b091e640ba3ed6e2d0516f4a8d91d","impliedFormat":1},{"version":"80aae6afc67faa5ac0b32b5b8bc8cc9f7fa299cff15cf09cc2e11fd28c6ae29e","impliedFormat":1},{"version":"f473cd2288991ff3221165dcf73cd5d24da30391f87e85b3dd4d0450c787a391","impliedFormat":1},{"version":"499e5b055a5aba1e1998f7311a6c441a369831c70905cc565ceac93c28083d53","impliedFormat":1},{"version":"54c3e2371e3d016469ad959697fd257e5621e16296fa67082c2575d0bf8eced0","impliedFormat":1},{"version":"beb8233b2c220cfa0feea31fbe9218d89fa02faa81ef744be8dce5acb89bb1fd","impliedFormat":1},{"version":"c183b931b68ad184bc8e8372bf663f3d33304772fb482f29fb91b3c391031f3e","impliedFormat":1},{"version":"5d0375ca7310efb77e3ef18d068d53784faf62705e0ad04569597ae0e755c401","impliedFormat":1},{"version":"59af37caec41ecf7b2e76059c9672a49e682c1a2aa6f9d7dc78878f53aa284d6","impliedFormat":1},{"version":"addf417b9eb3f938fddf8d81e96393a165e4be0d4a8b6402292f9c634b1cb00d","impliedFormat":1},{"version":"48cc3ec153b50985fb95153258a710782b25975b10dd4ac8a4f3920632d10790","impliedFormat":1},{"version":"adf27937dba6af9f08a68c5b1d3fce0ca7d4b960c57e6d6c844e7d1a8e53adae","impliedFormat":1},{"version":"e1528ca65ac90f6fa0e4a247eb656b4263c470bb22d9033e466463e13395e599","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"866078923a56d026e39243b4392e282c1c63159723996fa89243140e1388a98d","impliedFormat":1},{"version":"dd0109710de4cd93e245121ab86d8c66d20f3ead80074b68e9c3e349c4f53342","affectsGlobalScope":true,"impliedFormat":1},{"version":"b3275d55fac10b799c9546804126239baf020d220136163f763b55a74e50e750","affectsGlobalScope":true,"impliedFormat":1},{"version":"fa68a0a3b7cb32c00e39ee3cd31f8f15b80cac97dce51b6ee7fc14a1e8deb30b","affectsGlobalScope":true,"impliedFormat":1},{"version":"1cf059eaf468efcc649f8cf6075d3cb98e9a35a0fe9c44419ec3d2f5428d7123","affectsGlobalScope":true,"impliedFormat":1},{"version":"6c36e755bced82df7fb6ce8169265d0a7bb046ab4e2cb6d0da0cb72b22033e89","affectsGlobalScope":true,"impliedFormat":1},{"version":"e7721c4f69f93c91360c26a0a84ee885997d748237ef78ef665b153e622b36c1","affectsGlobalScope":true,"impliedFormat":1},{"version":"7a93de4ff8a63bafe62ba86b89af1df0ccb5e40bb85b0c67d6bbcfdcf96bf3d4","affectsGlobalScope":true,"impliedFormat":1},{"version":"90e85f9bc549dfe2b5749b45fe734144e96cd5d04b38eae244028794e142a77e","affectsGlobalScope":true,"impliedFormat":1},{"version":"e0a5deeb610b2a50a6350bd23df6490036a1773a8a71d70f2f9549ab009e67ee","affectsGlobalScope":true,"impliedFormat":1},{"version":"435b3711465425770ed2ee2f1cf00ce071835265e0851a7dc4600ab4b007550e","impliedFormat":1},{"version":"7e49f52a159435fc8df4de9dc377ef5860732ca2dc9efec1640531d3cf5da7a3","impliedFormat":1},{"version":"dd4bde4bdc2e5394aed6855e98cf135dfdf5dd6468cad842e03116d31bbcc9bc","impliedFormat":1},{"version":"4d4e879009a84a47c05350b8dca823036ba3a29a3038efed1be76c9f81e45edf","affectsGlobalScope":true,"impliedFormat":1},{"version":"cf83d90d5faf27b994c2e79af02e32b555dbfe42cd9bd1571445f2168d1f4e2d","impliedFormat":1},{"version":"9ba13b47cb450a438e3076c4a3f6afb9dc85e17eae50f26d4b2d72c0688c9251","impliedFormat":1},{"version":"b64cd4401633ea4ecadfd700ddc8323a13b63b106ac7127c1d2726f32424622c","impliedFormat":1},{"version":"37c6e5fe5715814412b43cc9b50b24c67a63c4e04e753e0d1305970d65417a60","impliedFormat":1},{"version":"0e28335ac43f4d94dd2fe6d9e6fa6813570640839addd10d309d7985f33a6308","impliedFormat":1},{"version":"ee0e4946247f842c6dd483cbb60a5e6b484fee07996e3a7bc7343dfb68a04c5d","impliedFormat":1},{"version":"ef051f42b7e0ef5ca04552f54c4552eac84099d64b6c5ad0ef4033574b6035b8","impliedFormat":1},{"version":"853a43154f1d01b0173d9cbd74063507ece57170bad7a3b68f3fa1229ad0a92f","impliedFormat":1},{"version":"56231e3c39a031bfb0afb797690b20ed4537670c93c0318b72d5180833d98b72","impliedFormat":1},{"version":"5cc7c39031bfd8b00ad58f32143d59eb6ffc24f5d41a20931269011dccd36c5e","impliedFormat":1},{"version":"b0b69c61b0f0ec8ca15db4c8c41f6e77f4cacb784d42bca948f42dea33e8757e","affectsGlobalScope":true,"impliedFormat":1},{"version":"f96a48183254c00d24575401f1a761b4ce4927d927407e7862a83e06ce5d6964","impliedFormat":1},{"version":"cc25940cfb27aa538e60d465f98bb5068d4d7d33131861ace43f04fe6947d68f","impliedFormat":1},{"version":"ac86245c2f31335bfd52cbe7fc760f9fc4f165387875869a478a6d9616a95e72","impliedFormat":1},{"version":"01ff95aa1443e3f7248974e5a771f513cb2ac158c8898f470a1792f817bee497","impliedFormat":1},{"version":"9d96a7ce809392ff2cb99691acf7c62e632fe56897356ba013b689277aca3619","impliedFormat":1},{"version":"42a05d8f239f74587d4926aba8cc54792eed8e8a442c7adc9b38b516642aadfe","impliedFormat":1},{"version":"5d21b58d60383cc6ab9ad3d3e265d7d25af24a2c9b506247e0e50b0a884920be","impliedFormat":1},{"version":"101f482fd48cb4c7c0468dcc6d62c843d842977aea6235644b1edd05e81fbf22","impliedFormat":1},{"version":"ae6757460f37078884b1571a3de3ebaf724d827d7e1d53626c02b3c2a408ac63","affectsGlobalScope":true,"impliedFormat":1},{"version":"27c0a08e343c6a0ae17bd13ba6d44a9758236dc904cd5e4b43456996cd51f520","impliedFormat":1},{"version":"3ef397f12387eff17f550bc484ea7c27d21d43816bbe609d495107f44b97e933","impliedFormat":1},{"version":"1023282e2ba810bc07905d3668349fbd37a26411f0c8f94a70ef3c05fe523fcf","impliedFormat":1},{"version":"b214ebcf76c51b115453f69729ee8aa7b7f8eccdae2a922b568a45c2d7ff52f7","impliedFormat":1},{"version":"429c9cdfa7d126255779efd7e6d9057ced2d69c81859bbab32073bad52e9ba76","impliedFormat":1},{"version":"6f80e51ba310608cd71bcdc09a171d7bbfb3b316048601c9ec215ce16a8dcfbc","impliedFormat":1},{"version":"63054ef6518309c85b11e00537eef47a2b8609c6c20630b1a1daaecf86ea0d28","affectsGlobalScope":true,"impliedFormat":1},{"version":"7f2c62938251b45715fd2a9887060ec4fbc8724727029d1cbce373747252bdd7","impliedFormat":1},{"version":"e3ace08b6bbd84655d41e244677b474fd995923ffef7149ddb68af8848b60b05","impliedFormat":1},{"version":"132580b0e86c48fab152bab850fc57a4b74fe915c8958d2ccb052b809a44b61c","impliedFormat":1},{"version":"af4ab0aa8908fc9a655bb833d3bc28e117c4f0e1038c5a891546158beb25accb","impliedFormat":1},{"version":"69c9a5a9392e8564bd81116e1ed93b13205201fb44cb35a7fde8c9f9e21c4b23","impliedFormat":1},{"version":"5f8fc37f8434691ffac1bfd8fc2634647da2c0e84253ab5d2dd19a7718915b35","impliedFormat":1},{"version":"5981c2340fd8b076cae8efbae818d42c11ffc615994cb060b1cd390795f1be2b","impliedFormat":1},{"version":"2ca2bca6845a7234eff5c3d192727a068fca72ac565f3c819c6b04ccc83dadc0","impliedFormat":1},{"version":"ed4f674fc8c0c993cc7e145069ac44129e03519b910c62be206a0cc777bdc60b","affectsGlobalScope":true,"impliedFormat":1},{"version":"0250da3eb85c99624f974e77ef355cdf86f43980251bc371475c2b397ba55bcd","impliedFormat":1},{"version":"f1c93e046fb3d9b7f8249629f4b63dc068dd839b824dd0aa39a5e68476dc9420","impliedFormat":1},{"version":"3d3a5f27ffbc06c885dd4d5f9ee20de61faf877fe2c3a7051c4825903d9a7fdc","impliedFormat":1},{"version":"12806f9f085598ef930edaf2467a5fa1789a878fba077cd27e85dc5851e11834","impliedFormat":1},{"version":"17d06eb5709839c7ce719f0c38ada6f308fb433f2cd6d8c87b35856e07400950","impliedFormat":1},{"version":"a43fe41c33d0a192a0ecaf9b92e87bef3709c9972e6d53c42c49251ccb962d69","impliedFormat":1},{"version":"a177959203c017fad3ecc4f3d96c8757a840957a4959a3ae00dab9d35961ca6c","affectsGlobalScope":true,"impliedFormat":1},{"version":"6fc727ccf9b36e257ff982ea0badeffbfc2c151802f741bddff00c6af3b784cf","impliedFormat":1},{"version":"2a00d005e3af99cd1cfa75220e60c61b04bfb6be7ca7453bfe2ef6cca37cc03c","impliedFormat":1},{"version":"4844a4c9b4b1e812b257676ed8a80b3f3be0e29bf05e742cc2ea9c3c6865e6c6","impliedFormat":1},{"version":"064878a60367e0407c42fb7ba02a2ea4d83257357dc20088e549bd4d89433e9c","impliedFormat":1},{"version":"14d4bd22d1b05824971b98f7e91b2484c90f1a684805c330476641417c3d9735","impliedFormat":1},{"version":"586eaf66bace2e731cee0ddfbfac326ad74a83c1acfeac4afb2db85ad23226c7","impliedFormat":1},{"version":"b484ec11ba00e3a2235562a41898d55372ccabe607986c6fa4f4aba72093749f","impliedFormat":1},{"version":"d1a14d87cedcf4f0b8173720d6eb29cc02878bf2b6dabf9c9d9cee742f275368","impliedFormat":1},{"version":"e60efae9fe48a2955f66bf4cbf0f082516185b877daf50d9c5e2a009660a7714","impliedFormat":1},{"version":"041a7781b9127ab568d2cdcce62c58fdea7c7407f40b8c50045d7866a2727130","impliedFormat":1},{"version":"b37f83e7deea729aa9ce5593f78905afb45b7532fdff63041d374f60059e7852","impliedFormat":1},{"version":"e1cb68f3ef3a8dd7b2a9dfb3de482ed6c0f1586ba0db4e7d73c1d2147b6ffc51","impliedFormat":1},{"version":"55cdbeebe76a1fa18bbd7e7bf73350a2173926bd3085bb050cf5a5397025ee4e","impliedFormat":1},{"version":"4fe80f12b1d5189384a219095c2eabadbb389c2d3703aae7c5376dbaa56061df","impliedFormat":1},{"version":"9eb1d2dceae65d1c82fc6be7e9b6b19cf3ca93c364678611107362b6ad4d2d41","impliedFormat":1},{"version":"8065e20ac0ad0536d4f1c8d4c2303272a4d25c450bea8d25deb25697d19300e5","impliedFormat":1},"fbdf4ae83eae6c556d64fbb73d7ed7244de0501368ab560c45afe3222d466c76","10143723461296f133ad65a156f146d1b86651ebd06d7a11fd4df3fd11b34c1d","4c16a71283c9aa8517db0ddd9ad638acded7d2ac08a40dca3fa84c242d074d78",{"version":"7aecdef5c8b276c24a8552462b18bb32b58b188a0759ca3bc436c48c9305eade","signature":"258e7773370a7cb7d2d7a1191644afc2a51868e50b209e373e75d1062029dba4"},{"version":"6cb3dfa102eda86d58921f09f3fa01310416a46ae5fe621e5f0a9a077be08101","signature":"8df5ae147df7e191df59345a470dab574f29c0a13c8c965970555eab14fcc571"},{"version":"c4d25c837cf885302fe5bbc7ff961f02e1bd959ab65b209a09490c210cbe9f12","signature":"aeb1bb8f0effec76cc7a74a154c0638b73b686df5703fd8e103196cb51cb40d6"},{"version":"037ef5920cb565112836ba391c660f19757c3edaffbce370a4810feece2c62b6","signature":"26532339b036bd16aa3cc7f54a775a4684dc022c555fa85e6a827c37ce8d9267"}],"root":[74,[344,347]],"options":{"composite":true,"declaration":true,"declarationMap":true,"esModuleInterop":true,"jsx":1,"module":200,"outDir":"./","rootDir":"../src","skipLibCheck":true,"sourceMap":true,"strict":true,"target":9,"tsBuildInfoFile":"./.tsbuildinfo.build","verbatimModuleSyntax":true},"referencedMap":[[278,1],[279,1],[280,2],[219,3],[281,4],[282,5],[283,6],[217,7],[284,8],[285,9],[286,10],[287,11],[288,12],[289,13],[290,13],[291,14],[292,15],[293,16],[294,17],[220,7],[218,7],[295,18],[296,19],[297,20],[337,21],[298,22],[299,23],[300,22],[301,24],[302,25],[303,26],[304,27],[305,27],[306,27],[307,28],[308,29],[309,30],[310,31],[311,32],[312,33],[313,33],[314,34],[315,7],[316,7],[317,35],[318,36],[319,35],[320,37],[321,38],[322,39],[323,40],[324,41],[325,42],[326,43],[327,44],[328,45],[329,46],[330,47],[331,48],[332,49],[333,50],[334,51],[221,22],[222,7],[223,52],[224,53],[225,7],[226,54],[227,7],[269,55],[270,56],[271,57],[272,57],[273,58],[274,7],[275,4],[276,59],[277,56],[335,60],[336,61],[338,62],[340,63],[339,64],[58,7],[59,7],[11,7],[10,7],[2,7],[12,7],[13,7],[14,7],[15,7],[16,7],[17,7],[18,7],[19,7],[3,7],[20,7],[21,7],[4,7],[22,7],[26,7],[23,7],[24,7],[25,7],[27,7],[28,7],[29,7],[5,7],[30,7],[31,7],[32,7],[33,7],[6,7],[37,7],[34,7],[35,7],[36,7],[38,7],[7,7],[39,7],[44,7],[45,7],[40,7],[41,7],[42,7],[43,7],[8,7],[49,7],[46,7],[47,7],[48,7],[50,7],[9,7],[51,7],[52,7],[53,7],[55,7],[54,7],[1,7],[56,7],[57,7],[245,65],[257,66],[243,67],[258,68],[267,69],[234,70],[235,71],[233,72],[266,73],[261,74],[265,75],[237,76],[254,77],[236,78],[264,79],[231,80],[232,74],[238,81],[239,7],[244,82],[242,81],[229,83],[268,84],[259,85],[248,86],[247,81],[249,87],[252,88],[246,89],[250,90],[262,73],[240,91],[241,92],[253,93],[230,68],[256,94],[255,81],[251,95],[260,7],[228,7],[263,96],[95,97],[120,7],[132,98],[119,99],[121,99],[94,100],[96,101],[97,102],[98,7],[122,99],[123,99],[100,103],[124,99],[125,99],[101,104],[102,99],[103,105],[106,106],[107,104],[108,107],[109,100],[110,108],[99,102],[111,99],[126,99],[127,109],[128,99],[129,99],[105,110],[112,101],[104,102],[113,99],[114,107],[115,99],[116,107],[117,111],[118,112],[130,99],[131,112],[209,113],[85,114],[92,115],[87,7],[88,7],[86,116],[89,117],[81,7],[82,7],[93,118],[84,119],[90,7],[91,120],[83,121],[203,122],[207,123],[204,123],[200,122],[208,124],[205,125],[206,123],[201,126],[202,127],[196,128],[140,129],[142,130],[195,7],[141,131],[199,132],[198,133],[197,134],[133,7],[143,129],[144,7],[135,135],[139,136],[134,7],[136,137],[137,138],[138,7],[145,139],[146,139],[147,139],[148,139],[149,139],[150,139],[151,139],[152,139],[153,139],[154,139],[155,139],[156,139],[157,139],[159,139],[158,139],[160,139],[161,139],[162,139],[163,139],[194,140],[164,139],[165,139],[166,139],[167,139],[168,139],[169,139],[170,139],[171,139],[172,139],[173,139],[174,139],[175,139],[176,139],[178,139],[177,139],[179,139],[180,139],[181,139],[182,139],[183,139],[184,139],[185,139],[186,139],[187,139],[188,139],[189,139],[190,139],[193,139],[191,139],[192,139],[74,141],[347,142],[345,143],[346,144],[344,145],[216,146],[76,147],[212,148],[80,7],[214,149],[79,150],[342,151],[343,152],[341,153],[215,154],[213,155],[77,7],[211,156],[210,157],[78,158],[75,7],[60,7],[62,159],[71,141],[69,7],[70,7],[73,160],[67,161],[63,162],[72,7],[64,163],[65,164],[66,165],[68,164],[61,166]],"latestChangedDtsFile":"./types.d.ts","version":"5.9.3"}
@@ -0,0 +1,9 @@
1
+ import { GuardError } from "@agentick/shared";
2
+ /**
3
+ * Error thrown when a guardrail denies a tool execution.
4
+ */
5
+ export declare class GuardrailDenied extends GuardError {
6
+ readonly toolName: string;
7
+ constructor(toolName: string, reason: string);
8
+ }
9
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C;;GAEG;AACH,qBAAa,eAAgB,SAAQ,UAAU;aAE3B,QAAQ,EAAE,MAAM;gBAAhB,QAAQ,EAAE,MAAM,EAChC,MAAM,EAAE,MAAM;CAKjB"}
package/dist/errors.js ADDED
@@ -0,0 +1,13 @@
1
+ import { GuardError } from "@agentick/shared";
2
+ /**
3
+ * Error thrown when a guardrail denies a tool execution.
4
+ */
5
+ export class GuardrailDenied extends GuardError {
6
+ toolName;
7
+ constructor(toolName, reason) {
8
+ super(`Tool "${toolName}" denied: ${reason}`, "guardrail", { toolName });
9
+ this.toolName = toolName;
10
+ this.name = "GuardrailDenied";
11
+ }
12
+ }
13
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C;;GAEG;AACH,MAAM,OAAO,eAAgB,SAAQ,UAAU;IAE3B;IADlB,YACkB,QAAgB,EAChC,MAAc;QAEd,KAAK,CAAC,SAAS,QAAQ,aAAa,MAAM,EAAE,EAAE,WAAW,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;QAHzD,aAAQ,GAAR,QAAQ,CAAQ;QAIhC,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;IAChC,CAAC;CACF"}
@@ -0,0 +1,5 @@
1
+ export { toolGuardrail } from "./tool";
2
+ export { deny, allow } from "./policy";
3
+ export { GuardrailDenied } from "./errors";
4
+ export type { GuardrailRule, GuardrailAction, GuardrailDecision, GuardrailClassifier, ToolGuardrailConfig, ToolGuardrailCall, } from "./types";
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC3C,YAAY,EACV,aAAa,EACb,eAAe,EACf,iBAAiB,EACjB,mBAAmB,EACnB,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,SAAS,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,4 @@
1
+ export { toolGuardrail } from "./tool";
2
+ export { deny, allow } from "./policy";
3
+ export { GuardrailDenied } from "./errors";
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC"}
@@ -0,0 +1,25 @@
1
+ import type { GuardrailRule } from "./types";
2
+ /**
3
+ * Match a tool name against a glob-like pattern.
4
+ *
5
+ * Supports `*` as a wildcard:
6
+ * - `"search"` — exact match
7
+ * - `"file_*"` — prefix match (file_read, file_write, ...)
8
+ * - `"*_admin"` — suffix match
9
+ * - `"*"` — matches everything
10
+ */
11
+ export declare function matchPattern(name: string, pattern: string): boolean;
12
+ /**
13
+ * Evaluate a list of rules against a tool name. First match wins.
14
+ * Returns the matching rule, or `null` if no rule matches.
15
+ */
16
+ export declare function evaluateRules(name: string, rules: GuardrailRule[]): GuardrailRule | null;
17
+ /**
18
+ * Create a deny rule for the given patterns.
19
+ */
20
+ export declare function deny(...patterns: string[]): GuardrailRule;
21
+ /**
22
+ * Create an allow rule for the given patterns.
23
+ */
24
+ export declare function allow(...patterns: string[]): GuardrailRule;
25
+ //# sourceMappingURL=policy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policy.d.ts","sourceRoot":"","sources":["../src/policy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAmB,MAAM,SAAS,CAAC;AAE9D;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAOnE;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,GAAG,aAAa,GAAG,IAAI,CASxF;AAED;;GAEG;AACH,wBAAgB,IAAI,CAAC,GAAG,QAAQ,EAAE,MAAM,EAAE,GAAG,aAAa,CAEzD;AAED;;GAEG;AACH,wBAAgB,KAAK,CAAC,GAAG,QAAQ,EAAE,MAAM,EAAE,GAAG,aAAa,CAE1D"}
package/dist/policy.js ADDED
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Match a tool name against a glob-like pattern.
3
+ *
4
+ * Supports `*` as a wildcard:
5
+ * - `"search"` — exact match
6
+ * - `"file_*"` — prefix match (file_read, file_write, ...)
7
+ * - `"*_admin"` — suffix match
8
+ * - `"*"` — matches everything
9
+ */
10
+ export function matchPattern(name, pattern) {
11
+ if (pattern === "*")
12
+ return true;
13
+ if (!pattern.includes("*"))
14
+ return name === pattern;
15
+ // Convert glob to regex: escape special chars, replace * with .*
16
+ const escaped = pattern.replace(/[.+?^${}()|[\]\\]/g, "\\$&").replace(/\*/g, ".*");
17
+ return new RegExp(`^${escaped}$`).test(name);
18
+ }
19
+ /**
20
+ * Evaluate a list of rules against a tool name. First match wins.
21
+ * Returns the matching rule, or `null` if no rule matches.
22
+ */
23
+ export function evaluateRules(name, rules) {
24
+ for (const rule of rules) {
25
+ for (const pattern of rule.patterns) {
26
+ if (matchPattern(name, pattern)) {
27
+ return rule;
28
+ }
29
+ }
30
+ }
31
+ return null;
32
+ }
33
+ /**
34
+ * Create a deny rule for the given patterns.
35
+ */
36
+ export function deny(...patterns) {
37
+ return { patterns, action: "deny" };
38
+ }
39
+ /**
40
+ * Create an allow rule for the given patterns.
41
+ */
42
+ export function allow(...patterns) {
43
+ return { patterns, action: "allow" };
44
+ }
45
+ //# sourceMappingURL=policy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policy.js","sourceRoot":"","sources":["../src/policy.ts"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;AACH,MAAM,UAAU,YAAY,CAAC,IAAY,EAAE,OAAe;IACxD,IAAI,OAAO,KAAK,GAAG;QAAE,OAAO,IAAI,CAAC;IACjC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,KAAK,OAAO,CAAC;IAEpD,iEAAiE;IACjE,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,oBAAoB,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACnF,OAAO,IAAI,MAAM,CAAC,IAAI,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC/C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,IAAY,EAAE,KAAsB;IAChE,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACpC,IAAI,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,CAAC;gBAChC,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,IAAI,CAAC,GAAG,QAAkB;IACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAyB,EAAE,CAAC;AACzD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,KAAK,CAAC,GAAG,QAAkB;IACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,OAA0B,EAAE,CAAC;AAC1D,CAAC"}
package/dist/tool.d.ts ADDED
@@ -0,0 +1,36 @@
1
+ import type { Middleware } from "@agentick/kernel";
2
+ import type { ToolGuardrailConfig } from "./types";
3
+ /**
4
+ * Create middleware that gates tool execution with static rules and/or a classifier.
5
+ *
6
+ * Evaluation order:
7
+ * 1. Static rules (first-match-wins). If a rule matches:
8
+ * - `deny` → throw `GuardrailDenied`
9
+ * - `allow` → skip classifier, proceed
10
+ * 2. Classifier (if no rule matched). If it returns `{ action: "deny" }`:
11
+ * - throw `GuardrailDenied`
12
+ * 3. Default: allow
13
+ *
14
+ * Only intercepts procedures with `operationName === "tool:run"`.
15
+ * Other procedures pass through unmodified.
16
+ *
17
+ * @example
18
+ * ```typescript
19
+ * import { toolGuardrail, deny, allow } from "@agentick/guardrails";
20
+ *
21
+ * const guardrail = toolGuardrail({
22
+ * rules: [
23
+ * deny("file_delete", "exec_*"),
24
+ * allow("file_read", "file_write"),
25
+ * ],
26
+ * classify: async (call) => {
27
+ * if (call.input?.dangerous) return { action: "deny", reason: "Dangerous input" };
28
+ * return null; // allow by default
29
+ * },
30
+ * });
31
+ *
32
+ * app.use(guardrail);
33
+ * ```
34
+ */
35
+ export declare function toolGuardrail(config: ToolGuardrailConfig): Middleware;
36
+ //# sourceMappingURL=tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool.d.ts","sourceRoot":"","sources":["../src/tool.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAInD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,mBAAmB,GAAG,UAAU,CAiCrE"}
package/dist/tool.js ADDED
@@ -0,0 +1,66 @@
1
+ import { createGuard } from "@agentick/kernel";
2
+ import { GuardrailDenied } from "./errors";
3
+ import { evaluateRules } from "./policy";
4
+ /**
5
+ * Create middleware that gates tool execution with static rules and/or a classifier.
6
+ *
7
+ * Evaluation order:
8
+ * 1. Static rules (first-match-wins). If a rule matches:
9
+ * - `deny` → throw `GuardrailDenied`
10
+ * - `allow` → skip classifier, proceed
11
+ * 2. Classifier (if no rule matched). If it returns `{ action: "deny" }`:
12
+ * - throw `GuardrailDenied`
13
+ * 3. Default: allow
14
+ *
15
+ * Only intercepts procedures with `operationName === "tool:run"`.
16
+ * Other procedures pass through unmodified.
17
+ *
18
+ * @example
19
+ * ```typescript
20
+ * import { toolGuardrail, deny, allow } from "@agentick/guardrails";
21
+ *
22
+ * const guardrail = toolGuardrail({
23
+ * rules: [
24
+ * deny("file_delete", "exec_*"),
25
+ * allow("file_read", "file_write"),
26
+ * ],
27
+ * classify: async (call) => {
28
+ * if (call.input?.dangerous) return { action: "deny", reason: "Dangerous input" };
29
+ * return null; // allow by default
30
+ * },
31
+ * });
32
+ *
33
+ * app.use(guardrail);
34
+ * ```
35
+ */
36
+ export function toolGuardrail(config) {
37
+ const { rules = [], classify, onDeny } = config;
38
+ return createGuard({ name: "tool-guardrail", guardType: "guardrail" }, async (envelope) => {
39
+ if (envelope.operationName !== "tool:run")
40
+ return true;
41
+ const toolName = (envelope.metadata?.toolName ?? "");
42
+ const toolInput = envelope.args[0];
43
+ // Tier 1: Static rules (first-match-wins)
44
+ const matched = evaluateRules(toolName, rules);
45
+ if (matched) {
46
+ if (matched.action === "deny") {
47
+ const reason = matched.reason ?? "denied by rule";
48
+ onDeny?.(toolName, reason);
49
+ throw new GuardrailDenied(toolName, reason);
50
+ }
51
+ // allow — skip classifier
52
+ return true;
53
+ }
54
+ // Tier 2: Classifier
55
+ if (classify) {
56
+ const decision = await classify({ name: toolName, input: toolInput }, envelope);
57
+ if (decision?.action === "deny") {
58
+ const reason = decision.reason ?? "denied by classifier";
59
+ onDeny?.(toolName, reason);
60
+ throw new GuardrailDenied(toolName, reason);
61
+ }
62
+ }
63
+ return true;
64
+ });
65
+ }
66
+ //# sourceMappingURL=tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool.js","sourceRoot":"","sources":["../src/tool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAG/C,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,MAAM,UAAU,aAAa,CAAC,MAA2B;IACvD,MAAM,EAAE,KAAK,GAAG,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;IAEhD,OAAO,WAAW,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,SAAS,EAAE,WAAW,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE;QACxF,IAAI,QAAQ,CAAC,aAAa,KAAK,UAAU;YAAE,OAAO,IAAI,CAAC;QAEvD,MAAM,QAAQ,GAAG,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,IAAI,EAAE,CAAW,CAAC;QAC/D,MAAM,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAEnC,0CAA0C;QAC1C,MAAM,OAAO,GAAG,aAAa,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAC/C,IAAI,OAAO,EAAE,CAAC;YACZ,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;gBAC9B,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,gBAAgB,CAAC;gBAClD,MAAM,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;gBAC3B,MAAM,IAAI,eAAe,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YAC9C,CAAC;YACD,0BAA0B;YAC1B,OAAO,IAAI,CAAC;QACd,CAAC;QAED,qBAAqB;QACrB,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,QAAQ,CAAC,CAAC;YAChF,IAAI,QAAQ,EAAE,MAAM,KAAK,MAAM,EAAE,CAAC;gBAChC,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,IAAI,sBAAsB,CAAC;gBACzD,MAAM,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;gBAC3B,MAAM,IAAI,eAAe,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YAC9C,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,22 @@
1
+ import type { ProcedureEnvelope } from "@agentick/kernel";
2
+ export type GuardrailAction = "allow" | "deny";
3
+ export interface GuardrailRule {
4
+ patterns: string[];
5
+ action: GuardrailAction;
6
+ reason?: string;
7
+ }
8
+ export interface GuardrailDecision {
9
+ action: GuardrailAction;
10
+ reason?: string;
11
+ }
12
+ export interface ToolGuardrailCall {
13
+ name: string;
14
+ input: unknown;
15
+ }
16
+ export type GuardrailClassifier = (call: ToolGuardrailCall, envelope: ProcedureEnvelope<any[]>) => GuardrailDecision | null | undefined | Promise<GuardrailDecision | null | undefined>;
17
+ export interface ToolGuardrailConfig {
18
+ rules?: GuardrailRule[];
19
+ classify?: GuardrailClassifier;
20
+ onDeny?: (toolName: string, reason: string) => void;
21
+ }
22
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAE1D,MAAM,MAAM,eAAe,GAAG,OAAO,GAAG,MAAM,CAAC;AAE/C,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,MAAM,EAAE,eAAe,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,eAAe,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,MAAM,mBAAmB,GAAG,CAChC,IAAI,EAAE,iBAAiB,EACvB,QAAQ,EAAE,iBAAiB,CAAC,GAAG,EAAE,CAAC,KAC/B,iBAAiB,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAAC,iBAAiB,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC;AAE1F,MAAM,WAAW,mBAAmB;IAClC,KAAK,CAAC,EAAE,aAAa,EAAE,CAAC;IACxB,QAAQ,CAAC,EAAE,mBAAmB,CAAC;IAC/B,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;CACrD"}
package/dist/types.js ADDED
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
package/package.json ADDED
@@ -0,0 +1,27 @@
1
+ {
2
+ "name": "@agentick/guardrails",
3
+ "version": "0.0.1",
4
+ "description": "Guardrail middleware for Agentick — gate tool execution with rules and classifiers",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "exports": {
8
+ ".": {
9
+ "types": "./dist/index.d.ts",
10
+ "import": "./dist/index.js"
11
+ }
12
+ },
13
+ "publishConfig": {
14
+ "access": "public"
15
+ },
16
+ "dependencies": {
17
+ "@agentick/kernel": "0.0.1",
18
+ "@agentick/shared": "0.0.1"
19
+ },
20
+ "scripts": {
21
+ "build": "tsc -p tsconfig.build.json",
22
+ "test": "echo \"Tests run from workspace root\"",
23
+ "typecheck": "tsc -p tsconfig.build.json --noEmit",
24
+ "clean": "rm -rf dist"
25
+ },
26
+ "types": "./dist/index.d.ts"
27
+ }
package/src/errors.ts ADDED
@@ -0,0 +1,14 @@
1
+ import { GuardError } from "@agentick/shared";
2
+
3
+ /**
4
+ * Error thrown when a guardrail denies a tool execution.
5
+ */
6
+ export class GuardrailDenied extends GuardError {
7
+ constructor(
8
+ public readonly toolName: string,
9
+ reason: string,
10
+ ) {
11
+ super(`Tool "${toolName}" denied: ${reason}`, "guardrail", { toolName });
12
+ this.name = "GuardrailDenied";
13
+ }
14
+ }
package/src/index.ts ADDED
@@ -0,0 +1,11 @@
1
+ export { toolGuardrail } from "./tool";
2
+ export { deny, allow } from "./policy";
3
+ export { GuardrailDenied } from "./errors";
4
+ export type {
5
+ GuardrailRule,
6
+ GuardrailAction,
7
+ GuardrailDecision,
8
+ GuardrailClassifier,
9
+ ToolGuardrailConfig,
10
+ ToolGuardrailCall,
11
+ } from "./types";
@@ -0,0 +1,85 @@
1
+ import { describe, it, expect } from "vitest";
2
+ import { matchPattern, evaluateRules, deny, allow } from "./policy";
3
+
4
+ describe("matchPattern", () => {
5
+ it("exact match", () => {
6
+ expect(matchPattern("search", "search")).toBe(true);
7
+ expect(matchPattern("search", "find")).toBe(false);
8
+ });
9
+
10
+ it("wildcard * matches everything", () => {
11
+ expect(matchPattern("anything", "*")).toBe(true);
12
+ expect(matchPattern("", "*")).toBe(true);
13
+ });
14
+
15
+ it("* at end (prefix match)", () => {
16
+ expect(matchPattern("file_read", "file_*")).toBe(true);
17
+ expect(matchPattern("file_write", "file_*")).toBe(true);
18
+ expect(matchPattern("exec_run", "file_*")).toBe(false);
19
+ });
20
+
21
+ it("* at start (suffix match)", () => {
22
+ expect(matchPattern("read_admin", "*_admin")).toBe(true);
23
+ expect(matchPattern("write_admin", "*_admin")).toBe(true);
24
+ expect(matchPattern("admin_read", "*_admin")).toBe(false);
25
+ });
26
+
27
+ it("* in middle", () => {
28
+ expect(matchPattern("file_v2_read", "file_*_read")).toBe(true);
29
+ expect(matchPattern("file__read", "file_*_read")).toBe(true);
30
+ expect(matchPattern("file_v2_write", "file_*_read")).toBe(false);
31
+ });
32
+
33
+ it("no match returns false", () => {
34
+ expect(matchPattern("search", "find")).toBe(false);
35
+ expect(matchPattern("a", "b")).toBe(false);
36
+ });
37
+ });
38
+
39
+ describe("evaluateRules", () => {
40
+ it("first match wins — deny before allow", () => {
41
+ const rules = [deny("search"), allow("search")];
42
+ const result = evaluateRules("search", rules);
43
+ expect(result).toBe(rules[0]);
44
+ expect(result!.action).toBe("deny");
45
+ });
46
+
47
+ it("first match wins — allow before deny", () => {
48
+ const rules = [allow("search"), deny("search")];
49
+ const result = evaluateRules("search", rules);
50
+ expect(result).toBe(rules[0]);
51
+ expect(result!.action).toBe("allow");
52
+ });
53
+
54
+ it("no match returns null", () => {
55
+ const rules = [deny("exec_*"), allow("file_*")];
56
+ expect(evaluateRules("search", rules)).toBeNull();
57
+ });
58
+
59
+ it("matches by pattern within rule", () => {
60
+ const rules = [deny("file_delete", "exec_*")];
61
+ expect(evaluateRules("file_delete", rules)?.action).toBe("deny");
62
+ expect(evaluateRules("exec_run", rules)?.action).toBe("deny");
63
+ expect(evaluateRules("file_read", rules)).toBeNull();
64
+ });
65
+ });
66
+
67
+ describe("deny()", () => {
68
+ it("creates correct rule shape", () => {
69
+ const rule = deny("file_delete", "exec_*");
70
+ expect(rule).toEqual({
71
+ patterns: ["file_delete", "exec_*"],
72
+ action: "deny",
73
+ });
74
+ });
75
+ });
76
+
77
+ describe("allow()", () => {
78
+ it("creates correct rule shape", () => {
79
+ const rule = allow("file_read", "search");
80
+ expect(rule).toEqual({
81
+ patterns: ["file_read", "search"],
82
+ action: "allow",
83
+ });
84
+ });
85
+ });
package/src/policy.ts ADDED
@@ -0,0 +1,48 @@
1
+ import type { GuardrailRule, GuardrailAction } from "./types";
2
+
3
+ /**
4
+ * Match a tool name against a glob-like pattern.
5
+ *
6
+ * Supports `*` as a wildcard:
7
+ * - `"search"` — exact match
8
+ * - `"file_*"` — prefix match (file_read, file_write, ...)
9
+ * - `"*_admin"` — suffix match
10
+ * - `"*"` — matches everything
11
+ */
12
+ export function matchPattern(name: string, pattern: string): boolean {
13
+ if (pattern === "*") return true;
14
+ if (!pattern.includes("*")) return name === pattern;
15
+
16
+ // Convert glob to regex: escape special chars, replace * with .*
17
+ const escaped = pattern.replace(/[.+?^${}()|[\]\\]/g, "\\$&").replace(/\*/g, ".*");
18
+ return new RegExp(`^${escaped}$`).test(name);
19
+ }
20
+
21
+ /**
22
+ * Evaluate a list of rules against a tool name. First match wins.
23
+ * Returns the matching rule, or `null` if no rule matches.
24
+ */
25
+ export function evaluateRules(name: string, rules: GuardrailRule[]): GuardrailRule | null {
26
+ for (const rule of rules) {
27
+ for (const pattern of rule.patterns) {
28
+ if (matchPattern(name, pattern)) {
29
+ return rule;
30
+ }
31
+ }
32
+ }
33
+ return null;
34
+ }
35
+
36
+ /**
37
+ * Create a deny rule for the given patterns.
38
+ */
39
+ export function deny(...patterns: string[]): GuardrailRule {
40
+ return { patterns, action: "deny" as GuardrailAction };
41
+ }
42
+
43
+ /**
44
+ * Create an allow rule for the given patterns.
45
+ */
46
+ export function allow(...patterns: string[]): GuardrailRule {
47
+ return { patterns, action: "allow" as GuardrailAction };
48
+ }
@@ -0,0 +1,156 @@
1
+ import { describe, it, expect, vi } from "vitest";
2
+ import { toolGuardrail } from "./tool";
3
+ import { deny, allow } from "./policy";
4
+ import { GuardrailDenied } from "./errors";
5
+ import { GuardError, isGuardError } from "@agentick/shared";
6
+ import type { ProcedureEnvelope } from "@agentick/kernel";
7
+
8
+ /**
9
+ * Helper to invoke a middleware with a fake envelope.
10
+ */
11
+ function invoke(
12
+ middleware: ReturnType<typeof toolGuardrail>,
13
+ opts: {
14
+ toolName?: string;
15
+ input?: unknown;
16
+ operationName?: string;
17
+ } = {},
18
+ ) {
19
+ const args = [opts.input ?? {}];
20
+ const envelope = {
21
+ sourceType: "procedure" as const,
22
+ operationName: opts.operationName ?? "tool:run",
23
+ args,
24
+ context: {} as any,
25
+ metadata: { toolName: opts.toolName ?? "search", id: opts.toolName ?? "search" },
26
+ } satisfies ProcedureEnvelope<any[]>;
27
+
28
+ const next = vi.fn(async () => "next-result");
29
+
30
+ const promise = middleware(args, envelope, next);
31
+ return { promise, next };
32
+ }
33
+
34
+ describe("toolGuardrail", () => {
35
+ it("deny rule throws GuardrailDenied with correct toolName and reason", async () => {
36
+ const mw = toolGuardrail({ rules: [deny("search")] });
37
+ const { promise } = invoke(mw, { toolName: "search" });
38
+
39
+ await expect(promise).rejects.toThrow(GuardrailDenied);
40
+ await expect(promise).rejects.toThrow('Tool "search" denied: denied by rule');
41
+ });
42
+
43
+ it("deny rule with custom reason", async () => {
44
+ const rules = [{ patterns: ["search"], action: "deny" as const, reason: "No searching" }];
45
+ const mw = toolGuardrail({ rules });
46
+ const { promise } = invoke(mw, { toolName: "search" });
47
+
48
+ await expect(promise).rejects.toThrow('Tool "search" denied: No searching');
49
+ });
50
+
51
+ it("allow rule calls next() and skips classifier", async () => {
52
+ const classify = vi.fn(async () => ({ action: "deny" as const, reason: "should not reach" }));
53
+ const mw = toolGuardrail({ rules: [allow("search")], classify });
54
+ const { promise, next } = invoke(mw, { toolName: "search" });
55
+
56
+ const result = await promise;
57
+ expect(result).toBe("next-result");
58
+ expect(next).toHaveBeenCalled();
59
+ expect(classify).not.toHaveBeenCalled();
60
+ });
61
+
62
+ it("no matching rule + no classifier → allows (calls next)", async () => {
63
+ const mw = toolGuardrail({ rules: [deny("exec_*")] });
64
+ const { promise, next } = invoke(mw, { toolName: "search" });
65
+
66
+ await promise;
67
+ expect(next).toHaveBeenCalled();
68
+ });
69
+
70
+ it("classifier deny → throws GuardrailDenied", async () => {
71
+ const classify = vi.fn(async () => ({ action: "deny" as const, reason: "Bad input" }));
72
+ const mw = toolGuardrail({ classify });
73
+ const { promise } = invoke(mw, { toolName: "search" });
74
+
75
+ await expect(promise).rejects.toThrow(GuardrailDenied);
76
+ await expect(promise).rejects.toThrow('Tool "search" denied: Bad input');
77
+ });
78
+
79
+ it("classifier allow → calls next", async () => {
80
+ const classify = vi.fn(async () => ({ action: "allow" as const }));
81
+ const mw = toolGuardrail({ classify });
82
+ const { promise, next } = invoke(mw, { toolName: "search" });
83
+
84
+ await promise;
85
+ expect(next).toHaveBeenCalled();
86
+ });
87
+
88
+ it("classifier returns null → allows (default)", async () => {
89
+ const classify = vi.fn(async () => null);
90
+ const mw = toolGuardrail({ classify });
91
+ const { promise, next } = invoke(mw, { toolName: "search" });
92
+
93
+ await promise;
94
+ expect(next).toHaveBeenCalled();
95
+ });
96
+
97
+ it("rules evaluated before classifier (allow rule skips classifier)", async () => {
98
+ const classify = vi.fn(async () => ({ action: "deny" as const }));
99
+ const mw = toolGuardrail({ rules: [allow("search")], classify });
100
+ const { promise, next } = invoke(mw, { toolName: "search" });
101
+
102
+ await promise;
103
+ expect(next).toHaveBeenCalled();
104
+ expect(classify).not.toHaveBeenCalled();
105
+ });
106
+
107
+ it("onDeny callback fires with toolName and reason", async () => {
108
+ const onDeny = vi.fn();
109
+ const mw = toolGuardrail({ rules: [deny("search")], onDeny });
110
+ const { promise } = invoke(mw, { toolName: "search" });
111
+
112
+ await promise.catch(() => {}); // suppress rejection
113
+ expect(onDeny).toHaveBeenCalledWith("search", "denied by rule");
114
+ });
115
+
116
+ it("onDeny fires for classifier denials too", async () => {
117
+ const onDeny = vi.fn();
118
+ const classify = vi.fn(async () => ({ action: "deny" as const, reason: "Classifier says no" }));
119
+ const mw = toolGuardrail({ classify, onDeny });
120
+ const { promise } = invoke(mw, { toolName: "exec" });
121
+
122
+ await promise.catch(() => {});
123
+ expect(onDeny).toHaveBeenCalledWith("exec", "Classifier says no");
124
+ });
125
+
126
+ it("non-tool procedures pass through (operationName !== 'tool:run')", async () => {
127
+ const mw = toolGuardrail({ rules: [deny("*")] });
128
+ const { promise, next } = invoke(mw, {
129
+ toolName: "search",
130
+ operationName: "model:generate",
131
+ });
132
+
133
+ await promise;
134
+ expect(next).toHaveBeenCalled();
135
+ });
136
+
137
+ it("GuardrailDenied extends GuardError (instanceof checks)", () => {
138
+ const err = new GuardrailDenied("search", "no");
139
+ expect(err instanceof GuardError).toBe(true);
140
+ expect(err instanceof GuardrailDenied).toBe(true);
141
+ expect(isGuardError(err)).toBe(true);
142
+ expect(err.code).toBe("GUARD_DENIED");
143
+ expect(err.guardType).toBe("guardrail");
144
+ expect(err.toolName).toBe("search");
145
+ });
146
+
147
+ it("multiple rules: first match wins regardless of action", async () => {
148
+ const mw = toolGuardrail({
149
+ rules: [allow("search"), deny("search")],
150
+ });
151
+ const { promise, next } = invoke(mw, { toolName: "search" });
152
+
153
+ await promise;
154
+ expect(next).toHaveBeenCalled(); // allow wins
155
+ });
156
+ });
package/src/tool.ts ADDED
@@ -0,0 +1,72 @@
1
+ import { createGuard } from "@agentick/kernel";
2
+ import type { Middleware } from "@agentick/kernel";
3
+ import type { ToolGuardrailConfig } from "./types";
4
+ import { GuardrailDenied } from "./errors";
5
+ import { evaluateRules } from "./policy";
6
+
7
+ /**
8
+ * Create middleware that gates tool execution with static rules and/or a classifier.
9
+ *
10
+ * Evaluation order:
11
+ * 1. Static rules (first-match-wins). If a rule matches:
12
+ * - `deny` → throw `GuardrailDenied`
13
+ * - `allow` → skip classifier, proceed
14
+ * 2. Classifier (if no rule matched). If it returns `{ action: "deny" }`:
15
+ * - throw `GuardrailDenied`
16
+ * 3. Default: allow
17
+ *
18
+ * Only intercepts procedures with `operationName === "tool:run"`.
19
+ * Other procedures pass through unmodified.
20
+ *
21
+ * @example
22
+ * ```typescript
23
+ * import { toolGuardrail, deny, allow } from "@agentick/guardrails";
24
+ *
25
+ * const guardrail = toolGuardrail({
26
+ * rules: [
27
+ * deny("file_delete", "exec_*"),
28
+ * allow("file_read", "file_write"),
29
+ * ],
30
+ * classify: async (call) => {
31
+ * if (call.input?.dangerous) return { action: "deny", reason: "Dangerous input" };
32
+ * return null; // allow by default
33
+ * },
34
+ * });
35
+ *
36
+ * app.use(guardrail);
37
+ * ```
38
+ */
39
+ export function toolGuardrail(config: ToolGuardrailConfig): Middleware {
40
+ const { rules = [], classify, onDeny } = config;
41
+
42
+ return createGuard({ name: "tool-guardrail", guardType: "guardrail" }, async (envelope) => {
43
+ if (envelope.operationName !== "tool:run") return true;
44
+
45
+ const toolName = (envelope.metadata?.toolName ?? "") as string;
46
+ const toolInput = envelope.args[0];
47
+
48
+ // Tier 1: Static rules (first-match-wins)
49
+ const matched = evaluateRules(toolName, rules);
50
+ if (matched) {
51
+ if (matched.action === "deny") {
52
+ const reason = matched.reason ?? "denied by rule";
53
+ onDeny?.(toolName, reason);
54
+ throw new GuardrailDenied(toolName, reason);
55
+ }
56
+ // allow — skip classifier
57
+ return true;
58
+ }
59
+
60
+ // Tier 2: Classifier
61
+ if (classify) {
62
+ const decision = await classify({ name: toolName, input: toolInput }, envelope);
63
+ if (decision?.action === "deny") {
64
+ const reason = decision.reason ?? "denied by classifier";
65
+ onDeny?.(toolName, reason);
66
+ throw new GuardrailDenied(toolName, reason);
67
+ }
68
+ }
69
+
70
+ return true;
71
+ });
72
+ }
package/src/types.ts ADDED
@@ -0,0 +1,30 @@
1
+ import type { ProcedureEnvelope } from "@agentick/kernel";
2
+
3
+ export type GuardrailAction = "allow" | "deny";
4
+
5
+ export interface GuardrailRule {
6
+ patterns: string[];
7
+ action: GuardrailAction;
8
+ reason?: string;
9
+ }
10
+
11
+ export interface GuardrailDecision {
12
+ action: GuardrailAction;
13
+ reason?: string;
14
+ }
15
+
16
+ export interface ToolGuardrailCall {
17
+ name: string;
18
+ input: unknown;
19
+ }
20
+
21
+ export type GuardrailClassifier = (
22
+ call: ToolGuardrailCall,
23
+ envelope: ProcedureEnvelope<any[]>,
24
+ ) => GuardrailDecision | null | undefined | Promise<GuardrailDecision | null | undefined>;
25
+
26
+ export interface ToolGuardrailConfig {
27
+ rules?: GuardrailRule[];
28
+ classify?: GuardrailClassifier;
29
+ onDeny?: (toolName: string, reason: string) => void;
30
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "extends": "./tsconfig.json",
3
+ "compilerOptions": {
4
+ "tsBuildInfoFile": "dist/.tsbuildinfo.build"
5
+ },
6
+ "include": ["src"],
7
+ "exclude": ["src/**/*.spec.ts", "src/**/*.spec.tsx", "src/**/__tests__", "src/test/**/*"]
8
+ }
package/tsconfig.json ADDED
@@ -0,0 +1,11 @@
1
+ {
2
+ "extends": "../../tsconfig.json",
3
+ "compilerOptions": {
4
+ "rootDir": "src",
5
+ "outDir": "dist",
6
+ "tsBuildInfoFile": "dist/.tsbuildinfo",
7
+ "composite": true
8
+ },
9
+ "include": [],
10
+ "references": [{ "path": "./tsconfig.build.json" }]
11
+ }