@namzu/sdk 45.0.0 → 46.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +166 -0
- package/dist/authorization/gate.d.ts +5 -2
- package/dist/authorization/gate.d.ts.map +1 -1
- package/dist/authorization/gate.js +35 -4
- package/dist/authorization/gate.js.map +1 -1
- package/dist/authorization/rules.d.ts.map +1 -1
- package/dist/authorization/rules.js +56 -6
- package/dist/authorization/rules.js.map +1 -1
- package/dist/authorization/shell-lexer.d.ts +38 -0
- package/dist/authorization/shell-lexer.d.ts.map +1 -1
- package/dist/authorization/shell-lexer.js +88 -57
- package/dist/authorization/shell-lexer.js.map +1 -1
- package/dist/bridge/a2a/mapper.d.ts.map +1 -1
- package/dist/bridge/a2a/mapper.js +2 -0
- package/dist/bridge/a2a/mapper.js.map +1 -1
- package/dist/bridge/sse/mapper.d.ts.map +1 -1
- package/dist/bridge/sse/mapper.js +1 -0
- package/dist/bridge/sse/mapper.js.map +1 -1
- package/dist/directory/types.d.ts +2 -0
- package/dist/directory/types.d.ts.map +1 -1
- package/dist/directory/types.js.map +1 -1
- package/dist/manager/resident/outbox.d.ts +4 -4
- package/dist/pricing/catalogue.generated.d.ts.map +1 -1
- package/dist/pricing/catalogue.generated.js +28 -4
- package/dist/pricing/catalogue.generated.js.map +1 -1
- package/dist/prompt/coding-agent-doctrine.d.ts +1 -1
- package/dist/prompt/coding-agent-doctrine.d.ts.map +1 -1
- package/dist/prompt/coding-agent-doctrine.js +1 -0
- package/dist/prompt/coding-agent-doctrine.js.map +1 -1
- package/dist/public-runtime.d.ts +6 -3
- package/dist/public-runtime.d.ts.map +1 -1
- package/dist/public-runtime.js +14 -2
- package/dist/public-runtime.js.map +1 -1
- package/dist/public-tools.d.ts +7 -2
- package/dist/public-tools.d.ts.map +1 -1
- package/dist/public-tools.js +15 -2
- package/dist/public-tools.js.map +1 -1
- package/dist/public-types.d.ts +8 -2
- package/dist/public-types.d.ts.map +1 -1
- package/dist/registry/tool/callable.d.ts +22 -0
- package/dist/registry/tool/callable.d.ts.map +1 -0
- package/dist/registry/tool/callable.js +29 -0
- package/dist/registry/tool/callable.js.map +1 -0
- package/dist/registry/tool/execute.d.ts.map +1 -1
- package/dist/registry/tool/execute.js +8 -1
- package/dist/registry/tool/execute.js.map +1 -1
- package/dist/runtime/query/declined.d.ts +12 -0
- package/dist/runtime/query/declined.d.ts.map +1 -0
- package/dist/runtime/query/declined.js +12 -0
- package/dist/runtime/query/declined.js.map +1 -0
- package/dist/runtime/query/executor/tool-call-admission.d.ts +37 -11
- package/dist/runtime/query/executor/tool-call-admission.d.ts.map +1 -1
- package/dist/runtime/query/executor/tool-call-admission.js +38 -12
- package/dist/runtime/query/executor/tool-call-admission.js.map +1 -1
- package/dist/runtime/query/executor.d.ts +7 -3
- package/dist/runtime/query/executor.d.ts.map +1 -1
- package/dist/runtime/query/executor.js +32 -7
- package/dist/runtime/query/executor.js.map +1 -1
- package/dist/runtime/query/index.d.ts.map +1 -1
- package/dist/runtime/query/index.js +1 -0
- package/dist/runtime/query/index.js.map +1 -1
- package/dist/runtime/query/iteration/index.d.ts.map +1 -1
- package/dist/runtime/query/iteration/index.js +7 -0
- package/dist/runtime/query/iteration/index.js.map +1 -1
- package/dist/runtime/query/iteration/phases/context.d.ts +6 -0
- package/dist/runtime/query/iteration/phases/context.d.ts.map +1 -1
- package/dist/runtime/query/iteration/phases/context.js.map +1 -1
- package/dist/runtime/query/iteration/phases/handoff.d.ts +22 -0
- package/dist/runtime/query/iteration/phases/handoff.d.ts.map +1 -0
- package/dist/runtime/query/iteration/phases/handoff.js +65 -0
- package/dist/runtime/query/iteration/phases/handoff.js.map +1 -0
- package/dist/runtime/query/iteration/phases/index.d.ts +1 -0
- package/dist/runtime/query/iteration/phases/index.d.ts.map +1 -1
- package/dist/runtime/query/iteration/phases/index.js +1 -0
- package/dist/runtime/query/iteration/phases/index.js.map +1 -1
- package/dist/runtime/query/iteration/phases/tool-review.d.ts.map +1 -1
- package/dist/runtime/query/iteration/phases/tool-review.js +8 -3
- package/dist/runtime/query/iteration/phases/tool-review.js.map +1 -1
- package/dist/runtime/query/resume-pending.d.ts.map +1 -1
- package/dist/runtime/query/resume-pending.js +3 -2
- package/dist/runtime/query/resume-pending.js.map +1 -1
- package/dist/runtime/query/review-policy.d.ts +43 -0
- package/dist/runtime/query/review-policy.d.ts.map +1 -1
- package/dist/runtime/query/review-policy.js +63 -19
- package/dist/runtime/query/review-policy.js.map +1 -1
- package/dist/schedules/cron.d.ts +21 -0
- package/dist/schedules/cron.d.ts.map +1 -0
- package/dist/schedules/cron.js +167 -0
- package/dist/schedules/cron.js.map +1 -0
- package/dist/schedules/describe.d.ts +14 -0
- package/dist/schedules/describe.d.ts.map +1 -0
- package/dist/schedules/describe.js +133 -0
- package/dist/schedules/describe.js.map +1 -0
- package/dist/schedules/errors.d.ts +11 -0
- package/dist/schedules/errors.d.ts.map +1 -0
- package/dist/schedules/errors.js +15 -0
- package/dist/schedules/errors.js.map +1 -0
- package/dist/schedules/evaluate.d.ts +35 -0
- package/dist/schedules/evaluate.d.ts.map +1 -0
- package/dist/schedules/evaluate.js +158 -0
- package/dist/schedules/evaluate.js.map +1 -0
- package/dist/schedules/index.d.ts +11 -0
- package/dist/schedules/index.d.ts.map +1 -0
- package/dist/schedules/index.js +8 -0
- package/dist/schedules/index.js.map +1 -0
- package/dist/schedules/next-fire.d.ts +50 -0
- package/dist/schedules/next-fire.d.ts.map +1 -0
- package/dist/schedules/next-fire.js +250 -0
- package/dist/schedules/next-fire.js.map +1 -0
- package/dist/schedules/spec.d.ts +30 -0
- package/dist/schedules/spec.d.ts.map +1 -0
- package/dist/schedules/spec.js +169 -0
- package/dist/schedules/spec.js.map +1 -0
- package/dist/schedules/types.d.ts +144 -0
- package/dist/schedules/types.d.ts.map +1 -0
- package/dist/schedules/types.js +11 -0
- package/dist/schedules/types.js.map +1 -0
- package/dist/schedules/tz.d.ts +44 -0
- package/dist/schedules/tz.d.ts.map +1 -0
- package/dist/schedules/tz.js +141 -0
- package/dist/schedules/tz.js.map +1 -0
- package/dist/skills/index.d.ts +1 -1
- package/dist/skills/index.d.ts.map +1 -1
- package/dist/skills/index.js +1 -1
- package/dist/skills/index.js.map +1 -1
- package/dist/skills/loader.d.ts +16 -3
- package/dist/skills/loader.d.ts.map +1 -1
- package/dist/skills/loader.js +48 -4
- package/dist/skills/loader.js.map +1 -1
- package/dist/skills/registry.d.ts +6 -0
- package/dist/skills/registry.d.ts.map +1 -1
- package/dist/skills/registry.js +1 -0
- package/dist/skills/registry.js.map +1 -1
- package/dist/tools/builtins/browser-url.d.ts +83 -0
- package/dist/tools/builtins/browser-url.d.ts.map +1 -0
- package/dist/tools/builtins/browser-url.js +240 -0
- package/dist/tools/builtins/browser-url.js.map +1 -0
- package/dist/tools/builtins/browser.d.ts +367 -0
- package/dist/tools/builtins/browser.d.ts.map +1 -0
- package/dist/tools/builtins/browser.js +704 -0
- package/dist/tools/builtins/browser.js.map +1 -0
- package/dist/tools/builtins/computer-use-coordinates.d.ts +65 -0
- package/dist/tools/builtins/computer-use-coordinates.d.ts.map +1 -0
- package/dist/tools/builtins/computer-use-coordinates.js +123 -0
- package/dist/tools/builtins/computer-use-coordinates.js.map +1 -0
- package/dist/tools/builtins/computer-use-image.d.ts +77 -0
- package/dist/tools/builtins/computer-use-image.d.ts.map +1 -0
- package/dist/tools/builtins/computer-use-image.js +223 -0
- package/dist/tools/builtins/computer-use-image.js.map +1 -0
- package/dist/tools/builtins/computer-use.d.ts +519 -14
- package/dist/tools/builtins/computer-use.d.ts.map +1 -1
- package/dist/tools/builtins/computer-use.js +1188 -183
- package/dist/tools/builtins/computer-use.js.map +1 -1
- package/dist/tools/builtins/index.d.ts +2 -1
- package/dist/tools/builtins/index.d.ts.map +1 -1
- package/dist/tools/builtins/index.js +1 -1
- package/dist/tools/builtins/index.js.map +1 -1
- package/dist/tools/builtins/skill.d.ts +74 -0
- package/dist/tools/builtins/skill.d.ts.map +1 -1
- package/dist/tools/builtins/skill.js +214 -159
- package/dist/tools/builtins/skill.js.map +1 -1
- package/dist/tools/defineTool.d.ts +4 -0
- package/dist/tools/defineTool.d.ts.map +1 -1
- package/dist/tools/defineTool.js +8 -0
- package/dist/tools/defineTool.js.map +1 -1
- package/dist/tools/schedules/index.d.ts +5 -0
- package/dist/tools/schedules/index.d.ts.map +1 -0
- package/dist/tools/schedules/index.js +4 -0
- package/dist/tools/schedules/index.js.map +1 -0
- package/dist/tools/schedules/loop-tool.d.ts +14 -0
- package/dist/tools/schedules/loop-tool.d.ts.map +1 -0
- package/dist/tools/schedules/loop-tool.js +81 -0
- package/dist/tools/schedules/loop-tool.js.map +1 -0
- package/dist/tools/schedules/present.d.ts +16 -0
- package/dist/tools/schedules/present.d.ts.map +1 -0
- package/dist/tools/schedules/present.js +71 -0
- package/dist/tools/schedules/present.js.map +1 -0
- package/dist/tools/schedules/prompt-scan.d.ts +17 -0
- package/dist/tools/schedules/prompt-scan.d.ts.map +1 -0
- package/dist/tools/schedules/prompt-scan.js +92 -0
- package/dist/tools/schedules/prompt-scan.js.map +1 -0
- package/dist/tools/schedules/schedule-tool.d.ts +17 -0
- package/dist/tools/schedules/schedule-tool.d.ts.map +1 -0
- package/dist/tools/schedules/schedule-tool.js +418 -0
- package/dist/tools/schedules/schedule-tool.js.map +1 -0
- package/dist/tools/schedules/types.d.ts +252 -0
- package/dist/tools/schedules/types.d.ts.map +1 -0
- package/dist/tools/schedules/types.js +11 -0
- package/dist/tools/schedules/types.js.map +1 -0
- package/dist/types/authorization/index.d.ts +107 -9
- package/dist/types/authorization/index.d.ts.map +1 -1
- package/dist/types/authorization/index.js +16 -1
- package/dist/types/authorization/index.js.map +1 -1
- package/dist/types/browser/index.d.ts +280 -0
- package/dist/types/browser/index.d.ts.map +1 -0
- package/dist/types/browser/index.js +12 -0
- package/dist/types/browser/index.js.map +1 -0
- package/dist/types/computer-use/index.d.ts +176 -0
- package/dist/types/computer-use/index.d.ts.map +1 -1
- package/dist/types/computer-use/index.js.map +1 -1
- package/dist/types/session/events.d.ts +6 -0
- package/dist/types/session/events.d.ts.map +1 -1
- package/dist/types/session/events.js.map +1 -1
- package/dist/types/session/records.d.ts +23 -0
- package/dist/types/session/records.d.ts.map +1 -1
- package/dist/types/session/records.js +9 -0
- package/dist/types/session/records.js.map +1 -1
- package/dist/types/tool/index.d.ts +60 -0
- package/dist/types/tool/index.d.ts.map +1 -1
- package/dist/types/tool/index.js.map +1 -1
- package/dist/types/tool/presentation.d.ts +7 -0
- package/dist/types/tool/presentation.d.ts.map +1 -1
- package/dist/utils/frontmatter.d.ts +18 -2
- package/dist/utils/frontmatter.d.ts.map +1 -1
- package/dist/utils/frontmatter.js +13 -3
- package/dist/utils/frontmatter.js.map +1 -1
- package/dist/utils/id.d.ts +8 -0
- package/dist/utils/id.d.ts.map +1 -1
- package/dist/utils/id.js +12 -0
- package/dist/utils/id.js.map +1 -1
- package/package.json +3 -1
- package/src/authorization/gate.ts +37 -4
- package/src/authorization/rules.ts +55 -7
- package/src/authorization/shell-lexer.ts +109 -51
- package/src/bridge/a2a/mapper.ts +2 -0
- package/src/bridge/sse/mapper.ts +1 -0
- package/src/directory/types.ts +2 -0
- package/src/pricing/catalogue.generated.ts +28 -4
- package/src/pricing/rates.source.json +27 -6
- package/src/prompt/coding-agent-doctrine.ts +1 -0
- package/src/public-runtime.ts +43 -1
- package/src/public-tools.ts +54 -1
- package/src/public-types.ts +55 -0
- package/src/registry/tool/callable.ts +37 -0
- package/src/registry/tool/execute.ts +8 -1
- package/src/runtime/query/declined.ts +12 -0
- package/src/runtime/query/executor/tool-call-admission.ts +60 -16
- package/src/runtime/query/executor.ts +36 -5
- package/src/runtime/query/index.ts +1 -0
- package/src/runtime/query/iteration/index.ts +8 -0
- package/src/runtime/query/iteration/phases/context.ts +6 -0
- package/src/runtime/query/iteration/phases/handoff.ts +74 -0
- package/src/runtime/query/iteration/phases/index.ts +1 -0
- package/src/runtime/query/iteration/phases/tool-review.ts +11 -4
- package/src/runtime/query/resume-pending.ts +3 -2
- package/src/runtime/query/review-policy.ts +107 -18
- package/src/schedules/cron.ts +202 -0
- package/src/schedules/describe.ts +138 -0
- package/src/schedules/errors.ts +15 -0
- package/src/schedules/evaluate.ts +178 -0
- package/src/schedules/index.ts +18 -0
- package/src/schedules/next-fire.ts +257 -0
- package/src/schedules/spec.ts +210 -0
- package/src/schedules/types.ts +163 -0
- package/src/schedules/tz.ts +155 -0
- package/src/skills/index.ts +1 -1
- package/src/skills/loader.ts +55 -4
- package/src/skills/registry.ts +8 -0
- package/src/tools/builtins/browser-url.ts +251 -0
- package/src/tools/builtins/browser.ts +817 -0
- package/src/tools/builtins/computer-use-coordinates.ts +144 -0
- package/src/tools/builtins/computer-use-image.ts +278 -0
- package/src/tools/builtins/computer-use.ts +1485 -191
- package/src/tools/builtins/index.ts +7 -1
- package/src/tools/builtins/skill.ts +304 -156
- package/src/tools/defineTool.ts +13 -0
- package/src/tools/schedules/index.ts +4 -0
- package/src/tools/schedules/loop-tool.ts +85 -0
- package/src/tools/schedules/present.ts +88 -0
- package/src/tools/schedules/prompt-scan.ts +96 -0
- package/src/tools/schedules/schedule-tool.ts +482 -0
- package/src/tools/schedules/types.ts +265 -0
- package/src/types/authorization/index.ts +81 -2
- package/src/types/browser/index.ts +341 -0
- package/src/types/computer-use/index.ts +202 -0
- package/src/types/session/events.ts +6 -0
- package/src/types/session/records.ts +10 -0
- package/src/types/tool/index.ts +61 -0
- package/src/types/tool/presentation.ts +7 -0
- package/src/utils/frontmatter.ts +29 -3
- package/src/utils/id.ts +14 -0
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The host side of the `schedule` and `session_loop` tools.
|
|
3
|
+
*
|
|
4
|
+
* The SDK holds the tool's contract with the model — its schema, its refusals
|
|
5
|
+
* and its confirmation rule — and nothing about where jobs are stored or how
|
|
6
|
+
* a confirmation is drawn. The host supplies both, and it computes every
|
|
7
|
+
* field a person is asked to confirm: the model's own words are never what
|
|
8
|
+
* the confirmation shows as fact.
|
|
9
|
+
*/
|
|
10
|
+
/** A rule effect, in the vocabulary of the CLI's `[permissions]` table. */
|
|
11
|
+
export type ScheduleRuleEffect = 'allow' | 'ask' | 'deny';
|
|
12
|
+
/** What the model proposes. Validated by the tool's schema, then by the host. */
|
|
13
|
+
export interface ScheduleJobDraft {
|
|
14
|
+
readonly name: string;
|
|
15
|
+
readonly prompt: string;
|
|
16
|
+
/** Schedule words: `every 30m`, `0 9 * * 1-5`, `at 09:00`, `in 2h`. */
|
|
17
|
+
readonly when: string;
|
|
18
|
+
/** Folder the job runs in. Absent: the session's working directory. */
|
|
19
|
+
readonly folder?: string;
|
|
20
|
+
/** IANA zone for a cron expression or a local time. Absent: the host's. */
|
|
21
|
+
readonly tz?: string;
|
|
22
|
+
readonly permissions: {
|
|
23
|
+
readonly preset?: 'read-only' | 'edit-in-folder';
|
|
24
|
+
/**
|
|
25
|
+
* What happens to a call no rule covers. The model may choose `park`
|
|
26
|
+
* (wait for the operator) or `deny`; running uncovered calls without
|
|
27
|
+
* asking is an operator decision the tool cannot propose.
|
|
28
|
+
*/
|
|
29
|
+
readonly unmatched: 'park' | 'deny';
|
|
30
|
+
readonly execution?: 'host' | 'sandbox';
|
|
31
|
+
readonly rules?: Readonly<Record<string, ScheduleRuleEffect | Readonly<Record<string, ScheduleRuleEffect>>>>;
|
|
32
|
+
/**
|
|
33
|
+
* Browser access for the run. Absent: the `browser` and `browser_act`
|
|
34
|
+
* tools are denied. Present: only the listed sites are reachable, at
|
|
35
|
+
* the listed level, and every other site is denied — there is no
|
|
36
|
+
* catch-all key. The tool refuses this block unless the host sets
|
|
37
|
+
* {@link ScheduleToolHost.browserGrants}.
|
|
38
|
+
*/
|
|
39
|
+
readonly browser?: ScheduleBrowserGrant;
|
|
40
|
+
};
|
|
41
|
+
readonly budget?: {
|
|
42
|
+
readonly maxIterations?: number;
|
|
43
|
+
readonly tokenBudget?: number;
|
|
44
|
+
readonly timeoutMs?: number;
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* How far a scheduled run may go on one site. `read`: open and read pages,
|
|
49
|
+
* never change them. `ask`: open and change pages, each change parked for the
|
|
50
|
+
* operator. `act`: open and change pages without asking.
|
|
51
|
+
*/
|
|
52
|
+
export type ScheduleBrowserSiteLevel = 'read' | 'ask' | 'act';
|
|
53
|
+
/** A scheduled job's browser grant. */
|
|
54
|
+
export interface ScheduleBrowserGrant {
|
|
55
|
+
/** The browser profile the run uses; the operator's, signed in beforehand. */
|
|
56
|
+
readonly profile: string;
|
|
57
|
+
/**
|
|
58
|
+
* Canonical site key (`https://github.com`, `https://*.example.com`,
|
|
59
|
+
* `http://localhost:*`) to level. The tool canonicalises the keys the
|
|
60
|
+
* model wrote (see `canonicalizeBrowserSitePattern`) before the host sees
|
|
61
|
+
* them. Unlisted sites are denied.
|
|
62
|
+
*/
|
|
63
|
+
readonly sites: Readonly<Record<string, ScheduleBrowserSiteLevel>>;
|
|
64
|
+
/** Show the browser window during the run. Default: no window. */
|
|
65
|
+
readonly headed?: boolean;
|
|
66
|
+
}
|
|
67
|
+
/** What the person confirming is shown. Every field is the host's own computation. */
|
|
68
|
+
export interface ScheduleJobPreview {
|
|
69
|
+
readonly name: string;
|
|
70
|
+
/** The canonical folder the job would run in. */
|
|
71
|
+
readonly folder: string;
|
|
72
|
+
/** True when `folder` is outside the session's working directory and added directories. */
|
|
73
|
+
readonly outsideSessionRoots: boolean;
|
|
74
|
+
readonly prompt: string;
|
|
75
|
+
/** The schedule in words, with its zone. */
|
|
76
|
+
readonly schedule: string;
|
|
77
|
+
/** The next fire times, ISO-8601 UTC. */
|
|
78
|
+
readonly nextFireTimes: readonly string[];
|
|
79
|
+
/** The permission set expanded to one line per rule, config denies included. */
|
|
80
|
+
readonly rules: readonly string[];
|
|
81
|
+
readonly unmatched: 'park' | 'deny' | 'allow';
|
|
82
|
+
readonly execution: 'host' | 'sandbox';
|
|
83
|
+
/** A rule lets the run reach the network. */
|
|
84
|
+
readonly networkAccess: boolean;
|
|
85
|
+
readonly budget: {
|
|
86
|
+
readonly maxIterations: number;
|
|
87
|
+
readonly tokenBudget: number;
|
|
88
|
+
readonly timeoutMs: number;
|
|
89
|
+
};
|
|
90
|
+
/** Runs per day at most, times the token budget. Absent for a one-shot. */
|
|
91
|
+
readonly dailyTokenCeiling?: number;
|
|
92
|
+
/** Provider and model the job is pinned to. */
|
|
93
|
+
readonly model: string;
|
|
94
|
+
/** Where the run's credential comes from, in words. */
|
|
95
|
+
readonly credentialSource?: string;
|
|
96
|
+
/** Anything the host wants said in the warning colour. */
|
|
97
|
+
readonly warnings: readonly string[];
|
|
98
|
+
}
|
|
99
|
+
/** A job as the `list` action reports it. */
|
|
100
|
+
export interface ScheduleJobSummary {
|
|
101
|
+
readonly name: string;
|
|
102
|
+
readonly folder: string;
|
|
103
|
+
readonly state: string;
|
|
104
|
+
readonly schedule: string;
|
|
105
|
+
readonly nextFireAt?: string;
|
|
106
|
+
readonly lastStatus?: string;
|
|
107
|
+
/** Present only for jobs in the session's own folder. */
|
|
108
|
+
readonly prompt?: string;
|
|
109
|
+
/**
|
|
110
|
+
* True for a job whose folder is the session's own. A host that lists
|
|
111
|
+
* other folders' jobs sets it so the model can tell them apart; the tool
|
|
112
|
+
* marks such a job `(this folder)`.
|
|
113
|
+
*/
|
|
114
|
+
readonly inSessionFolder?: boolean;
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* What the model proposes to change in an existing job. Every field left
|
|
118
|
+
* out keeps the job's current value. `permissions`, when given, is the whole
|
|
119
|
+
* new set, with the same limits as a new job's; the host keeps the job's
|
|
120
|
+
* `execution` when it is not given, and its additional directories.
|
|
121
|
+
*/
|
|
122
|
+
export interface ScheduleJobChanges {
|
|
123
|
+
readonly prompt?: string;
|
|
124
|
+
readonly when?: string;
|
|
125
|
+
readonly folder?: string;
|
|
126
|
+
readonly tz?: string;
|
|
127
|
+
readonly permissions?: ScheduleJobDraft['permissions'];
|
|
128
|
+
readonly budget?: ScheduleJobDraft['budget'];
|
|
129
|
+
}
|
|
130
|
+
/** A proposed change to a job, as the host computed it. */
|
|
131
|
+
export interface ScheduleJobUpdateProposal {
|
|
132
|
+
/** The job as it would be once changed. Every field is the host's own computation. */
|
|
133
|
+
readonly preview: ScheduleJobPreview;
|
|
134
|
+
/**
|
|
135
|
+
* What differs from the job as it stands (and from edits saved since it
|
|
136
|
+
* was last confirmed), one line each: `- ` what goes, `+ ` what comes.
|
|
137
|
+
*/
|
|
138
|
+
readonly changes: readonly string[];
|
|
139
|
+
/** The change touches what a run may do: its rules, `unmatched`, where it runs, its browser grant. */
|
|
140
|
+
readonly permissionsChange: boolean;
|
|
141
|
+
}
|
|
142
|
+
/** What the person confirming a change is shown. */
|
|
143
|
+
export interface ScheduleUpdateRequest extends ScheduleJobUpdateProposal {
|
|
144
|
+
/** The prompt tripwire's findings over `preview.prompt`. */
|
|
145
|
+
readonly promptFindings: readonly string[];
|
|
146
|
+
/** Always `model` from this tool. */
|
|
147
|
+
readonly proposedBy: 'model';
|
|
148
|
+
}
|
|
149
|
+
/** What the person answered to a proposed job. */
|
|
150
|
+
export type ScheduleConfirmAnswer = 'create' | 'create-paused' | 'cancel';
|
|
151
|
+
export interface ScheduleConfirmRequest {
|
|
152
|
+
readonly preview: ScheduleJobPreview;
|
|
153
|
+
/** The prompt tripwire's findings over `preview.prompt`. */
|
|
154
|
+
readonly promptFindings: readonly string[];
|
|
155
|
+
/** Always `model` from this tool: the banner says it was not the operator. */
|
|
156
|
+
readonly proposedBy: 'model';
|
|
157
|
+
}
|
|
158
|
+
export interface ScheduleToolHost {
|
|
159
|
+
/**
|
|
160
|
+
* The host can store and enforce {@link ScheduleJobDraft.permissions}
|
|
161
|
+
* `.browser`. Absent or false: the tool refuses a draft carrying one,
|
|
162
|
+
* rather than let the host drop it and confirm a job the model believes
|
|
163
|
+
* can use the browser.
|
|
164
|
+
*/
|
|
165
|
+
readonly browserGrants?: boolean;
|
|
166
|
+
/** Validate the draft and compute what the person will be shown. Throws with a message on a refusal. */
|
|
167
|
+
preview(draft: ScheduleJobDraft): Promise<ScheduleJobPreview>;
|
|
168
|
+
/**
|
|
169
|
+
* Ask the person. Anything but `create` or `create-paused` — `cancel`, a
|
|
170
|
+
* thrown error, a closed screen — means no job.
|
|
171
|
+
*
|
|
172
|
+
* `signal` fires when the tool's own confirmation deadline elapses or the
|
|
173
|
+
* turn is aborted; a host that draws a screen closes it then rather than
|
|
174
|
+
* leaving it live after the tool has given up on the answer.
|
|
175
|
+
*/
|
|
176
|
+
confirm(request: ScheduleConfirmRequest, signal?: AbortSignal): Promise<ScheduleConfirmAnswer>;
|
|
177
|
+
/**
|
|
178
|
+
* Create the job the person confirmed. `note`, when given, is appended to
|
|
179
|
+
* what the model is told, for what the person must still do before the
|
|
180
|
+
* job runs (install a scheduler, say): the model reports the job as set
|
|
181
|
+
* up otherwise.
|
|
182
|
+
*/
|
|
183
|
+
create(draft: ScheduleJobDraft, preview: ScheduleJobPreview, options: {
|
|
184
|
+
readonly paused: boolean;
|
|
185
|
+
}): Promise<{
|
|
186
|
+
readonly name: string;
|
|
187
|
+
readonly note?: string;
|
|
188
|
+
}>;
|
|
189
|
+
/**
|
|
190
|
+
* Jobs, the session folder's in full, other folders' without their
|
|
191
|
+
* prompts. `allFolders: false` lets a host list only the session
|
|
192
|
+
* folder's; a host may list every job regardless, marking the session
|
|
193
|
+
* folder's with {@link ScheduleJobSummary.inSessionFolder}. The tool says
|
|
194
|
+
* "No scheduled jobs." when this returns none, so a host that filters
|
|
195
|
+
* says so only for its folder.
|
|
196
|
+
*/
|
|
197
|
+
list(options: {
|
|
198
|
+
readonly allFolders: boolean;
|
|
199
|
+
}): Promise<readonly ScheduleJobSummary[]>;
|
|
200
|
+
/** A job by name or id prefix, or undefined. */
|
|
201
|
+
find(job: string): Promise<ScheduleJobSummary | undefined>;
|
|
202
|
+
/** Ask the person to confirm resuming or deleting a job. See `confirm` on `signal`. */
|
|
203
|
+
confirmAction(job: ScheduleJobSummary, action: 'resume' | 'delete', signal?: AbortSignal): Promise<boolean>;
|
|
204
|
+
pause(job: string): Promise<void>;
|
|
205
|
+
resume(job: string): Promise<void>;
|
|
206
|
+
delete(job: string): Promise<void>;
|
|
207
|
+
/**
|
|
208
|
+
* Validate a change to `job` (a name or id prefix) and compute what the
|
|
209
|
+
* person will be shown. Throws with a message on a refusal. The tool
|
|
210
|
+
* offers `update` only when a host has all three of `previewUpdate`,
|
|
211
|
+
* `confirmUpdate` and `update`.
|
|
212
|
+
*/
|
|
213
|
+
previewUpdate?(job: string, changes: ScheduleJobChanges): Promise<ScheduleJobUpdateProposal>;
|
|
214
|
+
/**
|
|
215
|
+
* Ask the person whether to save the change. Anything but `true` — a
|
|
216
|
+
* thrown error, a closed screen — changes nothing. See `confirm` on
|
|
217
|
+
* `signal`.
|
|
218
|
+
*/
|
|
219
|
+
confirmUpdate?(request: ScheduleUpdateRequest, signal?: AbortSignal): Promise<boolean>;
|
|
220
|
+
/**
|
|
221
|
+
* Save the change the person confirmed, to the same job: its id and its
|
|
222
|
+
* history are kept, and the confirmation is the person's. `note` as for
|
|
223
|
+
* `create`.
|
|
224
|
+
*/
|
|
225
|
+
update?(preview: ScheduleJobPreview): Promise<{
|
|
226
|
+
readonly name: string;
|
|
227
|
+
readonly note?: string;
|
|
228
|
+
}>;
|
|
229
|
+
}
|
|
230
|
+
/** A prompt the session re-sends to itself on an interval. */
|
|
231
|
+
export interface SessionLoop {
|
|
232
|
+
readonly id: string;
|
|
233
|
+
/** The interval in words. */
|
|
234
|
+
readonly schedule: string;
|
|
235
|
+
readonly prompt: string;
|
|
236
|
+
readonly createdAt: string;
|
|
237
|
+
readonly expiresAt?: string;
|
|
238
|
+
readonly lastFiredAt?: string;
|
|
239
|
+
readonly createdBy: 'operator' | 'model';
|
|
240
|
+
}
|
|
241
|
+
export interface SessionLoopHost {
|
|
242
|
+
/** Throws with a message when the interval is not usable or the loop limit is reached. */
|
|
243
|
+
create(request: {
|
|
244
|
+
readonly interval: string;
|
|
245
|
+
readonly prompt: string;
|
|
246
|
+
readonly createdBy: 'model';
|
|
247
|
+
}): Promise<SessionLoop>;
|
|
248
|
+
list(): readonly SessionLoop[];
|
|
249
|
+
/** Stop one loop by id, or every loop with `all`. Returns how many stopped. */
|
|
250
|
+
delete(id: string): Promise<number>;
|
|
251
|
+
}
|
|
252
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/tools/schedules/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The host side of the `schedule` and `session_loop` tools.
|
|
3
|
+
*
|
|
4
|
+
* The SDK holds the tool's contract with the model — its schema, its refusals
|
|
5
|
+
* and its confirmation rule — and nothing about where jobs are stored or how
|
|
6
|
+
* a confirmation is drawn. The host supplies both, and it computes every
|
|
7
|
+
* field a person is asked to confirm: the model's own words are never what
|
|
8
|
+
* the confirmation shows as fact.
|
|
9
|
+
*/
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/tools/schedules/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
+
import type { ShellDialect, ToolDefinition } from '../tool/index.js';
|
|
2
3
|
export type GateDecision = 'allow' | 'deny' | 'review';
|
|
3
4
|
export interface GateEvaluationResult {
|
|
4
5
|
readonly decision: GateDecision;
|
|
@@ -81,11 +82,68 @@ export type AuthorizationRule = {
|
|
|
81
82
|
/** The argument key, at the top level of the tool's input. */
|
|
82
83
|
argument: string;
|
|
83
84
|
pattern: string;
|
|
84
|
-
|
|
85
|
+
/**
|
|
86
|
+
* `review` sends a matching call to the review policy — a person,
|
|
87
|
+
* or the turn's mode — instead of deciding it here. It matches as
|
|
88
|
+
* `deny` does (any segment of a command line), because it is a
|
|
89
|
+
* restriction: a rule that asks before `git push` must also ask
|
|
90
|
+
* before `true; git push`.
|
|
91
|
+
*/
|
|
92
|
+
decision: 'allow' | 'deny' | 'review';
|
|
85
93
|
} | {
|
|
86
94
|
type: 'allow_by_tier';
|
|
87
95
|
tiers: string[];
|
|
96
|
+
} | {
|
|
97
|
+
/**
|
|
98
|
+
* A decision the host computes in code, in its place in the list.
|
|
99
|
+
*
|
|
100
|
+
* A pattern is the wrong tool for a rule about what a command line
|
|
101
|
+
* DOES: a regular expression over its text has to re-implement the
|
|
102
|
+
* shell's quoting, and every form it misses (`$'…'`, a line
|
|
103
|
+
* continuation, a quoted separator) is a way past the rule. A host
|
|
104
|
+
* that needs such a rule reads the line with `lexShellCommandLine`
|
|
105
|
+
* and decides on the words bash will pass, here.
|
|
106
|
+
*
|
|
107
|
+
* `decide` returns a decision, or `null` to let the next rule
|
|
108
|
+
* decide. A `decide` that throws is read as `deny`: a rule that
|
|
109
|
+
* could not reach a verdict must not let the call through.
|
|
110
|
+
*/
|
|
111
|
+
type: 'predicate';
|
|
112
|
+
/**
|
|
113
|
+
* What the rule refuses or allows, in words. It is the reason the
|
|
114
|
+
* gate reports when this rule decides, so it should tell a model
|
|
115
|
+
* whether a different input could fare better.
|
|
116
|
+
*/
|
|
117
|
+
description: string;
|
|
118
|
+
decide: AuthorizationPredicate;
|
|
119
|
+
/**
|
|
120
|
+
* The reason for THIS call, when `decide` returned a decision: what
|
|
121
|
+
* in the input matched, and where. The gate reports it instead of
|
|
122
|
+
* {@link description}. Absent, returning `null` or throwing, the
|
|
123
|
+
* gate reports `description`.
|
|
124
|
+
*
|
|
125
|
+
* A rule that refuses on several grounds and reports one fixed
|
|
126
|
+
* sentence leaves the model, and the person reading the refusal,
|
|
127
|
+
* to guess which ground it was. A scheduled run's refusal listed
|
|
128
|
+
* everything the rule protects when one word of the command had
|
|
129
|
+
* matched.
|
|
130
|
+
*/
|
|
131
|
+
describe?: (call: AuthorizationPredicateCall) => string | null;
|
|
88
132
|
};
|
|
133
|
+
/** The call an `AuthorizationRule` of type `predicate` is asked about. */
|
|
134
|
+
export interface AuthorizationPredicateCall {
|
|
135
|
+
readonly toolName: string;
|
|
136
|
+
readonly toolInput: unknown;
|
|
137
|
+
readonly toolDef: ToolDefinition | undefined;
|
|
138
|
+
/**
|
|
139
|
+
* The shell a command line in this call runs in: the caller's
|
|
140
|
+
* (`ToolCallContext.commandDialect`), or `sh` when it did not say, which
|
|
141
|
+
* is the reading that holds whichever shell runs it.
|
|
142
|
+
*/
|
|
143
|
+
readonly commandDialect: ShellDialect;
|
|
144
|
+
}
|
|
145
|
+
/** The code behind an `AuthorizationRule` of type `predicate`. */
|
|
146
|
+
export type AuthorizationPredicate = (call: AuthorizationPredicateCall) => GateDecision | null;
|
|
89
147
|
export declare const AuthorizationRuleSchema: z.ZodDiscriminatedUnion<"type", [z.ZodObject<{
|
|
90
148
|
type: z.ZodLiteral<"allow_read_only">;
|
|
91
149
|
excludeCategories: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
@@ -148,18 +206,18 @@ export declare const AuthorizationRuleSchema: z.ZodDiscriminatedUnion<"type", [z
|
|
|
148
206
|
toolNames: z.ZodArray<z.ZodString, "many">;
|
|
149
207
|
argument: z.ZodString;
|
|
150
208
|
pattern: z.ZodString;
|
|
151
|
-
decision: z.ZodEnum<["allow", "deny"]>;
|
|
209
|
+
decision: z.ZodEnum<["allow", "deny", "review"]>;
|
|
152
210
|
}, "strip", z.ZodTypeAny, {
|
|
153
211
|
type: "argument_pattern";
|
|
154
212
|
pattern: string;
|
|
155
213
|
toolNames: string[];
|
|
156
|
-
decision: "allow" | "deny";
|
|
214
|
+
decision: "allow" | "deny" | "review";
|
|
157
215
|
argument: string;
|
|
158
216
|
}, {
|
|
159
217
|
type: "argument_pattern";
|
|
160
218
|
pattern: string;
|
|
161
219
|
toolNames: string[];
|
|
162
|
-
decision: "allow" | "deny";
|
|
220
|
+
decision: "allow" | "deny" | "review";
|
|
163
221
|
argument: string;
|
|
164
222
|
}>, z.ZodObject<{
|
|
165
223
|
type: z.ZodLiteral<"allow_by_tier">;
|
|
@@ -170,6 +228,21 @@ export declare const AuthorizationRuleSchema: z.ZodDiscriminatedUnion<"type", [z
|
|
|
170
228
|
}, {
|
|
171
229
|
type: "allow_by_tier";
|
|
172
230
|
tiers: string[];
|
|
231
|
+
}>, z.ZodObject<{
|
|
232
|
+
type: z.ZodLiteral<"predicate">;
|
|
233
|
+
description: z.ZodString;
|
|
234
|
+
decide: z.ZodType<AuthorizationPredicate, z.ZodTypeDef, AuthorizationPredicate>;
|
|
235
|
+
describe: z.ZodOptional<z.ZodType<(call: AuthorizationPredicateCall) => string | null, z.ZodTypeDef, (call: AuthorizationPredicateCall) => string | null>>;
|
|
236
|
+
}, "strip", z.ZodTypeAny, {
|
|
237
|
+
type: "predicate";
|
|
238
|
+
description: string;
|
|
239
|
+
decide: AuthorizationPredicate;
|
|
240
|
+
describe?: ((call: AuthorizationPredicateCall) => string | null) | undefined;
|
|
241
|
+
}, {
|
|
242
|
+
type: "predicate";
|
|
243
|
+
description: string;
|
|
244
|
+
decide: AuthorizationPredicate;
|
|
245
|
+
describe?: ((call: AuthorizationPredicateCall) => string | null) | undefined;
|
|
173
246
|
}>]>;
|
|
174
247
|
export declare const AuthorizationGateConfigSchema: z.ZodObject<{
|
|
175
248
|
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
@@ -235,18 +308,18 @@ export declare const AuthorizationGateConfigSchema: z.ZodObject<{
|
|
|
235
308
|
toolNames: z.ZodArray<z.ZodString, "many">;
|
|
236
309
|
argument: z.ZodString;
|
|
237
310
|
pattern: z.ZodString;
|
|
238
|
-
decision: z.ZodEnum<["allow", "deny"]>;
|
|
311
|
+
decision: z.ZodEnum<["allow", "deny", "review"]>;
|
|
239
312
|
}, "strip", z.ZodTypeAny, {
|
|
240
313
|
type: "argument_pattern";
|
|
241
314
|
pattern: string;
|
|
242
315
|
toolNames: string[];
|
|
243
|
-
decision: "allow" | "deny";
|
|
316
|
+
decision: "allow" | "deny" | "review";
|
|
244
317
|
argument: string;
|
|
245
318
|
}, {
|
|
246
319
|
type: "argument_pattern";
|
|
247
320
|
pattern: string;
|
|
248
321
|
toolNames: string[];
|
|
249
|
-
decision: "allow" | "deny";
|
|
322
|
+
decision: "allow" | "deny" | "review";
|
|
250
323
|
argument: string;
|
|
251
324
|
}>, z.ZodObject<{
|
|
252
325
|
type: z.ZodLiteral<"allow_by_tier">;
|
|
@@ -257,6 +330,21 @@ export declare const AuthorizationGateConfigSchema: z.ZodObject<{
|
|
|
257
330
|
}, {
|
|
258
331
|
type: "allow_by_tier";
|
|
259
332
|
tiers: string[];
|
|
333
|
+
}>, z.ZodObject<{
|
|
334
|
+
type: z.ZodLiteral<"predicate">;
|
|
335
|
+
description: z.ZodString;
|
|
336
|
+
decide: z.ZodType<AuthorizationPredicate, z.ZodTypeDef, AuthorizationPredicate>;
|
|
337
|
+
describe: z.ZodOptional<z.ZodType<(call: AuthorizationPredicateCall) => string | null, z.ZodTypeDef, (call: AuthorizationPredicateCall) => string | null>>;
|
|
338
|
+
}, "strip", z.ZodTypeAny, {
|
|
339
|
+
type: "predicate";
|
|
340
|
+
description: string;
|
|
341
|
+
decide: AuthorizationPredicate;
|
|
342
|
+
describe?: ((call: AuthorizationPredicateCall) => string | null) | undefined;
|
|
343
|
+
}, {
|
|
344
|
+
type: "predicate";
|
|
345
|
+
description: string;
|
|
346
|
+
decide: AuthorizationPredicate;
|
|
347
|
+
describe?: ((call: AuthorizationPredicateCall) => string | null) | undefined;
|
|
260
348
|
}>]>, "many">>;
|
|
261
349
|
allowReadOnlyTools: z.ZodDefault<z.ZodBoolean>;
|
|
262
350
|
/**
|
|
@@ -295,11 +383,16 @@ export declare const AuthorizationGateConfigSchema: z.ZodObject<{
|
|
|
295
383
|
type: "argument_pattern";
|
|
296
384
|
pattern: string;
|
|
297
385
|
toolNames: string[];
|
|
298
|
-
decision: "allow" | "deny";
|
|
386
|
+
decision: "allow" | "deny" | "review";
|
|
299
387
|
argument: string;
|
|
300
388
|
} | {
|
|
301
389
|
type: "allow_by_tier";
|
|
302
390
|
tiers: string[];
|
|
391
|
+
} | {
|
|
392
|
+
type: "predicate";
|
|
393
|
+
description: string;
|
|
394
|
+
decide: AuthorizationPredicate;
|
|
395
|
+
describe?: ((call: AuthorizationPredicateCall) => string | null) | undefined;
|
|
303
396
|
})[];
|
|
304
397
|
allowReadOnlyTools: boolean;
|
|
305
398
|
denyDangerousPatterns: boolean;
|
|
@@ -330,11 +423,16 @@ export declare const AuthorizationGateConfigSchema: z.ZodObject<{
|
|
|
330
423
|
type: "argument_pattern";
|
|
331
424
|
pattern: string;
|
|
332
425
|
toolNames: string[];
|
|
333
|
-
decision: "allow" | "deny";
|
|
426
|
+
decision: "allow" | "deny" | "review";
|
|
334
427
|
argument: string;
|
|
335
428
|
} | {
|
|
336
429
|
type: "allow_by_tier";
|
|
337
430
|
tiers: string[];
|
|
431
|
+
} | {
|
|
432
|
+
type: "predicate";
|
|
433
|
+
description: string;
|
|
434
|
+
decide: AuthorizationPredicate;
|
|
435
|
+
describe?: ((call: AuthorizationPredicateCall) => string | null) | undefined;
|
|
338
436
|
})[] | undefined;
|
|
339
437
|
allowReadOnlyTools?: boolean | undefined;
|
|
340
438
|
allowReadOnlyExcludeCategories?: string[] | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/types/authorization/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/types/authorization/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -36,12 +36,26 @@ const ArgumentPatternSchema = z.object({
|
|
|
36
36
|
// fail-open shape this rule type exists to remove.
|
|
37
37
|
argument: z.string().min(1),
|
|
38
38
|
pattern: z.string().max(MAX_CUSTOM_PATTERN_LENGTH),
|
|
39
|
-
decision: z.enum(['allow', 'deny']),
|
|
39
|
+
decision: z.enum(['allow', 'deny', 'review']),
|
|
40
40
|
});
|
|
41
41
|
const AllowByTierSchema = z.object({
|
|
42
42
|
type: z.literal('allow_by_tier'),
|
|
43
43
|
tiers: z.array(z.string()),
|
|
44
44
|
});
|
|
45
|
+
const PredicateSchema = z.object({
|
|
46
|
+
type: z.literal('predicate'),
|
|
47
|
+
// A rule that says nothing about itself produces a refusal nobody can
|
|
48
|
+
// reason about.
|
|
49
|
+
description: z.string().min(1),
|
|
50
|
+
decide: z.custom((value) => typeof value === 'function', {
|
|
51
|
+
message: 'decide must be a function',
|
|
52
|
+
}),
|
|
53
|
+
// Named here so the gate's own parse keeps it: zod strips what a schema
|
|
54
|
+
// does not name.
|
|
55
|
+
describe: z
|
|
56
|
+
.custom((value) => typeof value === 'function', { message: 'describe must be a function' })
|
|
57
|
+
.optional(),
|
|
58
|
+
});
|
|
45
59
|
export const AuthorizationRuleSchema = z.discriminatedUnion('type', [
|
|
46
60
|
AllowReadOnlySchema,
|
|
47
61
|
DenyDangerousPatternsSchema,
|
|
@@ -51,6 +65,7 @@ export const AuthorizationRuleSchema = z.discriminatedUnion('type', [
|
|
|
51
65
|
CustomPatternSchema,
|
|
52
66
|
ArgumentPatternSchema,
|
|
53
67
|
AllowByTierSchema,
|
|
68
|
+
PredicateSchema,
|
|
54
69
|
]);
|
|
55
70
|
export const AuthorizationGateConfigSchema = z.object({
|
|
56
71
|
enabled: z.boolean().default(false),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/types/authorization/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,yBAAyB,EAAE,MAAM,wCAAwC,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/types/authorization/index.ts"],"names":[],"mappings":"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"}
|