@agentdeck/shared 1.2.0 → 1.2.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.
- package/dist/apme-graph.d.ts +6 -2
- package/dist/apme-graph.d.ts.map +1 -1
- package/dist/apme-graph.js +3 -1
- package/dist/apme-graph.js.map +1 -1
- package/dist/claude-permission-rules.d.ts +181 -0
- package/dist/claude-permission-rules.d.ts.map +1 -0
- package/dist/claude-permission-rules.js +495 -0
- package/dist/claude-permission-rules.js.map +1 -0
- package/dist/eval-schema.d.ts +16 -2
- package/dist/eval-schema.d.ts.map +1 -1
- package/dist/eval-schema.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/protocol.d.ts +30 -0
- package/dist/protocol.d.ts.map +1 -1
- package/dist/protocol.js.map +1 -1
- package/dist/sample.d.ts +48 -2
- package/dist/sample.d.ts.map +1 -1
- package/dist/session-utils.d.ts.map +1 -1
- package/dist/session-utils.js +11 -2
- package/dist/session-utils.js.map +1 -1
- package/dist/subagent-activity.d.ts.map +1 -1
- package/dist/subagent-activity.js +16 -1
- package/dist/subagent-activity.js.map +1 -1
- package/package.json +2 -2
package/dist/apme-graph.d.ts
CHANGED
|
@@ -18,7 +18,8 @@
|
|
|
18
18
|
* session held 127 runs). Now `runs.parent_run_id`.
|
|
19
19
|
*
|
|
20
20
|
* What is still denormalized, and is therefore DERIVED here rather than read:
|
|
21
|
-
* session, project, model, agent, tool and file are string
|
|
21
|
+
* session, project, model, agent, tool, subagent and file are string/payload
|
|
22
|
+
* identities, not rows.
|
|
22
23
|
* They are exactly the interesting hubs — they connect work units that share no
|
|
23
24
|
* ancestor — so this projection materializes them as nodes. That is a deliberate
|
|
24
25
|
* choice: they are cheap to derive, they change meaning as the schema evolves,
|
|
@@ -33,7 +34,7 @@
|
|
|
33
34
|
* can be reshaped without a migration.
|
|
34
35
|
*/
|
|
35
36
|
/** Node kinds. Containment nodes mirror rows; entity nodes are derived hubs. */
|
|
36
|
-
export type ApmeGraphNodeKind = 'run' | 'task' | 'turn' | 'session' | 'project' | 'model' | 'agent' | 'tool' | 'file';
|
|
37
|
+
export type ApmeGraphNodeKind = 'run' | 'task' | 'turn' | 'session' | 'project' | 'model' | 'agent' | 'tool' | 'subagent' | 'file';
|
|
37
38
|
export type ApmeGraphEdgeKind =
|
|
38
39
|
/** Containment: run→task, task→turn. */
|
|
39
40
|
'contains'
|
|
@@ -43,6 +44,8 @@ export type ApmeGraphEdgeKind =
|
|
|
43
44
|
| 'produced'
|
|
44
45
|
/** turn→tool, task→tool — the turn invoked this tool. */
|
|
45
46
|
| 'used'
|
|
47
|
+
/** task/turn→subagent — the parent delegated part of this work. */
|
|
48
|
+
| 'delegated'
|
|
46
49
|
/** turn→file, task→file — the turn read or wrote this path. */
|
|
47
50
|
| 'touched';
|
|
48
51
|
export interface ApmeGraphNode {
|
|
@@ -97,6 +100,7 @@ export declare const apmeGraphNodeId: {
|
|
|
97
100
|
readonly model: (id: string) => string;
|
|
98
101
|
readonly agent: (t: string) => string;
|
|
99
102
|
readonly tool: (name: string) => string;
|
|
103
|
+
readonly subagent: (id: string) => string;
|
|
100
104
|
readonly file: (path: string) => string;
|
|
101
105
|
};
|
|
102
106
|
//# sourceMappingURL=apme-graph.d.ts.map
|
package/dist/apme-graph.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apme-graph.d.ts","sourceRoot":"","sources":["../src/apme-graph.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"apme-graph.d.ts","sourceRoot":"","sources":["../src/apme-graph.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAEH,gFAAgF;AAChF,MAAM,MAAM,iBAAiB,GAEzB,KAAK,GACL,MAAM,GACN,MAAM,GAEN,SAAS,GACT,SAAS,GACT,OAAO,GACP,OAAO,GACP,MAAM,GACN,UAAU,GACV,MAAM,CAAC;AAEX,MAAM,MAAM,iBAAiB;AAC3B,wCAAwC;AACtC,UAAU;AACZ,iEAAiE;GAC/D,WAAW;AACb,sDAAsD;GACpD,UAAU;AACZ,yDAAyD;GACvD,MAAM;AACR,mEAAmE;GACjE,WAAW;AACb,+DAA+D;GAC7D,SAAS,CAAC;AAEd,MAAM,WAAW,aAAa;IAC5B,6EAA6E;IAC7E,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,iBAAiB,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,wEAAwE;IACxE,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,uDAAuD;IACvD,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,+EAA+E;IAC/E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,qEAAqE;IACrE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC,CAAC;CAC/C;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,iBAAiB,CAAC;IACxB,0EAA0E;IAC1E,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB;2DACuD;IACvD,KAAK,EAAE;QACL,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,MAAM,CAAC;QAClB,0EAA0E;QAC1E,cAAc,EAAE,MAAM,CAAC;QACvB,qEAAqE;QACrE,YAAY,EAAE;YAAE,UAAU,EAAE,MAAM,CAAC;YAAC,QAAQ,EAAE,MAAM,CAAA;SAAE,CAAC;KACxD,CAAC;CACH;AAED,MAAM,WAAW,iBAAkB,SAAQ,cAAc;IACvD,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,yEAAyE;AACzE,eAAO,MAAM,eAAe;uBAChB,MAAM;wBACL,MAAM;wBACN,MAAM;2BACH,MAAM;6BACJ,MAAM;yBACV,MAAM;wBACP,MAAM;0BACJ,MAAM;4BACJ,MAAM;0BACR,MAAM;CACX,CAAC"}
|
package/dist/apme-graph.js
CHANGED
|
@@ -18,7 +18,8 @@
|
|
|
18
18
|
* session held 127 runs). Now `runs.parent_run_id`.
|
|
19
19
|
*
|
|
20
20
|
* What is still denormalized, and is therefore DERIVED here rather than read:
|
|
21
|
-
* session, project, model, agent, tool and file are string
|
|
21
|
+
* session, project, model, agent, tool, subagent and file are string/payload
|
|
22
|
+
* identities, not rows.
|
|
22
23
|
* They are exactly the interesting hubs — they connect work units that share no
|
|
23
24
|
* ancestor — so this projection materializes them as nodes. That is a deliberate
|
|
24
25
|
* choice: they are cheap to derive, they change meaning as the schema evolves,
|
|
@@ -42,6 +43,7 @@ export const apmeGraphNodeId = {
|
|
|
42
43
|
model: (id) => `model:${id}`,
|
|
43
44
|
agent: (t) => `agent:${t}`,
|
|
44
45
|
tool: (name) => `tool:${name}`,
|
|
46
|
+
subagent: (id) => `subagent:${id}`,
|
|
45
47
|
file: (path) => `file:${path}`,
|
|
46
48
|
};
|
|
47
49
|
//# sourceMappingURL=apme-graph.js.map
|
package/dist/apme-graph.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apme-graph.js","sourceRoot":"","sources":["../src/apme-graph.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"apme-graph.js","sourceRoot":"","sources":["../src/apme-graph.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AA0EH,yEAAyE;AACzE,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,GAAG,EAAE,CAAC,EAAU,EAAE,EAAE,CAAC,OAAO,EAAE,EAAE;IAChC,IAAI,EAAE,CAAC,EAAU,EAAE,EAAE,CAAC,QAAQ,EAAE,EAAE;IAClC,IAAI,EAAE,CAAC,EAAU,EAAE,EAAE,CAAC,QAAQ,EAAE,EAAE;IAClC,OAAO,EAAE,CAAC,EAAU,EAAE,EAAE,CAAC,WAAW,EAAE,EAAE;IACxC,OAAO,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,WAAW,IAAI,EAAE;IAC5C,KAAK,EAAE,CAAC,EAAU,EAAE,EAAE,CAAC,SAAS,EAAE,EAAE;IACpC,KAAK,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE;IAClC,IAAI,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,QAAQ,IAAI,EAAE;IACtC,QAAQ,EAAE,CAAC,EAAU,EAAE,EAAE,CAAC,YAAY,EAAE,EAAE;IAC1C,IAAI,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,QAAQ,IAAI,EAAE;CAC9B,CAAC"}
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Claude Code permission prediction — the single source of truth for "would
|
|
3
|
+
* Claude Code actually prompt the user for this tool call?".
|
|
4
|
+
*
|
|
5
|
+
* Both daemons hold an observed session's PreToolUse for a device decision
|
|
6
|
+
* ONLY when this module predicts a genuine prompt. A false hold costs the user
|
|
7
|
+
* twice: the deck shows PERM for a decision Claude never asked for, and the
|
|
8
|
+
* hook response is held for the whole timeout (25 s) before Claude's own
|
|
9
|
+
* allow rule lets the call through. Measured 2026-09-05: two `acceptEdits`
|
|
10
|
+
* worker sessions whose every `curl`/`mkdir` was allowlisted by
|
|
11
|
+
* `Bash(curl *)` / `Bash(mkdir *)` were held on every batch, because the
|
|
12
|
+
* predictor understood only the legacy `Bash(curl:*)` spelling — 67 of the
|
|
13
|
+
* 73 Bash rules in the user's settings were in the space form and matched
|
|
14
|
+
* nothing. The Swift daemon carried the same defect as a hand mirror, which
|
|
15
|
+
* is why the matcher now lives here and is GENERATED into Swift
|
|
16
|
+
* (`pnpm generate-claude-permission-rules`), with behavior pinned by
|
|
17
|
+
* `shared/claude-permission-vectors.json` that both suites replay.
|
|
18
|
+
*
|
|
19
|
+
* Rule semantics follow the Claude Code permissions reference
|
|
20
|
+
* (https://code.claude.com/docs/en/permissions):
|
|
21
|
+
* - `Bash`, `Bash(*)` → every Bash call
|
|
22
|
+
* - `Bash(npm run build)` → the exact command
|
|
23
|
+
* - `Bash(npm run *)` → `*` matches any text INCLUDING spaces; a rule
|
|
24
|
+
* whose only wildcard is a trailing ` *` also
|
|
25
|
+
* matches the bare command (`ls *` ⇒ `ls`)
|
|
26
|
+
* - `Bash(ls:*)` → legacy end-only spelling; the docs now define
|
|
27
|
+
* it as `Bash(ls *)`, older builds read it as a
|
|
28
|
+
* raw prefix (`npm run test:*` ⇒ `npm run
|
|
29
|
+
* test:watch`), so it matches under EITHER —
|
|
30
|
+
* over-matching only ever costs a missed hold
|
|
31
|
+
* - `Bash(git * main)` → wildcards anywhere
|
|
32
|
+
* - compound commands split on `&&` `||` `;` `|` `|&` `&` and newlines, and
|
|
33
|
+
* EVERY subcommand must be covered for Claude to skip the prompt
|
|
34
|
+
* - a built-in read-only set (`ls`, `cat`, `git status`, …) never prompts in
|
|
35
|
+
* any mode, and `acceptEdits` additionally auto-approves the filesystem
|
|
36
|
+
* commands `mkdir touch rm rmdir mv cp sed`
|
|
37
|
+
* - `timeout`/`nice`/`nohup`/… wrappers and leading `VAR=value` assignments
|
|
38
|
+
* are stripped before matching
|
|
39
|
+
*
|
|
40
|
+
* Every uncertainty resolves toward "don't hold": a missed hold means the user
|
|
41
|
+
* answers in the terminal exactly as before, while a false hold nags them with
|
|
42
|
+
* a prompt Claude never showed and stalls the agent for the hold timeout.
|
|
43
|
+
*/
|
|
44
|
+
/** Values Claude Code writes into a hook payload's `permission_mode`. */
|
|
45
|
+
export declare const CLAUDE_PERMISSION_MODES: readonly ["default", "acceptEdits", "plan", "auto", "dontAsk", "bypassPermissions"];
|
|
46
|
+
export type ClaudePermissionMode = typeof CLAUDE_PERMISSION_MODES[number];
|
|
47
|
+
/** Tools that never trigger a permission prompt — holding them can only ever
|
|
48
|
+
* be a false positive. Kept intentionally tight (unknown tools are excluded
|
|
49
|
+
* by the prompt-prone check, not this list). */
|
|
50
|
+
export declare const NEVER_PROMPT_TOOLS: ReadonlySet<string>;
|
|
51
|
+
/** Tools that DO prompt in default/acceptEdits mode unless allowlisted.
|
|
52
|
+
* Anything outside this set (including every mcp__* tool, whose per-server
|
|
53
|
+
* trust state we cannot see) is never held. */
|
|
54
|
+
export declare const PROMPT_PRONE_TOOLS: ReadonlySet<string>;
|
|
55
|
+
/** Edit-family tools that Claude auto-approves in `acceptEdits` mode. */
|
|
56
|
+
export declare const EDIT_FAMILY_TOOLS: ReadonlySet<string>;
|
|
57
|
+
/**
|
|
58
|
+
* Should the daemon consider HOLDING a PreToolUse at all, given the session's
|
|
59
|
+
* `permission_mode`? Claude's PreToolUse hook fires for EVERY tool call
|
|
60
|
+
* regardless of mode, so gate only in modes where Claude could still surface
|
|
61
|
+
* its own prompt.
|
|
62
|
+
*
|
|
63
|
+
* - `bypassPermissions` / `dontAsk` → never prompts → no
|
|
64
|
+
* - `auto` → the classifier decides outside the settings files; the rule
|
|
65
|
+
* predictor cannot see it, so every unlisted call would
|
|
66
|
+
* false-hold. The rare genuine prompt still arrives as a
|
|
67
|
+
* Notification `permission_prompt` → no
|
|
68
|
+
* - `plan` → tools don't execute (classifier or read-only only) → no
|
|
69
|
+
* - `acceptEdits` → edits + filesystem commands auto-approved, other
|
|
70
|
+
* Bash still prompts → non-edit tools
|
|
71
|
+
* - `default` / unknown → Claude may prompt → yes
|
|
72
|
+
*
|
|
73
|
+
* Unknown/absent mode is treated as `default` to preserve behavior on older
|
|
74
|
+
* Claude versions that don't send the field.
|
|
75
|
+
*/
|
|
76
|
+
export declare function shouldGatePreToolUse(permissionMode: string | undefined, tool: string): boolean;
|
|
77
|
+
/** Bash programs Claude Code runs without a prompt in every mode (the
|
|
78
|
+
* documented built-in read-only set plus its obviously read-only kin). Being
|
|
79
|
+
* generous here is the SAFE direction: an entry that Claude actually prompts
|
|
80
|
+
* for costs a missed hold, never a false one. */
|
|
81
|
+
export declare const READ_ONLY_BASH_COMMANDS: readonly string[];
|
|
82
|
+
/** `git <subcommand>` forms that are read-only regardless of arguments. */
|
|
83
|
+
export declare const READ_ONLY_GIT_SUBCOMMANDS: readonly string[];
|
|
84
|
+
/** `git <subcommand>` forms that are read-only only when they carry no
|
|
85
|
+
* arguments or only these flags (`git branch` lists; `git branch x` writes). */
|
|
86
|
+
export declare const READ_ONLY_GIT_LISTING_SUBCOMMANDS: Readonly<Record<string, readonly string[]>>;
|
|
87
|
+
/** Filesystem commands `acceptEdits` mode auto-approves (in-scope paths). */
|
|
88
|
+
export declare const ACCEPT_EDITS_FS_COMMANDS: readonly string[];
|
|
89
|
+
/** Strip leading `VAR=value` assignments and process wrappers so `LANG=C
|
|
90
|
+
* timeout 30 npm test` is matched as `npm test`. Returns the stripped
|
|
91
|
+
* command text (tokens re-joined by single spaces). */
|
|
92
|
+
export declare function stripCommandWrappers(segment: string): string;
|
|
93
|
+
/**
|
|
94
|
+
* Split a compound command on shell operators, quote-aware. Returns `null`
|
|
95
|
+
* when the split is not trustworthy — a heredoc, command substitution, an
|
|
96
|
+
* unbalanced quote, or an operator with nothing after it — in which case
|
|
97
|
+
* Claude Code itself does not split either.
|
|
98
|
+
*/
|
|
99
|
+
export declare function splitCompoundCommand(command: string): string[] | null;
|
|
100
|
+
/**
|
|
101
|
+
* Does one Bash rule spec match one command text? Implements the documented
|
|
102
|
+
* wildcard rules: `*` matches any text including spaces; a trailing ` *` that
|
|
103
|
+
* is the rule's only wildcard also matches the bare command; the legacy `:*`
|
|
104
|
+
* suffix is an alias for ` *`; no wildcard means exact match.
|
|
105
|
+
*/
|
|
106
|
+
export declare function bashRuleMatches(spec: string, command: string): boolean;
|
|
107
|
+
/** `*`-only glob over code points. Iterative two-pointer form so a rule with
|
|
108
|
+
* several wildcards cannot go exponential on a long command. */
|
|
109
|
+
export declare function globMatch(pattern: string, text: string): boolean;
|
|
110
|
+
export interface ParsedPermissionRule {
|
|
111
|
+
tool: string;
|
|
112
|
+
spec?: string;
|
|
113
|
+
}
|
|
114
|
+
/** `Tool` or `Tool(spec)` → parts; anything else → null. */
|
|
115
|
+
export declare function parsePermissionRule(rule: string): ParsedPermissionRule | null;
|
|
116
|
+
/** Rules merged from every settings file Claude reads for a cwd. `null`
|
|
117
|
+
* ("unknown") when any existing file failed to parse — the daemon can no
|
|
118
|
+
* longer trust its picture of the allowlist and must hold nothing. */
|
|
119
|
+
export interface MergedPermissionRules {
|
|
120
|
+
allow: string[];
|
|
121
|
+
deny: string[];
|
|
122
|
+
ask: string[];
|
|
123
|
+
}
|
|
124
|
+
/** Loose match (allow/deny direction): a tool-name match with ANY spec counts
|
|
125
|
+
* for tools whose spec grammar we do not replicate (paths, domains); Bash
|
|
126
|
+
* specs are compared precisely against the (wrapper-stripped) segment. */
|
|
127
|
+
export declare function ruleMatchesLoose(rule: ParsedPermissionRule, tool: string, segment: string | undefined): boolean;
|
|
128
|
+
/** Strict match (ask direction): only patterns we can evaluate exactly, since
|
|
129
|
+
* an ask match CAUSES a hold. */
|
|
130
|
+
export declare function ruleMatchesStrict(rule: ParsedPermissionRule, tool: string, segment: string | undefined): boolean;
|
|
131
|
+
/**
|
|
132
|
+
* Is this one (already split) segment in Claude Code's built-in read-only set,
|
|
133
|
+
* so it runs without a prompt in every mode?
|
|
134
|
+
*/
|
|
135
|
+
export declare function isBuiltinReadOnlyCommand(segment: string): boolean;
|
|
136
|
+
/** Is this segment one of the filesystem commands `acceptEdits` auto-approves? */
|
|
137
|
+
export declare function isAcceptEditsFsCommand(segment: string): boolean;
|
|
138
|
+
export type PermissionRuleVerdict = 'allow' | 'deny' | 'ask' | 'none' | 'unknown';
|
|
139
|
+
/**
|
|
140
|
+
* Predict Claude's permission-RULE verdict for one tool call (rules only; the
|
|
141
|
+
* mode and built-in sets are applied by `predictPreToolUseHold`).
|
|
142
|
+
* 'deny' → a deny rule may match: Claude auto-denies — don't hold
|
|
143
|
+
* 'allow' → allow rules cover every subcommand — don't hold
|
|
144
|
+
* 'ask' → an ask rule definitely matches — hold-eligible
|
|
145
|
+
* 'none' → no rule decides — default behavior for the tool applies
|
|
146
|
+
* 'unknown' → settings unreadable — don't hold
|
|
147
|
+
*/
|
|
148
|
+
export declare function evaluatePermissionRules(tool: string, command: string | undefined, rules: MergedPermissionRules | null, opts?: {
|
|
149
|
+
permissionMode?: string;
|
|
150
|
+
}): PermissionRuleVerdict;
|
|
151
|
+
export interface PreToolUseHoldInput {
|
|
152
|
+
tool: string;
|
|
153
|
+
toolInput?: Record<string, unknown> | undefined;
|
|
154
|
+
permissionMode?: string | undefined;
|
|
155
|
+
/** Merged rules, or `null` when unreadable. */
|
|
156
|
+
rules: MergedPermissionRules | null;
|
|
157
|
+
}
|
|
158
|
+
export interface PreToolUseHoldPrediction {
|
|
159
|
+
hold: boolean;
|
|
160
|
+
reason: string;
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* The stateless half of the device-approval gate: given the tool, its input,
|
|
164
|
+
* the session's mode and the merged rules, would Claude Code genuinely prompt?
|
|
165
|
+
* The daemons layer session state on top (connected clients, one held gate
|
|
166
|
+
* per session, learned auto-approvals).
|
|
167
|
+
*/
|
|
168
|
+
export declare function predictPreToolUseHold(input: PreToolUseHoldInput): PreToolUseHoldPrediction;
|
|
169
|
+
/** Bash signature = first two command tokens (the granularity of Claude's own
|
|
170
|
+
* "always allow `git push`"-style session approvals); other tools = tool name. */
|
|
171
|
+
export declare function gateSignature(tool: string, toolInput: Record<string, unknown> | undefined): string;
|
|
172
|
+
/**
|
|
173
|
+
* How long after an undecided gate release a PostToolUse still teaches the
|
|
174
|
+
* daemon "Claude auto-approved this signature". A `permission_prompt`
|
|
175
|
+
* Notification in between clears the pending release, so the window bounds
|
|
176
|
+
* only how long a slow TOOL may take — it was 8 s, and a `curl` fetching a
|
|
177
|
+
* web page routinely exceeds that, so the same `curl -sL` signature was held
|
|
178
|
+
* on every batch of one session (measured 2026-09-05).
|
|
179
|
+
*/
|
|
180
|
+
export declare const GATE_LEARN_WINDOW_MS: number;
|
|
181
|
+
//# sourceMappingURL=claude-permission-rules.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-permission-rules.d.ts","sourceRoot":"","sources":["../src/claude-permission-rules.ts"],"names":[],"mappings":"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"}
|