@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.
Files changed (55) hide show
  1. package/dist/audit.js +15 -0
  2. package/dist/audit.js.map +2 -2
  3. package/dist/bash.js +15 -0
  4. package/dist/bash.js.map +2 -2
  5. package/dist/builtin.js +1291 -1216
  6. package/dist/builtin.js.map +4 -4
  7. package/dist/codebase-index/background-indexer.d.ts.map +1 -1
  8. package/dist/codebase-index/index.d.ts +1 -0
  9. package/dist/codebase-index/index.d.ts.map +1 -1
  10. package/dist/codebase-index/index.js +1259 -1196
  11. package/dist/codebase-index/index.js.map +4 -4
  12. package/dist/codebase-index/project-server-client.d.ts +13 -1
  13. package/dist/codebase-index/project-server-client.d.ts.map +1 -1
  14. package/dist/codebase-index/project-server-endpoint.d.ts +29 -1
  15. package/dist/codebase-index/project-server-endpoint.d.ts.map +1 -1
  16. package/dist/codebase-index/project-server.js +20 -5
  17. package/dist/codebase-index/project-server.js.map +2 -2
  18. package/dist/codebase-index/refs-extractor.d.ts.map +1 -1
  19. package/dist/exec.js +15 -0
  20. package/dist/exec.js.map +2 -2
  21. package/dist/format.js +15 -0
  22. package/dist/format.js.map +2 -2
  23. package/dist/index.d.ts +2 -2
  24. package/dist/index.d.ts.map +1 -1
  25. package/dist/index.js +1260 -1182
  26. package/dist/index.js.map +4 -4
  27. package/dist/install.js +15 -0
  28. package/dist/install.js.map +2 -2
  29. package/dist/languages/index.js +15 -0
  30. package/dist/languages/index.js.map +2 -2
  31. package/dist/lint.js +15 -0
  32. package/dist/lint.js.map +2 -2
  33. package/dist/next-steps.d.ts +23 -0
  34. package/dist/next-steps.d.ts.map +1 -1
  35. package/dist/next-steps.js +4 -0
  36. package/dist/next-steps.js.map +2 -2
  37. package/dist/outdated.js +15 -0
  38. package/dist/outdated.js.map +2 -2
  39. package/dist/pack.js +1291 -1216
  40. package/dist/pack.js.map +4 -4
  41. package/dist/process-registry.d.ts +9 -0
  42. package/dist/process-registry.d.ts.map +1 -1
  43. package/dist/process-registry.js +15 -0
  44. package/dist/process-registry.js.map +2 -2
  45. package/dist/ps-slash.js +15 -0
  46. package/dist/ps-slash.js.map +2 -2
  47. package/dist/read.js +67 -9
  48. package/dist/read.js.map +2 -2
  49. package/dist/test.js +15 -0
  50. package/dist/test.js.map +2 -2
  51. package/dist/tool-tier.js +1291 -1216
  52. package/dist/tool-tier.js.map +4 -4
  53. package/dist/typecheck.js +15 -0
  54. package/dist/typecheck.js.map +2 -2
  55. 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":"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"}
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
- /** Deterministic per-project local IPC endpoint. */
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":"AAOA,eAAO,MAAM,qCAAqC,IAAI,CAAC;AACvD,eAAO,MAAM,kCAAkC,gBAAgB,CAAC;AAWhE;;;;;;;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,oDAAoD;AACpD,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,CAIxE"}
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) => {