@wrongstack/tools 0.296.3 → 0.297.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/audit.js +15 -0
- package/dist/audit.js.map +2 -2
- package/dist/bash.js +15 -0
- package/dist/bash.js.map +2 -2
- package/dist/builtin.js +1291 -1216
- package/dist/builtin.js.map +4 -4
- package/dist/codebase-index/background-indexer.d.ts.map +1 -1
- package/dist/codebase-index/index.d.ts +1 -0
- package/dist/codebase-index/index.d.ts.map +1 -1
- package/dist/codebase-index/index.js +1259 -1196
- package/dist/codebase-index/index.js.map +4 -4
- package/dist/codebase-index/project-server-client.d.ts +13 -1
- package/dist/codebase-index/project-server-client.d.ts.map +1 -1
- package/dist/codebase-index/project-server-endpoint.d.ts +29 -1
- package/dist/codebase-index/project-server-endpoint.d.ts.map +1 -1
- package/dist/codebase-index/project-server.js +20 -5
- package/dist/codebase-index/project-server.js.map +2 -2
- package/dist/codebase-index/refs-extractor.d.ts.map +1 -1
- package/dist/exec.js +15 -0
- package/dist/exec.js.map +2 -2
- package/dist/format.js +15 -0
- package/dist/format.js.map +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1260 -1182
- package/dist/index.js.map +4 -4
- package/dist/install.js +15 -0
- package/dist/install.js.map +2 -2
- package/dist/languages/index.js +15 -0
- package/dist/languages/index.js.map +2 -2
- package/dist/lint.js +15 -0
- package/dist/lint.js.map +2 -2
- package/dist/next-steps.d.ts +23 -0
- package/dist/next-steps.d.ts.map +1 -1
- package/dist/next-steps.js +4 -0
- package/dist/next-steps.js.map +2 -2
- package/dist/outdated.js +15 -0
- package/dist/outdated.js.map +2 -2
- package/dist/pack.js +1291 -1216
- package/dist/pack.js.map +4 -4
- package/dist/process-registry.d.ts +9 -0
- package/dist/process-registry.d.ts.map +1 -1
- package/dist/process-registry.js +15 -0
- package/dist/process-registry.js.map +2 -2
- package/dist/ps-slash.js +15 -0
- package/dist/ps-slash.js.map +2 -2
- package/dist/read.js +67 -9
- package/dist/read.js.map +2 -2
- package/dist/test.js +15 -0
- package/dist/test.js.map +2 -2
- package/dist/tool-tier.js +1291 -1216
- package/dist/tool-tier.js.map +4 -4
- package/dist/typecheck.js +15 -0
- package/dist/typecheck.js.map +2 -2
- package/package.json +3 -3
|
@@ -51,8 +51,20 @@ export type ProjectIndexDaemonAvailability = {
|
|
|
51
51
|
/** No server entry point exists in any known output layout. */
|
|
52
52
|
| {
|
|
53
53
|
readonly kind: 'missing-build';
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* The derived socket path cannot be bound on this platform (over the
|
|
57
|
+
* `sun_path` byte limit — seen on macOS whose per-user TMPDIR is ~48 bytes).
|
|
58
|
+
* A daemon spawned onto this endpoint dies silently (`stdio: 'ignore'`), so
|
|
59
|
+
* callers must degrade explicitly instead of entering the connect loop.
|
|
60
|
+
*/
|
|
61
|
+
| {
|
|
62
|
+
readonly kind: 'endpoint-invalid';
|
|
63
|
+
readonly endpoint: string;
|
|
64
|
+
readonly byteLength: number;
|
|
65
|
+
readonly maxBytes: number;
|
|
54
66
|
};
|
|
55
|
-
export declare function resolveProjectIndexDaemonAvailability(): ProjectIndexDaemonAvailability;
|
|
67
|
+
export declare function resolveProjectIndexDaemonAvailability(projectRoot?: string, indexDir?: string): ProjectIndexDaemonAvailability;
|
|
56
68
|
export declare function projectIndexServerExpectedBuildId(): string | null;
|
|
57
69
|
export declare function isProjectIndexServerAvailable(): boolean;
|
|
58
70
|
export declare function getProjectIndexServerConnectionState(projectRoot?: string, indexDir?: string): ProjectIndexServerConnectionState;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project-server-client.d.ts","sourceRoot":"","sources":["../../src/codebase-index/project-server-client.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"project-server-client.d.ts","sourceRoot":"","sources":["../../src/codebase-index/project-server-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,19 @@
|
|
|
1
1
|
export declare const PROJECT_INDEX_SERVER_PROTOCOL_VERSION = 1;
|
|
2
2
|
export declare const PROJECT_INDEX_SERVER_METADATA_FILE = "server.json";
|
|
3
|
+
/**
|
|
4
|
+
* Short directory name that owns the per-project Unix socket on Linux.
|
|
5
|
+
*
|
|
6
|
+
* The directory is created `0o700` by `ensureProjectIndexSocketDirectory`: on
|
|
7
|
+
* multi-user Linux `/tmp` the kernel's sticky bit otherwise lets a local
|
|
8
|
+
* attacker pre-bind a predictable socket name (project paths are guessable
|
|
9
|
+
* via the public `buildId` handshake), hijacking clients whose `bind()` hits
|
|
10
|
+
* EADDRINUSE. macOS is unaffected because each user already has a private
|
|
11
|
+
* TMPDIR, so the subdirectory adds no extra ownership boundary there.
|
|
12
|
+
*
|
|
13
|
+
* The name is kept short to stay under the 103-byte `sun_path` cap on macOS
|
|
14
|
+
* (48 bytes of `/var/folders/<xx>/<30 chars>/T` + 8 + 24 + 5 = 85 bytes).
|
|
15
|
+
*/
|
|
16
|
+
export declare const PROJECT_INDEX_SERVER_SOCKET_DIR = "wsci-v1";
|
|
3
17
|
/**
|
|
4
18
|
* Content identity for the actual server artifact.
|
|
5
19
|
*
|
|
@@ -17,7 +31,21 @@ export declare function projectIndexServerBuildId(entrypoint: string | URL): str
|
|
|
17
31
|
* physically separate SQLite indexes.
|
|
18
32
|
*/
|
|
19
33
|
export declare function projectIndexServerKey(projectRoot: string, indexDir?: string): string;
|
|
20
|
-
/**
|
|
34
|
+
/**
|
|
35
|
+
* Deterministic per-project local IPC endpoint.
|
|
36
|
+
*
|
|
37
|
+
* The Unix layout places the socket inside a short `wsci-v1/` subdirectory of
|
|
38
|
+
* the temp dir: macOS's per-user TMPDIR is ~48 bytes of
|
|
39
|
+
* `/var/folders/<xx>/<30 chars>/T`, and `sun_path` caps the whole socket path
|
|
40
|
+
* at 104 bytes including the NUL on macOS/BSD (108 on Linux). The previous
|
|
41
|
+
* `wrongstack-codebase-index-v1/<key>.sock` subdirectory layout came to ~107
|
|
42
|
+
* bytes there, so `bind()` failed with ENAMETOOLONG inside a detached child
|
|
43
|
+
* whose stderr was discarded — clients saw only a 10s connect timeout. The
|
|
44
|
+
* short `wsci-v1/` subdirectory stays well under both limits (85 bytes on the
|
|
45
|
+
* worst-case macOS TMPDIR) and restores the `0o700` ownership boundary the
|
|
46
|
+
* flat layout lost on multi-user Linux `/tmp`. The pipe name keeps the long
|
|
47
|
+
* prefix because named pipes have no such limit.
|
|
48
|
+
*/
|
|
21
49
|
export declare function projectIndexServerEndpoint(projectRoot: string, indexDir?: string): string;
|
|
22
50
|
export declare function projectIndexServerMetadataPath(projectRoot: string, indexDir?: string): string;
|
|
23
51
|
export declare function ensureProjectIndexSocketDirectory(endpoint: string): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project-server-endpoint.d.ts","sourceRoot":"","sources":["../../src/codebase-index/project-server-endpoint.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"project-server-endpoint.d.ts","sourceRoot":"","sources":["../../src/codebase-index/project-server-endpoint.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,qCAAqC,IAAI,CAAC;AACvD,eAAO,MAAM,kCAAkC,gBAAgB,CAAC;AAChE;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,+BAA+B,YAAmD,CAAC;AAWhG;;;;;;;GAOG;AACH,wBAAgB,yBAAyB,CAAC,UAAU,EAAE,MAAM,GAAG,GAAG,GAAG,MAAM,CAsB1E;AAOD;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAGpF;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,0BAA0B,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAUzF;AAED,wBAAgB,8BAA8B,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAK7F;AAED,wBAAgB,iCAAiC,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAQxE"}
|
|
@@ -1977,6 +1977,7 @@ import * as net from "node:net";
|
|
|
1977
1977
|
import * as path13 from "node:path";
|
|
1978
1978
|
import {
|
|
1979
1979
|
DEFAULT_WALK_IGNORE_SET,
|
|
1980
|
+
startSharedHeapWatchdog,
|
|
1980
1981
|
useDaemonPerfDefaults,
|
|
1981
1982
|
watchProjectTree
|
|
1982
1983
|
} from "@wrongstack/core/utils";
|
|
@@ -4503,8 +4504,10 @@ import * as fs9 from "node:fs";
|
|
|
4503
4504
|
import * as os3 from "node:os";
|
|
4504
4505
|
import * as path12 from "node:path";
|
|
4505
4506
|
import { fileURLToPath } from "node:url";
|
|
4507
|
+
import { assertUnixSocketPathWithinLimit } from "@wrongstack/core/utils";
|
|
4506
4508
|
var PROJECT_INDEX_SERVER_PROTOCOL_VERSION = 1;
|
|
4507
4509
|
var PROJECT_INDEX_SERVER_METADATA_FILE = "server.json";
|
|
4510
|
+
var PROJECT_INDEX_SERVER_SOCKET_DIR = `wsci-v${PROJECT_INDEX_SERVER_PROTOCOL_VERSION}`;
|
|
4508
4511
|
var buildIdCache;
|
|
4509
4512
|
function projectIndexServerBuildId(entrypoint) {
|
|
4510
4513
|
const file = entrypoint instanceof URL || entrypoint.startsWith("file:") ? fileURLToPath(entrypoint) : path12.resolve(entrypoint);
|
|
@@ -4533,11 +4536,7 @@ function projectIndexServerEndpoint(projectRoot2, indexDir2) {
|
|
|
4533
4536
|
if (process.platform === "win32") {
|
|
4534
4537
|
return `\\\\.\\pipe\\wrongstack-codebase-index-v${PROJECT_INDEX_SERVER_PROTOCOL_VERSION}-${key}`;
|
|
4535
4538
|
}
|
|
4536
|
-
return path12.join(
|
|
4537
|
-
os3.tmpdir(),
|
|
4538
|
-
`wrongstack-codebase-index-v${PROJECT_INDEX_SERVER_PROTOCOL_VERSION}`,
|
|
4539
|
-
`${key}.sock`
|
|
4540
|
-
);
|
|
4539
|
+
return path12.join(os3.tmpdir(), PROJECT_INDEX_SERVER_SOCKET_DIR, `${key}.sock`);
|
|
4541
4540
|
}
|
|
4542
4541
|
function projectIndexServerMetadataPath(projectRoot2, indexDir2) {
|
|
4543
4542
|
return path12.join(
|
|
@@ -4547,6 +4546,7 @@ function projectIndexServerMetadataPath(projectRoot2, indexDir2) {
|
|
|
4547
4546
|
}
|
|
4548
4547
|
function ensureProjectIndexSocketDirectory(endpoint2) {
|
|
4549
4548
|
if (process.platform !== "win32") {
|
|
4549
|
+
assertUnixSocketPathWithinLimit(endpoint2, "codebase-index");
|
|
4550
4550
|
fs9.mkdirSync(path12.dirname(endpoint2), { recursive: true, mode: 448 });
|
|
4551
4551
|
}
|
|
4552
4552
|
}
|
|
@@ -4618,6 +4618,20 @@ var indexActivity = {
|
|
|
4618
4618
|
updatedAt: null,
|
|
4619
4619
|
lastError: null
|
|
4620
4620
|
};
|
|
4621
|
+
var stopMemoryWatchdog = startSharedHeapWatchdog({
|
|
4622
|
+
collectStats: () => ({
|
|
4623
|
+
surface: "codebase-index-project-server",
|
|
4624
|
+
clients: clients.size,
|
|
4625
|
+
activeRequests,
|
|
4626
|
+
activeWrites,
|
|
4627
|
+
queuedWrites,
|
|
4628
|
+
searchCache: searchCache.size,
|
|
4629
|
+
statsCache: statsCache.size,
|
|
4630
|
+
packageGraphCache: packageGraphCache.size,
|
|
4631
|
+
fileGraphCache: fileGraphCache.size,
|
|
4632
|
+
symbolGraphCache: symbolGraphCache.size
|
|
4633
|
+
})
|
|
4634
|
+
});
|
|
4621
4635
|
var lastProgressBroadcastAt = 0;
|
|
4622
4636
|
var externalWatcher;
|
|
4623
4637
|
var DEFAULT_EXTERNAL_DEBOUNCE_MS = 400;
|
|
@@ -5110,6 +5124,7 @@ async function stop(_reason) {
|
|
|
5110
5124
|
} catch {
|
|
5111
5125
|
}
|
|
5112
5126
|
}
|
|
5127
|
+
await stopMemoryWatchdog();
|
|
5113
5128
|
}
|
|
5114
5129
|
ensureProjectIndexSocketDirectory(endpoint);
|
|
5115
5130
|
server.once("error", (error) => {
|