dsh-permission-rules 0.4.2 → 0.5.2

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.
Files changed (76) hide show
  1. package/CHANGELOG.md +34 -0
  2. package/README.es.md +160 -117
  3. package/README.hi.md +162 -119
  4. package/README.md +133 -90
  5. package/README.pt.md +161 -118
  6. package/README.zh.md +162 -119
  7. package/docs/rule-test-vectors/README.md +28 -0
  8. package/docs/rule-test-vectors/corpus.json +109 -0
  9. package/lib/client.js +4693 -0
  10. package/lib/client.js.map +1 -0
  11. package/lib/index.js +1530 -179
  12. package/lib/typert.host.js +4305 -0
  13. package/lib/types/client/index.d.ts +28 -0
  14. package/lib/types/client/index.d.ts.map +1 -0
  15. package/lib/types/client/locales.d.ts +9 -0
  16. package/lib/types/client/locales.d.ts.map +1 -0
  17. package/lib/types/client/remote.d.ts +181 -0
  18. package/lib/types/client/remote.d.ts.map +1 -0
  19. package/lib/types/client/section.d.ts +35 -0
  20. package/lib/types/client/section.d.ts.map +1 -0
  21. package/lib/types/config.d.ts +54 -2
  22. package/lib/types/config.d.ts.map +1 -1
  23. package/lib/types/events.d.ts +45 -0
  24. package/lib/types/events.d.ts.map +1 -1
  25. package/lib/types/index.d.ts +8 -6
  26. package/lib/types/index.d.ts.map +1 -1
  27. package/lib/types/network.d.ts +90 -0
  28. package/lib/types/network.d.ts.map +1 -0
  29. package/lib/types/prose.d.ts +15 -0
  30. package/lib/types/prose.d.ts.map +1 -1
  31. package/lib/types/proxy.d.ts +128 -0
  32. package/lib/types/proxy.d.ts.map +1 -0
  33. package/lib/types/remote-service.d.ts +45 -0
  34. package/lib/types/remote-service.d.ts.map +1 -0
  35. package/lib/types/rules.d.ts +131 -0
  36. package/lib/types/rules.d.ts.map +1 -1
  37. package/lib/types/runtime.d.ts +153 -21
  38. package/lib/types/runtime.d.ts.map +1 -1
  39. package/lib/types/settings.d.ts +28 -0
  40. package/lib/types/settings.d.ts.map +1 -0
  41. package/lib/types/typert.host.d.ts +166 -0
  42. package/lib/types/typert.host.d.ts.map +1 -0
  43. package/lib/types/wire.d.ts +421 -0
  44. package/lib/types/wire.d.ts.map +1 -0
  45. package/package.json +182 -144
  46. package/scripts/repair-session-logs.mjs +7 -2
  47. package/src/client/index.ts +111 -0
  48. package/src/client/locales.ts +94 -0
  49. package/src/client/remote.ts +41 -0
  50. package/src/client/section.ts +201 -0
  51. package/src/config.ts +111 -0
  52. package/src/events.ts +46 -0
  53. package/src/index.ts +2 -0
  54. package/src/network.ts +177 -0
  55. package/src/prose.ts +85 -10
  56. package/src/proxy.ts +327 -0
  57. package/src/remote-service.ts +109 -0
  58. package/src/rules.ts +424 -5
  59. package/src/runtime.ts +464 -53
  60. package/src/settings.ts +74 -0
  61. package/src/typert.host.ts +25 -0
  62. package/src/wire.ts +239 -0
  63. package/lib/types/config.js +0 -99
  64. package/lib/types/config.js.map +0 -1
  65. package/lib/types/events.js +0 -44
  66. package/lib/types/events.js.map +0 -1
  67. package/lib/types/glob.js +0 -307
  68. package/lib/types/glob.js.map +0 -1
  69. package/lib/types/index.js +0 -27
  70. package/lib/types/index.js.map +0 -1
  71. package/lib/types/prose.js +0 -173
  72. package/lib/types/prose.js.map +0 -1
  73. package/lib/types/rules.js +0 -610
  74. package/lib/types/rules.js.map +0 -1
  75. package/lib/types/runtime.js +0 -818
  76. package/lib/types/runtime.js.map +0 -1
