@poe-platform/safe-bash 0.1.60 → 0.1.61

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,15 @@
1
+ import type { BoundedRegexProvider } from "./provider.js";
2
+ export interface BoundedRegexProviderOptions {
3
+ readonly maxWorkers?: number;
4
+ readonly maxPatterns?: number;
5
+ readonly maxPatternBytes?: number;
6
+ readonly maxRows?: number;
7
+ readonly maxInputBytes?: number;
8
+ readonly maxResultBytes?: number;
9
+ readonly maxWork?: number;
10
+ readonly maxAllocationUnits?: number;
11
+ readonly maxStates?: number;
12
+ }
13
+ /** Cooperative non-NUL ASCII grep selection and fixed-rg provider; not a native-worker/RSS sandbox. */
14
+ export declare function createBoundedRegexProvider(input?: BoundedRegexProviderOptions): BoundedRegexProvider;
15
+ //# sourceMappingURL=bounded-provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bounded-provider.d.ts","sourceRoot":"","sources":["../../../src/commands/regex-execution/bounded-provider.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,oBAAoB,EAAmC,MAAM,eAAe,CAAC;AAG3F,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAsQD,uGAAuG;AACvG,wBAAgB,0BAA0B,CAAC,KAAK,GAAE,2BAAgC,GAAG,oBAAoB,CAUxG"}
@@ -0,0 +1,319 @@
1
+ import { EreLedger } from "./ere/limits.js";
2
+ import { compileEre } from "./ere/syntax.js";
3
+ import { matchEre } from "./ere/matcher.js";
4
+ const defaults = Object.freeze({
5
+ maxWorkers: 2, maxPatterns: 32, maxPatternBytes: 8192, maxRows: 128,
6
+ maxInputBytes: 65_536, maxResultBytes: 2048, maxWork: 2_000_000,
7
+ maxAllocationUnits: 1_000_000, maxStates: 65_536,
8
+ });
9
+ const ceilings = Object.freeze({
10
+ maxWorkers: 32, maxPatterns: 128, maxPatternBytes: 65_532, maxRows: 4096,
11
+ maxInputBytes: 1_048_576, maxResultBytes: 65_536, maxWork: 33_554_432,
12
+ maxAllocationUnits: 4_000_000, maxStates: 65_536,
13
+ });
14
+ const typedArrayPrototype = Object.getPrototypeOf(Uint8Array.prototype);
15
+ const byteLength = Object.getOwnPropertyDescriptor(typedArrayPrototype, "byteLength").get;
16
+ const byteOffset = Object.getOwnPropertyDescriptor(typedArrayPrototype, "byteOffset").get;
17
+ const byteBuffer = Object.getOwnPropertyDescriptor(typedArrayPrototype, "buffer").get;
18
+ function fail(kind, message) {
19
+ throw new Error(`bounded regex ${kind}: ${message}`);
20
+ }
21
+ function record(value, keys, optional = []) {
22
+ if (value === null || typeof value !== "object" || Array.isArray(value))
23
+ fail("protocol", "expected a data record");
24
+ const ownKeys = Reflect.ownKeys(value);
25
+ if (ownKeys.length < keys.length || ownKeys.length > keys.length + optional.length
26
+ || ownKeys.some(key => typeof key !== "string" || !keys.includes(key) && !optional.includes(key)))
27
+ fail("protocol", "unexpected data-record fields");
28
+ for (const key of [...keys, ...optional]) {
29
+ const property = Object.getOwnPropertyDescriptor(value, key);
30
+ if (property === undefined ? keys.includes(key) : !("value" in property))
31
+ fail("protocol", "missing field or accessor");
32
+ }
33
+ }
34
+ function array(value, limit, label) {
35
+ if (!Array.isArray(value))
36
+ fail("protocol", `${label} must be an array`);
37
+ if (value.length > limit)
38
+ fail("limit", `${label} count limit exceeded`);
39
+ // The length bound precedes enumeration, including sparse-array admission.
40
+ const keys = Reflect.ownKeys(value);
41
+ if (keys.length !== value.length + 1)
42
+ fail("protocol", `${label} must be a dense data array`);
43
+ for (let index = 0; index < value.length; index++) {
44
+ const property = Object.getOwnPropertyDescriptor(value, index);
45
+ if (!property || !("value" in property))
46
+ fail("protocol", `${label} must be a dense data array`);
47
+ }
48
+ }
49
+ function options(input) {
50
+ const keys = Object.keys(defaults);
51
+ try {
52
+ record(input, [], keys);
53
+ }
54
+ catch {
55
+ throw new TypeError("bounded regex options require supported own data fields");
56
+ }
57
+ const result = { ...defaults };
58
+ for (const key of keys) {
59
+ if (!Object.hasOwn(input, key))
60
+ continue;
61
+ const value = input[key];
62
+ if (typeof value !== "number" || !Number.isSafeInteger(value) || value < 1 || value > ceilings[key])
63
+ throw new RangeError(`bounded regex option ${key} is outside its limit`);
64
+ result[key] = value;
65
+ }
66
+ return Object.freeze(result);
67
+ }
68
+ function descriptor(value, limits) {
69
+ if (value === null || typeof value !== "object")
70
+ fail("protocol", "invalid descriptor");
71
+ const kind = Object.getOwnPropertyDescriptor(value, "kind");
72
+ if (!kind || !("value" in kind))
73
+ fail("protocol", "invalid descriptor kind");
74
+ if (kind.value !== "grep" && kind.value !== "rg")
75
+ fail("unsupported", "only grep and fixed rg selection descriptors are supported");
76
+ const flags = kind.value === "grep" ? ["fixed", "extended", "insensitive", "whole", "word"] : ["fixed", "whole", "word", "nullData"];
77
+ record(value, ["kind", "patterns", ...flags, ...(kind.value === "rg" ? ["case"] : [])]);
78
+ for (const flag of flags)
79
+ if (typeof value[flag] !== "boolean")
80
+ fail("protocol", `invalid ${flag} flag`);
81
+ if (kind.value === "rg" && !["sensitive", "insensitive", "smart"].includes(value.case))
82
+ fail("protocol", "invalid case flag");
83
+ if (value.word || kind.value === "grep" && value.insensitive || kind.value === "rg" && value.case !== "sensitive")
84
+ fail("unsupported", "only case-sensitive, non-word selection is supported");
85
+ if (kind.value === "rg" && !value.fixed)
86
+ fail("unsupported", "rg regex and Unicode modes are unsupported; use fixed ASCII patterns");
87
+ array(value.patterns, limits.maxPatterns, "pattern");
88
+ let bytes = 0;
89
+ for (let index = 0; index < value.patterns.length; index++) {
90
+ const pattern = value.patterns[index];
91
+ if (typeof pattern !== "string")
92
+ fail("protocol", "patterns must be strings");
93
+ if (pattern.length > limits.maxPatternBytes - bytes)
94
+ fail("limit", "aggregate pattern byte limit exceeded");
95
+ bytes += pattern.length;
96
+ }
97
+ return value;
98
+ }
99
+ function admit(input, limits, signal) {
100
+ record(input, ["id", "descriptor", "rows"]);
101
+ const selected = descriptor(input.descriptor, limits);
102
+ array(input.rows, limits.maxRows, "row");
103
+ if (input.rows.length > Math.floor(limits.maxResultBytes / 16))
104
+ fail("limit", "result byte limit exceeded");
105
+ let bytes = 0;
106
+ for (let index = 0; index < input.rows.length; index++) {
107
+ const row = input.rows[index];
108
+ record(row, ["bytes", "all", "terminated"], ["directory", "ancestors"]);
109
+ if (!(row.bytes instanceof Uint8Array) || typeof row.all !== "boolean" || typeof row.terminated !== "boolean"
110
+ || Object.hasOwn(row, "directory") && typeof row.directory !== "boolean"
111
+ || Object.hasOwn(row, "ancestors") && typeof row.ancestors !== "boolean")
112
+ fail("protocol", "invalid row");
113
+ if (Object.hasOwn(row, "directory") || Object.hasOwn(row, "ancestors"))
114
+ fail("unsupported", "glob row flags are unsupported");
115
+ if (row.all)
116
+ fail("unsupported", "all-match enumeration is unsupported");
117
+ const length = byteLength.call(row.bytes);
118
+ if (length > limits.maxInputBytes - bytes)
119
+ fail("limit", "aggregate input byte limit exceeded");
120
+ bytes += length;
121
+ }
122
+ const ledger = new EreLedger({ maxExpansionBytes: 1_048_576, maxExpansionFields: 8192 }, {
123
+ patternBytes: limits.maxPatternBytes + 4, subjectBytes: limits.maxInputBytes,
124
+ work: limits.maxWork, allocationUnits: limits.maxAllocationUnits, states: limits.maxStates,
125
+ });
126
+ // Include snapshots, row/result metadata and worst-case match storage before copying.
127
+ ledger.charge("allocationUnits", bytes + input.rows.length * 12 + selected.patterns.length * 2 + 16, signal);
128
+ const patterns = [];
129
+ for (let index = 0; index < selected.patterns.length; index++)
130
+ patterns.push(selected.patterns[index]);
131
+ const ownedDescriptor = selected.kind === "grep"
132
+ ? { kind: "grep", patterns, fixed: selected.fixed, extended: selected.extended, insensitive: selected.insensitive, whole: selected.whole, word: selected.word }
133
+ : { kind: "rg", patterns, fixed: selected.fixed, case: selected.case, whole: selected.whole, word: selected.word, nullData: selected.nullData };
134
+ const rows = [];
135
+ for (let index = 0; index < input.rows.length; index++) {
136
+ const row = input.rows[index];
137
+ const source = new Uint8Array(byteBuffer.call(row.bytes), byteOffset.call(row.bytes), byteLength.call(row.bytes));
138
+ const copy = new Uint8Array(source.length);
139
+ copy.set(source);
140
+ rows.push({ bytes: copy, all: false, terminated: row.terminated });
141
+ }
142
+ return { id: input.id, descriptor: ownedDescriptor, rows, ledger };
143
+ }
144
+ async function admitBre(pattern, ledger, signal) {
145
+ let bracket = -1;
146
+ let member = false;
147
+ let namedClass = false;
148
+ for (let index = 0; index < pattern.length; index++) {
149
+ ledger.charge("work", 1, signal);
150
+ await ledger.checkpoint(signal);
151
+ const character = pattern[index];
152
+ if ("\\()+?{}|".includes(character))
153
+ fail("unsupported", "BRE escapes, groups and interval/operator extensions are unsupported; use grep -E");
154
+ if (bracket >= 0) {
155
+ if (index === bracket + 1 && character === "^")
156
+ continue;
157
+ if (namedClass) {
158
+ if (character === "]" && pattern[index - 1] === ":")
159
+ namedClass = false;
160
+ }
161
+ else if (character === "]" && member)
162
+ bracket = -1;
163
+ else if (character === "[" && pattern[index + 1] === ":")
164
+ namedClass = true;
165
+ member = true;
166
+ }
167
+ else if (character === "[") {
168
+ bracket = index;
169
+ member = false;
170
+ }
171
+ else if (character === "^" && index !== 0 || character === "$" && index !== pattern.length - 1) {
172
+ fail("unsupported", "BRE anchors are supported only at record boundaries");
173
+ }
174
+ else if (character === "*" && (index === 0 || index === 1 && pattern[0] === "^")) {
175
+ fail("unsupported", "BRE leading literal star is unsupported; use fixed matching");
176
+ }
177
+ }
178
+ }
179
+ async function execute(input, signal) {
180
+ const { descriptor: selected, rows, ledger } = input;
181
+ const programs = [];
182
+ for (const pattern of selected.patterns) {
183
+ if (selected.kind === "grep" && !selected.fixed && !selected.extended)
184
+ await admitBre(pattern, ledger, signal);
185
+ if (selected.kind === "rg" && !selected.nullData && pattern.includes("\n"))
186
+ fail("unsupported", "rg multiline matching is unsupported");
187
+ ledger.charge("allocationUnits", (selected.whole ? 3 : 1) * 3 + 2, signal);
188
+ const fragments = selected.whole
189
+ ? [{ text: "^(", literal: false }, { text: pattern, literal: selected.fixed }, { text: ")$", literal: false }]
190
+ : [{ text: pattern, literal: selected.fixed }];
191
+ programs.push(await compileEre(fragments, ledger, signal));
192
+ }
193
+ const results = [];
194
+ for (const row of rows) {
195
+ // The admitted ASCII profile makes every character offset the original byte offset.
196
+ ledger.charge("allocationUnits", row.bytes.length * 2 + 2, signal);
197
+ const characters = [];
198
+ for (const byte of row.bytes) {
199
+ ledger.charge("work", 1, signal);
200
+ if (byte === 0 || byte > 127)
201
+ fail("unsupported", "subjects require non-NUL ASCII; Unicode and invalid UTF-8 are unsupported");
202
+ characters.push(String.fromCharCode(byte));
203
+ await ledger.checkpoint(signal);
204
+ }
205
+ const subject = characters.join("");
206
+ let span;
207
+ for (const program of programs) {
208
+ const match = await matchEre(program, subject, ledger, signal);
209
+ if (!match.matched)
210
+ continue;
211
+ const candidate = match.captures[0];
212
+ if (selected.kind === "grep") {
213
+ span = candidate;
214
+ break;
215
+ }
216
+ // Fixed rg patterns select the first occurrence, breaking ties by pattern order.
217
+ if (!span || candidate.start < span.start)
218
+ span = candidate;
219
+ }
220
+ signal.throwIfAborted();
221
+ results.push(span ? new Float64Array([span.start, span.end]) : new Float64Array());
222
+ }
223
+ return { id: input.id, results };
224
+ }
225
+ class CooperativeWorker {
226
+ limits;
227
+ release;
228
+ #controller = new AbortController();
229
+ #listeners = new Map();
230
+ #tasks = new Set();
231
+ #busy = false;
232
+ #closing;
233
+ constructor(limits, release) {
234
+ this.limits = limits;
235
+ this.release = release;
236
+ queueMicrotask(() => { if (!this.#closing)
237
+ this.emit({ ready: true }); });
238
+ }
239
+ on(event, listener) {
240
+ if (this.#closing)
241
+ return;
242
+ let listeners = this.#listeners.get(event);
243
+ if (!listeners) {
244
+ listeners = new Set();
245
+ this.#listeners.set(event, listeners);
246
+ }
247
+ listeners.add(listener);
248
+ }
249
+ off(event, listener) { this.#listeners.get(event)?.delete(listener); }
250
+ emit(value) {
251
+ for (const listener of this.#listeners.get("message") ?? [])
252
+ listener(value);
253
+ }
254
+ postMessage(input) {
255
+ if (this.#closing)
256
+ throw new Error("bounded regex worker is closed");
257
+ if (this.#busy)
258
+ throw new Error("bounded regex worker is busy");
259
+ const identity = input !== null && typeof input === "object" ? Object.getOwnPropertyDescriptor(input, "id") : undefined;
260
+ if (!identity || !("value" in identity) || !Number.isSafeInteger(identity.value) || identity.value < 1)
261
+ fail("protocol", "invalid request identity");
262
+ const id = identity.value;
263
+ const submitted = Object.getOwnPropertyDescriptor(input, "descriptor")?.value;
264
+ const expression = submitted !== null && typeof submitted === "object" && Object.getOwnPropertyDescriptor(submitted, "kind")?.value === "expr-match";
265
+ let owned;
266
+ let failure;
267
+ try {
268
+ owned = admit(input, this.limits, this.#controller.signal);
269
+ }
270
+ catch (error) {
271
+ failure = error instanceof Error ? error.message.slice(0, 512) : "bounded regex protocol: request admission failed";
272
+ }
273
+ this.#busy = true;
274
+ const task = Promise.resolve().then(async () => {
275
+ let reply;
276
+ try {
277
+ this.#controller.signal.throwIfAborted();
278
+ reply = owned ? await execute(owned, this.#controller.signal) : { id, error: failure };
279
+ }
280
+ catch (error) {
281
+ reply = { id, error: error instanceof Error ? error.message.slice(0, 512) : "bounded regex request failed" };
282
+ }
283
+ if (expression && "error" in reply)
284
+ reply = { id, operation: "expr-match", category: "unsupported", error: reply.error };
285
+ // Clear request-owned payloads before notifying the consumer or allowing reuse.
286
+ owned = undefined;
287
+ this.#busy = false;
288
+ if (!this.#closing)
289
+ this.emit(reply);
290
+ });
291
+ this.#tasks.add(task);
292
+ void task.then(() => this.#tasks.delete(task), () => this.#tasks.delete(task));
293
+ }
294
+ terminate() {
295
+ if (!this.#closing) {
296
+ this.#closing = Promise.allSettled([...this.#tasks]).then(() => {
297
+ this.#listeners.clear();
298
+ this.#tasks.clear();
299
+ this.release();
300
+ });
301
+ this.#controller.abort(new Error("bounded regex worker terminated"));
302
+ }
303
+ return this.#closing;
304
+ }
305
+ }
306
+ /** Cooperative non-NUL ASCII grep selection and fixed-rg provider; not a native-worker/RSS sandbox. */
307
+ export function createBoundedRegexProvider(input = {}) {
308
+ const limits = options(input);
309
+ let active = 0;
310
+ return Object.freeze({
311
+ createWorker() {
312
+ if (active >= limits.maxWorkers)
313
+ fail("limit", "worker count limit exceeded");
314
+ active++;
315
+ return new CooperativeWorker(limits, () => { active--; });
316
+ },
317
+ });
318
+ }
319
+ //# sourceMappingURL=bounded-provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bounded-provider.js","sourceRoot":"","sources":["../../../src/commands/regex-execution/bounded-provider.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  export type { BoundedRegexProvider, RegexWorker, RegexWorkerRequest } from "./provider.js";
2
+ export { createBoundedRegexProvider, type BoundedRegexProviderOptions } from "./bounded-provider.js";
2
3
  export { RegexExecutionError } from "./protocol.js";
3
4
  export type { RegexExecutionOptions, Descriptor as RegexDescriptor, Request as RegexRequest, Reply as RegexReply, Row as RegexRow, Match as RegexMatch, GrepDescriptor, SearchDescriptor, GlobDescriptor, } from "./protocol.js";
4
5
  export { EreLedger } from "./ere/limits.js";
@@ -1 +1 @@
1
- {"version":3,"file":"public.d.ts","sourceRoot":"","sources":["../../../src/commands/regex-execution/public.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,oBAAoB,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAC3F,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACpD,YAAY,EACV,qBAAqB,EAAE,UAAU,IAAI,eAAe,EAAE,OAAO,IAAI,YAAY,EAC7E,KAAK,IAAI,UAAU,EAAE,GAAG,IAAI,QAAQ,EAAE,KAAK,IAAI,UAAU,EACzD,cAAc,EAAE,gBAAgB,EAAE,cAAc,GACjD,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAClH,YAAY,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,kBAAkB,EAAE,WAAW,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC"}
1
+ {"version":3,"file":"public.d.ts","sourceRoot":"","sources":["../../../src/commands/regex-execution/public.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,oBAAoB,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAC3F,OAAO,EAAE,0BAA0B,EAAE,KAAK,2BAA2B,EAAE,MAAM,uBAAuB,CAAC;AACrG,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACpD,YAAY,EACV,qBAAqB,EAAE,UAAU,IAAI,eAAe,EAAE,OAAO,IAAI,YAAY,EAC7E,KAAK,IAAI,UAAU,EAAE,GAAG,IAAI,QAAQ,EAAE,KAAK,IAAI,UAAU,EACzD,cAAc,EAAE,gBAAgB,EAAE,cAAc,GACjD,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAClH,YAAY,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,kBAAkB,EAAE,WAAW,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC"}
@@ -1,3 +1,4 @@
1
+ export { createBoundedRegexProvider } from "./bounded-provider.js";
1
2
  export { RegexExecutionError } from "./protocol.js";
2
3
  export { EreLedger } from "./ere/limits.js";
3
4
  export { compileEre } from "./ere/syntax.js";
@@ -1 +1 @@
1
- {"version":3,"file":"public.js","sourceRoot":"","sources":["../../../src/commands/regex-execution/public.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAMpD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"public.js","sourceRoot":"","sources":["../../../src/commands/regex-execution/public.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,0BAA0B,EAAoC,MAAM,uBAAuB,CAAC;AACrG,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAMpD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@poe-platform/safe-bash",
3
- "version": "0.1.60",
3
+ "version": "0.1.61",
4
4
  "description": "Extensible virtual shell with pluggable filesystems and streaming commands",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -137,7 +137,7 @@
137
137
  "access": "public"
138
138
  },
139
139
  "dependencies": {
140
- "@poe-platform/safe-fs": "0.1.60",
140
+ "@poe-platform/safe-fs": "0.1.61",
141
141
  "@types/node": "^25.2.2"
142
142
  }
143
143
  }