@molecule/api-ai-tools 1.0.9 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -3,7 +3,7 @@ AUTO-GENERATED — DO NOT EDIT THIS FILE.
3
3
  Generated by `mlcl sync-docs` from the package's src/index.ts JSDoc + mlcl/registry.json.
4
4
  Edits here are overwritten on the next commit (molecule's pre-commit hook regenerates).
5
5
  To change this document, edit the module-level JSDoc in src/index.ts.
6
- Generated: 2026-09-18T06:57:26.872Z
6
+ Generated: 2026-09-22T21:57:22.227Z
7
7
  -->
8
8
 
9
9
  # @molecule/api-ai-tools
@@ -133,6 +133,50 @@ interface FileDiffEvent {
133
133
  }
134
134
  ```
135
135
 
136
+ #### `GuardOptions`
137
+
138
+ Options shared by {@link guardToolExecute} and {@link guardAITool}.
139
+
140
+ ```typescript
141
+ interface GuardOptions {
142
+ /**
143
+ * Redactor applied to a THROWN error's message before it is returned to the
144
+ * model. Defaults to this package's `redactSecrets`.
145
+ */
146
+ redactError?: (message: string) => string
147
+ }
148
+ ```
149
+
150
+ #### `NormalizableSchema`
151
+
152
+ The JSON-Schema-ish shape every tool in this package declares.
153
+
154
+ ```typescript
155
+ interface NormalizableSchema {
156
+ name: string
157
+ parameters?: {
158
+ type?: string
159
+ properties?: Record<string, { type?: string; description?: string }>
160
+ required?: string[]
161
+ }
162
+ }
163
+ ```
164
+
165
+ #### `NormalizedInput`
166
+
167
+ The result of normalizing one tool call's input.
168
+
169
+ ```typescript
170
+ interface NormalizedInput {
171
+ /** The input to hand the handler, with aliases moved onto the declared names. */
172
+ input: Record<string, unknown>
173
+ /** Declared-required parameters still absent after aliasing. */
174
+ missing: string[]
175
+ /** `alias→declared` pairs that were moved, for logging. */
176
+ aliased: string[]
177
+ }
178
+ ```
179
+
136
180
  #### `PromptContext`
137
181
 
138
182
  Context for building a composable system prompt.
@@ -355,6 +399,21 @@ function createSandboxBackend(sandbox: SandboxLike, projectRoot?: string): Execu
355
399
 
356
400
  **Returns:** A backend that proxies all filesystem calls into the sandbox.
357
401
 
402
+ #### `declaredBudgetSeconds(command, timeoutParam)`
403
+
404
+ The time budget a COMMAND declares for itself — a `timeout <seconds>` prefix
405
+ anywhere in it, or the tool call's own `timeout` (ms) parameter, whichever is
406
+ larger. Zero when it declares none.
407
+
408
+ ```typescript
409
+ function declaredBudgetSeconds(command: string, timeoutParam: unknown): number
410
+ ```
411
+
412
+ - `command` — The shell command.
413
+ - `timeoutParam` — The tool call's `timeout` input, in milliseconds.
414
+
415
+ **Returns:** The declared budget in seconds, or 0.
416
+
358
417
  #### `directoryReadHint(message, path)`
359
418
 
360
419
  Detect a "read/edit targeted a directory, not a file" failure from a backend
@@ -386,6 +445,50 @@ function discoverSkills(backend: ExecutionBackend): Promise<SkillEntry[]>
386
445
 
387
446
  **Returns:** Array of discovered skills with name, description, and path
388
447
 
448
+ #### `guardAITool(tool)`
449
+
450
+ Apply {@link guardToolExecute} to a ready-made tool object (the
451
+ `@molecule/api-ai` `AITool` shape: `{ name, description, parameters,
452
+ execute }`), returning a copy whose `execute` is guarded.
453
+
454
+ Use it at the point a consumer hands its full tool list to the model, so
455
+ tools built outside this package get the same treatment as the ones built
456
+ inside it.
457
+
458
+ ```typescript
459
+ function guardAITool(tool: T, options?: GuardOptions): T
460
+ ```
461
+
462
+ - `tool` — The tool to guard.
463
+
464
+ **Returns:** A copy with a guarded `execute`.
465
+
466
+ #### `guardToolExecute(schema, impl)`
467
+
468
+ Wrap a tool handler so every call is normalized first and a handler that
469
+ THROWS returns something the model can act on.
470
+
471
+ The guard deliberately does NOT pre-empt the handler when a required
472
+ parameter looks absent: several handlers accept a documented older shape
473
+ (`edit_file`'s top-level `old_string`/`new_string`) or answer a missing
474
+ parameter with far better guidance than a generic message could (`edit_file`
475
+ telling the model to re-read the file). It steps in only where the handler
476
+ would otherwise crash — and when it does, a still-missing required parameter
477
+ is the accurate diagnosis for that crash, so it is reported as one.
478
+
479
+ ```typescript
480
+ function guardToolExecute(
481
+ schema: NormalizableSchema,
482
+ impl: (input: Record<string, unknown>, ...rest: never[]) => Promise<unknown>,
483
+ options?: GuardOptions,
484
+ ): (input: unknown, ...rest: never[]) => Promise<unknown>
485
+ ```
486
+
487
+ - `schema` — The tool's declared schema.
488
+ - `impl` — The raw handler.
489
+
490
+ **Returns:** A handler with the same signature, guarded.
491
+
389
492
  #### `isEnvFilePath(path)`
390
493
 
391
494
  Whether a path is an env file, for which {@link redactSecrets}' full env-dump
@@ -422,6 +525,93 @@ function isValidGlob(pattern: string): boolean
422
525
 
423
526
  **Returns:** `true` when the pattern contains only allowed characters.
424
527
 
528
+ #### `missingParamError(schema, input, missing)`
529
+
530
+ The error a tool returns when a required parameter is still absent after
531
+ aliasing. Model-facing, so it names the right parameter, what was actually
532
+ sent, and the shape of a correct call — everything needed to fix it in one
533
+ turn instead of concluding the tool is broken.
534
+
535
+ ```typescript
536
+ function missingParamError(
537
+ schema: NormalizableSchema,
538
+ input: Record<string, unknown>,
539
+ missing: string[],
540
+ ): string
541
+ ```
542
+
543
+ - `schema` — The tool's declared schema.
544
+ - `input` — The normalized input (used to list the keys that were sent).
545
+ - `missing` — The required parameters still absent.
546
+
547
+ **Returns:** A single-sentence-per-clause error string.
548
+
549
+ #### `normalizeToolInput(schema, raw)`
550
+
551
+ Move known aliases onto the declared parameter names and report what is still
552
+ missing. Unknown keys are left in place — handlers ignore them, and dropping
553
+ them would hide a model's intent from anything reading the call log.
554
+
555
+ ```typescript
556
+ function normalizeToolInput(schema: NormalizableSchema, raw: unknown): NormalizedInput
557
+ ```
558
+
559
+ - `schema` — The tool's declared schema.
560
+ - `raw` — Whatever the model sent as the tool input.
561
+
562
+ **Returns:** The normalized input plus the missing-required and aliased lists.
563
+
564
+ #### `outputIsWithheldUntilExit(command)`
565
+
566
+ Whether a command's output reaches the tool only when the whole pipeline
567
+ ends — a pipe into `tail`, `grep`, `sort`, `wc` and friends, which
568
+ block-buffer when stdout is not a terminal.
569
+
570
+ It matters only in combination with an overrun: a command stopped at the
571
+ tool's ceiling normally hands back everything it printed, but behind one of
572
+ these it printed nothing, so the whole budget is spent for no information.
573
+ Measured across six real agent runs: ten such commands, every one of them
574
+ piped, 49 minutes returning a few hundred bytes each.
575
+
576
+ ```typescript
577
+ function outputIsWithheldUntilExit(command: string): boolean
578
+ ```
579
+
580
+ - `command` — The shell command.
581
+
582
+ **Returns:** True when a kill would return no useful output.
583
+
584
+ #### `parseCheckCommand(path)`
585
+
586
+ The shell command that parses one file and exits non-zero with the error
587
+ when it does not parse: `node --check` for JavaScript, `JSON.parse` for
588
+ JSON, esbuild's transform (present wherever Vite is) for TypeScript.
589
+
590
+ ```typescript
591
+ function parseCheckCommand(path: string): string | null
592
+ ```
593
+
594
+ - `path` — The file's absolute path.
595
+
596
+ **Returns:** The command, or null when the file type has no cheap parser.
597
+
598
+ #### `parseCheckProblem(result)`
599
+
600
+ What a failed parse check says to the executor, or null when the check
601
+ passed or could not run (no parser available is not a syntax error).
602
+
603
+ ```typescript
604
+ function parseCheckProblem(result: {
605
+ stdout: string
606
+ stderr: string
607
+ exitCode: number
608
+ }): string | null
609
+ ```
610
+
611
+ - `result` — The check command's result.
612
+
613
+ **Returns:** The message for the tool result, or null.
614
+
425
615
  #### `pathArgError(path, tool)`
426
616
 
427
617
  Validate a file tool's `path` argument is a non-empty string. A weak model
@@ -512,6 +702,28 @@ function shellQuote(s: string): string
512
702
 
513
703
  **Returns:** A single-quoted shell literal representing `s`.
514
704
 
705
+ #### `sliceLines(content, window)`
706
+
707
+ Return a line window of `content`, or null when no window was asked for.
708
+
709
+ `read_file` returned whole files only, so an executor that wanted part of one
710
+ shelled out: across six real agent runs, 260 of 377 shell-inspection commands
711
+ (69%) were `head`/`tail`/`sed -n` windowing a file the tool could have
712
+ windowed itself. `offset` is 1-based, matching the line numbers every other
713
+ tool reports and what `grep -n` prints.
714
+
715
+ ```typescript
716
+ function sliceLines(
717
+ content: string,
718
+ window?: { offset?: unknown; limit?: unknown },
719
+ ): { text: string; offset: number; lines: number; totalLines: number; truncated: boolean } | null
720
+ ```
721
+
722
+ - `content` — The file's full text.
723
+ - `window` — The requested `offset` (1-based) and `limit` (line count).
724
+
725
+ **Returns:** The window plus its position, or null when neither was given.
726
+
515
727
  #### `stripControlChars(s)`
516
728
 
517
729
  Strip C0 control chars (except tab, newline, CR) that break PostgreSQL JSONB
@@ -614,6 +826,25 @@ const DEFAULT_SEARCH_EXCLUDED_DIRS: readonly [
614
826
  ]
615
827
  ```
616
828
 
829
+ #### `MAX_BATCH_READ_BYTES`
830
+
831
+ Total content bytes one batched `read_file` call returns, across all files.
832
+ The per-file {@link MAX_READ_SIZE} still applies to each one.
833
+
834
+ ```typescript
835
+ const MAX_BATCH_READ_BYTES: number
836
+ ```
837
+
838
+ #### `MAX_BATCH_READ_FILES`
839
+
840
+ Most files one batched `read_file` call returns. The cap exists so a survey
841
+ of a large tree cannot swallow the turn's context in one result; the tool
842
+ reports where it stopped so the model continues from there.
843
+
844
+ ```typescript
845
+ const MAX_BATCH_READ_FILES: 25
846
+ ```
847
+
617
848
  #### `MAX_FIND_RESULTS`
618
849
 
619
850
  Max find results.
@@ -630,6 +861,23 @@ Max command output size (100KB per stream).
630
861
  const MAX_OUTPUT_SIZE: number
631
862
  ```
632
863
 
864
+ #### `MAX_READ_RETURN_CHARS`
865
+
866
+ The most one read_file call returns for ONE file when no window was asked
867
+ for, in chars. Larger files come back as their first window with a note
868
+ saying how to read the rest.
869
+
870
+ MAX_READ_SIZE (5 MB) is a bound on what the tool will open, not on what it
871
+ should hand a model: a single batched read that returned a 1.2 MB README
872
+ put the next three provider calls at 366k tokens (~330k of them fresh)
873
+ against a 120k-token context cap (X0 run x5, call 26). ~80 KB is ~20–25k
874
+ tokens — a fifth of that cap, and more than any one file read usually
875
+ needs.
876
+
877
+ ```typescript
878
+ const MAX_READ_RETURN_CHARS: number
879
+ ```
880
+
633
881
  #### `MAX_READ_SIZE`
634
882
 
635
883
  Max file size for read_file (5MB).
@@ -638,6 +886,16 @@ Max file size for read_file (5MB).
638
886
  const MAX_READ_SIZE: number
639
887
  ```
640
888
 
889
+ #### `MAX_SEARCH_CONTEXT_LINES`
890
+
891
+ Most lines of surrounding context `search_files` will return per match.
892
+ Bounded so a broad pattern with a generous context cannot pull a whole tree
893
+ into one reply.
894
+
895
+ ```typescript
896
+ const MAX_SEARCH_CONTEXT_LINES: 40
897
+ ```
898
+
641
899
  #### `MAX_SEARCH_RESULTS`
642
900
 
643
901
  Max search results.
@@ -654,6 +912,14 @@ Max content size for write_file (10MB).
654
912
  const MAX_WRITE_SIZE: number
655
913
  ```
656
914
 
915
+ #### `PARSE_CHECKABLE`
916
+
917
+ Files a parse check can vouch for cheaply right after a write.
918
+
919
+ ```typescript
920
+ const PARSE_CHECKABLE: RegExp
921
+ ```
922
+
657
923
  #### `TOOL_SCHEMAS`
658
924
 
659
925
  Canonical tool schemas shared by the agent runtime and documentation.
@@ -685,6 +951,19 @@ Peer dependencies:
685
951
  rules via `blockCommand` (return an actionable error string to refuse — it is
686
952
  shown to the model verbatim) and enable `blockDangerousCommands` (default
687
953
  FALSE) where appropriate.
954
+ - **`read_file` takes `paths` as well as `path`.** An agent that issues one
955
+ tool call per model round-trip pays a full round-trip per file, so a project
956
+ survey costs minutes; batched, the same reads cost one call each 25 files
957
+ (`MAX_BATCH_READ_FILES` / `MAX_BATCH_READ_BYTES`, which report where they
958
+ stopped). Each entry carries its own content or its own error, so one bad
959
+ path never fails the batch.
960
+ - **A parameter under another name is not a broken tool.** Every tool's input
961
+ is normalized first (`cmd` → `command`, `file` → `path`, camelCase ⇄
962
+ snake_case), and a handler that throws returns an error naming the missing
963
+ parameter rather than a bare internal message — which a weak executor reads
964
+ as a broken tool and routes around, taking its verification with it. Use
965
+ `guardAITool` to give tools built elsewhere the same treatment, passing
966
+ `redactError` so a thrown message is masked by your own redactor.
688
967
  - **Scope the tool set per agent** with `include`/`exclude` — a read-only agent
689
968
  should not receive `write_file`/`exec_command`.
690
969
  - Outputs are size-capped (`MAX_READ_SIZE`, `MAX_OUTPUT_SIZE`, …) and searches
package/dist/index.d.ts CHANGED
@@ -23,6 +23,19 @@
23
23
  * rules via `blockCommand` (return an actionable error string to refuse — it is
24
24
  * shown to the model verbatim) and enable `blockDangerousCommands` (default
25
25
  * FALSE) where appropriate.
26
+ * - **`read_file` takes `paths` as well as `path`.** An agent that issues one
27
+ * tool call per model round-trip pays a full round-trip per file, so a project
28
+ * survey costs minutes; batched, the same reads cost one call each 25 files
29
+ * (`MAX_BATCH_READ_FILES` / `MAX_BATCH_READ_BYTES`, which report where they
30
+ * stopped). Each entry carries its own content or its own error, so one bad
31
+ * path never fails the batch.
32
+ * - **A parameter under another name is not a broken tool.** Every tool's input
33
+ * is normalized first (`cmd` → `command`, `file` → `path`, camelCase ⇄
34
+ * snake_case), and a handler that throws returns an error naming the missing
35
+ * parameter rather than a bare internal message — which a weak executor reads
36
+ * as a broken tool and routes around, taking its verification with it. Use
37
+ * `guardAITool` to give tools built elsewhere the same treatment, passing
38
+ * `redactError` so a thrown message is masked by your own redactor.
26
39
  * - **Scope the tool set per agent** with `include`/`exclude` — a read-only agent
27
40
  * should not receive `write_file`/`exec_command`.
28
41
  * - Outputs are size-capped (`MAX_READ_SIZE`, `MAX_OUTPUT_SIZE`, …) and searches
@@ -85,6 +98,7 @@
85
98
  export * from './backends/local.js';
86
99
  export * from './backends/sandbox.js';
87
100
  export * from './browser-guard.js';
101
+ export * from './input-normalizer.js';
88
102
  export * from './schemas.js';
89
103
  export * from './system-prompt.js';
90
104
  export * from './tools.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmFG;AAEH,cAAc,qBAAqB,CAAA;AACnC,cAAc,uBAAuB,CAAA;AACrC,cAAc,oBAAoB,CAAA;AAClC,cAAc,cAAc,CAAA;AAC5B,cAAc,oBAAoB,CAAA;AAClC,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA;AAC1B,cAAc,gBAAgB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgGG;AAEH,cAAc,qBAAqB,CAAA;AACnC,cAAc,uBAAuB,CAAA;AACrC,cAAc,oBAAoB,CAAA;AAClC,cAAc,uBAAuB,CAAA;AACrC,cAAc,cAAc,CAAA;AAC5B,cAAc,oBAAoB,CAAA;AAClC,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA;AAC1B,cAAc,gBAAgB,CAAA"}
package/dist/index.js CHANGED
@@ -23,6 +23,19 @@
23
23
  * rules via `blockCommand` (return an actionable error string to refuse — it is
24
24
  * shown to the model verbatim) and enable `blockDangerousCommands` (default
25
25
  * FALSE) where appropriate.
26
+ * - **`read_file` takes `paths` as well as `path`.** An agent that issues one
27
+ * tool call per model round-trip pays a full round-trip per file, so a project
28
+ * survey costs minutes; batched, the same reads cost one call each 25 files
29
+ * (`MAX_BATCH_READ_FILES` / `MAX_BATCH_READ_BYTES`, which report where they
30
+ * stopped). Each entry carries its own content or its own error, so one bad
31
+ * path never fails the batch.
32
+ * - **A parameter under another name is not a broken tool.** Every tool's input
33
+ * is normalized first (`cmd` → `command`, `file` → `path`, camelCase ⇄
34
+ * snake_case), and a handler that throws returns an error naming the missing
35
+ * parameter rather than a bare internal message — which a weak executor reads
36
+ * as a broken tool and routes around, taking its verification with it. Use
37
+ * `guardAITool` to give tools built elsewhere the same treatment, passing
38
+ * `redactError` so a thrown message is masked by your own redactor.
26
39
  * - **Scope the tool set per agent** with `include`/`exclude` — a read-only agent
27
40
  * should not receive `write_file`/`exec_command`.
28
41
  * - Outputs are size-capped (`MAX_READ_SIZE`, `MAX_OUTPUT_SIZE`, …) and searches
@@ -85,6 +98,7 @@
85
98
  export * from './backends/local.js';
86
99
  export * from './backends/sandbox.js';
87
100
  export * from './browser-guard.js';
101
+ export * from './input-normalizer.js';
88
102
  export * from './schemas.js';
89
103
  export * from './system-prompt.js';
90
104
  export * from './tools.js';
@@ -0,0 +1,92 @@
1
+ /**
2
+ * Tool-input normalization: accept the parameter names a weak executor
3
+ * actually sends, and never let a missing one reach a handler as `undefined`.
4
+ *
5
+ * @module
6
+ */
7
+ /** The JSON-Schema-ish shape every tool in this package declares. */
8
+ export interface NormalizableSchema {
9
+ name: string;
10
+ parameters?: {
11
+ type?: string;
12
+ properties?: Record<string, {
13
+ type?: string;
14
+ description?: string;
15
+ }>;
16
+ required?: string[];
17
+ };
18
+ }
19
+ /** The result of normalizing one tool call's input. */
20
+ export interface NormalizedInput {
21
+ /** The input to hand the handler, with aliases moved onto the declared names. */
22
+ input: Record<string, unknown>;
23
+ /** Declared-required parameters still absent after aliasing. */
24
+ missing: string[];
25
+ /** `alias→declared` pairs that were moved, for logging. */
26
+ aliased: string[];
27
+ }
28
+ /** Options shared by {@link guardToolExecute} and {@link guardAITool}. */
29
+ export interface GuardOptions {
30
+ /**
31
+ * Redactor applied to a THROWN error's message before it is returned to the
32
+ * model. Defaults to this package's `redactSecrets`.
33
+ */
34
+ redactError?: (message: string) => string;
35
+ }
36
+ /**
37
+ * Move known aliases onto the declared parameter names and report what is still
38
+ * missing. Unknown keys are left in place — handlers ignore them, and dropping
39
+ * them would hide a model's intent from anything reading the call log.
40
+ *
41
+ * @param schema - The tool's declared schema.
42
+ * @param raw - Whatever the model sent as the tool input.
43
+ * @returns The normalized input plus the missing-required and aliased lists.
44
+ */
45
+ export declare function normalizeToolInput(schema: NormalizableSchema, raw: unknown): NormalizedInput;
46
+ /**
47
+ * The error a tool returns when a required parameter is still absent after
48
+ * aliasing. Model-facing, so it names the right parameter, what was actually
49
+ * sent, and the shape of a correct call — everything needed to fix it in one
50
+ * turn instead of concluding the tool is broken.
51
+ *
52
+ * @param schema - The tool's declared schema.
53
+ * @param input - The normalized input (used to list the keys that were sent).
54
+ * @param missing - The required parameters still absent.
55
+ * @returns A single-sentence-per-clause error string.
56
+ */
57
+ export declare function missingParamError(schema: NormalizableSchema, input: Record<string, unknown>, missing: string[]): string;
58
+ /**
59
+ * Wrap a tool handler so every call is normalized first and a handler that
60
+ * THROWS returns something the model can act on.
61
+ *
62
+ * The guard deliberately does NOT pre-empt the handler when a required
63
+ * parameter looks absent: several handlers accept a documented older shape
64
+ * (`edit_file`'s top-level `old_string`/`new_string`) or answer a missing
65
+ * parameter with far better guidance than a generic message could (`edit_file`
66
+ * telling the model to re-read the file). It steps in only where the handler
67
+ * would otherwise crash — and when it does, a still-missing required parameter
68
+ * is the accurate diagnosis for that crash, so it is reported as one.
69
+ *
70
+ * @param schema - The tool's declared schema.
71
+ * @param impl - The raw handler.
72
+ * @returns A handler with the same signature, guarded.
73
+ */
74
+ export declare function guardToolExecute(schema: NormalizableSchema, impl: (input: Record<string, unknown>, ...rest: never[]) => Promise<unknown>, options?: GuardOptions): (input: unknown, ...rest: never[]) => Promise<unknown>;
75
+ /**
76
+ * Apply {@link guardToolExecute} to a ready-made tool object (the
77
+ * `@molecule/api-ai` `AITool` shape: `{ name, description, parameters,
78
+ * execute }`), returning a copy whose `execute` is guarded.
79
+ *
80
+ * Use it at the point a consumer hands its full tool list to the model, so
81
+ * tools built outside this package get the same treatment as the ones built
82
+ * inside it.
83
+ *
84
+ * @param tool - The tool to guard.
85
+ * @returns A copy with a guarded `execute`.
86
+ */
87
+ export declare function guardAITool<T extends {
88
+ name: string;
89
+ parameters?: unknown;
90
+ execute: (input: unknown, ...rest: never[]) => Promise<unknown>;
91
+ }>(tool: T, options?: GuardOptions): T;
92
+ //# sourceMappingURL=input-normalizer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"input-normalizer.d.ts","sourceRoot":"","sources":["../src/input-normalizer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,qEAAqE;AACrE,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,CAAC,EAAE;QACX,IAAI,CAAC,EAAE,MAAM,CAAA;QACb,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;YAAE,IAAI,CAAC,EAAE,MAAM,CAAC;YAAC,WAAW,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC,CAAA;QACpE,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;KACpB,CAAA;CACF;AAED,uDAAuD;AACvD,MAAM,WAAW,eAAe;IAC9B,iFAAiF;IACjF,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC9B,gEAAgE;IAChE,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,2DAA2D;IAC3D,OAAO,EAAE,MAAM,EAAE,CAAA;CAClB;AAiDD,0EAA0E;AAC1E,MAAM,WAAW,YAAY;IAC3B;;;OAGG;IACH,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,CAAA;CAC1C;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,kBAAkB,EAAE,GAAG,EAAE,OAAO,GAAG,eAAe,CAiD5F;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,kBAAkB,EAC1B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,OAAO,EAAE,MAAM,EAAE,GAChB,MAAM,CAaR;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,kBAAkB,EAC1B,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,OAAO,CAAC,OAAO,CAAC,EAC5E,OAAO,GAAE,YAAiB,GACzB,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,OAAO,CAAC,OAAO,CAAC,CAsBxD;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,WAAW,CACzB,CAAC,SAAS;IACR,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;CAChE,EACD,IAAI,EAAE,CAAC,EAAE,OAAO,GAAE,YAAiB,GAAG,CAAC,CAaxC"}