@abot-ai/runtime 1.3.0 → 1.3.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/scripts/init-runtime.js +4 -13
- package/dist/scripts/runtime-setup-directories.d.ts +2 -0
- package/dist/scripts/runtime-setup-directories.js +38 -0
- package/dist/src/shared/directory-authority/bootstrap.d.ts +1 -0
- package/dist/src/shared/directory-authority/bootstrap.js +118 -0
- package/dist/src/shared/directory-authority/command.d.ts +8 -0
- package/dist/src/shared/directory-authority/command.js +27 -0
- package/dist/src/shared/directory-authority/errors.d.ts +5 -0
- package/dist/src/shared/directory-authority/errors.js +10 -0
- package/dist/src/shared/directory-authority/index.d.ts +3 -0
- package/dist/src/shared/directory-authority/index.js +3 -0
- package/dist/src/shared/directory-authority/protocol.d.ts +11 -0
- package/dist/src/shared/directory-authority/protocol.js +62 -0
- package/dist/src/shared/directory-authority/task.d.ts +7 -0
- package/dist/src/shared/directory-authority/task.js +97 -0
- package/docs/plugins.md +15 -9
- package/package.json +1 -1
- package/plugins/exec/plugin.json +3 -3
- package/plugins/exec/skills/exec_skill/SKILL.md +1 -1
- package/plugins/exec/source/process-manager.ts +1 -20
- package/plugins/exec/source/shell-platform.ts +29 -0
- package/plugins/exec/src/index.cjs +25 -18
- package/plugins/filesystem/source/atomic-write.ts +9 -0
- package/plugins/filesystem/source/bounded-io.ts +5 -99
- package/plugins/filesystem/source/directory-authority-write.ts +64 -0
- package/plugins/filesystem/source/directory-sample-task.ts +23 -0
- package/plugins/filesystem/source/directory-sample.ts +132 -0
- package/plugins/filesystem/source/directory-write-task.ts +160 -0
- package/plugins/filesystem/source/mutation-parent.ts +11 -0
- package/plugins/filesystem/src/index.cjs +693 -118
- package/plugins/local-search/source/index.ts +2 -0
- package/plugins/local-search/source/paths.ts +30 -7
- package/plugins/local-search/source/ripgrep-process.ts +69 -0
- package/plugins/local-search/source/ripgrep.ts +19 -23
- package/plugins/local-search/src/index.cjs +295 -32
|
@@ -36,7 +36,7 @@ __export(index_exports, {
|
|
|
36
36
|
default: () => index_default
|
|
37
37
|
});
|
|
38
38
|
module.exports = __toCommonJS(index_exports);
|
|
39
|
-
var
|
|
39
|
+
var import_node_path3 = require("node:path");
|
|
40
40
|
|
|
41
41
|
// src/plugin-sdk/bounds.ts
|
|
42
42
|
function sanitizeJsonText(value) {
|
|
@@ -312,7 +312,12 @@ function authorityUnavailable() {
|
|
|
312
312
|
);
|
|
313
313
|
}
|
|
314
314
|
async function openSearchAuthority(target) {
|
|
315
|
-
|
|
315
|
+
const supportsSearchAuthority = ["linux", "darwin"].includes(
|
|
316
|
+
process.platform
|
|
317
|
+
);
|
|
318
|
+
if (!supportsSearchAuthority) throw authorityUnavailable();
|
|
319
|
+
const supportsAuthorityOpenFlags = Number.isInteger(import_node_fs.constants.O_NOFOLLOW) && Number.isInteger(import_node_fs.constants.O_NONBLOCK);
|
|
320
|
+
if (!supportsAuthorityOpenFlags) {
|
|
316
321
|
throw authorityUnavailable();
|
|
317
322
|
}
|
|
318
323
|
let handle;
|
|
@@ -339,21 +344,32 @@ async function openSearchAuthority(target) {
|
|
|
339
344
|
}
|
|
340
345
|
const [pathIdentity, descriptorIdentity] = await Promise.all([
|
|
341
346
|
(0, import_promises.stat)(canonicalTarget, { bigint: true }),
|
|
342
|
-
(0, import_promises.stat)(`/proc/self/fd/${handle.fd}`, { bigint: true })
|
|
347
|
+
process.platform === "linux" ? (0, import_promises.stat)(`/proc/self/fd/${handle.fd}`, { bigint: true }) : handle.stat({ bigint: true })
|
|
343
348
|
]);
|
|
344
349
|
if (!sameIdentity(observed, pathIdentity) || !sameIdentity(observed, descriptorIdentity)) {
|
|
345
350
|
throw authorityUnavailable();
|
|
346
351
|
}
|
|
347
352
|
const authority = handle;
|
|
348
353
|
const isFile = observed.isFile();
|
|
354
|
+
const needsDirectoryBridge = !isFile && process.platform === "darwin";
|
|
355
|
+
let commandDirectory = "/";
|
|
356
|
+
if (!isFile) {
|
|
357
|
+
commandDirectory = process.platform === "linux" ? `/proc/self/fd/${authority.fd}` : canonicalTarget;
|
|
358
|
+
}
|
|
349
359
|
let closed = false;
|
|
350
360
|
handle = void 0;
|
|
351
361
|
return Object.freeze({
|
|
352
362
|
target,
|
|
353
363
|
isFile,
|
|
354
|
-
commandDirectory
|
|
364
|
+
commandDirectory,
|
|
355
365
|
commandTarget: isFile ? "-" : ".",
|
|
356
366
|
...isFile ? { stdinFd: authority.fd } : {},
|
|
367
|
+
...needsDirectoryBridge ? {
|
|
368
|
+
directoryAuthority: {
|
|
369
|
+
directoryPath: canonicalTarget,
|
|
370
|
+
directoryFd: authority.fd
|
|
371
|
+
}
|
|
372
|
+
} : {},
|
|
357
373
|
close: async () => {
|
|
358
374
|
if (closed) return;
|
|
359
375
|
closed = true;
|
|
@@ -411,9 +427,260 @@ function qualifyMatchPath(context, root, rawPath) {
|
|
|
411
427
|
}
|
|
412
428
|
|
|
413
429
|
// plugins/local-search/source/ripgrep.ts
|
|
414
|
-
var import_node_child_process = require("node:child_process");
|
|
415
430
|
var import_node_util = require("node:util");
|
|
431
|
+
|
|
432
|
+
// plugins/local-search/source/ripgrep-process.ts
|
|
433
|
+
var import_node_child_process2 = require("node:child_process");
|
|
416
434
|
var import_ripgrep = require("@vscode/ripgrep");
|
|
435
|
+
|
|
436
|
+
// src/shared/directory-authority/command.ts
|
|
437
|
+
var import_node_child_process = require("node:child_process");
|
|
438
|
+
|
|
439
|
+
// src/shared/directory-authority/bootstrap.ts
|
|
440
|
+
function directoryAuthorityBootstrap(mode, messageLimit, task) {
|
|
441
|
+
const fs = require("node:fs");
|
|
442
|
+
function fail(code, message) {
|
|
443
|
+
throw Object.assign(new Error(message), { code });
|
|
444
|
+
}
|
|
445
|
+
function verifyDirectoryAuthority() {
|
|
446
|
+
const expected = fs.fstatSync(3, { bigint: true });
|
|
447
|
+
const actual = fs.statSync(".", { bigint: true });
|
|
448
|
+
const matchesHeldDirectory = expected.isDirectory() && actual.isDirectory() && expected.dev === actual.dev && expected.ino === actual.ino;
|
|
449
|
+
if (matchesHeldDirectory) return;
|
|
450
|
+
fail(
|
|
451
|
+
"directory_authority_changed",
|
|
452
|
+
"The directory changed before the operation could establish its authority."
|
|
453
|
+
);
|
|
454
|
+
}
|
|
455
|
+
function readRequest() {
|
|
456
|
+
const fd = mode === "task" ? 0 : 4;
|
|
457
|
+
const chunk = Buffer.alloc(64 * 1024);
|
|
458
|
+
const chunks = [];
|
|
459
|
+
let total = 0;
|
|
460
|
+
for (; ; ) {
|
|
461
|
+
const length = fs.readSync(fd, chunk, 0, chunk.length, null);
|
|
462
|
+
if (length === 0) break;
|
|
463
|
+
total += length;
|
|
464
|
+
if (total > messageLimit) {
|
|
465
|
+
fail(
|
|
466
|
+
"directory_authority_request_too_large",
|
|
467
|
+
"The directory operation input exceeds the bridge byte limit."
|
|
468
|
+
);
|
|
469
|
+
}
|
|
470
|
+
chunks.push(Buffer.from(chunk.subarray(0, length)));
|
|
471
|
+
}
|
|
472
|
+
return JSON.parse(Buffer.concat(chunks).toString("utf8"));
|
|
473
|
+
}
|
|
474
|
+
function reportFailure(error) {
|
|
475
|
+
const detail = error;
|
|
476
|
+
const code = typeof detail?.code === "string" ? detail.code.slice(0, 256) : "directory_authority_failed";
|
|
477
|
+
const message = typeof detail?.message === "string" ? detail.message.slice(0, 4096) : "The directory operation failed.";
|
|
478
|
+
let encoded;
|
|
479
|
+
try {
|
|
480
|
+
encoded = JSON.stringify({
|
|
481
|
+
ok: false,
|
|
482
|
+
error: { code, message, data: detail?.data }
|
|
483
|
+
});
|
|
484
|
+
if (Buffer.byteLength(encoded) > messageLimit) throw new Error();
|
|
485
|
+
} catch {
|
|
486
|
+
encoded = JSON.stringify({ ok: false, error: { code, message } });
|
|
487
|
+
}
|
|
488
|
+
writeResponse(mode === "task" ? 1 : 2, encoded);
|
|
489
|
+
process.exitCode = mode === "task" ? 0 : 125;
|
|
490
|
+
}
|
|
491
|
+
function writeResponse(fd, encoded) {
|
|
492
|
+
const bytes = Buffer.from(encoded);
|
|
493
|
+
let offset = 0;
|
|
494
|
+
while (offset < bytes.length) {
|
|
495
|
+
offset += fs.writeSync(fd, bytes, offset, bytes.length - offset);
|
|
496
|
+
}
|
|
497
|
+
}
|
|
498
|
+
async function runTask(input) {
|
|
499
|
+
if (!task)
|
|
500
|
+
fail("directory_authority_failed", "The directory task is missing.");
|
|
501
|
+
const result = await task(input);
|
|
502
|
+
const encoded = JSON.stringify({ ok: true, result });
|
|
503
|
+
if (Buffer.byteLength(encoded) > messageLimit) {
|
|
504
|
+
fail(
|
|
505
|
+
"directory_authority_result_too_large",
|
|
506
|
+
"The directory operation result exceeds the bridge byte limit."
|
|
507
|
+
);
|
|
508
|
+
}
|
|
509
|
+
writeResponse(1, encoded);
|
|
510
|
+
}
|
|
511
|
+
function runCommand(input) {
|
|
512
|
+
const { spawn: spawn3 } = require("node:child_process");
|
|
513
|
+
const command = input;
|
|
514
|
+
const child = spawn3(command.command, command.args, {
|
|
515
|
+
stdio: ["ignore", "inherit", "inherit"],
|
|
516
|
+
env: process.env
|
|
517
|
+
});
|
|
518
|
+
child.once("error", reportFailure);
|
|
519
|
+
child.once("exit", (code, signal) => {
|
|
520
|
+
if (signal) {
|
|
521
|
+
process.kill(process.pid, signal);
|
|
522
|
+
return;
|
|
523
|
+
}
|
|
524
|
+
if (typeof code === "number") process.exitCode = code;
|
|
525
|
+
});
|
|
526
|
+
}
|
|
527
|
+
try {
|
|
528
|
+
verifyDirectoryAuthority();
|
|
529
|
+
const input = readRequest();
|
|
530
|
+
if (mode === "command") {
|
|
531
|
+
runCommand(input);
|
|
532
|
+
return;
|
|
533
|
+
}
|
|
534
|
+
void runTask(input).catch(reportFailure);
|
|
535
|
+
} catch (error) {
|
|
536
|
+
reportFailure(error);
|
|
537
|
+
}
|
|
538
|
+
}
|
|
539
|
+
function directoryAuthorityScript(mode, messageLimit, task) {
|
|
540
|
+
const taskSource = task ? `(${task.toString()})` : "undefined";
|
|
541
|
+
const preserveFunctionName = "const __name=(target,value)=>Object.defineProperty(target,'name',{value,configurable:true});";
|
|
542
|
+
return `${preserveFunctionName}(${directoryAuthorityBootstrap.toString()})(${JSON.stringify(mode)},${messageLimit},${taskSource});`;
|
|
543
|
+
}
|
|
544
|
+
|
|
545
|
+
// src/shared/directory-authority/protocol.ts
|
|
546
|
+
var import_node_path2 = require("node:path");
|
|
547
|
+
|
|
548
|
+
// src/shared/directory-authority/errors.ts
|
|
549
|
+
var DirectoryAuthorityError = class extends Error {
|
|
550
|
+
constructor(code, message, data) {
|
|
551
|
+
super(message);
|
|
552
|
+
this.code = code;
|
|
553
|
+
this.data = data;
|
|
554
|
+
this.name = "DirectoryAuthorityError";
|
|
555
|
+
}
|
|
556
|
+
code;
|
|
557
|
+
data;
|
|
558
|
+
};
|
|
559
|
+
|
|
560
|
+
// src/shared/directory-authority/protocol.ts
|
|
561
|
+
var AUTHORITY_MESSAGE_LIMIT = 8 * 1024 * 1024;
|
|
562
|
+
var AUTHORITY_STDERR_LIMIT = 16 * 1024;
|
|
563
|
+
function assertDirectoryAuthorityLocation(location) {
|
|
564
|
+
if (!(0, import_node_path2.isAbsolute)(location.directoryPath)) {
|
|
565
|
+
throw new DirectoryAuthorityError(
|
|
566
|
+
"directory_authority_invalid_path",
|
|
567
|
+
"The directory authority requires an absolute starting path."
|
|
568
|
+
);
|
|
569
|
+
}
|
|
570
|
+
const hasOpenDescriptorNumber = Number.isInteger(location.directoryFd) && location.directoryFd >= 0;
|
|
571
|
+
if (hasOpenDescriptorNumber) return;
|
|
572
|
+
throw new DirectoryAuthorityError(
|
|
573
|
+
"directory_authority_invalid_fd",
|
|
574
|
+
"The directory authority requires an open directory descriptor."
|
|
575
|
+
);
|
|
576
|
+
}
|
|
577
|
+
function authorityEnvironment(environment = process.env) {
|
|
578
|
+
const sanitized = { ...environment };
|
|
579
|
+
delete sanitized.NODE_OPTIONS;
|
|
580
|
+
delete sanitized.NODE_PATH;
|
|
581
|
+
return sanitized;
|
|
582
|
+
}
|
|
583
|
+
function encodeAuthorityRequest(input) {
|
|
584
|
+
let encoded;
|
|
585
|
+
try {
|
|
586
|
+
encoded = JSON.stringify(input);
|
|
587
|
+
} catch {
|
|
588
|
+
throw new DirectoryAuthorityError(
|
|
589
|
+
"directory_authority_invalid_request",
|
|
590
|
+
"The directory operation input must be JSON serializable."
|
|
591
|
+
);
|
|
592
|
+
}
|
|
593
|
+
if (encoded === void 0) {
|
|
594
|
+
throw new DirectoryAuthorityError(
|
|
595
|
+
"directory_authority_invalid_request",
|
|
596
|
+
"The directory operation input must be JSON serializable."
|
|
597
|
+
);
|
|
598
|
+
}
|
|
599
|
+
if (Buffer.byteLength(encoded) <= AUTHORITY_MESSAGE_LIMIT) return encoded;
|
|
600
|
+
throw new DirectoryAuthorityError(
|
|
601
|
+
"directory_authority_request_too_large",
|
|
602
|
+
"The directory operation input exceeds the bridge byte limit."
|
|
603
|
+
);
|
|
604
|
+
}
|
|
605
|
+
|
|
606
|
+
// src/shared/directory-authority/command.ts
|
|
607
|
+
function spawnDirectoryAuthorityCommand(input) {
|
|
608
|
+
assertDirectoryAuthorityLocation(input);
|
|
609
|
+
const request = encodeAuthorityRequest({
|
|
610
|
+
command: input.command,
|
|
611
|
+
args: input.args
|
|
612
|
+
});
|
|
613
|
+
const child = (0, import_node_child_process.spawn)(
|
|
614
|
+
process.execPath,
|
|
615
|
+
[
|
|
616
|
+
"--input-type=commonjs",
|
|
617
|
+
"-e",
|
|
618
|
+
directoryAuthorityScript("command", AUTHORITY_MESSAGE_LIMIT)
|
|
619
|
+
],
|
|
620
|
+
{
|
|
621
|
+
cwd: input.directoryPath,
|
|
622
|
+
env: authorityEnvironment(input.env),
|
|
623
|
+
detached: true,
|
|
624
|
+
windowsHide: true,
|
|
625
|
+
stdio: ["ignore", "pipe", "pipe", input.directoryFd, "pipe"]
|
|
626
|
+
}
|
|
627
|
+
);
|
|
628
|
+
const requestPipe = child.stdio[4];
|
|
629
|
+
requestPipe?.on("error", () => void 0);
|
|
630
|
+
requestPipe?.end(request);
|
|
631
|
+
return child;
|
|
632
|
+
}
|
|
633
|
+
|
|
634
|
+
// plugins/local-search/source/ripgrep-process.ts
|
|
635
|
+
function controlledRipgrepEnvironment() {
|
|
636
|
+
const environment = { ...process.env };
|
|
637
|
+
for (const name of Object.keys(environment)) {
|
|
638
|
+
if (name.toUpperCase() === "RIPGREP_CONFIG_PATH") {
|
|
639
|
+
delete environment[name];
|
|
640
|
+
}
|
|
641
|
+
}
|
|
642
|
+
return environment;
|
|
643
|
+
}
|
|
644
|
+
function terminateAuthorityGroup(child) {
|
|
645
|
+
if (!child.pid) {
|
|
646
|
+
child.kill("SIGKILL");
|
|
647
|
+
return;
|
|
648
|
+
}
|
|
649
|
+
try {
|
|
650
|
+
process.kill(-child.pid, "SIGKILL");
|
|
651
|
+
} catch (error) {
|
|
652
|
+
const groupAlreadyExited = error.code === "ESRCH";
|
|
653
|
+
if (groupAlreadyExited) return;
|
|
654
|
+
throw error;
|
|
655
|
+
}
|
|
656
|
+
}
|
|
657
|
+
function spawnRipgrepProcess(args, cwd, stdinFd, directoryAuthority) {
|
|
658
|
+
const commandArgs = ["--no-config", ...args];
|
|
659
|
+
const env = controlledRipgrepEnvironment();
|
|
660
|
+
if (directoryAuthority) {
|
|
661
|
+
const child2 = spawnDirectoryAuthorityCommand({
|
|
662
|
+
...directoryAuthority,
|
|
663
|
+
command: import_ripgrep.rgPath,
|
|
664
|
+
args: commandArgs,
|
|
665
|
+
env
|
|
666
|
+
});
|
|
667
|
+
return { child: child2, terminate: () => terminateAuthorityGroup(child2) };
|
|
668
|
+
}
|
|
669
|
+
const child = (0, import_node_child_process2.spawn)(import_ripgrep.rgPath, commandArgs, {
|
|
670
|
+
cwd,
|
|
671
|
+
env,
|
|
672
|
+
stdio: [stdinFd ?? "ignore", "pipe", "pipe"],
|
|
673
|
+
windowsHide: true
|
|
674
|
+
});
|
|
675
|
+
return {
|
|
676
|
+
child,
|
|
677
|
+
terminate: () => {
|
|
678
|
+
child.kill("SIGKILL");
|
|
679
|
+
}
|
|
680
|
+
};
|
|
681
|
+
}
|
|
682
|
+
|
|
683
|
+
// plugins/local-search/source/ripgrep.ts
|
|
417
684
|
var SEARCH_TIMEOUT_MS = 1e4;
|
|
418
685
|
var MAX_PATH_RECORD_BYTES = 64 * 1024;
|
|
419
686
|
var MAX_JSON_RECORD_BYTES = 512 * 1024;
|
|
@@ -432,15 +699,6 @@ function escapeRgGlobLiteral(value) {
|
|
|
432
699
|
(character) => "\\*?[]{}!".includes(character) ? `\\${character}` : character
|
|
433
700
|
).join("");
|
|
434
701
|
}
|
|
435
|
-
function controlledRipgrepEnvironment() {
|
|
436
|
-
const environment = { ...process.env };
|
|
437
|
-
for (const name of Object.keys(environment)) {
|
|
438
|
-
if (name.toUpperCase() === "RIPGREP_CONFIG_PATH") {
|
|
439
|
-
delete environment[name];
|
|
440
|
-
}
|
|
441
|
-
}
|
|
442
|
-
return environment;
|
|
443
|
-
}
|
|
444
702
|
function decodeUtf8Record(bytes, kind) {
|
|
445
703
|
let value;
|
|
446
704
|
try {
|
|
@@ -493,7 +751,7 @@ function createDelimitedParser(params) {
|
|
|
493
751
|
finish: (accept) => parseAvailable(Buffer.alloc(0), true, accept)
|
|
494
752
|
});
|
|
495
753
|
}
|
|
496
|
-
async function runRipgrepBounded(args, cwd, maxResults, parser, signal, stdinFd) {
|
|
754
|
+
async function runRipgrepBounded(args, cwd, maxResults, parser, signal, stdinFd, directoryAuthority) {
|
|
497
755
|
if (signal?.aborted) {
|
|
498
756
|
throw new LocalSearchError(
|
|
499
757
|
"local_search_failed",
|
|
@@ -507,12 +765,12 @@ async function runRipgrepBounded(args, cwd, maxResults, parser, signal, stdinFd)
|
|
|
507
765
|
let timedOut = false;
|
|
508
766
|
let aborted = false;
|
|
509
767
|
let parserError;
|
|
510
|
-
const child
|
|
768
|
+
const { child, terminate } = spawnRipgrepProcess(
|
|
769
|
+
args,
|
|
511
770
|
cwd,
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
});
|
|
771
|
+
stdinFd,
|
|
772
|
+
directoryAuthority
|
|
773
|
+
);
|
|
516
774
|
const cleanup = () => {
|
|
517
775
|
clearTimeout(timeout);
|
|
518
776
|
if (signal && abortListener) {
|
|
@@ -538,17 +796,17 @@ async function runRipgrepBounded(args, cwd, maxResults, parser, signal, stdinFd)
|
|
|
538
796
|
stoppedAfterExtraResult = true;
|
|
539
797
|
if (mayStopProcess) {
|
|
540
798
|
child.stdout.pause();
|
|
541
|
-
|
|
799
|
+
terminate();
|
|
542
800
|
}
|
|
543
801
|
return false;
|
|
544
802
|
};
|
|
545
803
|
const abortListener = () => {
|
|
546
804
|
aborted = true;
|
|
547
|
-
|
|
805
|
+
terminate();
|
|
548
806
|
};
|
|
549
807
|
const timeout = setTimeout(() => {
|
|
550
808
|
timedOut = true;
|
|
551
|
-
|
|
809
|
+
terminate();
|
|
552
810
|
}, SEARCH_TIMEOUT_MS);
|
|
553
811
|
timeout.unref?.();
|
|
554
812
|
child.stdout.on("data", (chunk) => {
|
|
@@ -558,7 +816,7 @@ async function runRipgrepBounded(args, cwd, maxResults, parser, signal, stdinFd)
|
|
|
558
816
|
} catch (error) {
|
|
559
817
|
parserError = error;
|
|
560
818
|
child.stdout.pause();
|
|
561
|
-
|
|
819
|
+
terminate();
|
|
562
820
|
}
|
|
563
821
|
});
|
|
564
822
|
child.stderr.on("data", () => void 0);
|
|
@@ -657,7 +915,7 @@ function parseJsonContentEvent(line) {
|
|
|
657
915
|
text: text.endsWith("\r\n") ? text.slice(0, -2) : text.endsWith("\n") ? text.slice(0, -1) : text
|
|
658
916
|
});
|
|
659
917
|
}
|
|
660
|
-
function runRipgrepPathSearch(args, cwd, maxResults, signal) {
|
|
918
|
+
function runRipgrepPathSearch(args, cwd, maxResults, signal, directoryAuthority) {
|
|
661
919
|
return runRipgrepBounded(
|
|
662
920
|
args,
|
|
663
921
|
cwd,
|
|
@@ -667,10 +925,12 @@ function runRipgrepPathSearch(args, cwd, maxResults, signal) {
|
|
|
667
925
|
maxRecordBytes: MAX_PATH_RECORD_BYTES,
|
|
668
926
|
parse: (record) => decodeUtf8Record(record, "path")
|
|
669
927
|
}),
|
|
670
|
-
signal
|
|
928
|
+
signal,
|
|
929
|
+
void 0,
|
|
930
|
+
directoryAuthority
|
|
671
931
|
);
|
|
672
932
|
}
|
|
673
|
-
function runRipgrepContentSearch(args, cwd, maxResults, signal, stdinFd) {
|
|
933
|
+
function runRipgrepContentSearch(args, cwd, maxResults, signal, stdinFd, directoryAuthority) {
|
|
674
934
|
return runRipgrepBounded(
|
|
675
935
|
args,
|
|
676
936
|
cwd,
|
|
@@ -684,7 +944,8 @@ function runRipgrepContentSearch(args, cwd, maxResults, signal, stdinFd) {
|
|
|
684
944
|
}
|
|
685
945
|
}),
|
|
686
946
|
signal,
|
|
687
|
-
stdinFd
|
|
947
|
+
stdinFd,
|
|
948
|
+
directoryAuthority
|
|
688
949
|
);
|
|
689
950
|
}
|
|
690
951
|
|
|
@@ -692,7 +953,7 @@ function runRipgrepContentSearch(args, cwd, maxResults, signal, stdinFd) {
|
|
|
692
953
|
var DEFAULT_MAX_RESULTS = 40;
|
|
693
954
|
var MAX_RESULTS = 200;
|
|
694
955
|
function fileNameMatches(logicalPath, query, caseSensitive) {
|
|
695
|
-
const filename =
|
|
956
|
+
const filename = import_node_path3.posix.basename(logicalPath);
|
|
696
957
|
return caseSensitive ? filename.includes(query) : filename.toLowerCase().includes(query.toLowerCase());
|
|
697
958
|
}
|
|
698
959
|
var index_default = defineRuntimePlugin((context) => ({
|
|
@@ -727,7 +988,7 @@ var index_default = defineRuntimePlugin((context) => ({
|
|
|
727
988
|
if (mode === "names" || mode === "both") {
|
|
728
989
|
const names = root.isFile ? Object.freeze({
|
|
729
990
|
items: Object.freeze(
|
|
730
|
-
fileNameMatches(root.target.logicalPath, query, caseSensitive) ? [
|
|
991
|
+
fileNameMatches(root.target.logicalPath, query, caseSensitive) ? [import_node_path3.posix.basename(root.target.logicalPath)] : []
|
|
731
992
|
),
|
|
732
993
|
truncated: false
|
|
733
994
|
}) : await runRipgrepPathSearch(
|
|
@@ -743,7 +1004,8 @@ var index_default = defineRuntimePlugin((context) => ({
|
|
|
743
1004
|
],
|
|
744
1005
|
root.commandDirectory,
|
|
745
1006
|
maxResults,
|
|
746
|
-
executionContext?.abortSignal
|
|
1007
|
+
executionContext?.abortSignal,
|
|
1008
|
+
root.directoryAuthority
|
|
747
1009
|
);
|
|
748
1010
|
sourceTruncated ||= names.truncated;
|
|
749
1011
|
for (const rawPath of names.items) {
|
|
@@ -777,7 +1039,8 @@ var index_default = defineRuntimePlugin((context) => ({
|
|
|
777
1039
|
root.commandDirectory,
|
|
778
1040
|
remaining,
|
|
779
1041
|
executionContext?.abortSignal,
|
|
780
|
-
root.stdinFd
|
|
1042
|
+
root.stdinFd,
|
|
1043
|
+
root.directoryAuthority
|
|
781
1044
|
);
|
|
782
1045
|
sourceTruncated ||= content.truncated;
|
|
783
1046
|
for (const match of content.items) {
|