package/lib/types/glob.js DELETED
@@ -1,307 +0,0 @@
1
- /**
2
- * Strict glob→RegExp compilation and regex-safety validation for rule
3
- * patterns. A conservative, validated glob subset: `*` (within one path
4
- * segment), `**` (any depth, including zero), `?` (one character),
5
- * `[abc]` / `[!abc]` character classes, and `\x` escapes. Unbalanced
6
- * brackets, empty classes, and trailing escapes throw at compile time — a
7
- * bad glob must fail loudly at load, never silently match nothing at
8
- * runtime.
9
- *
10
- * Catastrophic-backtracking defense, tuned per pattern flavor:
11
- * - Glob output is fully machine-generated, so the backtracking degree is
12
- * exactly the number of star expansions: each `*`/`**` emits exactly one
13
- * unbounded quantifier and no group is ever emitted. {@link compileGlob}
14
- * therefore caps that count via `maxStars`.
15
- * - User regexes (patternMode `regex`) are scanned structurally: a
16
- * quantifier applied to a group containing an unbounded quantifier, and a
17
- * quantified group whose literal alternation branches overlap, are
18
- * rejected at load. Chains of independent top-level quantifiers
19
- * (`\d+\.\d+\.\d+`) stay allowed — a documented, deliberate limitation:
20
- * regex mode is the escape hatch, glob mode is the guarded default.
21
- * @module dsh-permission-rules/glob
22
- */
23
- /** Raised by {@link compileGlob} on a syntactically invalid or over-quantified pattern. */
24
- export class GlobError extends TypeError {
25
- constructor(message) {
26
- super(message);
27
- this.name = 'GlobError';
28
- }
29
- }
30
- /**
31
- * Compile one glob pattern to an anchored regular expression.
32
- * @param pattern - the glob source.
33
- * @param options - segment semantics, case handling, and the star cap.
34
- * @returns a RegExp matching the whole candidate string.
35
- * @throws {@link GlobError} on unbalanced `[`, empty classes, a trailing
36
- * escape, or more star expansions than `options.maxStars` allows.
37
- */
38
- export function compileGlob(pattern, options) {
39
- let out = '';
40
- let stars = 0;
41
- let i = 0;
42
- while (i < pattern.length) {
43
- const ch = pattern[i];
44
- if (ch === '\\') {
45
- const next = pattern[i + 1];
46
- if (next === undefined)
47
- throw new GlobError(`glob ${JSON.stringify(pattern)} ends with a dangling escape`);
48
- out += escapeRegExpChar(next);
49
- i += 2;
50
- continue;
51
- }
52
- if (ch === '*') {
53
- if (pattern[i + 1] === '*') {
54
- // `**` crosses path segments. Collapse runs of `**` and any
55
- // following separator into one zero-or-more-any-depth group, so
56
- // `a/**/b`, `a/**b`, and `a/***/b` all behave the same.
57
- out += '.*';
58
- stars += 1;
59
- i += 2;
60
- while (pattern[i] === '*')
61
- i += 1;
62
- if (pattern[i] === '/')
63
- i += 1;
64
- continue;
65
- }
66
- // A single star never crosses a path separator.
67
- out += options.segments ? '[^/]*' : '.*';
68
- stars += 1;
69
- i += 1;
70
- continue;
71
- }
72
- if (ch === '?') {
73
- out += options.segments ? '[^/]' : '.';
74
- i += 1;
75
- continue;
76
- }
77
- if (ch === '[') {
78
- const end = pattern.indexOf(']', i + 1);
79
- if (end < 0)
80
- throw new GlobError(`glob ${JSON.stringify(pattern)} has an unbalanced "["`);
81
- const body = pattern.slice(i + 1, end);
82
- if (body.length === 0)
83
- throw new GlobError(`glob ${JSON.stringify(pattern)} has an empty character class`);
84
- let content = body;
85
- let negate = false;
86
- if (content.startsWith('!')) {
87
- negate = true;
88
- content = content.slice(1);
89
- }
90
- if (content.length === 0)
91
- throw new GlobError(`glob ${JSON.stringify(pattern)} has an empty character class`);
92
- out += `[${negate ? '^' : ''}${content.replaceAll('\\', '\\\\')}]`;
93
- i = end + 1;
94
- continue;
95
- }
96
- if (ch === ']')
97
- throw new GlobError(`glob ${JSON.stringify(pattern)} has an unbalanced "]"`);
98
- out += escapeRegExpChar(ch);
99
- i += 1;
100
- }
101
- if (options.maxStars !== undefined && stars > options.maxStars) {
102
- throw new GlobError(`glob ${JSON.stringify(pattern)} expands to ${stars} unbounded star quantifiers (max ${options.maxStars}); split it into several patterns`);
103
- }
104
- try {
105
- return new RegExp(`^${out}$`, options.caseInsensitive === true ? 'iu' : 'u');
106
- }
107
- catch (error) {
108
- throw new GlobError(`glob ${JSON.stringify(pattern)} compiles to an invalid regular expression: ${String(error)}`);
109
- }
110
- }
111
- /** Escape one literal character for a RegExp source. */
112
- function escapeRegExpChar(ch) {
113
- return /[.*+?^${}()|[\]\\/]/.test(ch) ? `\\${ch}` : ch;
114
- }
115
- /**
116
- * Compile one pattern as an unanchored regex, rejecting syntax errors and
117
- * catastrophic-backtracking structures loudly.
118
- * @param pattern - the regex source.
119
- * @returns the compiled RegExp.
120
- * @throws TypeError when the pattern is invalid, nests an unbounded
121
- * quantifier, or quantifies a group with overlapping literal alternation
122
- * branches.
123
- */
124
- export function compilePatternRegex(pattern) {
125
- let compiled;
126
- try {
127
- compiled = new RegExp(pattern, 'u');
128
- }
129
- catch (error) {
130
- throw new TypeError(`pattern ${JSON.stringify(pattern)} is not a valid regular expression: ${String(error)}`, { cause: error });
131
- }
132
- assertSafeRegexStructure(pattern);
133
- return compiled;
134
- }
135
- /**
136
- * Structural ReDoS scan. Rejects (a) an unbounded quantifier (`*`, `+`,
137
- * `{m,}`) applied to a group whose body contains an unbounded quantifier,
138
- * and (b) a quantified group whose fully-literal alternation branches
139
- * overlap as prefixes. Everything else — including chains of independent
140
- * top-level quantifiers — compiles untouched.
141
- * @param pattern - the already-syntax-valid regex source.
142
- * @throws TypeError on a rejected structure.
143
- */
144
- function assertSafeRegexStructure(pattern) {
145
- const stack = [];
146
- let i = 0;
147
- const markUnbounded = () => {
148
- const top = stack[stack.length - 1];
149
- if (top !== undefined)
150
- top.unbounded = true;
151
- };
152
- const reject = (message) => {
153
- throw new TypeError(`pattern ${JSON.stringify(pattern)} is rejected: ${message} risks catastrophic backtracking; restructure the pattern or use glob mode`);
154
- };
155
- while (i < pattern.length) {
156
- const ch = pattern[i];
157
- if (ch === '\\') {
158
- i += 2;
159
- continue;
160
- }
161
- if (ch === '[') {
162
- i += 1;
163
- while (i < pattern.length && pattern[i] !== ']') {
164
- if (pattern[i] === '\\')
165
- i += 1;
166
- i += 1;
167
- }
168
- i += 1;
169
- continue;
170
- }
171
- if (ch === '(') {
172
- stack.push({ start: i, unbounded: false });
173
- i += 1;
174
- continue;
175
- }
176
- if (ch === ')') {
177
- const group = stack.pop();
178
- // An unbalanced `)` is invalid syntax; the compile above already rejected it.
179
- if (group === undefined) {
180
- i += 1;
181
- continue;
182
- }
183
- const quantifier = quantifierAt(pattern, i + 1);
184
- if (quantifier !== undefined) {
185
- if (quantifier.unbounded) {
186
- if (group.unbounded) {
187
- reject(`quantifier ${quantifier.text} applies to a group containing an unbounded quantifier`);
188
- }
189
- if (hasAmbiguousAlternation(pattern, group.start + 1, i)) {
190
- reject(`quantified group ${JSON.stringify(pattern.slice(group.start, quantifier.end + 1))} has overlapping alternation branches`);
191
- }
192
- markUnbounded();
193
- }
194
- i = quantifier.end + 1;
195
- continue;
196
- }
197
- if (group.unbounded)
198
- markUnbounded();
199
- i += 1;
200
- continue;
201
- }
202
- if (ch === '*' || ch === '+') {
203
- markUnbounded();
204
- i += 1;
205
- continue;
206
- }
207
- if (ch === '{') {
208
- const parsed = parseBraceQuantifier(pattern, i);
209
- if (parsed !== undefined) {
210
- if (parsed.unbounded)
211
- markUnbounded();
212
- i = parsed.end + 1;
213
- continue;
214
- }
215
- // Not a quantifier (a `\p{L}`-style body is reached after its escape
216
- // was skipped above): an ordinary literal.
217
- i += 1;
218
- continue;
219
- }
220
- // `?` is always bounded; literals, `.`, `|`, `^`, `$` pass through.
221
- i += 1;
222
- }
223
- }
224
- /** One parsed quantifier token, when the character at `index` starts one. */
225
- function quantifierAt(pattern, index) {
226
- const ch = pattern[index];
227
- if (ch === '*' || ch === '+')
228
- return { text: ch, end: index, unbounded: true };
229
- if (ch === '?')
230
- return { text: ch, end: index, unbounded: false };
231
- if (ch === '{')
232
- return parseBraceQuantifier(pattern, index);
233
- return undefined;
234
- }
235
- /** Parse `{m}`, `{m,}`, or `{m,n}` at `start`; other braces are not quantifiers. */
236
- function parseBraceQuantifier(pattern, start) {
237
- const close = pattern.indexOf('}', start + 1);
238
- if (close < 0)
239
- return undefined;
240
- const body = pattern.slice(start + 1, close);
241
- if (!/^\d+(,\d*)?$/.test(body))
242
- return undefined;
243
- const unbounded = body.includes(',') && body.endsWith(',');
244
- return { text: pattern.slice(start, close + 1), end: close, unbounded };
245
- }
246
- /**
247
- * Whether a group body (between the parens) contains a top-level
248
- * alternation with two fully-literal branches where one is a prefix of the
249
- * other — the `(a|aa)+` ambiguity that makes repetition exponential.
250
- * @param pattern - the full pattern.
251
- * @param start - index just after the group's `(`.
252
- * @param end - index of the group's `)`.
253
- * @returns true when such an overlap exists.
254
- */
255
- function hasAmbiguousAlternation(pattern, start, end) {
256
- const branches = [];
257
- let depth = 0;
258
- let branchStart = start;
259
- let hasPipe = false;
260
- for (let i = start; i < end; i += 1) {
261
- const ch = pattern[i];
262
- if (ch === '\\') {
263
- i += 1;
264
- continue;
265
- }
266
- if (ch === '[') {
267
- while (i < end && pattern[i] !== ']') {
268
- if (pattern[i] === '\\')
269
- i += 1;
270
- i += 1;
271
- }
272
- continue;
273
- }
274
- if (ch === '(') {
275
- depth += 1;
276
- continue;
277
- }
278
- if (ch === ')') {
279
- depth -= 1;
280
- continue;
281
- }
282
- if (ch === '|' && depth === 0) {
283
- hasPipe = true;
284
- branches.push(pattern.slice(branchStart, i));
285
- branchStart = i + 1;
286
- }
287
- }
288
- if (!hasPipe)
289
- return false;
290
- branches.push(pattern.slice(branchStart, end));
291
- for (let a = 0; a < branches.length; a += 1) {
292
- for (let b = a + 1; b < branches.length; b += 1) {
293
- if (literalPrefixOf(branches[a], branches[b]))
294
- return true;
295
- }
296
- }
297
- return false;
298
- }
299
- /** True when two fully-literal branches share their complete shorter text as a prefix. */
300
- function literalPrefixOf(x, y) {
301
- const literal = /^[^*+?()|[\]{}^$.\\]+$/;
302
- if (!literal.test(x) || !literal.test(y))
303
- return false;
304
- const min = Math.min(x.length, y.length);
305
- return x.slice(0, min) === y.slice(0, min);
306
- }
307
- //# sourceMappingURL=glob.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"glob.js","sourceRoot":"","sources":["../../src/glob.ts"],"names":[],"mappings":"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"}
@@ -1,27 +0,0 @@
1
- /**
2
- * `dsh-permission-rules` — Claude Code-style declarative permission rules
3
- * for DeepSeek Harness. A `tools/pre-execute` waterfall listener evaluates
4
- * an ordered `allow`/`deny`/`ask` rule list (tool-name globs, agent
5
- * selectors, argument glob/regex matching, workspace-path matching) per
6
- * session cwd; deny and ask decisions short-circuit the chain, while allow
7
- * and passthrough always delegate via `next()`. Under `enforce: false` the
8
- * plugin audits what it WOULD decide and lets everything through (dry-run
9
- * policy rollout). `ask` rides the official approval seam, where answerers
10
- * such as `dsh-auto-review` or a human UI decide — the plugin itself never
11
- * runs a reviewer. Every decision is audit-logged.
12
- *
13
- * Function plugin — no default export (the Loader unwraps
14
- * `exports.default ?? exports`, and a stray default would discard
15
- * `name`/`inject`/`Config`/`apply`).
16
- * @module dsh-permission-rules
17
- */
18
- import { apply } from "./runtime.js";
19
- export const name = 'permission-rules';
20
- export const inject = ['commands', 'tools'];
21
- export { apply };
22
- export { PermissionRulesRuntime, isUnmarkedHostVersion } from "./runtime.js";
23
- export * from "./config.js";
24
- export * from "./events.js";
25
- export * from "./rules.js";
26
- export * from "./glob.js";
27
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,cAAc,CAAA;AAEpC,MAAM,CAAC,MAAM,IAAI,GAAG,kBAAkB,CAAA;AACtC,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;AAE3C,OAAO,EAAE,KAAK,EAAE,CAAA;AAChB,OAAO,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAA;AAC5E,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA;AAC3B,cAAc,YAAY,CAAA;AAC1B,cAAc,WAAW,CAAA"}
@@ -1,173 +0,0 @@
1
- /**
2
- * UI-facing prose for the `/rules` session command, per language. Only the
3
- * command surface localizes: rule `reason`s are author-provided and are
4
- * never translated, and logger diagnostics stay English for greppability.
5
- * `en` and `zh` are the reference translations; `es`/`pt`/`hi` are
6
- * community-quality.
7
- * @module dsh-permission-rules/prose
8
- */
9
- /** Truncate long reasons/descriptions in one-line displays. */
10
- function short(text, limit = 120) {
11
- return text.length > limit ? `${text.slice(0, limit)}…` : text;
12
- }
13
- const EN = {
14
- rulesHeader: (count, sources, cwd) => `Permission rules: ${count} rule(s) from ${sources.join(', ')} (workspace ${cwd}).`,
15
- noRules: (cwd, fallbackNote) => `No permission rules active: no rule file found for workspace ${cwd}${fallbackNote}; the empty rule set passes everything through.`,
16
- fallbackMissing: ' (and the configured fallback path is missing)',
17
- reloaded: (count, source) => `Reloaded ${count} rule(s) from ${source}.`,
18
- reloadFailed: error => `Reload failed: ${error}. The previous rules are still active.`,
19
- lastReloadWarning: error => `Warning: the last reload failed (${error}); the rules listed above are the previous ones.`,
20
- dryRunNotice: 'Dry-run mode (enforce: false): deny/ask hits are audit-logged only — every call is passed through.',
21
- unknownArg: arg => `Unknown /rules argument "${arg}". ${EN.usage}`,
22
- usage: 'Usage: /rules [list | reload | decisions [n] | test <tool> <json-args>]',
23
- decisionsHeader: (shown, total) => `Last ${shown} of ${total} permission decision(s) for this session:`,
24
- noDecisions: 'No permission decisions recorded in this session yet.',
25
- auditDisabledNotice: 'Session-log audit is disabled on this host: its Session.append predates the ignorable marker and would make sessions unresumable elsewhere (set allowUnmarkedAudit: true to opt back in).',
26
- invalidDecisionsCount: arg => `Invalid decisions count "${arg}": give a positive integer (default 10).`,
27
- decisionLine: (seq, action, toolName, ruleIndex, reason, dryRun, outcome) => {
28
- const rule = ruleIndex === undefined ? '' : ` (rule ${ruleIndex + 1})`;
29
- const dry = dryRun ? (outcome === undefined ? ' (dry-run)' : ` (dry-run → ${outcome})`) : '';
30
- const why = reason === undefined ? '' : `: ${short(reason)}`;
31
- return `- #${seq} ${action} ${toolName}${rule}${dry}${why}`;
32
- },
33
- testHit: (tool, ruleIndex, action, reason) => `"${tool}" matches rule ${ruleIndex + 1} (${action}): ${short(reason)}`,
34
- testNoMatch: tool => `"${tool}" matches no rule — the call passes through.`,
35
- testBadJson: text => `Invalid JSON arguments "${text}": the arguments must parse as JSON.`,
36
- testUnknownFlag: flag => `Unknown /rules test flag "${flag}". ${EN.testUsage}`,
37
- testBadFlag: flag => `Invalid /rules test flag "${flag}": expected a value. ${EN.testUsage}`,
38
- testBadPlatform: value => `Unknown platform "${value}" in --platform: expected one of aix, android, darwin, freebsd, linux, openbsd, sunos, win32. ${EN.testUsage}`,
39
- testUsage: 'Usage: /rules test [--cwd <dir>] [--env KEY=VALUE]... [--agent <selector>]... [--platform <name>] <tool> <json-args>, e.g. /rules test bash {"command":"git push origin main"}',
40
- unreachableWarning: numbers => `Warning: rule${numbers.length > 1 ? 's' : ''} ${numbers.join(', ')} ${numbers.length > 1 ? 'are' : 'is'} unreachable (shadowed by an earlier catch-all rule).`,
41
- emptySource: '(no rule file — empty rule set)',
42
- };
43
- const ZH = {
44
- rulesHeader: (count, sources, cwd) => `权限规则:共 ${count} 条,来自 ${sources.join('、')}(工作区 ${cwd})。`,
45
- noRules: (cwd, fallbackNote) => `当前没有生效的权限规则:工作区 ${cwd} 未找到规则文件${fallbackNote};空规则集全部放行。`,
46
- fallbackMissing: '(且配置的回退路径不存在)',
47
- reloaded: (count, source) => `已重载 ${count} 条规则,来自 ${source}。`,
48
- reloadFailed: error => `重载失败:${error}。之前的规则仍然生效。`,
49
- lastReloadWarning: error => `警告:上次重载失败(${error});以上列出的是之前的规则。`,
50
- dryRunNotice: '干跑模式(enforce: false):deny/ask 命中仅写入审计日志——所有调用照常透传。',
51
- unknownArg: arg => `未知的 /rules 参数 "${arg}"。${ZH.usage}`,
52
- usage: '用法:/rules [list | reload | decisions [n] | test <工具名> <json-参数>]',
53
- decisionsHeader: (shown, total) => `本会话最近 ${shown}/${total} 条权限裁决:`,
54
- noDecisions: '本会话还没有记录任何权限裁决。',
55
- auditDisabledNotice: '本宿主上会话日志审计已停用:其 Session.append 早于 ignorable 标记支持,会令会话在其他宿主上无法恢复(设 allowUnmarkedAudit: true 可重新开启)。',
56
- invalidDecisionsCount: arg => `无效的裁决条数 "${arg}":请给正整数(默认 10)。`,
57
- decisionLine: (seq, action, toolName, ruleIndex, reason, dryRun, outcome) => {
58
- const rule = ruleIndex === undefined ? '' : `(规则 ${ruleIndex + 1})`;
59
- const dry = dryRun ? (outcome === undefined ? '(干跑)' : `(干跑 → ${outcome})`) : '';
60
- const why = reason === undefined ? '' : `:${short(reason)}`;
61
- return `- #${seq} ${action} ${toolName}${rule}${dry}${why}`;
62
- },
63
- testHit: (tool, ruleIndex, action, reason) => `"${tool}" 命中规则 ${ruleIndex + 1}(${action}):${short(reason)}`,
64
- testNoMatch: tool => `"${tool}" 未命中任何规则——该调用将透传。`,
65
- testBadJson: text => `无效的 JSON 参数 "${text}":参数必须能被解析为 JSON。`,
66
- testUnknownFlag: flag => `未知的 /rules test 标志 "${flag}"。${ZH.testUsage}`,
67
- testBadFlag: flag => `无效的 /rules test 标志 "${flag}":缺少取值。${ZH.testUsage}`,
68
- testBadPlatform: value => `未知的平台 "${value}"(--platform):应为 aix、android、darwin、freebsd、linux、openbsd、sunos、win32 之一。${ZH.testUsage}`,
69
- testUsage: '用法:/rules test [--cwd <目录>] [--env 键=值]... [--agent <选择器>]... [--platform <平台名>] <工具名> <json-参数>,例如 /rules test bash {"command":"git push origin main"}',
70
- unreachableWarning: numbers => `警告:规则 ${numbers.join('、')} 不可达(被前面的通配规则遮蔽)。`,
71
- emptySource: '(无规则文件——空规则集)',
72
- };
73
- const ES = {
74
- rulesHeader: (count, sources, cwd) => `Reglas de permiso: ${count} regla(s) desde ${sources.join(', ')} (espacio de trabajo ${cwd}).`,
75
- noRules: (cwd, fallbackNote) => `No hay reglas de permiso activas: no se encontró archivo de reglas para el espacio de trabajo ${cwd}${fallbackNote}; el conjunto vacío lo permite todo.`,
76
- fallbackMissing: ' (y la ruta de respaldo configurada no existe)',
77
- reloaded: (count, source) => `Recargadas ${count} regla(s) desde ${source}.`,
78
- reloadFailed: error => `Error de recarga: ${error}. Las reglas anteriores siguen activas.`,
79
- lastReloadWarning: error => `Aviso: la última recarga falló (${error}); las reglas mostradas son las anteriores.`,
80
- dryRunNotice: 'Modo simulación (enforce: false): los aciertos deny/ask solo se registran en auditoría — todas las llamadas pasan.',
81
- unknownArg: arg => `Argumento de /rules desconocido "${arg}". ${ES.usage}`,
82
- usage: 'Uso: /rules [list | reload | decisions [n] | test <herramienta> <json-args>]',
83
- decisionsHeader: (shown, total) => `Últimas ${shown} de ${total} decisión(es) de permiso de esta sesión:`,
84
- noDecisions: 'Esta sesión aún no registra decisiones de permiso.',
85
- auditDisabledNotice: 'La auditoría del registro de sesión está desactivada en este host: su Session.append es anterior al marcador ignorable y haría las sesiones irrecuperables en otros hosts (establece allowUnmarkedAudit: true para reactivarla).',
86
- invalidDecisionsCount: arg => `Cantidad de decisiones inválida "${arg}": indique un entero positivo (por defecto 10).`,
87
- decisionLine: (seq, action, toolName, ruleIndex, reason, dryRun, outcome) => {
88
- const rule = ruleIndex === undefined ? '' : ` (regla ${ruleIndex + 1})`;
89
- const dry = dryRun ? (outcome === undefined ? ' (simulación)' : ` (simulación → ${outcome})`) : '';
90
- const why = reason === undefined ? '' : `: ${short(reason)}`;
91
- return `- #${seq} ${action} ${toolName}${rule}${dry}${why}`;
92
- },
93
- testHit: (tool, ruleIndex, action, reason) => `"${tool}" coincide con la regla ${ruleIndex + 1} (${action}): ${short(reason)}`,
94
- testNoMatch: tool => `"${tool}" no coincide con ninguna regla — la llamada pasa sin restricciones.`,
95
- testBadJson: text => `Argumentos JSON inválidos "${text}": los argumentos deben poderse analizar como JSON.`,
96
- testUnknownFlag: flag => `Bandera de /rules test desconocida "${flag}". ${ES.testUsage}`,
97
- testBadFlag: flag => `Bandera de /rules test inválida "${flag}": falta un valor. ${ES.testUsage}`,
98
- testBadPlatform: value => `Plataforma desconocida "${value}" en --platform: se esperaba una de aix, android, darwin, freebsd, linux, openbsd, sunos, win32. ${ES.testUsage}`,
99
- testUsage: 'Uso: /rules test [--cwd <dir>] [--env CLAVE=VALOR]... [--agent <selector>]... [--platform <nombre>] <herramienta> <json-args>, p. ej. /rules test bash {"command":"git push origin main"}',
100
- unreachableWarning: numbers => `Aviso: ${numbers.length > 1 ? 'las reglas' : 'la regla'} ${numbers.join(', ')} ${numbers.length > 1 ? 'son inalcanzables' : 'es inalcanzable'} (tapada por una regla general anterior).`,
101
- emptySource: '(sin archivo de reglas — conjunto vacío)',
102
- };
103
- const PT = {
104
- rulesHeader: (count, sources, cwd) => `Regras de permissão: ${count} regra(s) de ${sources.join(', ')} (workspace ${cwd}).`,
105
- noRules: (cwd, fallbackNote) => `Nenhuma regra de permissão ativa: nenhum arquivo de regras encontrado para o workspace ${cwd}${fallbackNote}; o conjunto vazio permite tudo.`,
106
- fallbackMissing: ' (e o caminho de fallback configurado não existe)',
107
- reloaded: (count, source) => `Recarregadas ${count} regra(s) de ${source}.`,
108
- reloadFailed: error => `Falha ao recarregar: ${error}. As regras anteriores continuam ativas.`,
109
- lastReloadWarning: error => `Aviso: a última recarga falhou (${error}); as regras listadas são as anteriores.`,
110
- dryRunNotice: 'Modo simulação (enforce: false): acertos deny/ask são apenas registrados na auditoria — todas as chamadas passam.',
111
- unknownArg: arg => `Argumento de /rules desconhecido "${arg}". ${PT.usage}`,
112
- usage: 'Uso: /rules [list | reload | decisions [n] | test <ferramenta> <json-args>]',
113
- decisionsHeader: (shown, total) => `Últimas ${shown} de ${total} decisão(ões) de permissão desta sessão:`,
114
- noDecisions: 'Esta sessão ainda não registrou decisões de permissão.',
115
- auditDisabledNotice: 'A auditoria do registro da sessão está desativada neste host: seu Session.append é anterior ao marcador ignorable e tornaria as sessões irrecuperáveis em outros hosts (defina allowUnmarkedAudit: true para reativar).',
116
- invalidDecisionsCount: arg => `Quantidade de decisões inválida "${arg}": informe um inteiro positivo (padrão 10).`,
117
- decisionLine: (seq, action, toolName, ruleIndex, reason, dryRun, outcome) => {
118
- const rule = ruleIndex === undefined ? '' : ` (regra ${ruleIndex + 1})`;
119
- const dry = dryRun ? (outcome === undefined ? ' (simulação)' : ` (simulação → ${outcome})`) : '';
120
- const why = reason === undefined ? '' : `: ${short(reason)}`;
121
- return `- #${seq} ${action} ${toolName}${rule}${dry}${why}`;
122
- },
123
- testHit: (tool, ruleIndex, action, reason) => `"${tool}" corresponde à regra ${ruleIndex + 1} (${action}): ${short(reason)}`,
124
- testNoMatch: tool => `"${tool}" não corresponde a nenhuma regra — a chamada passa livremente.`,
125
- testBadJson: text => `Argumentos JSON inválidos "${text}": os argumentos precisam ser JSON analisável.`,
126
- testUnknownFlag: flag => `Sinalizador de /rules test desconhecido "${flag}". ${PT.testUsage}`,
127
- testBadFlag: flag => `Sinalizador de /rules test inválido "${flag}": falta um valor. ${PT.testUsage}`,
128
- testBadPlatform: value => `Plataforma desconhecida "${value}" em --platform: esperava-se uma de aix, android, darwin, freebsd, linux, openbsd, sunos, win32. ${PT.testUsage}`,
129
- testUsage: 'Uso: /rules test [--cwd <dir>] [--env CHAVE=VALOR]... [--agent <seletor>]... [--platform <nome>] <ferramenta> <json-args>, ex.: /rules test bash {"command":"git push origin main"}',
130
- unreachableWarning: numbers => `Aviso: ${numbers.length > 1 ? 'as regras' : 'a regra'} ${numbers.join(', ')} ${numbers.length > 1 ? 'são inalcançáveis' : 'é inalcançável'} (encoberta por uma regra geral anterior).`,
131
- emptySource: '(sem arquivo de regras — conjunto vazio)',
132
- };
133
- const HI = {
134
- rulesHeader: (count, sources, cwd) => `अनुमति नियम: ${count} नियम, स्रोत ${sources.join(', ')} (कार्यक्षेत्र ${cwd})।`,
135
- noRules: (cwd, fallbackNote) => `कोई अनुमति नियम सक्रिय नहीं: कार्यक्षेत्र ${cwd} के लिए नियम फ़ाइल नहीं मिली${fallbackNote}; खाली नियम-समूह सब कुछ पास कर देता है।`,
136
- fallbackMissing: ' (और कॉन्फ़िगर किया गया फ़ॉलबैक पथ मौजूद नहीं है)',
137
- reloaded: (count, source) => `${count} नियम पुनः लोड किए गए, स्रोत ${source}।`,
138
- reloadFailed: error => `पुनः लोड विफल: ${error}। पिछले नियम अब भी सक्रिय हैं।`,
139
- lastReloadWarning: error => `चेतावनी: अंतिम पुनः लोड विफल रहा (${error}); ऊपर सूचीबद्ध नियम पिछले वाले हैं।`,
140
- dryRunNotice: 'ड्राई-रन मोड (enforce: false): deny/ask हिट केवल ऑडिट में दर्ज होते हैं — हर कॉल पास हो जाती है।',
141
- unknownArg: arg => `अज्ञात /rules तर्क "${arg}"। ${HI.usage}`,
142
- usage: 'उपयोग: /rules [list | reload | decisions [n] | test <टूल> <json-args>]',
143
- decisionsHeader: (shown, total) => `इस सत्र के अंतिम ${shown}/${total} अनुमति निर्णय:`,
144
- noDecisions: 'इस सत्र में अभी कोई अनुमति निर्णय दर्ज नहीं है।',
145
- auditDisabledNotice: 'इस होस्ट पर सत्र-लॉग ऑडिट अक्षम है: इसका Session.append ignorable मार्कर से पुराना है और सत्र अन्य होस्ट पर अप्राप्य बन जाते (पुनः चालू करने के लिए allowUnmarkedAudit: true सेट करें)।',
146
- invalidDecisionsCount: arg => `अमान्य निर्णय-संख्या "${arg}": एक धनात्मक पूर्णांक दें (डिफ़ॉल्ट 10)।`,
147
- decisionLine: (seq, action, toolName, ruleIndex, reason, dryRun, outcome) => {
148
- const rule = ruleIndex === undefined ? '' : ` (नियम ${ruleIndex + 1})`;
149
- const dry = dryRun ? (outcome === undefined ? ' (ड्राई-रन)' : ` (ड्राई-रन → ${outcome})`) : '';
150
- const why = reason === undefined ? '' : `: ${short(reason)}`;
151
- return `- #${seq} ${action} ${toolName}${rule}${dry}${why}`;
152
- },
153
- testHit: (tool, ruleIndex, action, reason) => `"${tool}" नियम ${ruleIndex + 1} से मेल खाता है (${action}): ${short(reason)}`,
154
- testNoMatch: tool => `"${tool}" किसी नियम से मेल नहीं खाता — कॉल बिना रोक पास होगी।`,
155
- testBadJson: text => `अमान्य JSON तर्क "${text}": तर्क JSON के रूप में पार्स होने चाहिए।`,
156
- testUnknownFlag: flag => `अज्ञात /rules test फ़्लैग "${flag}"। ${HI.testUsage}`,
157
- testBadFlag: flag => `अमान्य /rules test फ़्लैग "${flag}": मान गायब है। ${HI.testUsage}`,
158
- testBadPlatform: value => `अज्ञात प्लेटफ़ॉर्म "${value}" (--platform): aix, android, darwin, freebsd, linux, openbsd, sunos, win32 में से एक अपेक्षित। ${HI.testUsage}`,
159
- testUsage: 'उपयोग: /rules test [--cwd <dir>] [--env KEY=मान]... [--agent <चयनकर्ता>]... [--platform <नाम>] <टूल> <json-args>, जैसे /rules test bash {"command":"git push origin main"}',
160
- unreachableWarning: numbers => `चेतावनी: नियम ${numbers.join(', ')} अप्राप्य हैं (पहले वाले सर्व-मिलान नियम से ढके हुए)।`,
161
- emptySource: '(कोई नियम फ़ाइल नहीं — खाली नियम-समूह)',
162
- };
163
- /** The localized prose tables by language. */
164
- export const UI_PROSE = { en: EN, zh: ZH, es: ES, pt: PT, hi: HI };
165
- /** `describeRule` match-dimension tokens by language. */
166
- export const DESCRIBE_TOKENS = {
167
- en: { allTools: 'all tools', tools: 'tools', agents: 'agents', params: 'params', paths: 'paths', absent: 'absent', when: 'when', platform: 'platform', disabled: 'disabled', tags: 'tags', src: 'src' },
168
- zh: { allTools: '全部工具', tools: '工具', agents: '代理', params: '参数', paths: '路径', absent: '缺省键', when: '条件', platform: '平台', disabled: '已禁用', tags: '标签', src: '来源' },
169
- es: { allTools: 'todas las herramientas', tools: 'herramientas', agents: 'agentes', params: 'parámetros', paths: 'rutas', absent: 'ausentes', when: 'cuándo', platform: 'plataforma', disabled: 'deshabilitada', tags: 'etiquetas', src: 'origen' },
170
- pt: { allTools: 'todas as ferramentas', tools: 'ferramentas', agents: 'agentes', params: 'parâmetros', paths: 'caminhos', absent: 'ausentes', when: 'quando', platform: 'plataforma', disabled: 'desativada', tags: 'etiquetas', src: 'origem' },
171
- hi: { allTools: 'सभी टूल', tools: 'टूल', agents: 'एजेंट', params: 'पैरामीटर', paths: 'पथ', absent: 'अनुपस्थित', when: 'शर्त', platform: 'प्लेटफ़ॉर्म', disabled: 'अक्षम', tags: 'टैग', src: 'स्रोत' },
172
- };
173
- //# sourceMappingURL=prose.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"prose.js","sourceRoot":"","sources":["../../src/prose.ts"],"names":[],"mappings":"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"}